ラベル Webサーバ の投稿を表示しています。 すべての投稿を表示
ラベル Webサーバ の投稿を表示しています。 すべての投稿を表示

9月 15, 2022

atomcam_toolsを用いたWebブラウザでのAtom cam画像取得

Atomcamは、安価に手に入り、小型でかつ屋外使用も可能なため非常に使いやすいネットワークカメラです。
ただ、純正のアプリがよく落ちるのと、APIなどが公開されているわけではないので、凝ったことをしようとするとびみょーに使い勝手が良くない。。
そこで、有志の方々(mnakada氏、bakueikozo氏)が開発してくれたatomcam_toolsを使って、まずはWebブラウザ上で映像確認を行えるようにします

Grafanaのグラフで第2軸(Right Y Axis)を追加する方法

Grafanaの第2軸(Right Y Axis)を設定する方法が分かりづらかったため、備忘録として記載しておきます。

6月 09, 2022

node.jsを用いたinfluxdbへのデータ保存

node.jsで実装したプログラムで取得したデータをinfluxdbに保存する こちらを参考に実装

ライブラリのインストール

$ npm install influx

node.js

ライブラリの読み込みと、初期設定を行う

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}`)
		})

2月 10, 2019

Raspberry Piに最新版node.jsを入れる簡単な方法


Raspberry Piに最新版のnode.jpをインストールする

まずは、いつもどおりapt-getでインストールする。

$ sudo apt-get install -y nodejs npm

インストールされたバーションを確認(2019/02/10時点)
$ node -v
v4.5.0


npmパッケージ管理

npmで「n」というパッケージを用いることで、パッケージ管理を行うことができる。
https://github.com/tj/n

$ sudo npm cache clean
$ sudo npm install n -g
$ sudo n stable

上記の実施後にバージョンを確認すると、最新のstable版がインストールされている。
$ node -v
v11.8.0


1月 14, 2019

raspberry piへのDockerインストール


今更ながらだけど、、
Dockerの勉強を兼ねて、自宅で動かしているwebサービス系をDockerに移行するために、
手持ちのraspberry pi(Rasbian)へDockerインストールする。

※補足:Docker CEとEEの違いは、基本的な機能は同じだがサポート面が異なっている
CE:無償版、コミュニティーでのサポート
EE:商用版、認証済みコンテナ/プラグインの配布、Docker社がサポート
個人利用であればDocker CEを利用すればOK


Dockerのインストール

最近だと、Rasbian用のインストールスクリプトが用意されていて、
下記を実行するだけで完了するようだ。
Install using the convenience script

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh


Docker実行ユーザーの登録

$ sudo usermod -aG docker your-user

docker-composeのインストール

$ sudo pip install docker-compose

1月 07, 2019

V6プラスでのポート開放


先日、夜間の通信速度の低下がガマンできなくなり、PPPoE接続からV6プラスへ切り替えました。
速度低下はなくなり快適になったのですが、Webサーバが接続できなくなっため、その備忘録として書いておきます。


変えたこと(繋がらなかった状況)

・PPPoEからV6プラスへの変更
・IPv4からIPv6への変更
(Webサーバの設定変更はなし)


わかったこと

・V6プラスだと、使用できるポートがアドレスごとに限られている
⇒80、443などがこれに入っていないので、アクセスできない
・使えるポートを特定して、それを使用してアクセスする必要がある


対策

①PPPoEでアクセスを続ける
・メインルータでPPPoEパススルーを設定
・サブルータ(Webサーバ用)でPPPoEの接続設定
②ポートを特定して、各種設定を変更(参考

とりあえずは、①でその場を凌ぐ予定ですが、
・そもそものPPPoEで速度低下する問題が解決できてない
・メインの内部ネットワークと完全分離になるなどの運用面
などいろいろ弊害があるので、②への移行を考え中です。

12月 24, 2015

Linuxで未使用時のHDDをスピンダウンして省電力化


hdparmを使用したHDDスピンダウン設定

hdparmを使って、未使用時のスピンダウンを設定。
参考サイト

hdparm -S スピンダウンまでの時間設定 /dev/sdb
スピンダウンまでの時間設定は以下を参照
1-240 : 5 秒の倍数の指定。タイムアウトは 1を指定した場合 5 秒、240を指定した場合 20 分
241- 251 : 30 分単位の 1 から 11 の指定。タイムアウトは 241を指定した場合 30 分、251を指定した場合 5.5 時間。
252 : 21 分(5秒の倍数指定と同じ)
253 : ベンダ定義のタイムアウト。8 分から 12 時間の間のいずれか。
254 : 予約
255 : 21 分 15 秒(5秒の倍数指定と同じ)


自動起動の設定

起動時に自動で設定されるように設定

sudo vim /etc/rc.local
hdparm -S スピンダウンまでの時間設定 /dev/sdb

TT-RSSのインストールと設定


下準備

TT-RSSのインストールに先立ち、PHPとmysqlをインストールし、
mysqlのデータベース&ユーザを作成しておく。


TT-RSSのインストール

公式のインストール手順にしたがって、インストール。

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の設定

mysql -u root -p

起動したmysqlのシェル上で下記コマンドを実行
・ユーザ追加
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 データベース名

参考サイト

Nginxのインストール、PHPの有効化

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


Nginxの設定

sudo vi /etc/nginx/sites-enabled/default


設定のチェック

sudo nginx -t


設定のリロード

sudo nginx -s reload


SSL有効化

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;(保存先)
}


1月 25, 2015

iptablesのmediatomb用設定

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

10月 31, 2013

AWStatsでApacheログ解析

webサーバのログ管理の必要性はわかっているけど,
いちいちログファイルを見てるのはめんどくさい。。


AWStatsの導入

そこで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"

残りはweb表示するための設定。
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

以上!!
ただし,ログの解析結果をだれでも見れるとこに置くのは危険なので,アクセス制限をかけること!



6月 05, 2013

mydnsを使ったDDNS設定

外部から自宅のサーバにアクセスするためには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 上で作ったファイルへのパス

今回は,このサイト様を参考にさせていただいています。



3月 25, 2013

iptablesでファイヤーウォール設定

サーバを外部に公開するにあたり,このままだとセキュリティ的に不安で仕方がないです。。
なので,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] '


作成したファイルのオーナをrootに変更して,パーミッションを700にしておきます。
あとは/etc/rc.localに登録して,起動時に実行するように設定します。


WebからのアクセスをすべてHTTPSにする

WebサーバへのアクセスをすべてHTTPSで通信するように設定する。


.htaccessにSSLで通信するように記述

$ cd /var/www
$ sudo vim .htaccess

以下追加項目
SSLRequireSSL
これでwww以下へのアクセスはすべてHTTPSで行われる。


.htaccessを使用出来るようにapacheを設定

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エラーがでるようになる。



HTTPSでWebページを公開

外部から安全にアクセスするために,SSLを使ってHTTPSでの暗号化通信を導入します(`・ω・´)

SSLのインストール

まず,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を使用するために必要なファイルを生成することができました。
証明書は定期的に更新する必要があります。(-daysのオプションで有効期限を指定しています
あとは,apacheの設定を行なっていきます。


apacheの設定

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


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>


apache再起動時のパスワード入力をなくす

$ 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


最後にapache再起動

$ sudo service apache2 restart
で,問題が無ければ完成!!



ここの内容は以下のサイトを参考にさせていただいています。