Filter(针对过滤系统):INPUT、FORWARD、OUTPUT
假如有这样一个局域网,内部IP地址范围192.168.1.1-254,网关地址为192.168.1.1,绑定在eth0接口上,同时,网关具有外部Internet地址为10.25.0.7,绑定在eth1接口上,防火墙就位于网关上,通过它的设置,对流经防火墙的网络包进行过滤处理。同时,在局域网内部有一台WWW服务器,他的内部地址为192.168.1.2,他被设置为可以接受外部的网络用户访问。
首先清空所有的规则链,并设置规则链的默认策略为DROP,即丢弃所有的网络数据包。
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
新增用户者自定义规则链bad_tcp_packets、allowed和icmp_packets。
iptables -N bad_tcp_packets
iptables -N allowed
iptables -N icmp_packets
下面定义bad_tcp_packets规则链的规则:将要求重导向的网络连接记录起来,然后将报文丢弃(防止本地机器被其他主机作为入侵跳板,侵入别的主机):
iptables -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j LOG --log-level INFO --log-prefix "New not syn:"
iptables -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j DROP
下面定义allowed规则链的规则:允许要求连接的网络数据包或相应包进入,将其与网络数据包丢弃:
iptables -A allowed -p TCP --syn -j ACCEPT
iptables -A allwoed -p TCP -m state --state ESTABLLSHED,RELATED -J ACCEPT
IPTABLES -A allowed -p TCP -j DROP
下面定义icmp_packets规则链的规则:允许ping网络数据包进入,将其余的网络数据包丢弃:
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
INPUT链,过滤要到达防火墙的网络数据包。
进入防火墙主机的TCP网络数据包必须先进行bad_tcp_packets过滤:
iptables -A INPUT -p TCP -j bad_tcp_packets
从WAN进入防火墙主机的ICMP网络数据包,必须先进行icmp_packets过滤,这是为了避免黑客传送不完整的IP网络数据包,系统会相应ICMP网络数据包,以通知对方,导致主机位置被侦测出来:
iptables -A INPUT -p ICMP -i eth1 -j icmp_packets
从LAN进入防火墙主机的全部单播和广播的网络数据包,均会放行:
iptables -A INPUT -p ALL -i eth0 -d 192.168.1.1 -j ACCEPT
iptables -A INPUT -p ALL -i eth0 -d 192.168.1.255 -j ACCEPT
从LAN进入防火墙主机的DHCP网络数据包,予以放行,只有当防火墙担任DHCP时才使用:
iptables -A INPUT -p UDP -i eth0 --dport 67 --sport 68 -j ACCEPT
从WAN进入防火墙主机的所有网络数据包,检查是否为响应网络数据包,若是则予以放行:
iptables -A INPUT -p ALL -d 10.25.0.7 -m state --state ESTABLISHED,RELATED -j ACCEPT
限制过滤规则的检测频率为每分钟平均流量三个网络数据包(超过)上限的网络数据包将暂停检测,并将瞬间流量设定为一次最多处理三个网络数据包(超过上限的网络数据包将丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:
iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level INFO --log-prefix "IPT INPUT packet died:"
FORWAD链,过滤要通过防火墙的网络数据包
通过防火墙的TCP网络数据包必须先进行bad_tcp_pcakets过滤:
iptables -A FORWAD -P TCP -J bad_tcp_packets
从LAN要到WAN的网络数据包均放行:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
从WAN到LAN的网络数据包仅放行应答网络数据包:
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
允许来自WAN的PING网络数据包,递送到局域网内的WWW服务器:
iptables -A FORWARD -p ICMP -i eth1 -o eth0 -d 192.168.1.2 -j icmp_packets
允许来自WAN的HTTP,HTTPS网络数据包,递送到局域网的WEB服务器:
iptables -A FORWARD -p TCP -i eth1 -o eth0 -d 192.168.1.2 -m multiport --dport 80,443 -j allowed
限制过滤规则的检测频率为每分钟平均流量3各网络数据包(超过上限的网络数据包将暂停检测),并将瞬间流量设定为一次最多处理3个数据包(超过上限的网络数据包将被丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:
iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died:"
OUTPUT链,过滤从防火墙送出的网络数据包。
从防火墙送出的TCP网络数据包必须先进行bad_tcp_packets过滤:
iptables -A OUTPUT -p TCP -j bad_tcp_packets
对于过滤通过的TCP包和其他类型的包,均会放行:
iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 10.25.0.7 -j ACCEPT
限制过滤规则的检测频率为每分钟平均流量3各网络数据包(超过上限的网络数据包将暂停检测),并将瞬间流量设定为一次最多处理3个数据包(超过上限的网络数据包将被丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:
iptables -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died:"
4.NAT配置
1) 目的NAT(DNAT)
DNAT在外部数据包进入防火墙后且路由之前进行,他把该数据包的目的地址改为内部局域网的地址,然后路由该数据包进入到局域网内部主机。
举例:
iptables -t nat -A PREROUTING -t tcp -d 10.25.0.7 --dport 80 -i eth1 -j DNAT --to 192.168.1.2:80
说明:可以路由到达防火墙的访问80端口(即WWW服务器)的数据包的目的地址改为192.168.1.2。
2) 源NAT(SNAT)
SNAT主要用来更改从防火墙发出的数据包的源地址,使得来自局域网的私有地址通过防火墙后,更改为防火墙具有的外部地址,以便数据接收方接收数据后,能够找到正确的回复地址。
举例:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to10.25.0.7
说明:更改所有来自192.168.1.0/24的数据包的源IP地址为10.25.0.7
注意:系统在经过路由及过滤等处理后,直到数据包要送出时,才进行SNAT,有一种SANT的特殊情况是IP伪装,通常建议在用拨号上网时使用,也就是在合法IP地址不固定的情况下使用。
举例:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
说明:这样可以保证局域网内部的用户能够所有通过拨号服务器连接到INTERNET