iptables†
eth0:内向き
eth1:外向き
以下の順番で適用。
モジュールロード†
/sbin/modprobe ip_conntrack_ftp
FTP用接続追跡
/sbin/modprobe ip_nat_ftp
FTP用NATヘルパー
初期化†
iptables -F
iptables -Z
iptables -X
こだわるなら一番最初に/etc/rc.d/init.d/iptables stopなんてすれ
ポリシー†
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
最後まで引っかからなかったパケットは全部落とす
ループバック、ローカルの許可†
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
ローカルでしか動かさないサービスで
アドレスバインドが可能なモノ(MySQLやSambaなど)は
サービス側でローカルアドレスだけにバインドする
問答無用でたたき落とす†
# TRENDMICRO WebReputation
iptables -A INPUT -i eth1 -s 150.70.0.0/16 -j DROP
iptables -A INPUT -i eth1 -s 216.104.0.0/19 -j DROP
(例えばCN/KR/KP/TWなど以下略
他のルールにマッチする前に最優先でマッチさせて落とす
SYNで始まらない新規接続は落とす†
iptables -A INPUT -i eth1 -p tcp ! --syn -m state --state NEW -j DROP
外向きサービスポートへの接続確立させる前に落とす
3WAY握手はお行儀よくしてね!
NEWなのにSYN/ACKが立ってるパケットにはRSTで答えて拒否†
iptables -A INPUT -i eth1 -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
黙ってたたき落とすと踏み台になっちゃうぅ
行儀良く確立した接続と関連接続は通す†
iptables -A INPUT -i eth1 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
出て行くパケットは全部通す†
iptables -A OUTPUT -o eth1 -j ACCEPT
サービス側でアドレスバインドしておけば
外向きの137、138、445などを落とす面倒な設定も少なくて済む
TCPサービスポートへの新規接続を通す†
iptables -A INPUT -i eth1 -p tcp -m state --state NEW -m multiport --dport xxx,xxx,xxx,xxx -j ACCEPT
xxxは各外向きサービスのポート番号。
UDPサービスポートへの接続を通す†
iptables -A INPUT -i eth1 -p udp -m multiport --sport 53,123 -j ACCEPT
iptables -A INPUT -i eth1 -p udp -m multiport --dport 53,123 -j ACCEPT
外向きDNSを立てているなら2つとも必要
面倒なのでNTPもまとめて書いてみた(´・ω・`)