iptables 之 REJECT 与 DROP 对比

前言

在访问国外网站时,F12 看 console,下面两种错误很常见:

(1),Failed to load resource: net::ERR_CONNECTION_REFUSED
(2),Failed to load resource: net::ERR_CONNECTION_TIMEOUT

不考虑网络状况的情况下,一般是不同的 iptables 策略导致的。
本文简单分析不同 iptables 策略下不同的现象。

一,nc 监听端口

Linux 服务器配置防火墙策略时,对一些不希望对外开放的端口,一般会用 iptables 过滤掉。
例如服务器上使用 nc 命令监听如下端口(选择一个未使用的 5568 端口作为对比):

nc -l 4444
nc -l 5555
nc -l 5566
# 未使用的 5568 端口作为参照

然后用 iptables 过滤掉这些端口:

iptables -A INPUT -p tcp -m tcp --dport 4444 -j DROP 
iptables -A INPUT -p tcp -m tcp --dport 5555 -j REJECT --reject-with icmp-port-unreachable
iptables -A INPUT -p tcp -m tcp --dport 5566 -j REJECT --reject-with tcp-reset
# 未被使用的 5568 端口作为参照

二,nmap 扫描端口

使用 nmap 分别扫描上面的 4 个端口,结果如下所示:

  1. 扫描 4444 端口(DROP),并使用 time 命令查看耗时,time nmap -p4444 127.0.0.1
    端口扫描结果 filtered, 耗时 2.2
    iptables 之 REJECT 与 DROP 对比
  2. 扫描 5555 端口(REJECT unreachable),并使用 time 命令查看耗时,time nmap -p5555 127.0.0.1
    端口扫描结果 filtered, 耗时 0.2
    iptables 之 REJECT 与 DROP 对比
  3. 扫描 5566 端口(REJECT tcp-reset),并使用 time 命令查看耗时,time nmap -p5566 127.0.0.1
    端口扫描结果 closed, 耗时 0.2
    iptables 之 REJECT 与 DROP 对比
  4. 扫描 5568 端口,并使用 time 命令查看耗时,time nmap -p5568 127.0.0.1
    端口扫描结果 closed, 耗时 0.2
    iptables 之 REJECT 与 DROP 对比

三,tcpdump 抓包分析

使用下面命令发起 TCP 连接请求(nc 或者 telnet):

nc 127.0.0.1 4444
nc 127.0.0.1 5555
nc 127.0.0.1 5566
nc 127.0.0.1 5568

tcpdump 抓包结果如下:

  1. tcpdump -i lo port 4444
    过滤策略为 DROP,会不断重试发送 SYN 直到超时,占用了带宽资源
    iptables 之 REJECT 与 DROP 对比
  2. tcpdump -i lo port 5555
    过滤策略为 reject with icmp-port-unreachable 的,发两次就停止
    iptables 之 REJECT 与 DROP 对比
  3. tcpdump -i lo port 5566
    过滤策略为 reject with tcp_reset,发出 SYN 包,收到 reset
    iptables 之 REJECT 与 DROP 对比
  4. tcpdump -i lo port 5568
    端口未使用的,发出 SYN 包,收到 reset
    iptables 之 REJECT 与 DROP 对比

四,结论

REJECT –reject-with tcp-reset 比 DROP 好,干脆利落,节约时间,节约带宽。

相关推荐