该系统主要作用就是对内部服务器作静态nat映射和端口访问控制。
在防火墙中,系统启动时已经自动启动了以上防火墙脚本,启动位置为:/etc/rc.d/rc.local文件中,
sh /etc/rc.d/nat_firewall.sh #在系统启动时自动启动该脚本
如果需要手动启用防火墙和静态nat映射功能,操作以下步骤即可。
cd /etc/rc.d/
./portnat.sh
如果用户不需要对内部服务器作任何端口控制,只需要作静态nat映射,只要执行以下文件,即可恢复不设防火墙状态。
cd /etc/rc.d/
./no_firewall.sh
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#设置内部服务器对外的tcp端口,如果需要修改对内部访问的端口号,直接在这里修改即可,
#添加规则就是之间端口号之间有一个空格就可以了。下面upd端口添加规则也一样
##tcp allow ports
TPORTS="80 22" #在远程只允许用户访问防火墙的22、80端口
#设置内部服务器对外的udp端口
##udp allow ports
UPORTS="53 123"
#设置防火墙对外网卡及ip地址
##config out_eth interface
OUT_ETH="eth1"
OUT_ETH_IP="202.138.164.110"
#设置防火墙外网卡的tcp端口
##set out_eth_ip(firewall out ip) ports
OUT_ETH_IP_PORTS="22" #在远程只允许用户访问防火墙的22端口
#设置防火墙对内网卡及ip地址
##config in_eth interface
IN_ETH="eth0"
IN_ETH_IP="10.10.11.110"
#设置防火墙内部服务器的ip地址段
##internal ip range
SERVER_IP="10.10.11.0/24"
1、系统对ip传发包的配置文件初始化操作,输入值为0表示不转发,1为开启转发功能,此处需要初始化为0
#Disable forwarding
echo 0 > /proc/sys/net/ipv4/ip_forward
#即初始化iptables规则列表。
#reset default policies
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#删除iptables所有规则
##del all iptables rules
iptables -F INPUT ##删除iptables中INPUT规则
iptables -F FORWARD ##删除iptables中FORWARD规则
iptables -F OUTPUT ##删除iptables中OUTPUT规则
#清空所有规则链
##clean all non-default chains
iptables -X
iptables -t nat -X
#定义iptables安全的默认规则
##iptables default rules
iptables -P INPUT DROP ##拒绝所有外部发往本机的数据包,即禁止所有对内部的数据包通过
iptables -P FORWARD DROP ##不允许所有数据包转发
iptables -P OUTPUT ACCEPT ##允许所有内部发往外部的包通过
#允许icmp包通过,即允许ping
##allow ping packets
iptables -A INPUT -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT
iptables -A INPUT -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT
iptables -A INPUT -p ICMP -s 0/0 --icmp-type 5 -j ACCEPT
iptables -A INPUT -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
iptables -A INPUT -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
iptables -A INPUT -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
#当建立联机状态时,允许数据互相转发。其中,ESTABLISHED表示该封包属于某个已经建立的联机,
#RELATED 表示该封包是属于某个已经建立的联机,所建立的新联机。
##enable forwarding
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT ##允许要求联机封包或响应封包之间转发包
#数据包状态为联机和响应状态时允许进入
##STATE RELATED for router
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ##允许要求联机封包或响应封包进入
#允许源地址为服务器ip段发往防火墙内网卡的包进入
##accept internal packets on the internal i/f
iptables -A INPUT -i $IN_ETH -s $SERVER_IP -p tcp -j ACCEPT
#控制防火墙本身对外ip地址的端口
##accept firewall out eth ip ports
for OEP in $OUT_ETH_IP_PORTS
do
iptables -A INPUT -d $OUT_ETH_IP -p tcp --destination-port $OEP -j ACCEPT
done
#控制内部服务器对外的端口
##open ports on router for server/services
#TCP PORTS(tcp类型的端口)
for ATP in $TPORTS
do
#允许源地址为非内部服务器段的所有ip,目的地址为内部服务器ip的tcp端口的连接包进入
iptables -A INPUT ! -s $SERVER_IP -d $SERVER_IP -p tcp --destination-port $ATP -j ACCEPT
iptables -A FORWARD -p tcp --destination-port $ATP -j ACCEPT #被允许目的端口连接之间互相传送数据包
done
#UDP PORTS(udp类型的端口)
for AUP in $UPORTS
do
iptables -A INPUT -p udp --destination-port $AUP -j ACCEPT
iptables -A FORWARD -p udp --destination-port $AUP -j ACCEPT
done
#在对内访问的连接中,只要是INVALID(即无效的连接)就丢弃该包
##bad_packets chain
##drop INVALID packets immediately
#iptables -A INPUT -p ALL -m state --state INVALID -j DROP
#限制过滤规则的比对频率为每秒钟平均流量100个封包,将瞬间流量设定为一次最多处理100个封包
(超过上限的封包将丢弃不予处理),防止有拒绝服务性的攻击,即洪水性的大量数据包攻击。
##limit SYN flood
#iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT##限制对内部封包的发送速度
#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT##限制建立联机的转发包的速度
#允许本机Loopback 接口,即127.0.0.1
##allow loopback
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT
#启动IP Forward 接口
##enable forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
#当本机做NAT时,在外网卡上面绑定多个静态映射的ip地址。如果要添加修改nat静态映射的ip地址,在这里按照规则添加即可
##config net-eth ip address
ifconfig eth0:1 202.138.164.101 netmask 255.255.255.128
ifconfig eth0:2 202.138.164.102 netmask 255.255.255.128
ifconfig eth0:3 202.138.164.103 netmask 255.255.255.128
ifconfig eth0:4 202.138.164.104 netmask 255.255.255.128
ifconfig eth0:5 202.138.164.105 netmask 255.255.255.128
ifconfig eth0:8 202.138.164.108 netmask 255.255.255.128
#设置做静态nat的映射规则。如果需要添加删除静态nat的条目,在这里修改添加即可。
##set static IP nat rule, POSTROUTING/PREROUTING
##(snat)iptables -t nat -A POSTROUTING -j SNAT --to 202.202.210.10
##(dnat)iptables -t nat -A PREROUTING -j DNAT --to 10.10.10.10
#
iptables -t nat -A POSTROUTING -s 10.10.11.101 -j SNAT --to 202.138.164.101##收到的源ip地址为10.10.10.101的数据包进行源NAT(SNAT)
iptables -t nat -A PREROUTING -d 202.138.164.101 -j DNAT --to 10.10.11.101##收到的目的ip为202.38.64.101的所有数据包进行目的NAT(DNAT)
iptables -t nat -A POSTROUTING -s 10.10.11.102 -j SNAT --to 202.138.164.102
iptables -t nat -A PREROUTING -d 202.138.164.102 -j DNAT --to 10.10.11.102
iptables -t nat -A POSTROUTING -s 10.10.11.103 -j SNAT --to 202.138.164.103
iptables -t nat -A PREROUTING -d 202.138.164.103 -j DNAT --to 10.10.11.103
iptables -t nat -A POSTROUTING -s 10.10.11.104 -j SNAT --to 202.138.164.104
iptables -t nat -A PREROUTING -d 202.138.164.104 -j DNAT --to 10.10.11.104
iptables -t nat -A POSTROUTING -s 10.10.11.105 -j SNAT --to 202.318.164.105
iptables -t nat -A PREROUTING -d 202.138.164.105 -j DNAT --to 10.10.11.105
iptables -t nat -A POSTROUTING -s 10.10.11.108 -j SNAT --to 202.138.164.108
iptables -t nat -A PREROUTING -d 202.138.164.108 -j DNAT --to 10.10.11.108
********************************************************************
* *
**********附:删除防火墙规则只做nat的文件说明(no_firewall.sh)**********
* *
********************************************************************
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#删除iptables所有规则
##del all iptables rules
iptables -F INPUT ##删除iptables中INPUT规则
iptables -F FORWARD ##删除iptables中FORWARD规则
iptables -F OUTPUT ##删除iptables中OUTPUT规则
#清空所有规则链
##clean all non-default chains
iptables -X
iptables -t nat -X
##对所有连接包都做默认接受处理,即不作任何控制
#reset the default policies in the nat table.
#
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
##打开ip forward转发接口
echo 1 > /proc/sys/net/ipv4/ip_forward