さくらVPSでDokkuインストール後、デフォルトだとブラウザでアクセスできないため、iptablesでhttp(80)とhttps(443 SSL)を空ける必要がある。
ただし、永続化するための仕様が一般的なUbuntuとさくらVPSで異なるようなので注意が必要。
【参考】Qiita - netfilter-persistent が動かないよ @ さくら
(↑ありがとうございます。完全にハマっていたので助かりました。)
Agenda
さくらVPSのUbuntuの場合
以下は、さくらVPS x Ubuntu 16.04 でDokkuインストール直後の状態。
httpとhttpsが許可されていない。
$ sudo iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
さくらVPS用に永続化するために設定ファイルに「http(--dport 80)」と「https(--dport 443)」を「-j REJECT」の上に追記する。
$ sudo vi /etc/iptables/iptables.rules
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
永続化されているか確認するために再起動して、5番にhttp、6番にhttpsが許可されているか確認する。
$ sudo reboot
$ sudo iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
6 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
7 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
さくらVPSのUbuntuではない場合
現状設定
設定を見るとhttpやhttpsの文字列がなく、ACCEPT行にsshしかアクセス許可されていない。
$ sudo iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-sshd tcp -- anywhere anywhere multiport dports ssh
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
iptablesの永続設定
iptablesを設定しても再起動すると消えるので、最初に永続化できるようにしておく。
$ sudo apt install iptables-persistent
rules.v4 と rules.v6 が生成される。ここに設定を記載していく。
$ ll /etc/iptables/
total 20
drwxr-xr-x 2 root root 4096 Apr 27 23:36 ./
drwxr-xr-x 96 root root 4096 Apr 27 22:42 ../
-rw-r--r-- 1 root root 492 Apr 27 23:06 iptables.rules
-rw-r--r-- 1 root root 1745 Apr 27 23:17 rules.v4
-rw-r--r-- 1 root root 183 Apr 27 23:14 rules.v6
httpとhttpsを許可設定
iptablesにhttp(80)とhttps(443 SSL)を追記する。
$ sudo vi /etc/iptables/rules.v4
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [198329:10516704]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
:f2b-sshd - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
設定を読み込む
設定ファイルを編集したら読み込んで反映する。
$ sudo /etc/init.d/netfilter-persistent reload
反映されたか設定情報を見る
ACCEPT行にhttpとhttpsが載っていることがわかる。
$ sudo iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-sshd tcp -- anywhere anywhere multiport dports ssh
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
再起動して自動読み込み確認
再起動後に設定情報を確認して、httpとhttpsが載っていれば成功。
$ sudo reboot