iptables についてのメモ
INPUT, OUTPUT ポリシーについて (httpの場合)
INPUT
- sport => 他ホストの80番から自分への通信
- dport => 他ホストから自分の80番への通信
OUTPUT
- sport => 自分の80番から他ホストへの通信
- dport => 自分からホストへの80番への通信
チェインとは
それぞれのテーブルの中で、どのタイミングでフィルタリングするかを決めるのがチェインです。例えば受信時についてはINPUT、送信時についてはOUTPUTといった具合です。
INPUT, FORWARD の違いについて
パケットを受信した際、まずパケットの送信先をチェックします。送信先がそのパケットを受信したホストそのものであれば、INPUTチェインに送られて定義されているルールに従って処理され、そのパケットを受け取る場合は適切なサービスに渡されます。送信先が別のホストであればFORWARDチェインに送られ、パケットの通過が許可されれば該当するホストへと転送されます。許可されなかったパケットは、そこで破棄されるというわけです。反対に、そのホストのプログラムによって生成されたパケットはOUTPUTチェインでチェックされ、許可されれば送信先へと送り出されます。
state オプション
- ESTABLISHED
- INVALID
- NEW
- RELATED
上記4つが指定可能
設定を持続させる iptables-persistent について
iptables の設定を /etc/iptables/rules.v4 に保存
$ sudo service iptables-persistent save
/etc/iptables/rules.v4 にかかれた設定を iptables に反映
$ sudo service iptables-persistent reload
俺史上発展途上のiptables をさらす
最後に自分が作ったスクリプトを晒します。一応DOS対策もしています。(このあたりまた書きます)
普通に考えて下記記事で紹介されているものが最強かと思いますが、
自分で試行錯誤して改良していきたいと思いいます。
#!/bin/bash # Ports SSH=19921 #FTP=20,21 DNS=53 SMTP=25,465,587 POP3=110,995 #IMAP=143,993 HTTP=80,443 #IDENT=113 #NTP=123 #MYSQL=3306 #NET_BIOS=135,137,138,139,445 #DHCP=67,68 DKIM=8891 # Initialize iptables -F iptables -X # Policy iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT # 自分自身は許可 iptables -A INPUT -m state --state NEW -s 127.0.0.1 -j ACCEPT # Dos protection iptables -N Attacker iptables -A Attacker -m recent --set --name attacker -j LOG --log-level warning --log-prefix 'Attaker:' iptables -A Attacker -j DROP iptables -A INPUT -p tcp -m state --state NEW -m recent --rcheck --seconds 15 --name attacker -j DROP iptables -A INPUT -m multiport -p tcp --dports ${HTTP} -m state --state NEW -m recent --set --name PreAttacker iptables -A INPUT -m multiport -p tcp --dports ${HTTP} -m state --state NEW -m recent --update --seconds 1 --hitcount 20 --rttl --name PreAttacker -j Attacker # セッション確立後のパケット疎通は許可 iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH iptables -A INPUT -p tcp --dport ${SSH} -j ACCEPT # HTTP, HTTPS iptables -A INPUT -p tcp -m multiport --dports ${HTTP} -j ACCEPT # SMTP iptables -A INPUT -p tcp -m multiport --dports ${SMTP} -j ACCEPT # POP3 iptables -A INPUT -p tcp -m multiport --dports ${POP3} -j ACCEPT # ICMP iptables -A INPUT -p icmp -j ACCEPT # ANY -> SELF # DKIM iptables -A INPUT -p tcp --dport ${DKIM} -j ACCEPT # DNS iptables -A INPUT -p udp --source-port ${DNS} -j ACCEPT
参考
コピペから脱出!iptablesの仕組みを理解して環境に合わせた設定をしよう
Linuxで作るファイアウォール[パケットフィルタリング設定編] (½)
iptables の ipt_recent で ssh の brute force attack 対策