開機自動叫用 rc.firewall
在 /etc/rc.d/rc.local 檔末,加入以下指令:
if [ -f /etc/rc.d/rc.firewall ]; then
. /etc/rc.d/rc.firewall
fi
|
該檔屬性: chmod ug+rwx rc.firewall
(即 chmod 774 rc.firewall)
該檔 Owner 應為: root.root
練習時,可下 sh rc.firewall 或 ./rc.firewall
以下指令檔,僅供參考,它們並不完整,未必能符合您的需要,您必須要再修改才能使用。
一般而言,每個指令中的 IP,會使用變數代換的方式來處理。比如:
FW_IP="163.26.197.8" (用 FW_IP 來代表 163.26.197.8)
使用時,再用 $FW_IP 來代換成 163.26.197.8,這樣,維護上會比較方便。
其它大部份常用的指令值,也都會用上述方式來定義及取代。
以下設定,便可分割出一個乾淨的網段,對外以 $FW_IP 為代表號。
修改一下 IP,直接套用,很快便可架設一個簡易的防火牆。
#! /bin/sh FW_IP="163.26.197.8" ipchains -F ipchains -P input ACCEPT ipchains -P output ACCEPT ipchains -P forward ACCEPT echo 1 > /proc/sys/net/ipv4/ip_forward ipchains -A forward -s 192.168.1.0/24 -j MASQ ipchains -A input -p tcp -d $FW_IP 80 -j REDIRECT 8080 redir --lport=8080 --caddr=192.168.1.2 --cport=80 & |
FW_IP 是指對外網卡的真實 IP,您要套用時,記得要修改成您的防火牆的第一片網卡的IP
修改一下 IP,直接套用,很快便可架設一個簡易的防火牆。
#! /bin/sh ###-----------------------------------------------------### # 設定內部網段 IP 及介面 ###-----------------------------------------------------### echo "Set internal ......" echo LAN_IP="172.16.255.254" LAN_IP_RANGE="172.16.0.0/16" LAN_BCAST_ADRESS="172.16.255.255" LAN_IFACE="eth1" # loopback interface LO_IFACE="lo" LO_IP="127.0.0.1" ###-----------------------------------------------------### # 外部網段 IP 及介面 ###-----------------------------------------------------### echo "Set external ......" echo FW_IP="163.26.197.8" FW_IP_RANGE="163.26.197.0/24" FW_IFACE="eth0" ###-----------------------------------------------------### # 設定 iptables 的路徑 ###-----------------------------------------------------### echo "Set path of iptables" echo IPTABLES="/sbin/iptables" ###-----------------------------------------------------### # 打開 forward 功能 ###-----------------------------------------------------### echo "Enable ip_forward ......" echo echo "1" > /proc/sys/net/ipv4/ip_forward ###-----------------------------------------------------### # 清除先前的設定 ###-----------------------------------------------------### echo "Flush fiter table ......" echo # Flush filter $IPTABLES -F $IPTABLES -X echo "Flush mangle table ......" echo # Flush mangle $IPTABLES -F -t mangle $IPTABLES -t mangle -X echo "Flush nat table ......" echo # Flush nat $IPTABLES -F -t nat $IPTABLES -t nat -X ###-----------------------------------------------------### # 設定 filter table 的預設政策 ###-----------------------------------------------------### echo "Set default policies for filter table" echo $IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD ACCEPT ###-----------------------------------------------------### # 啟動內部對外轉址 ###-----------------------------------------------------### echo "Enable simple IP Forwarding and Network Address Translation" echo $IPTABLES -t nat -A POSTROUTING -o $FW_IFACE -j SNAT --to-source $FW_IP ###-----------------------------------------------------### # 啟動外部對內部轉址 ###-----------------------------------------------------### # 凡對 $FW_IP:8080 連線者, 則轉址至 172.16.255.2:80 $IPTABLES -t nat -A PREROUTING -p tcp -d $FW_IP --dport 8080 -j DNAT --to 172.16.255.2:80 |
$FW_IP 是防火牆主機上的第一片網卡的 IP,各位應把它換成您的防火牆的第一片網卡的IP
#! /bin/sh FW_IP="163.26.197.8" ipchains -F #ipchains -P input ACCEPT #ipchains -P output ACCEPT #ipchains -P forward ACCEPT ipchains -P input DENY ipchains -P output DENY ipchains -P forward DENY # open telnet ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 23 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 23 -d $FW_IP 1024:65535 -j ACCEPT # open web ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 80 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 80 -d $FW_IP 1024:65535 -j ACCEPT # open mail ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 25 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 25 -d $FW_IP 1024:65535 -j ACCEPT # open pop3 ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 110 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 110 -d $FW_IP 1024:65535 -j ACCEPT # open dns : 1st => udp 查詢 ipchains -A output -i eth0 -p udp -s $FW_IP 1024:65535 -d any/0 53 -j ACCEPT ipchains -A input -i eth0 -p udp -s any/0 53 -d $FW_IP 1024:65535 -j ACCEPT # open dns : 2st => tcp 查詢 ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 53 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 53 -d $FW_IP 1024:65535 -j ACCEPT # open dns peer-to-peer : 1st => udp ipchains -A output -i eth0 -p udp -s $FW_IP 53 -d any/0 53 -j ACCEPT ipchains -A input -i eth0 -p udp -s any/0 53 -d $FW_IP 53 -j ACCEPT # open dns peer-to-peer: 2st => tcp 查詢 ipchains -A output -i eth0 -p tcp -s $FW_IP 53 -d any/0 53 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 53 -d $FW_IP 53 -j ACCEPT # open ftp channel 21 : commands channel ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 21 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 21 -d $FW_IP 1024:65535 -j ACCEPT # open ftp channel 20 : data channel ipchains -A input -i eth0 -p tcp -s any/0 20 -d $FW_IP 1024:65535 -j ACCEPT ipchains -A output -i eth0 -p tcp ! -y -s $FW_IP 1024:65535 -d any/0 20 -j ACCEPT # open Passive FTP Mode : data channel ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 1024:65535 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 1024:65535 -d $FW_IP 1024:65535 -j ACCEPT # open ssh ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 22 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 22 -d $FW_IP 1024:65535 -j ACCEPT ipchains -A output -i eth0 -p tcp -s $FW_IP 1020:1023 -d any/0 22 -j ACCEPT ipchains -A input -i eth0 -p tcp ! -y -s any/0 22 -d $FW_IP 1020:1023 -j ACCEPT # 開放防火牆的 port 22 給家中或學校的某一個固定 IP 連線 # 以下 211.22.33.44 即代表你家中的固定 IP, $FW_IP 是防火牆的eth0的 IP ipchains -A input -i eth0 -p tcp -s 211.22.33.44 1024:65535 -d $FW_IP 22 -j ACCEPT ipchains -A output -i eth0 -p tcp ! -y -s $FW_IP 22 -d 211.22.33.44 1024:65535 -j ACCEPT # 假設這台主機上有 mail server,以下可以開放別人送信包給你這台主機的 SMTP ipchains -A input -i eth0 -p tcp -s any/0 1024:65535 -d $FW_IP 25 -j ACCEPT ipchains -A output -i eth0 -p tcp ! -y -s $FW_IP 25 -d any/0 1024:65535 -j ACCEPT # 假設有一個垃圾郵件主機經常送 SPAM 信過來, 比如: 211.33.44.55,以下可以予以拒絕 ipchains -A input -i eth0 -p tcp -s 211.33.44.55 -d $FW_IP 25 -j DENY # 允許教網中心 163.26.200.4 可以 ping 我 ipchains -A input -i eth0 -p icmp -s 163.26.200.4 8 -d $FW_IP -j ACCEPT ipchains -A output -i eth0 -p icmp -s $FW_IP 0 -d 163.26.200.4 -j ACCEPT # 我可以 ping 任何主機 ipchains -A output -i eth0 -p icmp -s $FW_IP 8 -d any/0 -j ACCEPT ipchains -A input -i eth0 -p icmp -s any/0 0 -d $FW_IP -j ACCEPT # 如果預設的 policy 是 ACCEPT,以下可以拒絕所有站台 ping 你的主機 # 如果預設的 policy 是 DENY,則不必設,就可全部拒絕別人 ping 你的主機 ipchains -A input -i eth0 -p icmp -s any/0 8 -d $FW_IP -j DENY # 如果預設的 policy 是 ACCEPT, 以下可以拒絕任何主機 traceroute 你的主機 ipchains -A output -i eth0 -p icmp -s $FW_IP 3 -d any/0 -j DENY ipchains -A output -i eth0 -p icmp -s $FW_IP 11 -d any/0 -j DENY # 但我想 traceroute 別人 ipchains -A output -i eth0 -p udp -s $FW_IP 1024:65535 -d any/0 33434:33523 -j ACCEPT ipchains -A input -i eth0 -p icmp -s any/0 11 -d $FW_IP -j ACCEPT ipchains -A input -i eth0 -p icmp -s any/0 3 -d $FW_IP -j ACCEPT |
以下的 $FW_IP 代表防火牆的第一片網卡的真實 IP。
#! /bin/sh FW_IP="163.26.197.8" # enable forward echo "1" > /proc/sys/net/ipv4/ip_forward # clear all chains ###-----------------------------------------------------### # 清除先前的設定 ###-----------------------------------------------------### # 清除預設表 filter 中,所有規則鏈中的規則 iptables -F # 清除預設表 filter 中,使用者自訂鏈中的規則 iptables -X # 清除mangle表中,所有規則鏈中的規則 iptables -F -t mangle # 清除mangle表中,使用者自訂鏈中的規則 iptables -t mangle -X # 清除nat表中,所有規則鏈中的規則 iptables -F -t nat # 清除nat表中,使用者自訂鏈中的規則 iptables -t nat -X #iptables -P INPUT ACCEPT #iptables -P FORWARD ACCEPT #iptables -P OUTPUT ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A INPUT -i eth1 -j ACCEPT iptables -A OUTPUT -o eth1 -j ACCEPT iptables -A FORWARD -i eth1 -j ACCEPT iptables -A FORWARD -o eth1 -j ACCEPT # NAT iptables -t nat -A POSTROUTING -o eth0 -j SNAT -s 172.16.0.0/16 --to-source $FW_IP # 虛擬主機 iptables -t nat -A PREROUTING -i eth0 -p tcp -d $FW_IP --dport 80 -j DNAT --to-destination 172.16.254.2:80 # open ssh server iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 22 -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 22 -d any/0 --dport 1024:65535 -j ACCEPT # open telnet iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT # open web browser iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 80 -d $FW_IP --dport 1024:65535 -j ACCEPT # open mail iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65535 -j ACCEPT # open pop3 iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 110 -d $FW_IP --dport 1024:65535 -j ACCEPT # open ssh client iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1024:65535 -j ACCEPT # open dns 1st => udp iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT # open dns 2st => tcp iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT # open telnet server iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 23 -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 23 -d any/0 --dport 1024:65535 -j ACCEPT # open ftp channel 21 iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 21 -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 21 -d $FW_IP --dport 1024:65535 -j ACCEPT # open ftp data channel 20 iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 20 -d $FW_IP --dport 1024:65535 -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 1024:65535 -d any/0 --dport 20 -j ACCEPT # open Passive FTP mode iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 1024:65535 -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 1024:65535 -d $FW_IP --dport 1024:65535 -j ACCEPT # open ping iptables -A OUTPUT -o eth0 -p icmp -s $FW_IP --icmp-type 8 -d any/0 -j ACCEPT iptables -A INPUT -i eth0 -p icmp -s any/0 --icmp-type 0 -d $FW_IP -j ACCEPT |
#!/bin/sh # 本 scritp 參考 Oskar Andreasson 的 script 而來, 其版權如下所示。 # OLS3 謹誌。ols3@www.tnc.edu.tw #----------------------------------------------------------------------------- # rc.firewall - Initial SIMPLE IP Firewall script for Linux 2.4.x and iptables # # Copyright (C) 2001 Oskar Andreasson <blueflux@koffein.net> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program or from the site that you downloaded it # from; if not, write to the Free Software Foundation, Inc., 59 Temple # Place, Suite 330, Boston, MA 02111-1307 USA #----------------------------------------------------------------------------- ###-----------------------------------------------------### # 設定內部網段 IP 及介面 ###-----------------------------------------------------### echo "Set internal ......" echo LAN_IP="172.16.255.254" LAN_IP_RANGE="172.16.0.0/16" LAN_BCAST_ADRESS="172.16.255.255" LAN_IFACE="eth1" # loopback interface LO_IFACE="lo" LO_IP="127.0.0.1" ###-----------------------------------------------------### # 外部網段 IP 及介面 ###-----------------------------------------------------### echo "Set external ......" echo FW_IP="163.26.197.8" FW_IP_RANGE="163.26.197.0/24" FW_IFACE="eth0" ###-----------------------------------------------------### # 設定 iptables 的路徑 ###-----------------------------------------------------### echo "Set path of iptables" echo IPTABLES="/sbin/iptables" ###-----------------------------------------------------### # 打開 forward 功能 ###-----------------------------------------------------### echo "Enable ip_forward ......" echo echo "1" > /proc/sys/net/ipv4/ip_forward ###-----------------------------------------------------### # 清除先前的設定 ###-----------------------------------------------------### echo "Flush fiter table ......" echo # Flush filter $IPTABLES -F $IPTABLES -X echo "Flush mangle table ......" echo # Flush mangle $IPTABLES -F -t mangle $IPTABLES -t mangle -X echo "Flush nat table ......" echo # Flush nat $IPTABLES -F -t nat $IPTABLES -t nat -X ###-----------------------------------------------------### # 設定 filter table 的預設政策 ###-----------------------------------------------------### echo "Set default policies for filter table" echo $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP ###-----------------------------------------------------### # 自訂一個 chain , 名為 tcp_packets ###-----------------------------------------------------### echo "Name a new chain : tcp_packets ......" echo $IPTABLES -N tcp_packets # 在此 tcp_packets chain 中, 附加一個 chain rule , 規則如下: # 1. 在非主動連線時, 卻有一 new connection start , 此時予以記錄下來, 且加上 New not syn:的前置字串 #$IPTABLES -A tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \ #--log-prefix "New not syn:" # 2. 這種封包, 予以丟棄. #$IPTABLES -A tcp_packets -p tcp ! --syn -m state --state NEW -j DROP # disable been scaned $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix "been scanned:" $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL ALL -j LOG --log-prefix "been scanned:" $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-prefix "been scanned:" $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL NONE -j LOG --log-prefix "been scanned:" $IPTABLES -A tcp_packets -p TCP --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "been scanned:" $IPTABLES -A tcp_packets -p TCP --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "been scanned:" $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL FIN,URG,PSH -j DROP $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL ALL -j DROP $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL NONE -j DROP $IPTABLES -A tcp_packets -p TCP --tcp-flags SYN,RST SYN,RST -j DROP $IPTABLES -A tcp_packets -p TCP --tcp-flags SYN,FIN SYN,FIN -j DROP ###-----------------------------------------------------### # 啟動內部對外轉址 ###-----------------------------------------------------### echo "Enable simple IP Forwarding and Network Address Translation" echo $IPTABLES -t nat -A POSTROUTING -o $FW_IFACE -j SNAT --to-source $FW_IP ###-----------------------------------------------------### # 啟動外部對內部轉址 ###-----------------------------------------------------### # 凡對 $FW_IP:8080 連線者, 則轉址至 172.16.255.2:80 $IPTABLES -t nat -A PREROUTING -p tcp -d $FW_IP --dport 8080 -j DNAT --to 172.16.255.2:80 ###-----------------------------------------------------### # FOWARD ###-----------------------------------------------------### echo "Process forward ......" echo # FORWARD 由先由 tcp_packets 中來處理不好的 tcp packets $IPTABLES -A FORWARD -p tcp -j tcp_packets # 接受我們想 forward 的封包 $IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT ###-----------------------------------------------------### # 自訂 ICPM 及 UDP chain 來處理對應的封包 ###-----------------------------------------------------### echo "New name for icpm and udp chain" echo $IPTABLES -N icmp_packets $IPTABLES -N udpincoming_packets ###-----------------------------------------------------### # 自訂 allowed 這個 chain 來處理 允許進入的 tcp 連線 # 凡 tcp_packets 中的 chain rule 目的是某些欲開放的 port 者, # 則跳至此一 allowed chain 來處理. ###-----------------------------------------------------### echo "New name for allowed chain" echo $IPTABLES -N allowed $IPTABLES -A allowed -p TCP --syn -j ACCEPT $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A allowed -p TCP -j DROP ###-----------------------------------------------------### # ICMP chain rule ###-----------------------------------------------------### # 允許 ping 的要求(icmp-type =8), 至於回應(icmp-type=0)則不必規定 # 回應屬出 OUTPUT, 由 OUTPUT chain 來處理即可. #$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets -p ICMP -s $FW_IP_RANGE -d $FW_IP --icmp-type 8 -j ACCEPT # 允許 time-exceeded 的要求(maximus hop count(TTL)is exceeded) #$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT $IPTABLES -A icmp_packets -p ICMP -s $FW_IP_RANGE --icmp-type 11 -j ACCEPT #$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT $IPTABLES -A icmp_packets -p ICMP -s $FW_IP_RANGE --icmp-type 3 -j ACCEPT ###-----------------------------------------------------### # TCP rules ###-----------------------------------------------------### $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 20 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 1024:65535 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 25 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 110 -j allowed # for CVS server $IPTABLES -A tcp_packets -p TCP -s $FW_IP_RANGE --dport 2401 -j allowed # # UDP ports # # nondocumented commenting out of these rules #$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT #$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 123 -j ACCEPT #$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 2074 -j ACCEPT #$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 4000 -j ACCEPT # 允許 traceroute 至 FW_IP $IPTABLES -A udpincoming_packets -p UDP -s $FW_IP_RANGE -j ACCEPT #$IPTABLES -A udpincoming_packets -p UDP -j ACCEPT ########################## # PREROUTING chain. # # Do some checks for obviously spoofed IP's # #$IPTABLES -t nat -A PREROUTING -i $FW_IFACE -s 192.168.0.0/16 -j DROP $IPTABLES -t nat -A PREROUTING -i $FW_IFACE -s 10.0.0.0/8 -j DROP #$IPTABLES -t nat -A PREROUTING -i $FW_IFACE -s 172.16.0.0/12 -j DROP ########################## # INPUT chain # Bad TCP packets we don't want. $IPTABLES -A FORWARD -p tcp -j tcp_packets # 進來的 ICMP 由 icmp_packets 這個 chain 來處理 $IPTABLES -A INPUT -p ICMP -i $FW_IFACE -j icmp_packets # 進來的 TCP 由 tcp_packets 這個 chain 來處理 $IPTABLES -A INPUT -p TCP -i $FW_IFACE -j tcp_packets # 進來的 UDP 由 udpincomming_packets 這個 chain 來處理 $IPTABLES -A INPUT -p UDP -i $FW_IFACE -j udpincoming_packets # # Rules for special networks not part of the Internet # $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BCAST_ADRESS -j ACCEPT $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT $IPTABLES -A INPUT -p ALL -d $FW_IP -m state --state ESTABLISHED,RELATED \ -j ACCEPT ############################### # OUTPUT chain $IPTABLES -A FORWARD -p tcp -j tcp_packets # 對外連線, 先全部打開 $IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT $IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT $IPTABLES -A OUTPUT -p ALL -s $FW_IP -j ACCEPT |