firewalld封闭端口测试

上篇有提到firewalld和iptables的区别。那就比较好奇firewalld的其他状态。

首先测试了22端口,这个端口在firewalld里是开放的,但是实际上机器上没有监听这个端口。这里我们看到,实际服务器返回的也是一个TCP-RESET。

然后又测试了一个被firewalld屏蔽的端口,实际服务器上也没有监听这个端口。这里我们可以看到返回的是ICMP的destination unreachable。

接着我们测试了一个被firewalld屏蔽的端口,实际服务器上监听了这个端口。这里我们可以看到返回的也是ICMP的destination unreachable。

最后我们直接屏蔽某个端口,发现也一样是返回ICMP的destination unreachable。

1
2
3
<rule family="ipv4">
<port protocol="tcp" port="10050"/>
<reject/>

以上可以得出,在firewalld里,如果是被firewalld屏蔽的端口,那返回的状态就是ICMP的destination unreachable。而不是像原先iptables那样直接丢弃,造成客户端一直等待状态。

这个其实就是iptables了reject的icmp-host-unreachable。

1
2
3
4
5
--reject-with type
The type given can be icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited,
icmp-host-prohibited or icmp-admin-prohibited (*) which return the appropriate ICMP error message (port-unreachable is the default). The option
tcp-reset can be used on rules which only match the TCP protocol: this causes a TCP RST packet to be sent back. This is mainly useful for blocking
ident (113/tcp) probes which frequently occur when sending mail to broken mail hosts (which won’t accept your mail otherwise).

但其实我们也可以自定义返回的状态

1
2
3
4
<rule family="ipv4">
<port protocol="tcp" port="10051"/>
<reject type="tcp-reset"/>
</rule>

这样我们就会看到tcp-reset了。