#!/bin/sh
#iptablesコマンド使った firewallの設定スクリプト
#
LOCAL_NET='192.168.0.0/24'
LOCAL_NET2='192.168.1.0/24'
#基本ポリシー (-Pオプション)の設定
#INPUTは拒否 DROP
#OUTPUTは許可 ACCEPT
#FORWARDは拒否 DROP
#
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#個別ルールを全削除
#
iptables -F
iptables -t nat -F
#ユーザー定義チェインを削除
#
iptables -X
#ループバックに関してはすべて許可
#
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#自分が発するコマンドを許可
#
#iptables -A INPUT -i lo -j ACCEPT
#(この設定はセキュリティー上良くなかった?)
#(次の行の設定に変更しました)
iptables -A INPUT -s 192.168.0.25 -d 192.168.0.25 -j ACCEPT
#eth0,1から入ってくる LOCAL NET PCからの通信を許可
#
iptables -A INPUT -i eth0 -p all -s $LOCAL_NET -j ACCEPT
iptables -A INPUT -i eth1 -p all -s $LOCAL_NET2 -j ACCEPT
# 発信元が loop back private addressのパケットを拒否
# IP偽装した IPスプーフィング対策
#
iptables -N ip-spoofing
iptables -A INPUT -i ppp0 -s 127.0.0.0/8 -j ip-spoofing
iptables -A INPUT -i ppp0 -s 10.0.0.0/8 -j ip-spoofing
iptables -A INPUT -i ppp0 -s 176.16.0.0/12 -j ip-spoofing
iptables -A INPUT -i ppp0 -s 192.168.0.0/16 -j ip-spoofing
#iptables -A ip-spoofing -m limit \
# --limit 1/s --limit-burst 4 -j RETURN
iptables -A ip-spoofing -j LOG --log-prefix "IP SPOOFING:"
iptables -A ip-spoofing -j DROP
# SYN-FLOODING対策
#
#iptables -N syn-flood
#iptables -A INPUT -i ppp0 -p tcp --syn -j syn-flood
#iptables -A syn-flood -m limit --limit 10/s --limit-burst 4 -j RETURN
#iptables -A syn-flood -j LOG --log-prefix "IPTABLES SYN-FLOOD:"
#iptables -A syn-flood -j DROP
# ping of death対策
#
#iptables -N ping-death
#iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j ping-death
#iptables -A ping-death -m limit --limit 2/s --limit-burst 4 -j RETURN
#iptables -A ping-death -j LOG --log-prefix "IPTABLES PING-DEATH:"
#iptables -A ping-death -j DROP
# ポートスキャナーからの対策
#
#iptables -N port-scan
#iptables -A INPUT -i ppp0 -p tcp \
# --tcp-flags SYN,ACK,FIN,RST RST -j port-scan
#iptables -A port-scan -m limit --limit 1/s --limit-burst 4 -j RETURN
#iptables -A port-scan -j LOG --log-prefix "IPTABLES PORT-SCAN:"
#iptables -A port-scan -j DROP
# 特定の IPアドレスからの INPUTを拒否する
#
iptables -A INPUT -i ppp0 -s 202.108.1.10 -j DROP
#iptables -A INPUT -i ppp0 -s 219.104.207.11 -j DROP
# TCP PORT 80,8080の通過を許可
#
iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# P2Pや MSNメッセンジャー 等 portを開ける必要がある場合の設定
# 内部の httpサーバーを外部へ公開出来たので
# これで多分動作すると思う。
#
#iptables -A PREROUTING -t nat -p tcp --dport 7755 -j DNAT \
#--to 192.168.0.2
#iptables -A FORWARD -p tcp --dport 7755 -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#パスMTU問題 (2005/02/11追加)
#MTU値の問題から一部の hpが見れない問題を解決。
#
iptables -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
#eth0,1から ppp0へ向けてのパケットは許可
#
iptables -A FORWARD -i eth0 -o ppp0 -s $LOCAL_NET -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o ppp0 -s $LOCAL_NET2 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#eth0,1間は HUBのように全部通過
#
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# PORT 135 rpc
# 137 netbios
# 138 netbios
# 139 file/printer共有
# 445 file/printer共有
# ppp0へ向けて出て行く以上のパケットは DROP
#
iptables -A FORWARD -p udp -i eth0 -o ppp0 --dport 135:139 -j DROP
iptables -A FORWARD -p tcp -i eth0 -o ppp0 --dport 135:139 -j DROP
iptables -A FORWARD -p udp -i eth0 -o ppp0 --dport 445 -j DROP
iptables -A FORWARD -p tcp -i eth0 -o ppp0 --dport 445 -j DROP
iptables -A FORWARD -p udp -i eth1 -o ppp0 --dport 135:139 -j DROP
iptables -A FORWARD -p tcp -i eth1 -o ppp0 --dport 135:139 -j DROP
iptables -A FORWARD -p udp -i eth1 -o ppp0 --dport 445 -j DROP
iptables -A FORWARD -p tcp -i eth1 -o ppp0 --dport 445 -j DROP
# 送信先が LOCAL ADDRESSの物が ppp0へ向けて出て行ったら DROP
#
iptables -A FORWARD -o ppp0 -d $LOCAL_NET -j DROP
iptables -A FORWARD -o ppp0 -d $LOCAL_NET2 -j DROP
# LANから外に出て行くパケットの送信元IPを書き換え
#
iptables -t nat -A POSTROUTING -o ppp0 -s $LOCAL_NET -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s $LOCAL_NET2 -j MASQUERADE
# eth0,1間の転送も、送信元 IPを書き換え
iptables -t nat -A POSTROUTING -o eth0 -s $LOCAL_NET2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s $LOCAL_NET -j MASQUERADE
# ループバック宛、プライベートアドレス宛のパケットが漏れるのを防ぐ
#
iptables -A OUTPUT -o ppp0 -d 127.0.0.0/8 -j DROP
iptables -A OUTPUT -o ppp0 -d 10.0.0.0/8 -j DROP
iptables -A OUTPUT -o ppp0 -d 176.16.0.0/12 -j DROP
iptables -A OUTPUT -o ppp0 -d 192.168.0.0/16 -j DROP
# NetBIOS over TCP/IP の流出パケットを遮断
#
iptables -A OUTPUT -o ppp0 -p tcp --dport 135:139 -j DROP
iptables -A OUTPUT -o ppp0 -p udp --dport 135:139 -j DROP
iptables -A OUTPUT -o ppp0 -p tcp --dport 445 -j DROP
iptables -A OUTPUT -o ppp0 -p udp --dport 445 -j DROP
|