1. 防火墙黑白名单定义

当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是”黑名单”机制。

同理,当链的默认策略为DROP时,链中的规则对应的动作应该为ACCEPT,表示只有匹配到规则的报文才会被放行,没有被规则匹配到的报文都会被默认拒绝,这就是”白名单”机制。

2.有问题的白名单机制

运行ssh远程连接和web服务连接,其他全部拒绝

1
2
3
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP

但是这样配置会有问题,如果使用iptables -F清空了所有规则,这样就会导致所有请求都会被DROP,只能通过刷机才能连上车机了。

3.正确的白名单机制

1
2
3
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j REJECT

既将INPUT链的默认策略设置为了ACCEPT,同时又使用了白名单机制,因为如果报文符合放行条件,则会被前面的放行规则匹配到,如果报文不符合放行条件,则会被最后一条拒绝规则匹配到,此刻,即使我们误操作,执行了”iptables -F”操作,也能保证管理员能够远程到主机上进行维护,因为默认策略仍然是ACCEPT。

4.自定义链

-N vendor_fw_INPUT表示创建一个自定义链,自定义链的名称为”vendor_fw_INPUT”

1
2
3
4
5
# 新建链
iptables -t filter -N vendor_fw_INPUT
# 创建规则:http请求走自定义链
iptables -t filter -I INPUT -p tcp --dport 80 -j vendor_fw_INPUT
# 以下具体配置vendor_fw_INPUT上的规则即可。

此时 vendor_fw_INPUT 就会在INPUT链上有一次引用。

如果我们不喜欢vendor_fw_INPUT这个链的名字,需要改成gxatek_fw_INPUT。

1
iptables -E vendor_fw_INPUT gxatek_fw_INPUT

5.删除自定义链

使用”-X”选项可以删除自定义链,但是删除自定义链时,需要满足两个条件:

  • 1、自定义链没有被任何默认链引用,即自定义链的引用计数为0。

  • 2、自定义链中没有任何规则,即自定义链为空。

1
2
3
4
5
6
7
8
9
# 删除gxatek_fw_INPUT链
iptables -X gxatek_fw_INPUT

# 如果链上有引用,先删除链上的引用
# 删除input链上第一条,引用gxatek_fw_INPUT的那行
iptables -D INPUT 1

# 清空链上规则
iptables -t filter -F gxatek_fw_INPUT

6. 设置不同协议走不同网卡

udp协议走udp_0网口,icmp协议走icmp_0网口。

1
2
3
4
5
6
7
8
9
10
11
12
13
mangle表set-mark

iptables -t mangle -A PREROUTING -p udp -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 11

建表

ip rule add from all fwmark 10 table 10
ip rule add from all fwmark 11 table 11

route
ip route add default dev udp_0 table 10
ip route add default dev icmp_0 table 11

网络数据流向.png

7.防火墙架构

防火墙架构.png