iptablesを設定した(VPSその5)

はてなブックマークで上位に来ていたこちらを参考に、iptablesを設定しました。

これぐらいやっとけ ~Linuxサーバのセキュリティ設定~ – nabeの雑記帳

恥ずかしながら何もやっていなかったので。
(iptablesでどういう事が出来るのかも知らなかった)


処理手順は設定のための処理を書いたシェルスクリプト(iptables-init.sh)を用意し、
それを実行して設定を反映、その上で設定をファイルに書き出して再起動しても適用されるように。

そんな感じ。



iptables-init.sh

用意したのはこんな感じの内容。
上で上げたサイトのものの改変版です。

改変点

  • 「特別に許可するネットワーク」をコメントアウト(今は使わない)
  • sshのポート番号を変えているので、設定ではそれを直接書いた。「ssh」の記述だと適用されなかったので。
  • sshの設定に「–hashlimit-mode srcport」を追加。これがないと怒られた。
  • POPサーバーは立ち上げないので設定を削除
  • ftp追加。すみません、利便性取りました。正直静的ファイルをちょっとアップロードする以外ほぼ使わないので、代替手段を検討→止めたらこれも閉じる。

#!/bin/sh

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#---------------------------------------------------------------------------
# コネクション済のパケットを通過させる
#---------------------------------------------------------------------------
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#---------------------------------------------------------------------------
# pingに応答させる。pingに応答させないならコメントアウト
#---------------------------------------------------------------------------
iptables -A INPUT -p icmp -j ACCEPT

#---------------------------------------------------------------------------
# ローカルネットワークからの接続を許可する
#---------------------------------------------------------------------------
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/16 -j ACCEPT

#---------------------------------------------------------------------------
# 他の所有サーバや決まった出先など、
# 特別に許可するネットワークをIPで指定する
#---------------------------------------------------------------------------
#iptables -A INPUT -p tcp -s 111.222.xxx.xxx -j ACCEPT

#---------------------------------------------------------------------------
# 過去にアタックしてきた等、既知の危険なホストを拒否する
#---------------------------------------------------------------------------
# 2009/02/07 DNS attack
iptables -A INPUT -s 89.149.221.182 -j DROP
# 2009/02/21 DNS attack
iptables -A INPUT -s 62.109.4.89 -j DROP

#---------------------------------------------------------------------------
# 外向きに公開するサービスのポートを空ける
# ここでは pop や ssh などのパスワード付サービスは開けない
#---------------------------------------------------------------------------
iptables -A INPUT -p udp --dport domain -j ACCEPT
iptables -A INPUT -p udp --dport ntp -j ACCEPT
iptables -A INPUT -p tcp --dport http -j ACCEPT
iptables -A INPUT -p tcp --dport https -j ACCEPT
iptables -A INPUT -p tcp --dport smtp -j ACCEPT
iptables -A INPUT -p tcp --dport ftp -j ACCEPT
iptables -A INPUT -p tcp --dport submission -j ACCEPT

#---------------------------------------------------------------------------
# パスワード付サービスをアクセス回数制限付で空ける
# 以下は各IPごとに1時間に30回のアクセス制限
# (例)5/m:1分5回まで、10/h:1時間10回まで、30/d:1日30回まで
#---------------------------------------------------------------------------
iptables -A INPUT -p tcp --dport {**sshのポート**}  -m hashlimit --hashlimit-name ssh --hashlimit 30/h --hashlimit-mode srcport --hashlimit-burst 10 -j ACCEPT



実行

# sh iptables-init.sh

エラーが出なければOK。

設定の確認

# iptables -L


※ここでリセットすると設定は元に戻ってしまうので、適用した設定をファイルに書き出す必要がある



設定を保存

# service iptables save

「/etc/sysconfig/iptables」に書き出される。

これで次の記号時に「iptables ファイアウォールルール」が適用され、設定が反映される。



こんな感じでしょうかね……

とりあえず1つサーバを設定して上手く行ったので、他のも確認します。うむ。