10. 防火墙关系
10.1 firewalld 和 iptables 关系(Centos)
ConterOS7.0以上使用的是firewall,ConterOS7.0以下使用的是iptables
在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。
firewalld跟iptables比起来至少有两大好处:
1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
10.2 ufw 和 iptables 关系(Ubuntu)
Uncomplicated Firewall,简称 UFW,是Ubuntu系统上默认的防火墙组件。UFW是为轻量化配置iptables而开发的一款工具。UFW 提供一个非常友好的界面用于创建基于IPV4,IPV6的防火墙规则。UFW 在 Ubuntu 8.04 LTS 后的所有发行版中默认可用。
当使用了 ufw 这类前端时,就最好不要再碰 iptables 了,尤其要慎重使用 iptables – 来清空所有链的规则。在不了解 iptables 的表、链、规则之前,盲目的清空 iptables”规则” 就是耍流氓!
试想,假如你在服务器上ufw enable,那么 INPUT 和 FORWARD 就是 DROP,那么当你iptables -F时,不仅仅是 SSH 的例外规则没了,所有出网的包也都出不去了!此时唯一能做的事情就是去 VNC、或者去机房插鼠标键盘显示器。
10.3 虚拟防火墙和安全组有什么差异
云虚拟防火墙是互联网边界防火墙、VPC边界防火墙、主机边界防火墙的统称,为您提供互联网边界、VPC网络边界、ECS实例间的三重防护。
安全组是ECS提供的虚拟主机防火墙,对ECS实例间的流量进行访问控制。
结论:
防火墙是在安全组之前生效的。
防火墙主要是做南北向的访问控制,作用范围是整个VPC,安全组主要是做东西向的访问控制,作用范围是虚拟机网卡,和防火墙形成互补的关系。
11. 命令总结
11.1 过滤查看
1 | #查看对应表的所有规则,-t选项指定要操作的表,省略"-t 表名"时,默认表示操作filter表,-L表示列出规则,即查看规则 |
11.2 过滤增删存
- 增加
1 | #在指定表的指定链的尾部添加一条规则,-A选项表示在对应链的末尾添加规则,省略-t选项时,表示默认操作filter表中的规则 |
- 删除
1 | #按照规则序号删除规则,删除指定表的指定链的指定规则,-D选项表示删除对应链中的规则。 |
- 修改
1 | #修改指定表中指定链的指定规则,-R选项表示修改对应链中的规则,使用-R选项时要同时指定对应的链以及规则对应的序号,并且规则中原本的匹配条件不可省略。 |
- 保存
1 | # centos |
11.3 协议, 网卡匹配
-p用于匹配报文的协议类型,可以匹配的协议类型tcp、udp、udplite、icmp、esp、ah、sctp等(centos7中还支持icmpv6、mh)。
1 | iptables -t filter -I INPUT -p tcp -s 192.168.1.146 -j ACCEPT |
-i用于匹配报文是从哪个网卡接口流入本机的,由于匹配条件只是用于匹配报文流入的网卡,所以在OUTPUT链与POSTROUTING链中不能使用此选项。
1 | iptables -t filter -I INPUT -p icmp -i eth4 -j DROP |
-o用于匹配报文将要从哪个网卡接口流出本机,于匹配条件只是用于匹配报文流出的网卡,所以在INPUT链与PREROUTING链中不能使用此选项。
1 | iptables -t filter -I OUTPUT -p icmp -o eth4 -j DROP |
11.4 IP匹配
-s用于匹配报文的源地址,可以同时指定多个源地址,每个IP之间用逗号隔开,也可以指定为一个网段。
1 | iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROP |
-d用于匹配报文的目标地址,可以同时指定多个目标地址,每个IP之间用逗号隔开,也可以指定为一个网段。
1 | iptables -t filter -I OUTPUT -d 192.168.1.111,192.168.1.118 -j DROP |
11.5 端口匹配
tcp扩展模块
-p tcp -m tcp –sport 用于匹配tcp协议报文的源端口,可以使用冒号指定一个连续的端口范围
-p tcp -m tcp –dport 用于匹配tcp协议报文的目标端口,可以使用冒号指定一个连续的端口范围
1
2
3
4
5iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 22:25 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport :22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 80: -j REJECT
iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp ! --sport 22 -j ACCEPTmultiport扩展模块
-p tcp -m multiport –sports 用于匹配报文的源端口,可以指定离散的多个端口号,端口之间用”逗号”隔开
-p udp -m multiport –dports 用于匹配报文的目标端口,可以指定离散的多个端口号,端口之间用”逗号”隔开
1
2
3
4
5iptables -t filter -I OUTPUT -d 192.168.1.146 -p udp -m multiport --sports 137,138 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport ! --dports 22,80 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 80:88 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80:88 -j REJECT
11.6 tcp头标志位匹配
1 | #第一次握手 |
11.7 网络防火墙(filter表forward链)
由于iptables此时的角色为”网络防火墙”,所以需要在filter表中的FORWARD链中设置规则。
可以使用”白名单机制”,先添加一条默认拒绝的规则,然后再为需要放行的报文设置规则。
配置规则时需要考虑”方向问题”,针对请求报文与回应报文,考虑报文的源地址与目标地址,源端口与目标端口等。
1 | #示例为允许网络内主机访问网络外主机的web服务与sshd服务。 |
可以使用state扩展模块,对上述规则进行优化,使用如下配置可以省略许多”回应报文放行规则”。
1 | iptables -A FORWARD -j REJECT |
11.8 SNAT内网外出(nat表postrouting链)
1 | iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网IP |
11.9 DNAT外网进来(nat表prerouting链)
1 | iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 公网端口 -j DNAT --to-destination 私网IP:端口号 |
11.10 本机目标端口映射
1 | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 |
配置完成上述规则后,其他机器访问本机的80端口时,会被映射到8080端口。