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 秒
    nmap 掃描 4444 端口
  2. 掃描 5555 端口(REJECT unreachable),並使用 time 命令查看耗時,time nmap -p5555 127.0.0.1
    端口掃描結果 filtered, 耗時 0.2 秒
    nmap 掃描 5555 端口
  3. 掃描 5566 端口(REJECT tcp-reset),並使用 time 命令查看耗時,time nmap -p5566 127.0.0.1
    端口掃描結果 closed, 耗時 0.2 秒
    nmap 掃描 5566 端口
  4. 掃描 5568 端口,並使用 time 命令查看耗時,time nmap -p5568 127.0.0.1
    端口掃描結果 closed, 耗時 0.2 秒
    nmap 掃描 5568 端口

三,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 直到超時,占用了帶寬資源
    tcpdump port 4444
  2. tcpdump -i lo port 5555
    過濾策略為 reject with icmp-port-unreachable 的,發兩次就停止
    tcpdump port 5555
  3. tcpdump -i lo port 5566
    過濾策略為 reject with tcp_reset,發出 SYN 包,收到 reset
    tcpdump port 5566
  4. tcpdump -i lo port 5568
    端口未使用的,發出 SYN 包,收到 reset
    tcpdump port 5568

四,結論

REJECT –reject-with tcp-reset 比 DROP 好,干脆利落,節約時間,節約帶寬。

https://segmentfault.com/a/1190000012637947


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM