iptables ip 地址块被忽略了吗?

iptables ip 地址块被忽略了吗?

在我们的服务器上运行top可以让我们

平均负载:68.67、63.48、60.30

我们怀疑这是由于 httpd 连接过多造成的。

跑步:

netstat -tun 2>/dev/null | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

得到的结果(所有 IP 均转换为私有地址):

418 
176 192.168.1.1
 41 192.168.1.2
  8 192.168.1.3
  5 192.168.1.4
  5 192.168.1.5
  4 192.168.1.6
  2 192.168.1.7
  2 192.168.1.8
  2 192.168.1.9
  2 127.0.0.1
  1 servers)
  1 Address
  1 192.168.1.10
  1 192.168.1.11

如您所见192.168.1.1(从 WAN 地址转换而来,仅供参考),似乎有 176 个连接连接到我们的服务器。远程查找此 IP 会将其解析为 DDOS 服务。

我们已经跑了

sudo iptables -I INPUT -m iprange --src-range 192.168.0.0-192.168.0.255 -j DROP

尝试删除与其完整范围相关的所有范围,但在运行 netstat 命令时仍显示请求。

IPtables 命令或 netstat 命令是否有问题?

我们跑

 sudo service iptables save
 sudo service httpd restart

存储它并使其活跃,然后

sudo iptables --list

确认已添加,确实如此。不确定我们是否遗漏了什么。谢谢。

更新

正在播放的iptables -L -nv节目

pkts bytes target     prot opt in
30179 1793K DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           source IP range STARTRANGE-ENDRANGE

这是否意味着30179请求被阻止了?

我们的 IPtables 也看起来像这样(STARTRANGE/ENDRANGE 是实际的四重八位字节地址)...

Chain INPUT (policy DROP)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            source IP range STARTRANGE-ENDRANGE 
DROP       all  --  anywhere             anywhere            source IP range STARTRANGE-ENDRANGE 
DROP       all  --  anywhere             anywhere            source IP range STARTRANGE-ENDRANGE 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql 
DROP       all  --  anywhere             anywhere            source IP range STARTRANGE-ENDRANGE  

缩短的 Netstat 输出(命令运行:)netstat -n | grep '192.168'

tcp        0      1 OUR_SERVER_IP:44531          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44675          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44600          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44587          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44641          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44578          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44626          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44604          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44541          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44678          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44625          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44661          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44543          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44602          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44644          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44580          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44688          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44683          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44588          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44556          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44681          192.168.1.1:443          SYN_SENT    
tcp        0      1 OUR_SERVER_IP:44631          192.168.1.1:443          SYN_SENT 

答案1

现在你终于发布了netstat有问题的输出(谢谢你),我们可以看到它所拾取的连接几乎肯定不是正如您所想的那样,远程服务器正在努力发起连接远程服务器的端口 443(HTTPS)。这就是为什么它们没有被INPUT链式规则阻止;第一个数据包是出站- 只有远程服务器生成的响应才会被规则阻止INPUT,保持连接SYN_SENT直至超时。

使用netstat -apn表明,您系统上的 HTTPD 服务器正在建立这些连接。您不知道您的服务器为什么要这样做,所以您要仔细检查一下它的设置。

答案2

iptables -L -nv如果规则匹配,您可以使用它来排除故障。您将在第一列中看到pkts与每条规则匹配的数据包数量。

如果您的规则不匹配,则可能是因为它先前已被另一个防火墙条目(规则)匹配。

答案3

确保使用iptables -I INPUT (...)rulenum参数运行。您要确保将此规则插入到任何-j ACCEPThttp 端口规则之前。此参数的默认值为 1,因此它应该已经位于顶部。

iptables -nvL --line-numbers将打印出您当前的 iptables 以及规则编号。

$ iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

1      52  2640 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
2       0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443
3     415 42229 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

运行iptables -I INPUT 2 <your-rule-here>将会在输出中的规则#2之前添加该规则,并将其在表中向下推。

iptables -I INPUT -m iprange --src-range 192.168.0.0-192.168.0.255 -j LOG --log-prefix "BADGUYS"您可以用 代替 来替换规则-j DROP。这会将日志数据写入系统日志,您可以根据BADGUYS上面给出的值进行过滤。如果系统日志中显示此信息,则您的过滤器是有效的,应该会丢弃流量。

您可以在 iptables 规则中保留LOGDROP行(按此顺序)。

相关内容