Linux下常用的防火墙有TCP Wrappers和Netfilter。
1.TCP Wrappers
TCP Wrappers是通过/etc/hosts.allow和/etc/hosts.deny这两个配置文件来实现一个类似防火墙的机制。控制的规则如下:
(a)先以/etc/hosts.allow进行检查,若规则符合就予以放行。
(b)再以/etc/hosts.deny进行检查,若规则符合就予以抵挡。
(c)若都不在这两个文件内,即规则都不符合,那么就会放行。
2.Netfilter
(1)Netfilter的介绍
Netfilter利用一些数据包过滤的规则设置,来定义出什么数据可以接收,什么数据需要过滤,来达到保护主机的目的。Netfiler提供了一个iptables这个工具软件来设置Netfilter的防火墙数据包过滤的规则。如下为Netfilter、iptables以及内核模块的关联关系:
iptables在配置防火墙规则时,有表格(table)、链(chain)和规则(rule)三个维度。其中table包含多个chain,每个chain包括默认策略和规则,而且用户可以自定义表格,如下所示:
数据包在iptable的复杂的规则图中的流向如下图所示:
(2)Netfilter的注意点
- iptables的各种规则的校验是有严格的先后顺序,如果数据包匹配到一条规则那么直接执行动作(丢弃?接收?...),否则继续进行下一条规则。当所有的规则都不匹配时,那么将执行默认的策略。
(3)常用iptables操作
iptables的命令结构如下:
其中重要的选项有:
#规则的查看
-t table —— 指定table的名称,如filter,nat,mangle等等。如果使用iptables不指定该参数的话,那么默认为filter
-L —— 列出指定table的所有chain以及chain下面的规则和默认策略
-n —— 显示ip和port,不反查主机名或服务
-v —— 列出更多信息
#规则的清理
-F —— 清除所有的规则
-X —— 清除所有用户“自定义”的chain
-Z —— 将所有的chain的计数与流量统计都归为零
#定义默认的策略
-P chain —— 为指定的table的指定chain定义默认策略
#其他
-A chain —— 为指定chain新增一条rule,作为该chain的最后一条规则
-I chain —— 为指定chain新增一条rule,作为该chain的第一条规则
-i 网络接口 —— 数据包进入的网络接口
-o 网络接口 —— 数据包留出的网路接口
-s str —— 数据包来源src主机
-d str —— 数据包的目的dest主机
-j action —— 动作类型,包括接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)等
一些简单的操作举例:
(1)列出filter表格的所有chain和rule
iptables -L -n #亦可以使用iptables-save [-t table]来查看
(2)列出nat表格的所有chain和rule
iptables -t nat -L -n
(3)清除所有的已制定的规则(不包括自定义)
iptables -F #默认为filter table
(4)清除所有用户“自定义”的规则
iptables -X #默认为filter table
(5)将所有的chain的计数和流量统计都归为零
iptables -Z #默认为filter table
(6)定义默认的策略
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
(7)只要是来自内网的192.168.100.0/24的数据包都接收
iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT
(8)将来自192.168.100.230的数据包丢弃
iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP
iptables-save #dump iptables设置的规则到标准输出stdout,不是保存哦 。可以使用该命令查看所有已生效的防火墙的策略,很重要
iptables-save > /root/iptables.conf #dump iptables设置的规则到文件 ,相当于iptables规则的备份
iptables-restore #从标准输入stdin读取iptables规则并生效
iptables-restore < /root/iptables.conf #从文件中读取iptables规则并生效,相当于iptables规则的还原
/etc/init.d/iptables save 或 service iptables save #使用iptables-save工具dump内存中的防火墙规则,然后覆盖掉/etc/sysconfig/iptables
/etc/init.d/iptables start 或 service iptables start #使用iptables-restore工具加载文件/etc/sysconfig/iptables中的防火墙规则
/etc/init.d/iptables reload 或 service iptables reload #使用iptables-restore工具重新加载文件/etc/sysconfig/iptables中的防火墙规则
/etc/init.d/iptables stop 或 service iptables stop #关闭防火墙
(5)iptables规则重启失效问题
我们使用iptables命令设置的防火墙规则,只存储在内容中,当主机重启后这些规则都将丢失,因此需要将防火墙的规则保存到文件中非常重要。/etc/sysconfig/iptables是iptables的配置文件。iptables-save生成的格式和/etc/sysconfig/iptables中的格式是一致的。一般来说,我们可以有如下两种方式来操作:
A)执行service iptables save,将内存中生效的防火墙规则,保存到/etc/sysconfig/iptables,然后执行service iptables start会重新加载/etc/sysconfig/iptables
B)执行iptables-save > /etc/sysconfig/iptables,然后执行iptables-restore < /etc/sysconfig/iptables
(6)使用iptables配置NAT服务
NAT有两种形式,一种是SNAT,一种是DNAT。所谓SNAT指的是修改数据包的SRC IP地址,而DNAT指的是修改数据包的DEST IP地址。
NAT的配置方法如下:
A)NAT服务器设置
net.ipv4.ip_forward=1
B)NAT服务器设置
iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 #如果需要配置SNAT
iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80 #如果需要配置DNAT
C)客户端机器设置缺省网关为NAT服务器
修改客户端机器的缺省路由。