netfilter的四个表是filter、nat、mangle及raw表。
- filter:filter是Netfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用。
- nat:nat(Network Address Translation,NAT)也是防火墙上一个不可或缺的重要机制,比较通俗的方式来说,其功能就是IP分享器,只不过其所执行的功能,经一般市场上的IP分享器功能强大得多。
- mangle:mangle是一个很特殊的机制,我们可以通过mangle机制来修改经过防火墙内数据包内容。
- raw:负责加快数据包穿过防火墙机制的速度,由此提高防火墙的性能。
不同的表有属于独立的几个不同的链,而这个链的空间就是我们存放“规则”的地方。当然,不同的链其功能及用途也是不一样的。
使用filter机制来构建网关式防火墙
假设192.168.31.237是因特网上的一台主机,运行了smtp,pop3,http服务。
- 192.168.10.20只能访问外网192.168.31.10的smtp和pop3服务。
- 内网主机192.168.10.0/24网段上的其它主机可以访问因特网上的DNS、SMTP、POP3,http,及sshd服务。
- 因特网上的主机不得访问企业内的任何主机。
1 #/bin/bash
2 #===============< Set Variable >=====================================
3 IPT=/sbin/iptables
4 SRV=192.168.31.10
5 ACC_PC=192.168.10.20
6 #=======================< Set Default Policy >=======================
7 $IPT -t filter -P INPUT DROP
8 $IPT -t filter -P FORWARD DROP
9 #===============< Clear Original Rule >> =============================
10 $IPT -t filter -F
11 #==============< Set-INPUt RULE>>======================================
12 $IPT -A INPUT -p tcp -m state --state INVALID -j DROP
13 $IPT -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
14 $IPT -t filter -A INPUT -p tcp -s 192.168.31.0/24 --dport 22 -j ACCEPT
15 #==============< Set FORWARD RULE>>====================================
16 $IPT -A FORWARD -i ens33 -o ens37 -m state --state INVALID -j DROP
17 $IPT -A FORWARD -i ens33 -o ens37 -m state --state ESTABLISHED,RELATED -j ACCEPT
18 $IPT -A FORWARD -i ens37 -o ens33 -p tcp -s $ACC_PC -d $SRV --dport 25 -j ACCEPT
19 $IPT -A FORWARD -i ens37 -o ens33 -p tcp -s $ACC_PC -d $SRV --dport 110 -j ACCEPT
20 $IPT -A FORWARD -i ens37 -o ens33 -p all -s $ACC_PC -j DROP
21 $IPT -A FORWARD -i ens37 -o ens33 -p tcp --dport 80 -j ACCEPT
22 $IPT -A FORWARD -i ens37 -o ens33 -p udp --dport 53 -j ACCEPT
23 $IPT -A FORWARD -i ens37 -o ens33 -p udp --dport 110 -j ACCEPT
24 $IPT -A FORWARD -i ens37 -o ens33 -p tcp --dport 22 -j ACCEPT
~
第1行
设置Shell解释器的路径。
第2-5行
将未来可能会变动的信息或太长的命令简化成“变量”
第6-8行
设置INPUT 及FORWARD链的默认策略为DROP,其目的分别如下:
设置INPUT链的默认策略为DROP的目的:虽然本示例的主要目的是使用网关式防火墙来保护及限制企业内的主机,但请千万别忽略了防火墙自身的安全,否则防火墙若被入侵了,整个企业的安全防护就形同虚设了。因此,我们拒绝了所有对防火墙的连接操作,但别忘了,因为我们有可能在防火墙主机执行如软件更新等需要对外产生连接的操作,所以在此并没有将OUTPUT链的默认策略设置为DROP。
设置FORWARD链的默认策略为DROP的目的:因为本示例是以严格的方式来控制企业对外的连接,以及因特网对企业内的连接,因此,笔者将fFORWARD链的默认策略设置为DROP,如此一来,企业内外就等于“断线”的状态。稍后,我们再从FORWARD链中逐一启用允许的对外连接通道阳即可。
第10行
清除原有的防火墙规则
第11-14行,
因为INPUT链的默认策略已设置为DROP,因此将导致对外建立连接时应答数据包无法正常穿过防火墙的问题,我们必须在INPUT链中设置ESTABLISHED 及RELATED状态的数据包,才可以正常地返回。
第16行,
钭所有从因特网送到企业内部且状态是INVALID的数据包丢弃。
第17行,允许所有企业内部对外建立连接时所产生的应答数据包正常返回企业内部。
第18-20行
设置192.168.10.20主机只能访问因特网上192.168.31.10这台主机的SMTP及POP3服务。
第21行-24行
在192.168.10.0/24网段中的主机只能访问因特网上的SMTP、POP3、HTTP及SSHD服务。
netfilter的NAT机制
SNAT
iptables -t nat -A POSTROUTING -o ens33 -s 192.168.10.0/24 -j SNAT --to 192.168.31.100