ネットワーク接続の前にファイアウォールを設定すると,ネットワーク接続ができない場合の原因がネットワークの設定にあるのか,ファイアウォールの設定にあるのかが分からなくなります。したがって, iptables の設定は,当該サーバーの NIC 及びネットワークの設定完了後に行います。
| #!/bin/sh # NAT の設定を削除 iptables -F -t nat # 送信元アドレスを 61.205.232.19 に変換して ppp0 から送信するための NAT の設定 iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to 61.205.232.19 # 全てのルールを削除 iptables -F # 全てのユーザ定義チェインを削除 iptables -X # 基本的には外部からのパケットの通過を拒否 iptables -P INPUT DROP # 基本的には外部へのパケットの通過を許可 iptables -P OUTPUT ACCEPT # 基本的には他のインターフェイスへ再送信を拒否 iptables -P FORWARD DROP # 確立しているコネクションの INPUT を許可 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 確立しているコネクションの FORWARD を許可 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # lo ( ループバック)からの INPUT を許可 iptables -A INPUT -i lo -j ACCEPT # eth1 (LAN) からの INPUT を許可 iptables -A INPUT -i eth1 -j ACCEPT # LAN から外部 SMTP サーバーへの新規アクセスを許可 iptables -A FORWARD -i eth1 -p tcp --dport smtp --syn -m state --state NEW -j ACCEPT # LAN から外部 SMTPS (465) サーバーへの新規アクセスを許可 iptables -A FORWARD -i eth1 -p tcp --dport smtps --syn -m state --state NEW -j ACCEPT # LAN から外部 POP3 サーバーへの新規アクセスを許可 iptables -A FORWARD -i eth1 -p tcp --dport pop3 --syn -m state --state NEW -j ACCEPT # LAN から外部 POP3S (995) サーバーへの新規アクセスを許可 iptables -A FORWARD -i eth1 -p tcp --dport pop3s --syn -m state --state NEW -j ACCEPT # 不正なアドレスによる ppp0 からのアクセスを拒否(IP スプーフィング対策) iptables -A INPUT -i ppp0 -s 0.0.0.0/8 -j DROP iptables -A INPUT -i ppp0 -s 10.0.0.0/8 -j DROP iptables -A INPUT -i ppp0 -s 127.0.0.0/8 -j DROP iptables -A INPUT -i ppp0 -s 169.254.0.0/16 -j DROP iptables -A INPUT -i ppp0 -s 172.16.0.0/12 -j DROP iptables -A INPUT -i ppp0 -s 192.0.2.0/24 -j DROP iptables -A INPUT -i ppp0 -s 192.168.0.0/16 -j DROP iptables -A INPUT -i ppp0 -s 224.0.0.0/4 -j DROP iptables -A INPUT -i ppp0 -s 240.0.0.0/5 -j DROP iptables -A INPUT -i ppp0 -s 248.0.0.0/5 -j DROP iptables -A INPUT -i ppp0 -s 255.255.255.255/32 -j DROP # 自分のグローバルアドレスによる ppp0 からのアクセスを拒否(IP スプーフィング対策) iptables -A INPUT -i ppp0 -s 61.205.232.19 -j DROP # Ping of Death 対策 iptables -N ping-of-death iptables -A ping-of-death -m limit --limit 1/sec --limit-burst 4 -j ACCEPT iptables -A ping-of-death -i ppp0 -j LOG --log-level info --log-prefix 'ping-of-death ' iptables -A ping-of-death -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -j ping-of-death iptables -A FORWARD -p icmp --icmp-type echo-request -j ping-of-death # SYN フラッド攻撃対策 iptables -N syn-flood iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A syn-flood -i ppp0 -j LOG --log-level info --log-prefix 'syn-flood ' iptables -A syn-flood -j DROP iptables -A INPUT -p tcp --syn -j syn-flood iptables -A FORWARD -p tcp --syn -j syn-flood # ポートスキャン対策 iptables -N port-scan iptables -A port-scan -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A port-scan -i ppp0 -j LOG --log-level info --log-prefix 'port-scan ' iptables -A port-scan -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan # SMTP サーバーへの新規アクセスを許可 iptables -A INPUT -p tcp --dport smtp --syn -m state --state NEW -j ACCEPT # DNS サーバーへの新規アクセスを許可 iptables -A INPUT -p udp --dport domain -m state --state NEW -j ACCEPT # WWW サーバーへの新規アクセスを許可 iptables -A INPUT -p tcp --dport http --syn -m state --state NEW -j ACCEPT # NTP サーバーへの新規アクセスを許可 iptables -A INPUT -p udp --dport ntp -m state --state NEW -j ACCEPT # WWW サーバー (SSL) への新規アクセスを許可 iptables -A INPUT -p tcp --dport https --syn -m state --state NEW -j ACCEPT |
| $ sudo chmod 755 /etc/network/if-pre-up.d/iptables |
| $ sudo /etc/init.d/networking restart |
| $ sudo iptables -t nat -L |
| $ sudo iptables -L |
ppp0 の IP アドレスが 61.205.232.19 , eth1 の IP アドレスが 192.168.0.1 のサーバー( NIC 2 枚差し)において,以下のようなケースの NAT (IPv4) の設定をします。
| $ sudo iptables -t nat -A PREROUTING -p tcp --dport 25 -i ppp0 -j DNAT --to 192.168.0.1:25 |
| $ sudo iptables -t nat -A POSTROUTING -p tcp --dport 25 -o ppp0 -j SNAT --to 61.205.232.19:25 |
| $ sudo iptables -t nat -A PREROUTING -p tcp --dport 110 -i eth1 -j DNAT --to 211.132.128.100:110 |
| $ sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE |