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以及内核模块的关联关系:

android 防火墙 默认 netpatch防火墙 安卓_自定义

       iptables在配置防火墙规则时,有表格(table)、链(chain)和规则(rule)三个维度。其中table包含多个chain,每个chain包括默认策略和规则,而且用户可以自定义表格,如下所示:

android 防火墙 默认 netpatch防火墙 安卓_NAT_02

数据包在iptable的复杂的规则图中的流向如下图所示:

android 防火墙 默认 netpatch防火墙 安卓_自定义_03

(2)Netfilter的注意点

  • iptables的各种规则的校验是有严格的先后顺序,如果数据包匹配到一条规则那么直接执行动作(丢弃?接收?...),否则继续进行下一条规则。当所有的规则都不匹配时,那么将执行默认的策略。

(3)常用iptables操作


iptables的命令结构如下:




android 防火墙 默认 netpatch防火墙 安卓_网络接口_04



其中重要的选项有:


#规则的查看
-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地址。


android 防火墙 默认 netpatch防火墙 安卓_android 防火墙 默认_05



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服务器


修改客户端机器的缺省路由。