$ npm install influx
const Influx = require('influx')
const influxAircon = new Influx.InfluxDB({
host: '192.168.***.***',
database: 'homedata',
schema: [
{
measurement: 'echonet-Aircon',
tags: [
'addr',
'place'
],
fields: {
status: Influx.FieldType.STRING,
mode: Influx.FieldType.STRING,
modeNum: Influx.FieldType.INTEGER,
setTemp: Influx.FieldType.INTEGER,
measureHumi: Influx.FieldType.INTEGER,
measureTemp: Influx.FieldType.INTEGER,
measureOutdoorTemp: Influx.FieldType.INTEGER
}
}
]
})
influxAircon.writePoints([
{
measurement: 'echonet-aircon',
tags: { addr: address, place: "aircon" },
fields: {
status: vStatus,
mode: vMode,
modeNum: vModeNum,
setTemp: vSetTemp,
measureHumi: vMeasureHumi,
measureTemp: vMeasureTemp,
measureOutdoorTemp: vMeasureOutdoorTemp
}
}
]).catch(err => {
console.error(`Error saving data to InfluxDB! ${err.stack}`)
})
まずは、いつもどおりapt-getでインストールする。
$ sudo apt-get install -y nodejs npm
$ node -v
v4.5.0
npmで「n」というパッケージを用いることで、パッケージ管理を行うことができる。
https://github.com/tj/n
$ sudo npm cache clean
$ sudo npm install n -g
$ sudo n stable
$ node -v
v11.8.0
今更ながらだけど、、
Dockerの勉強を兼ねて、自宅で動かしているwebサービス系をDockerに移行するために、
手持ちのraspberry pi(Rasbian)へDockerインストールする。
※補足:Docker CEとEEの違いは、基本的な機能は同じだがサポート面が異なっている
CE:無償版、コミュニティーでのサポート
EE:商用版、認証済みコンテナ/プラグインの配布、Docker社がサポート
個人利用であればDocker CEを利用すればOK
最近だと、Rasbian用のインストールスクリプトが用意されていて、
下記を実行するだけで完了するようだ。
Install using the convenience script
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo usermod -aG docker your-user
$ sudo pip install docker-compose
先日、夜間の通信速度の低下がガマンできなくなり、PPPoE接続からV6プラスへ切り替えました。
速度低下はなくなり快適になったのですが、Webサーバが接続できなくなっため、その備忘録として書いておきます。
・PPPoEからV6プラスへの変更
・IPv4からIPv6への変更
(Webサーバの設定変更はなし)
・V6プラスだと、使用できるポートがアドレスごとに限られている
⇒80、443などがこれに入っていないので、アクセスできない
・使えるポートを特定して、それを使用してアクセスする必要がある
①PPPoEでアクセスを続ける
・メインルータでPPPoEパススルーを設定
・サブルータ(Webサーバ用)でPPPoEの接続設定
②ポートを特定して、各種設定を変更(参考)
とりあえずは、①でその場を凌ぐ予定ですが、
・そもそものPPPoEで速度低下する問題が解決できてない
・メインの内部ネットワークと完全分離になるなどの運用面
などいろいろ弊害があるので、②への移行を考え中です。
hdparmを使って、未使用時のスピンダウンを設定。
参考サイト
hdparm -S スピンダウンまでの時間設定 /dev/sdb
スピンダウンまでの時間設定は以下を参照起動時に自動で設定されるように設定
sudo vim /etc/rc.local
hdparm -S スピンダウンまでの時間設定 /dev/sdb
TT-RSSのインストールに先立ち、PHPとmysqlをインストールし、
mysqlのデータベース&ユーザを作成しておく。
公式のインストール手順にしたがって、インストール。
git clone https://tt-rss.org/git/tt-rss.git tt-rss
sudo cp -r -p tt-rss /var/www/tt-rss
sudo chown -R www-data:www-data /var/www/tt-rss
http://サーバアドレス/tt-rssにアクセスし、必要項目を入力
初期ユーザ:admin
初期パスワード:password
デフォルトのTT-RSSは、ブラウザで表示中にしかRSSを自動更新しないので、
常に最新のRSSを集めるようにCRONに下記を登録。
sudo vim /etc/crontab
*/30 * * * * www-data /usr/bin/php /var/www/tt-rss/update.php --feeds --quiet
mysqlの設定
mysql -u root -p
・ユーザ追加
grant all privileges on データベース名.* to ユーザー名@localhost identified by 'パスワード';
・ユーザ確認
select User,Host from mysql.user;
・ユーザ削除
drop user 'ユーザ名'@'localhost';
・データベース追加
create database データベース名 default character set utf8;
・データベース確認
show databases;
・データベース削除
drop database データベース名
Apacheより軽量&高速と噂のNginxとPHP-FPMをインストール
sudo apt-get install nginx php5 php5-fpm php5-cgi php5-cli php5-common php5-mysql mysql-server php5-gd php5-curl
sudo vi /etc/nginx/sites-enabled/default
sudo nginx -t
sudo nginx -s reload
SSLの有効化は、ここにしたがって鍵を作り、Nginxに登録する。
Nginxの設定ファイルに下記を追加
参考サイト
server {
# listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;(保存先)
ssl_certificate_key /etc/nginx/ssl/server.key;(保存先)
}
mediatomb使用時に行うiptablesの設定
iptables -A INPUT -p tcp --dport 49152 -j ACCEPT
iptables -A INPUT -p udp --dport 1900 -j ACCEPT
iptables -A OUTPUT -p udp --dport 1900 -j ACCEPT
webサーバのログ管理の必要性はわかっているけど,
いちいちログファイルを見てるのはめんどくさい。。
そこでAWStatsを導入します。
これを導入することで,webブラウザでApacheログを視覚的に(グラフとか)で確認することが出ます。
インストール自体は簡単。設定すれば動作します。
$ sudo apt-get install awstats
/etc/awstats以下にデフォルトの設定ファイルawstats.model.confが生成されているので,ファイルをコピーして編集。
$ cd /etc/awstats
$ sudo cp awstats.model.conf awstats.myhost.jp.conf
$ sudo vim awstats.myhost.jp.conf
以下のように追加or書き換え
LogFile="apacheのログファイルの位置"
LogFormat = 1
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
↑Apacheのログ出力設定がcombinedのとき用
SiteDomain="ドメイン名"
Lang="jp"
Apacheのドキュメントルートにアイコンへのパスをリンクする
$ sudo ln -s /usr/share/awstats/icon /var/www/awstats-icon
Apacheのログ解析および結果の出力(cronにこれらを登録すれば,毎日自動解析してくれます
$ sudo /usr/lib/cgi-bin/awstats.pl -config=myhost.jp -update
$ sudo /usr/lib/cgi-bin/awstats.pl -config=myhost.jp -output > /var/www/awstats.html
外部から自宅のサーバにアクセスするためにはDDNSのサービスを使ってやる必要があります.
ここでは,mydnsというサービスを使ってDDNSの設定をしていきます.
$ sudo vim ddns.sh
#!/bin/bash
user=hoge
pass=hogepass
wget -a /var/log/ddns.log -O /tmp/ddns_tmp.html --http-user=${user} --http-passwd=${pass} "http://www.mydns.jp/login.html"
$ sudo chown root:root ddns.sh
$ sudo chmod 700 ddns.sh
$ sudo vim /etc/crontab
以下を追加
*/10 * * * * root sh 上で作ったファイルへのパス
サーバを外部に公開するにあたり,このままだとセキュリティ的に不安で仕方がないです。。
なので,iptablesを使って,ファイヤーウォールを構築します(`・ω・´)
と言っても,以下のサイトを参考?(ほとんどまんま。。)にさせていただいています。
ブローヴちゃん:Debian に iptables を設定
ほんとうにありがとうございます!!
以下のファイルを適当な場所に作成。
#! /bin/sh
# firewall.sh
# 内部ネットワークのネットマスク取得
WANINT="eth0"
LOCALNET_MASK=`ifconfig $WANINT|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
# 内部ネットワークアドレス取得
LOCALNET_ADDR=`netstat -rn|grep $WANINT|grep $LOCALNET_MASK|cut -f1 -d' '`
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
MY_SSHD_CONFIG=/etc/ssh/sshd_config
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# SYN Cookiesを有効にする
# ※TCP SYN Flood攻撃対策
sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf
# ブロードキャストアドレス宛pingには応答しない
# ※Smurf攻撃対策
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf
# ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done
# Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done
# フラグメント化されたパケットはログを記録して破棄
iptables -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
iptables -A INPUT -f -j DROP
# 外部とのNetBIOS関連、Dropbox関連のアクセスはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT ! -s $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445,17500 -j DROP
iptables -A INPUT ! -s $LOCALNET -p udp -m multiport --dports 135,137,138,139,445,17500 -j DROP
iptables -A OUTPUT ! -d $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445,17500 -j DROP
iptables -A OUTPUT ! -d $LOCALNET -p udp -m multiport --sports 135,137,138,139,445,17500 -j DROP
# 1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
iptables -N LOG_PINGDEATH
iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] '
iptables -A LOG_PINGDEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH
# ポートスキャン対策
iptables -N LOG_PORTSCAN
iptables -A LOG_PORTSCAN -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A LOG_PORTSCAN -j LOG --log-level info --log-prefix '[IPTABLES PORTSCAN] '
iptables -A LOG_PORTSCAN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j LOG_PORTSCAN
# 不正パケット対策
iptables -N LOG_NEWSYNCHECK
iptables -A LOG_NEWSYNCHECK -j LOG --log-prefix '[IPTABLES NEWSYNCHECK] '
iptables -A LOG_NEWSYNCHECK -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG_NEWSYNCHECK
# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP
# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# 確立に成功した tcp 接続は許可
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
# Ping 送受信
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
# DNS 送信
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
# HTTP, HTTPS, POP3(SSL), IMAP, SMTP(TLS/STARTTLS, SSL), git, hkp 送信
iptables -A OUTPUT -p tcp -m state --state NEW -m multiport --dports 80,443,995,993,587,465,9418,11371 -j ACCEPT
# HTTP, HTTPs 受信
iptables -A INPUT -p tcp -m state --state NEW -m multiport --dport 80,443 -j ACCEPT
# SSH 受信 / ブルートフォース攻撃対策
# sshd_config ファイルの中からポート番号を指定している箇所を探す
SSHD_LISTEN_PORT=`sed -e 's/^Port\s\+\([0-9]\+\)/\1/p' -e d $MY_SSHD_CONFIG`
iptables -N LOG_SSHBRUTEFORCE
iptables -A LOG_SSHBRUTEFORCE -m limit --limit 3/min --limit-burst 4 -j ACCEPT
iptables -A LOG_SSHBRUTEFORCE -j LOG --log-level info --log-prefix '[IPTABLES SSHBRUTEFORCE] '
iptables -A LOG_SSHBRUTEFORCE -j DROP
iptables -A INPUT -p tcp -m state --state NEW --dport $SSHD_LISTEN_PORT -j LOG_SSHBRUTEFORCE
# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
# (/root/deny_ipがなければなにもしない)
if [ -s /root/deny_ip ]; then
for ip in `cat /root/deny_ip`
do
iptables -I INPUT -s $ip -j DROP
done
fi
# 上記のルールにマッチしなかったアクセスで外部からのものはログを記録(その後自動的に破棄)
iptables -A INPUT ! -s $LOCALNET -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES NOMATCHINPUT] '
WebサーバへのアクセスをすべてHTTPSで通信するように設定する。
$ cd /var/www
$ sudo vim .htaccess
以下追加項目
SSLRequireSSL
これでwww以下へのアクセスはすべてHTTPSで行われる。apache.confなどに記述されている
AllowOverride none を
AllowOverride All に変更する
例:
<directory /var/www/>
Options FollowSymLinks MultiViews
AllowOverride none
</Directory>
↓
<directory /var/www/>
Options FollowSymLinks MultiViews
AllowOverride All
</Directory>
あとはapache再起動で設定完了!
httpでアクセスすると403エラーがでるようになる。
外部から安全にアクセスするために,SSLを使ってHTTPSでの暗号化通信を導入します(`・ω・´)
まず,SSLを使用するためにopensslをインストールします。(apacheが入っている前提で話を進めます
$ sudo apt-get update
$ sudo apt-get install openssl
インストールできたら,opensslを使って自己証明書と鍵を作っていきます。
作業するフォルダに移動して,ルートになっておきます。
$ mkdir /etc/apache2/ssl
$ cd /etc/apache2/ssl
$ sudo su
ここから,コマンド実行後に入力項目があるので,適宜入力していきます。# openssl genrsa -aes128 1024 > server.key
以下表示内容
Generating RSA private key, 1024 bit long modulus
......................++++++
..++++++
e is 65537 (0x10001)
Enter pass phrase: [パスワード入力]
Verifying - Enter pass phrase: [パスワード入力]
# openssl req -new -key server.key > server.csr
以下表示内容
Enter pass phrase for server.key: [さっき入力したパスワード]
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: [てきとーに入力:JP]
State or Province Name (full name) [Some-State]: [てきとーに入力:Nara]
Locality Name (eg, city) []: [てきとーに入力:Nara-Shi]
Organization Name (eg, company) [Internet Widgits Pty Ltd]: [てきとーに入力:Connecting The Dots]
Organizational Unit Name (eg, section) []: [てきとーに入力:]
Common Name (e.g. server FQDN or YOUR name) []: [てきとーに入力:]
Email Address []: [てきとーに入力:]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: [空白]
An optional company name []: [空白]
# openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt
以下表示内容
Signature ok
subject=/C=JP/ST=Nara/L=Nara-Shi/O=Connecting The Dots/CN=
Getting Private key
Enter pass phrase for server.key: [さっき入力したパスワード]
ここまでで,SSLを使用するために必要なファイルを生成することができました。$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/ssl.conf ssl.conf
$ sudo ln -s ../mods-available/ssl.load ssl.load
$ sudo a2enmod ssl
$ cd /etc/apache2/sites-enabled
$ sudo ln -s ../sites-available/default-ssl ssl
以下の内容を/etc/apache2/sites-enabled/sslに追加
<virtualhost _default_:443>
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
</VirtualHost>
$ cd /etc/apache2/ssl
$ sudo su
# mv server.key server.key.back
# openssl rsa -in server.key.back > server.key
以下表示内容
Enter pass phrase for server.key.back: [上で入力したパスワードを入力]
writing RSA key
$ sudo service apache2 restart
で,問題が無ければ完成!!