开机自动叫用 rc.firewall
在 /etc/rc.d/rc.local 档末,加入以下指令:
if [ -f /etc/rc.d/rc.firewall ]; then . /etc/rc.d/rc.firewallfi
该档属性: 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,这样,维护上会比较方便。
其它大部份常用的指令值,也都会用上述方式来定义及取代。
仅供参考用的 ipchains 设定档: rc.firewall (1)
以下设定,便可分割出一个干净的网段,对外以 $FW_IP 为代表号。
修改一下 IP,直接套用,很快便可架设一个简易的防火墙。
#! /bin/shFW_IP="163.26.197.8"ipchains -Fipchains -P input ACCEPTipchains -P output ACCEPTipchains -P forward ACCEPTecho 1
/proc/sys/net/ipv4/ip_forwardipchains -A forward -s 192.168.1.0/24 -j MASQipchains -A input -p tcp -d $FW_IP 80 -j REDIRECT 8080redir --lport=8080 --caddr=192.168.1.2 --cport=80 &
仅供参考用的 iptables 设定档: rc.firewall (2)
FW_IP 是指对外网卡的真实 IP,您要套用时,记得要修改成您的防火墙的第一片网卡的IP
修改一下 IP,直接套用,很快便可架设一个简易的防火墙。
#! /bin/sh###-----------------------------------------------------#### 设定内部网段 IP 及介面###-----------------------------------------------------###echo "Set internal ......"echoLAN_IP="172.16.255.254"LAN_IP_RANGE="172.16.0.0/16"LAN_BCAST_ADRESS="172.16.255.255"LAN_IFACE="eth1"# loopback interfaceLO_IFACE="lo"LO_IP="127.0.0.1"###-----------------------------------------------------#### 外部网段 IP 及介面###-----------------------------------------------------###echo "Set external ......"echoFW_IP="163.26.197.8"FW_IP_RANGE="163.26.197.0/24"FW_IFACE="eth0"###-----------------------------------------------------#### 设定 iptables 的路径###-----------------------------------------------------###echo "Set path of iptables"echoIPTABLES="/sbin/iptables"###-----------------------------------------------------#### 打开 forward 功能###-----------------------------------------------------###echo "Enable ip_forward ......"echoecho "1"
/proc/sys/net/ipv4/ip_forward###-----------------------------------------------------#### 清除先前的设定###-----------------------------------------------------###echo "Flush fiter table ......"echo# Flush filter$IPTABLES -F$IPTABLES -Xecho "Flush mangle table ......"echo# Flush mangle$IPTABLES -F -t mangle$IPTABLES -t mangle -Xecho "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
仅供参考用的 ipchains 设定档: rc.firewall (3)
$FW_IP 是防火墙主机上的第一片网卡的 IP,各位应把它换成您的防火墙的第一片网卡的IP
#! /bin/shFW_IP="163.26.197.8"ipchains -F#ipchains -P input ACCEPT#ipchains -P output ACCEPT#ipchains -P forward ACCEPTipchains -P input DENYipchains -P output DENYipchains -P forward DENY# open telnetipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 23 -j ACCEPTipchains -A input -i eth0 -p tcp ! -y -s any/0 23 -d $FW_IP 1024:65535 -j ACCEPT# open webipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 80 -j ACCEPTipchains -A input -i eth0 -p tcp ! -y -s any/0 80 -d $FW_IP 1024:65535 -j ACCEPT# open mailipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 25 -j ACCEPTipchains -A input -i eth0 -p tcp ! -y -s any/0 25 -d $FW_IP 1024:65535 -j ACCEPT# open pop3ipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 110 -j ACCEPTipchains -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 ACCEPTipchains -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 ACCEPTipchains -A input -i eth0 -p tcp ! -y -s any/0 53 -d $FW_IP 1024:65535 -j ACCEPT# open dns peer-to-peer : 1st = udpipchains -A output -i eth0 -p udp -s $FW_IP 53 -d any/0 53 -j ACCEPTipchains -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 ACCEPTipchains -A input -i eth0 -p tcp ! -y -s any/0 53 -d $FW_IP 53 -j ACCEPT# open ftp channel 21 : commands channelipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 21 -j ACCEPTipchains -A input -i eth0 -p tcp ! -y -s any/0 21 -d $FW_IP 1024:65535 -j ACCEPT# open ftp channel 20 : data channelipchains -A input -i eth0 -p tcp -s any/0 20 -d $FW_IP 1024:65535 -j ACCEPTipchains -A output -i eth0 -p tcp ! -y -s $FW_IP 1024:65535 -d any/0 20 -j ACCEPT# open Passive FTP Mode : data channelipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 1024:65535 -j ACCEPTipchains -A input -i eth0 -p tcp ! -y -s any/0 1024:65535 -d $FW_IP 1024:65535 -j ACCEPT# open sshipchains -A output -i eth0 -p tcp -s $FW_IP 1024:65535 -d any/0 22 -j ACCEPTipchains -A input -i eth0 -p tcp ! -y -s any/0 22 -d $FW_IP 1024:65535 -j ACCEPTipchains -A output -i eth0 -p tcp -s $FW_IP 1020:1023 -d any/0 22 -j ACCEPTipchains -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的 IPipchains -A input -i eth0 -p tcp -s 211.22.33.44 1024:65535 -d $FW_IP 22 -j ACCEPTipchains -A output -i eth0 -p tcp ! -y -s $FW_IP 22 -d 211.22.33.44 1024:65535 -j ACCEPT# 假设这台主机上有 mail server,以下可以开放别人送信包给你这台主机的 SMTPipchains -A input -i eth0 -p tcp -s any/0 1024:65535 -d $FW_IP 25 -j ACCEPTipchains -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 ACCEPTipchains -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 ACCEPTipchains -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 DENYipchains -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 ACCEPTipchains -A input -i eth0 -p icmp -s any/0 11 -d $FW_IP -j ACCEPTipchains -A input -i eth0 -p icmp -s any/0 3 -d $FW_IP -j ACCEPT
仅供参考用的 iptables 设定档: rc.firewall (4)
以下的 $FW_IP 代表防火墙的第一片网卡的真实 IP。
#! /bin/shFW_IP="163.26.1