ぽよメモ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

カテゴリー:スポンサー広告


ブログ移行しました


今月初めあたりですがついにblogを移行することにしました。

今後こちらは更新せず、いずれは消すつもりをしておりますのでお手数ですが今後はこちらでよろしくお願いします

ぽよメモ
スポンサーサイト

カテゴリー:未分類


SSL設定しようとして諦めた話


あけましておめでとうございます。
このブログがいつ消えるかは僕のやる気次第ですよろしくお願いいたします。

この前取得したドメインでwebサーバを建てました。→ poyo.info

そして正月の暇な気分に任せてStartSSLでSSL証明書を発行し、https対応してやろうと血迷ったのが昨日の夜です。
結果的に言うと諦めました。なんで諦めたかは後で書きます。とりあえずやり方だけ書いていきます。

最初にググってあちこちのサイトを見てから始めたのですが、結論から言うとStartSSLの仕様が大きく変わっており、一部大きく異る操作を行うこととなりました。

これまでは緑を基調とした比較的ポップなサイトでしたが、2016/1/4現在は水色が基調のはやりのフラットデザインを採用しています(所々前からの使い回しと思われる画像もあります

手順としてはだいたい以下のとおりです
1. StartSSLにSign-up
2. domain validation
3. Free SSL Certificateを発行
4. 秘密鍵、公開鍵、その他をnginxに読み込ませる

1. Sign-up
StartSSLにアクセスし、トップページの"Start Now for Free SSL Centrificate"をクリックします。

するとSign-upかAuthenticateが選択できるのでSign-upに進みます。
以前はここで住所、年齢、氏名等を入力する画面が出ましたが、今は国を選択しメールアドレスを入力してValification codeを発行してもらうだけです。
前はこれでIdentity Validationが完了していたっぽい?んですが現在はもう少し厳しくなってました。ログイン後の画面で3つあるタブのうち一番右、Validations Wizardを選択するとdomain, email, Personal Identity, OtherのValidationが選択できます。このうちemailは最初のSign-upで完了しており、Personal Identityを選択すると以下の画面が出ます。

Class2以上のSSL証明書が必要な場合はこちらの認証が必要ですが、Class1には必要ありません。

2. domain validation
一番上のdomain validationを選択しcontinue。top level domain(www.poyo.infoならpoyo.info)を入力する画面が出ますので、ここに入力すると以下の画面が出ます。

使っているdomain宛のメールアドレスを受信できる状態にする必要があります。またはWhois代理公開をしている場合、そのコンタクト情報を正しく入力しておく必要があります。僕はどっちもしておきました。
送られてきたメールに書いてあるコードを入力し、validationを終えます。

このとき意外とメールが来るのが遅いことがあるようです。最初のメールが5分以上遅延して送られてきました。


3. Free SSL Certificate
Certificates Wizardタブを選択し、今回はwebサーバに用いるので”Web Server SSL/TLS Certificates”を選択してcontinueします。

www.poyo.infoなどと入力し、秘密鍵のパスワードを設定します。10~32文字の英数字混合のパスが求められます。
次のページで秘密鍵が表示されるのでコピーして保存します。
このとき、絶対Download Private Keyを押して手元に残しておくことをおすすめします。(後からわからなくなると確認するすべがない

次は公開鍵を手に入れるのですが、時間かかります。Tool Boxタブを選択し、Certificate Listを選択すると以下の様な表が出ます。
Private Keyを手に入れてすぐの時はStatusがPending issuedになっているのでこの状態になるまで待ちます。メールに寄る通知などは来なかったです。僕はここで一旦切り上げて寝ました。朝起きたら以下のとおり↓

右のRetrieveボタンを押すと公開鍵をダウンロードすることができます。
ご丁寧にzipで固めてあり、開くとApache、IIS、Nginx、Other用にそれぞれzipがあるので適宜使ってください。

ここまで来たらようやくStartSSLから離れられます。
適当に使ってるwebサーバに鍵を転送します。(公開鍵→startssl.crt、秘密鍵→startssl.key)
適当にフォルダを決めて
$ wget https://www.startssl.com/certs/ca.pem
$ wget https://www.startssl.com/certs/sub.class1.server.ca.pem
こいつらを落としてきます。
パーミッションの変更
$ chmod 400 startssl.crt startssl.key ca.pem sub.class1.server.ca.pem

Apacheには中間証明書を指定するところがあり、Nginxにはありません。Nginxではサーバ証明書にくっつけてしまえば勝手にやってくれるらしいです(それでいいのか…
$ cat sub.class1.server.ca.pem >> startssl.crt

現在、StartSSLで作成してきた秘密鍵にはパスフレーズが設定されています。これをそのままnginxに読み込ませると、nginxを起動する度にパスフレーズが求められて面倒です。外してしまいます。
$ openssl rsa -in startssl.key -out startssl_nopass.key
unable to load Private Key
1996223696:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:
アレ…

no start lineとエラーが出ています。僕は察しました。「アッ、貼り付けるときに一行目がバグったな」
-----BEGIN RSA PRIVATE KEY-----を追加し、再度実行。
$ openssl rsa -in startssl.key -out startssl_nopass.key
unable to load Private Key
1995896016:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:818:
ファ!?
もういいや…毎回パスフレーズ入れよ…

「公開鍵と秘密鍵、合ってるか確かめときたいな」と思い
$ openssl x509 -in startssl.crt -modulus -noout
したのですが
$ openssl x509 -in startssl.crt -noout -modulus
unable to load certificate
1995597008:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:818:
アアアアッ…なんだこれは…

ググっても全然わからず。
ここで心折れて辞めました。メンタルが弱いんです。

気が向いたらまたやります。




カテゴリー:RaspberryPi


NginxにphpMyAdminを通す


Nginxの最新版の導入が成功しましたら、データベースをより管理しやすくするためにphpMyAdminを入れます。
(インストールはこの前の記事でやった)
まずはphp5の環境設定から。
$ sudo vim /etc/php5/fpm/php.ini

・683行目付近 文字コードの設定
default_charset = "UTF-8"

・865行目付近 タイムゾーンの設定
date.timezone = "Asia/Tokyo"

・1645行目付近 言語設定
mbstring.language = Japanese


$ sudo vim /etc/php5/fpm/pool.d/www.conf

・22行目付近 PHP実行ユーザ名の設定
user = nginx

・23行目付近 PHP実行グループ名の設定
group = nginx

・33行目付近 FastCGIリクエストの設定
listen = 127.0.0.1:9000
ここまできたらサービスの再起動を行います。
sudo /etc/init.d/php5-fpm restart


MySQLのセキュリティのための設定
$ mysql_secure_installation

Enter current password for root (enter for none):  ←パッケージ導入時に指定したパスワードを入力
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Thanks for using MySQL!


ここからはNginxの設定に入ります。

公開ドメイン名: www.poyo.info
ドキュメントルート: /var/www
Wordpress: /var/www/wordpress
phpMyAdmin: /usr/share/phpmyadmin

としておきます。
$ sudo vim /etc/nginx/nginx.conf

user nginx;
worker_processes 4; # Raspberry Pi2なので「1」→「4」に修正

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

gzip on; #コメントアウトを外す Gzip圧縮転送を有効
include /etc/nginx/conf.d/*.conf;
}
Nginxは/etc/nginxにインストールされているはずです。
各種設定は/etc/nginx/conf.d/*.confとして保存し、先ほどのnginx.confによってincludeされます。
まずはデフォルトで入っている設定ファイル類のバックアップを取ります。
$ cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/wordpress.conf
$ mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
$ cp /usr/share/nginx/html/index.html /var/www/index.html
$ cp /usr/share/nginx/html/50x.html /var/www/50x.html

次にWordpressとphpMyAdminの設定をかきます。
$ sudo vim /etc/nginx/conf.d/wordpress.conf

server {
listen 80;
server_name poyo.info www.poyo.info;

# アップロードできるサイズの指定(Nginxのデフォルト値は1MByte)
client_max_body_size 16M;

# www が省略時されたときでも、www を付加したサーバ名に統一する
if ($http_host = "poyo.info") {
rewrite (.*) http://www.poyo.info$1;
}

location / {
root /var/www;
index index.php index.html index.htm;
}
 location /blog {
alias /var/www/wordpress;
index index.php;
# WordPress用のファイル・ディレクトリ不在時のリダイレクト対応
try_files $uri $uri/ /wordpress/index.php?$args;
# WordPress用のカスタムパーマリンク対応
if (!-e $request_filename) {
rewrite ^.+?($/.*) $1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
rewrite ^ /wordpress/index.php last;
}
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www;
}
# FastCGI用の設定
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
location /phpmyadmin {
alias /usr/share/phpmyadmin;
index index.php
#アクセスの制限
allow 127.0.0.1;
allow 192.168.0.0/24;
deny all;
}
location ~ /phpmyadmin/.*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/$uri;
include fastcgi_params;
}
}
これでhttp://[ラズパイのIPアドレス]/phpmyadminにアクセスすればphpMyAdminが表示されるはずです。


カテゴリー:RaspberryPi


Nginxの最新版を入れる


ようやくドメインを取得し、ラズパイをもう一台手に入れたので、こいつでWordpressを動かし、このブログをそっちにお引越ししたいと考えています。

ApacheにするかlighttpdにするかNginxにするか悩みましたが、どうも調べた限りではNginxがもっとも軽そうなのでこいつにします。
sudo apt-get install nginx php5 mysql-server php5-fpm php5-mysql phpmyadmin chkconfig

#勝手に入ってくるapache2を切る
sudo chkconfig apache2 off
しかし、ここで入れたnginxのバージョンは1.2.1でした。
最新版は1.8.0です。ちょっと気持ち悪いので手動で入れなおそうと思います。

#nginxのアンインストール
sudo apt-get remove nginx

#Nginxのリポジトリ追加
echo 'deb-src http://nginx.org/packages/debian/ wheezy nginx' | sudo tee -a /etc/apt/sources.list

#PGP公開キーを登録
wget http://nginx.org/keys/nginx_signing.key -O - | sudo apt-key add -

#GnuPGに登録
wget http://nginx.org/keys/nginx_signing.key -O - | gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --import -


/tmp/nginxにソースパッケージを展開しコンパイルします。
sudo apt-get update
sudo apt-get build-dep nginx
mkdir /tmp/nginx
cd /tmp/nginx
sudo apt-get source nginx
cd nginx-*
dpkg-buildpackage -uc -b
cd ..
#インストール
dpkg -i nginx_*~wheezy_armhf.deb
最後のインストールになってエラーが出ました。

nginx-debが何か悪さしてるっぽい?よくわからない。
言われるままにコマンドを打つ。依存関係の解消をするコマンドらしい。
sudo apt-get -f install
これでもまだエラーが出る。今度はnginx-commonが妨害しているようだ。
さらに、ここでまだnginxが動いていることに気づく。
sudo service nginx stop
sudo apt-get remove nginx-common
もう一度インストールを試す
$ dpkg -i nginx_*~wheezy_armhf.deb
(Reading database ... 82645 files and directories currently installed.)
Unpacking nginx (from nginx_1.8.0-1~wheezy_armhf.deb) ...
----------------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:
* http://nginx.org/en/docs/

Commercial subscriptions for nginx are available on:
* http://nginx.com/products/

----------------------------------------------------------------------
Setting up nginx (1.8.0-1~wheezy) ...
Installing new version of config file /etc/nginx/scgi_params ...
Installing new version of config file /etc/nginx/fastcgi_params ...
Installing new version of config file /etc/nginx/koi-win ...
Installing new version of config file /etc/nginx/nginx.conf ...
Installing new version of config file /etc/nginx/koi-utf ...
Installing new version of config file /etc/nginx/win-utf ...
Installing new version of config file /etc/nginx/uwsgi_params ...
Installing new version of config file /etc/nginx/mime.types ...
Installing new version of config file /etc/init.d/nginx ...
Installing new version of config file /etc/logrotate.d/nginx ...
Installing new version of config file /etc/default/nginx ...
$nginx -v
nginx version: nginx/1.8.0
上手くいった。やったね。

冬休み中に設定を終えてしまいたいですね…

カテゴリー:RaspberryPi


RTXシリーズでのフィルタ設定


メリークリスマス。地獄のインターネット世界にようこそ。甘いケーキの代わりにRTX1100いかがですか。下手をすればホールケーキよりもお安いですよ。

さて、本日はクリスマスですがRTX1100のフィルタ設定をちゃんとお勉強しないとなぁと思っていたので軽くだけやります。

現在の構成は以下のようになっています。
lan1: デスクトップやノートパソコン・スマホ等が接続されている宅内LAN(192.168.0.0)
lan2: PPPoEでインターネットに接続
lan3: DMZ(192.168.10.0, サーバーに192.168.10.2を振る)

RTX1100には二種類のフィルタが存在します。
1. 静的フィルタ
2. 動的フィルタ
名前の通りで、静的に(常に一定に)作用するフィルタと、動的(場合により変化して)作用するフィルタです。負荷は当然動的フィルタのほうが大きく、使い分けが大事なようです。

勉強のためにあちこちのサイトを覗いたのですが、フィルター番号についてはまちまちでした。とりあえずわかったのは、
1. フィルタ番号自体に特に意味は無い(ただの識別子)
2. 適用した順に作用
自分でルールを設定してやるのが良さそうです。とりあえずここでは簡単に、
lan番号in=0,out=1フィルタ番号
1001= 1001
2101= 2101
3001= 3001
こんな感じにしておこうかと。また、in/out共用のフィルタには2を設定しようと思います(例: 2201)。

こんな感じでルールを設定している人のものを見ると、フィルタ番号の部分が3桁もあったり(そんなに設定するんだろうか)、VLANの有無があったり(むずかしくてわからないよぅふええ)、といった感じで少し長く感じたので短くしてみました。足りなければ増やせばよいのだよ(適当

フィルタの適用順は静的フィルタ→動的フィルタの順なので、まずは静的フィルタの設定からしていきます。

1. プライベートIPからのアクセスを遮断
これはlan2に設定します。IPアドレスを偽装(IPスプーフィング)して行われる攻撃を防ぐことができるらしいです。
# ip filter 2001 reject 10.0.0.0/8 * * * *
# ip filter 2002 reject 172.16.0.0/12 * * * *
# ip filter 2003 reject 192.168.0.0/16 * * * *

同時にoutへもこれを適用しておきます。
# ip filter 2104 reject * 10.0.0.0/8 * * *
# ip filter 2105 reject * 172.16.0.0/12 * * *
# ip filter 2106 reject * 192.168.0.0/16 * * *


2. 不正利用されやすいポートの遮断
これもlan2に設定。
# ip filter 2207 reject * * udp,tcp 135 *
# ip filter 2208 reject * * udp,tcp * 135
# ip filter 2209 reject * * udp,tcp netbios_ns-netbios_ssn *
# ip filter 2210 reject * * udp,tcp * netbios_ns-netbios_ssn
# ip filter 2211 reject * * udp,tcp 445 *
# ip filter 2212 reject * * udp,tcp * 445
netbios_ns-netbios_ssnとはポート番号137~139のことのようです。聞いたことがないので調べましたが、こんな感じらしいです。なんでポート番号にしないんだろう…
ポート番号サービス名備考
137netbios-nsWindowsが周辺のパソコンのIPアドレスを調べるために使う
138netbios-dgmWindowsが周辺のパソコンを調べるために使う
139netbios-ssnWindowsが周辺のパソコンやプリンタと接続するために使う
445Direct Hosting of SMBSMBをNetBIOSを介さずにホストする際に用いられる
これらのポートをもし外側から利用する場合、これを設定すると使えなくなることに注意が必要です。
参考:
ウェルノウンポート番号
445/tcpポートへのアクセス・ログがファイアウオールに大量に記録される
フィルタリングで遮断すべきポート番号(その2)


3. 外部からのtelnetを遮断
外部からtelnetされないようにしておきます。
# ip filter 2013 reject * * tcp * telnet


4. ICMPパケットの許可
pingやtracert(traceroute)などがこれを利用しています。
# ip filter 2014 pass * 192.168.0.0/24 icmp


5. WWWサーバーおよびSSHサーバーへのパケットのうち最初だけ通過
残りのパケットは動的フィルタで処理します。
# ip filter 2015 pass * 192.168.10.2 tcpflag=0x0002/0x0017 * www
# ip filter 2016 pass * 192.168.10.2 tcpflag=0x0002/0x0017 * 22


6. 「source-routeオプション付きIPパケット」を遮断
通常悪用しかされないので塞ぐ、ということのようです。→参考:source-routeオプション付きIPパケットに対するフィルタリング
# ip filter ip filter source-route on


7. 終点IPアドレスがDirected Broadcastアドレス宛になっているIPパケットを遮断
Smurf attackから防御するためにホスト部が"1"であるIPアドレス宛てのパケットを遮断します。Smurf attackとは、要するに送信元を偽装してpingを大量に送りつけ、ネットワークやコンピュータに負荷を与える攻撃方法らしいです。
# ip filter directed-broadcast on
参考:
directed broadcastパケットのフィルタリング
Smurf攻撃


8. すべて遮断/すべて許可
以上に該当しないパケットを許可or遮断します。どこでも使えるので特別な番号を与えておきます。
# ip filter 4000 reject * *
# ip filter 5000 pass * *



次に動的フィルタの設定をしていきます。
静的フィルタでは常にその入り口を開いている必要があるのですが、動的フィルタではその都度必要に応じて開くという動作が可能になり、セキュリティが増します。

フィルター番号はYAMAHA公式と揃えておきます
1. 各種通信の許可
# ip filter dynamic 100 * * ftp
# ip filter dynamic 101 * * www
# ip filter dynamic 102 * * domain
# ip filter dynamic 103 * * smtp
# ip filter dynamic 104 * * pop3
# ip filter dynamic 105 * * tcp
# ip filter dynamic 106 * * udp


2. SSHできるようにする
YAMAHAの公式サイトではtelnetを通す設定を紹介していますが、LinuxサーバーならSSHするだろうと思うのでこっちを設定します。
# ip filter dynamic 200 192.168.0.0/24 * 22

[2015/12/26 追記]
これではダメでした。以下の様に変更します。
# ip filter 2017 pass * 192.168.10.2 22
# ip filter dynamic 200 192.168.0.0/24 * filter 2017


[2015/12/28 追記]
上のやつでもダメでした。動的フィルタは諦めて静的に変えます。
# ip filter 2118 pass * * 22
# ip filter 2019 pass * * established
# ip lan3 secured filter in 2019 4000
# ip lan3 secured filter out 2118 5000 dynamic 100 101


3. wwwサーバーへのパケットを通す
# ip filter dynamic 201 * 192.168.10.2 www


後はこれらを適用していきます。
# pp select 1
pp1# ip pp secure filter in 2001 2002 2003 2207 2208 2209 2210 2211 2212 2013 2014 2015 2016 4000 dynamic 201
pp1# ip pp secure filter out 2104 2105 2106 2207 2208 2209 2210 2211 2212 5000 dynamic 100 101 102 103 104 105 106
# pp select none
# ip lan3 secure filter in 2019 4000
# ip lan3 secure filter out 2118 5000 dynamic 100 101
# save


…合ってるんかな

参考
自社サーバーを公開(1つの固定グローバルIPアドレス / DMZセグメント : LAN3)

カテゴリー:ネットワーク


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。