iptables之tcp重置

在iptables中,我们一般封闭端口都是使用DROP参数,这样client端是不知道服务器已经DROP掉对应请求了,会继续进行等待,直到超时。

而像nc这种软件会根据这个其实是可以检测到服务器是否开启了这些端口。

但是我发现使用firewalld封闭后,用nc测试直接显示refused的

1
2
3
$ nc 202.96.209.5 29327 -v
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: No route to host.

而用iptables的话必须得是

1
# iptables -A INPUT -p tcp -m tcp --dport 29327 -j REJECT --reject-with tcp-reset

这个man里也意思很明确

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).

不过在iptables限制扫描的标准做法应该是如下:

1
2
3
sudo iptables -N block-scan
sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limitlimit 1/s -j RETURN
sudo iptables -A block-scan -j DROP