【iptables】公開したくないport番号にファイアーウォールを設定する
ゴール
- アプリケーションが9090番ポートで動いている
- nginxの設定で
sample.com:80をlocalhost:9090にリバースプロキシしている - しかし9090番が外部公開なので
sample.com:9090でもアクセスできてしまう - この9090番ポートを外部的には閉じたい
9090番ポートの状態確認
# 一部省略 % netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp6 0 0 [::]:9090 [::]:* LISTEN
現状のiptablesの確認
% sudo iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
なんも制限してない
iptablesを使ってパケットルールを追加
まずは、localhostからの9090番へのtcpを許すルールを追加
% sudo iptables -A INPUT -p tcp -s localhost --dport 9090 -j ACCEPT # これ↑でやってること # -A INPUT 「"INPUT"チェインにルールを追加する」 # -p tcp 「"tcp"プロトコルで」 # -s localhost 「"localhost"から」 # --dport 9090 「"9090"ポートに行く」 # -j ACCEPT 「上記のルールに合致するパケットを受け入れる」 # そうすっと... % sudo iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:9090 ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:9090 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
次に、あらゆる元からの9090番へのtcpを破棄するルールを追加
% sudo iptables -A INPUT -p tcp --dport 9090 -j DROP # これ↑でやってること # -A INPUT 「"INPUT"チェインにルールを追加する」 # -p tcp 「"tcp"プロトコルで」 # --dport 9090 「"9090"ポートに行く」 # -j DROP 「上記のルールに合致するパケットを破棄する」 # そうすっと... % sudo iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:9090 ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:9090 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9090 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
確認
この状態で
- sample.com
- sample.com:9090
にブラウザからアクセスすると
- sample.com
- sample.com:9090
sample.com:9090にアクセス- localhostではない元から9090番への要求なので破棄される

とりあえず成功っぽい
参考
- Linux のファイアウォールの設定方法
- iptablesの設定方法 | マニュアル|ServersMan@VPS Entry/Standard/Proプラン|仮想専用サーバー|クラウドサービス:ユビキタスプロバイダ DTI
- linux - iptables error: unknown option --dport - Server Fault
- iptablesによるフィルタ設定 - とみぞーノート
- iptablesテンプレート集 改訂版(8):知らなきゃ損するiptablesのTips (1/3) - @IT
- iptables を使用してファイアウォール機能を稼働させ、セキュリティーを制御する
雑感
iptables-save > ファイルとiptables-restore < ファイルで安全に管理すべき- 今回は9090番だったけど、とりあえず閉じなきゃいけないportってなんだっけ
- "iptablesとりあえずのベストプラクティス"みたいなのググるか...
DRYな備忘録