如何从1024以下的源端口将入站stream量丢弃到端口80(HTTP)?

我试图根据两条规则对www数据包进行一个简单的限制:

  1. 允许入站/出站www数据包。 (这工作。)
  2. 入站stream量从1024以下的源端口丢弃到端口80.(这不起作用。)

现在在技术上,当我用hping来testing我的规则时,

hping3 192.168.100.100 -S -p80 -s 1023 

我不应该收到任何数据包。 但是,我仍然收到数据包,这意味着我的关于从1024以下端口丢弃数据包的规则不起作用。

有谁知道为什么?

这是迄今为止我在shell脚本中的iptables规则:

 ##!/bin/sh INTERNET=eth0 SERVER_IP="192.168.7.100" ALLOWED_WWW_PORT=80 IPT="/sbin/iptables" clear # Flushing all rules $IPT -F $IPT -X # DROP all incomming traffic $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT DROP # Drop inbound traffic to port 80(http) from source ports less than 1024 $IPT -A INPUT -p tcp -i $INTERNET -s 0/0 --sport 0:1023 -d $SERVER_IP --dport 80 -j DROP # Permit inbound www(80) packets. $IPT -A INPUT -p tcp -i $INTERNET -s 0/0 -d $SERVER_IP --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p tcp -o $INTERNET -s $SERVER_IP --sport 80 -d 0/0 -m state --state ESTABLISHED -j ACCEPT # Permit outbound www(80) packets. $IPT -A OUTPUT -p tcp -o $INTERNET -s $SERVER_IP -d 0/0 --dport $ALLOWED_WWW_PORT -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p tcp -i $INTERNET -s 0/0 --sport $ALLOWED_WWW_PORT -d $SERVER_IP -m state --state ESTABLISHED -j ACCEPT # Log and drop all other packets to file /var/log/messages iptables -A OUTPUT -j LOG iptables -A INPUT -j LOG iptables -A FORWARD -j LOG # make sure nothing comes or goes out of this box iptables -A OUTPUT -j DROP iptables -A INPUT -j DROP iptables -A FORWARD -j DROP # save, restart, and check the iptables service iptables save service iptables restart iptables -L -n -v -x 

当我运行我的shell脚本时,这里是Chain INPUT结果:

 Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP tcp -- eth0 * 0.0.0.0/0 192.168.7.100 tcp spts:0:1023 dpt:80 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 192.168.7.100 tcp dpt:80 state NEW,ESTABLISHED 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 192.168.7.100 tcp spt:80 state ESTABLISHED 

什么是使用hping从另一台机器testing我的规则的正确方法?

这是我的数据包结果:

 [root@daniel-laptop ~]# hping2 192.168.7.100 -S -p 80 -s 1023 HPING 192.168.7.100 (eth0 192.168.7.100): S set, 40 headers + 0 data bytes len=46 ip=192.168.7.100 ttl=64 DF id=0 sport=80 flags=RA seq=1 win=0 rtt=0.5 ms len=46 ip=192.168.7.100 ttl=64 DF id=0 sport=80 flags=RA seq=2 win=0 rtt=0.3 ms len=46 ip=192.168.7.100 ttl=64 DF id=0 sport=80 flags=RA seq=3 win=0 rtt=0.4 ms len=46 ip=192.168.7.100 ttl=64 DF id=0 sport=80 flags=RA seq=4 win=0 rtt=0.5 ms len=46 ip=192.168.7.100 ttl=64 DF id=0 sport=80 flags=RA seq=5 win=0 rtt=0.5 ms len=46 ip=192.168.7.100 ttl=64 DF id=0 sport=80 flags=RA seq=6 win=0 rtt=0.3 ms len=46 ip=192.168.7.100 ttl=64 DF id=0 sport=80 flags=RA seq=7 win=0 rtt=0.4 ms ^C --- 192.168.7.100 hping statistic --- 8 packets tramitted, 7 packets received, 13% packet loss round-trip min/avg/max = 0.3/0.4/0.5 ms [root@daniel-laptop ~]# 

重新安排你的脚本文件, 移动“允许入站www(80)stream量”规则上方的“丢弃入站stream量到端口80 …”规则。

现在,在DROP规则之前评估ACCEPT规则,所以stream量甚至可以从<1024端口获得。

你可以使用iptables -vL来validation这个规则,看看哪些规则正在被命中。

如果查看iptables -L的输出结果,您应该看到允许端口80上的入站数据包的规则在阻止端口80上的数据包的源端口低于1024的规则之前。其效果是允许所有数据包80端口,因为当发现匹配时,iptables停止处理规则。

重新排列规则,以便1024以下的源端口上的块在端口80上的许可之前。

不要使用hping3来testing,它会随着每个连续的数据包增加运动。

正确的规则:

 $IPT -A INPUT -p tcp -i $DEFAULT_NIC -s 0/0 --sport 0:1023 -d $SERVER_IP --dport 80 -j DROP $IPT -A INPUT -p tcp -i $DEFAULT_NIC -s 0/0 -d $SERVER_IP --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p tcp -o $DEFAULT_NIC -s $SERVER_IP --sport 80 -d 0/0 -m state --state ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p tcp -o $DEFAULT_NIC -s $SERVER_IP -d 0/0 --dport $ALLOWED_WWW_PORT -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p tcp -i $DEFAULT_NIC -s 0/0 --sport $ALLOWED_WWW_PORT -d $SERVER_IP -m state --state ESTABLISHED -j ACCEPT 

移动运动规则。

testing:

 server# nc -l -t -p 80 client# nc -t IP 80 -p 1023 client# nc -t IP 80 -p 1024 

你有没有检查你的INPUT规则的顺序? 也许stream量是由您的第一个INPUT规则允许的。