前言
在访问国外网站时,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 个端口,结果如下所示:
- 扫描 4444 端口(DROP),并使用 time 命令查看耗时,time nmap -p4444 127.0.0.1
端口扫描结果 filtered, 耗时 2.2 秒
- 扫描 5555 端口(REJECT unreachable),并使用 time 命令查看耗时,time nmap -p5555 127.0.0.1
端口扫描结果 filtered, 耗时 0.2 秒
- 扫描 5566 端口(REJECT tcp-reset),并使用 time 命令查看耗时,time nmap -p5566 127.0.0.1
端口扫描结果 closed, 耗时 0.2 秒
- 扫描 5568 端口,并使用 time 命令查看耗时,time nmap -p5568 127.0.0.1
端口扫描结果 closed, 耗时 0.2 秒
三,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 抓包结果如下:
-
tcpdump -i lo port 4444
过滤策略为 DROP,会不断重试发送 SYN 直到超时,占用了带宽资源
-
tcpdump -i lo port 5555
过滤策略为 reject with icmp-port-unreachable 的,发两次就停止
-
tcpdump -i lo port 5566
过滤策略为 reject with tcp_reset,发出 SYN 包,收到 reset
-
tcpdump -i lo port 5568
端口未使用的,发出 SYN 包,收到 reset
四,结论
REJECT –reject-with tcp-reset 比 DROP 好,干脆利落,节约时间,节约带宽。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。