#!/bin/bash echo 0 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter IPT=/sbin/iptables #---------------------------------- # 設定 filter 內的 chain 之 Policy #---------------------------------- $IPT -t filter -P INPUT DROP $IPT -t filter -P OUTPUT ACCEPT $IPT -t filter -P FORWARD DROP #------------------------------------------- # 設定 filter 這個 table 的 chain 之 Policy #------------------------------------------- $IPT -t nat -P PREROUTING ACCEPT $IPT -t nat -P OUTPUT ACCEPT $IPT -t nat -P POSTROUTING ACCEPT #---------------------------------------------- # 清除所有 chain 的 rule, 刪除自行定義的 chain #---------------------------------------------- $IPT -t nat -F $IPT -t nat -X #--------------------------------------------------------- # 定義處理 ICMP 封包的 chain: 'icmp_chain' # 其中 type 0 代表 echo-reply (ping 對方時的回應), # type 8 為 echo-request (其他機器 ping 我們). #--------------------------------------------------------- $IPT -t filter -F $IPT -t filter -X $IPT -t filter -N icmp_chain $IPT -t filter -A icmp_chain -p icmp --icmp-type 0 -j ACCEPT $IPT -t filter -A icmp_chain -p icmp --icmp-type 3 -j ACCEPT $IPT -t filter -A icmp_chain -p icmp --icmp-type 5 -j ACCEPT $IPT -t filter -A icmp_chain -p icmp --icmp-type 8 -j ACCEPT $IPT -t filter -A icmp_chain -p icmp --icmp-type 11 -j ACCEPT $IPT -t filter -A icmp_chain -p icmp -j DROP #================================================================== # PREROUTING (table:nat) #------------------------ # 擋掉從網卡進來而目的是 127.X.X.X 的封包 $IPT -t nat -A PREROUTING -i eth0 -d 127.0.0.0/8 -j DROP #======================================================================== # INPUT (table:filter) #------------------------------------------------------------------------ # A.接受來自 lo 介面(127.0.0.0/8) 的任何封包 #------------------------------------------------------------------------ $IPT -t filter -A INPUT -p all -s 127.0.0.0/8 -j ACCEPT #------------------------------------------------------------------------ # 從此處起, 開始處理來自 internet 的封包 #------------------------------------------------------------------------ # B.接受任何屬於已建立的連線之封包. #------------------------------------------------------------------------ $IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #------------------------------------------------------------------------ # C.來自 internet, 屬於 ICMP 的封包, 交由 icmp_chain 處理 $IPT -t filter -A INPUT -p icmp -j icmp_chain #------------------------------------------------------------------------ # D.若欲提供 Mail (smtp) 及 Web (www) 連線(TCP), # 以及 DNS 查詢(UDP) 等服務請把以下幾行行首之 '#' 刪除. #------------------------------------------------------------------------ #$IPT -t filter -A INPUT -p tcp --dport smtp -m state --state NEW --syn -j ACCEPT #$IPT -t filter -A INPUT -p tcp --dport www -m state --state NEW --syn -j ACCEPT #$IPT -t filter -A INPUT -p udp --dport domain -j ACCEPT #------------------------------------------------------------------------ # E. 由於 INPUT chain 的 Policy 設為 DROP, # 未被先前 rule 處理的封包至此將被 DROP 掉. #------------------------------------------------------------------------