Linuxインストール時Firewall設定は/etc/sysconfig/iptablesに書き込まれている。ファイルで変更した場合は再起動が必要。 コマンドで実行した場合、反映は即時なので注意
# iptables -A INPUT -p icmp -j DROP 上記例はicmpを拒否するものだが、こんなのをtcpに対して行った場合は即時通信不能となる。 なんかまずいときは # iptables -F でクリアしておく
テーブルとは処理の種類。通常はfilterを良く使うがnatも見ることが多い。その他2つは見たことがない! ほとんどはfilterテーブルに対して行うため、指定しないとfilterに対する設定となる。
入出力のタイミング。テーブルによって使えるものが決まっている。
DROP,ACCEPTなどは一回マッチしたらそのパケットの扱いは終了。 LOGなどは処理を続ける。
iptables -A INPUT -p tcp -m --dport 80 -j ACCEPT iptables -A INPUT -p tcp -j DROP
system-config-securitylevel
現在の設定を確認 | iptables -L |
現在の設定をクリア | iptables -F |
主にINPUTを制御することになるだろう。内部から外部通信を制限する場合は、OUTPUTを変更する必要がある。
# サーバーへの攻撃対応(From さくらVPSの情報) iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP #ローカルからの通信は許可(一番先頭に持ってくる) iptables -A INPUT -i lo -j ACCEPT #すでに接続されているものは許可 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #ローカル以外のICMPは拒否(適用順に注意) iptables -A INPUT -p icmp -j DROP # 各種ポートの許可(ssh,http,https) iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT #INPUTは基本落とす iptables -P INPUT DROP
service iptables save
iptables-save -c
# Generated by iptables-save v1.4.18 on Tue Oct 6 08:26:41 2015 *filter :INPUT DROP [1:60] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [151:20456] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j DROP -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT COMMIT # Completed on Tue Oct 6 08:26:41 2015
ログを汚すので
iptables -I INPUT -s 攻撃者IP -j DROP
成功、失敗にかかわらず60秒間で4回目のSSH接続を拒否する。
# allow iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 30 --hitcount 2 --rttl --name SSH -j DROP