1 分类

对单一主机,主要有两种:数据包过滤Netfilter和依据服务软件分析的TCP Wrapper.

对区域型防火墙来说,即安装防火墙的主机充当路由器的角色。防火墙类型主要有两种:数据包过滤Netfilter和代理服务器。

对Netfilter(数据包过滤机制),Linux提供了iptables这个软件来进行管理。下文的重点就是整理iptables常用的命令。

对TCP wraper(程序管理),是针对特定的软件,如ssh,telnet等特定软件进行IP限制,MAC地址限制等(不可用于apache)。

代理服务器往往也是NAT服务器,以实现透明代理。

2 iptables概念

iptables由多个table组成,每个table都有自己的策略和规则。默认的table为Filter,作用是过滤本地的数据包。除此之外,还有NAT table,功能是进行来源于目的地的IP或port转换,与Linux本机无关。还有其他的table,此处不提。

每个table都有自己的链(chain),盗图一张,具体如下:

对Filter来说,有三条链,分别为INPUT,OUTPUT,FORWARD。

一个数据包进入本机与从本机发出的过程,如下图所示,再次盗图一张:

3 iptables语法

1. 规则查看

1
2
3
4
5
iptables [-t target(缺省为fliter)] [-L (查看当前table的规则)] [-v (更多信息)]
查看filter表规则 : iptables -L
查看NAT表规则 : iptables -t nat -L

2. 规则查看2

1
2
3
iptables-save [-t target]
会列出完整的防火墙规则

3. 清空规则

1
2
3
4
5
iptables -F 清除所有已制定规则
iptables -X 清除所有用户自定义的tables
iptables -Z 将所有chain的计数和流量清空

4. 定义默认策略

1
iptables [-t target] -P [INPUT,OUTPUT...] [DROP,ACCEPT]

5. 设定规则:针对IP

1
iptables [-AI 链名(-A为新增,-I为插入)] [-io 网络接口(-i为数据包进入的接口)] [-p 协议(主要有:tcp udp icmp all)] [-s 来源IP/网络] [-d 目标IP/网络] -j [ACCEPT|DROP|REJECT|LOG (接收,悄悄丢弃,向来源地址发送拒绝数据包,日志记录)]

LOG记录的数据储存在/var/log/message中,LOG并不影响后续的数据包对比。

例:

添加lo为信任设备:

1
iptables -A INPUT -i lo -j ACCEPT

来自内网的所有数据都接收:

1
iptables -A INPUT -i eth1 -s 192.168.1.0/24 -j ACCEPT`(假设eth1连接LAN)

6. 设定规则:针对端口

1
iptables [-AI 链名] [-io 网络接口] [-p tcp,udp] [-s 来源] [--sport 端口范围] [-d 目的] [--dport 端口范围] -j [ACCEPT|DROP|REJECT]

--sport表示来源IP/网络的端口范围,--dsport表示目的IP/网络的端口范围。因为仅有TCP、UDP数据包有端口,所以要想使用--sport或者--dport,都需要指定-p

例:

拒绝进入本机的21号端口的数据包:

1
iptables -A INPUT -i eth0 -p tcp --dport 21 -j REJECT

7. 设定规则:针对mac和state

1
iptables -A INPUT [-m 外挂模块名(state,mac等)] [--state 状态]

常见的数据包状态:INVALID(无效数据包) ESTABLISHED(连接成功的连接状态) NEW(新建连接的数据包) RELATED(与主机发出去的数据包有关)

例:

通过所有已建立连接或与发出请求相关的数据包,不合法数据包丢弃:

1
2
3
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT`
iptables -A INPUT -m state --state INVALID -j DROP

放行mac地址为aa:bb:cc:dd:ee:ff的主机

1
iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT