iptables 之 REJECT 与 DROP 对比

前言

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

(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 过滤掉这些端口:tcp

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):spa

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 抓包结果以下:3d

  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 好,干脆利落,节约时间,节约带宽。code

相关文章
相关标签/搜索