如何从低于 1024 的源端口丢弃到端口 80(HTTP)的入站流量?

如何从低于 1024 的源端口丢弃到端口 80(HTTP)的入站流量?

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

  1. 允许入站/出站 www 数据包。(这有效。)
  2. 降低从 1024 以下的源端口到端口 80 的入站流量。(这不起作用。)

现在,从技术上讲,当我使用 hping 来测试我的规则时,

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 从另一台机器测试我的规则的正确方法是什么?

这是我的数据包结果:

[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 ~]# 

答案1

稍微重新安排一下你的脚本文件;将“丢弃入站流量到端口 80...”规则移到“允许入站 www(80) 流量”规则上方。

现在,ACCEPT 规则在 DROP 规则之前进行评估,因此即使从端口 <1024 传输流量也能够通过。

您可以使用来验证这一点iptables -vL,并查看哪些规则得到了命中。

答案2

如果您查看输出,iptables -L您会看到允许端口 80 上的入站数据包的规则位于阻止端口 80 上源端口低于 1024 的数据包的规则之前。这样做的效果是允许端口 80 上的所有数据包,因为当找到匹配项时,iptables 会停止处理规则。

重新安排您的规则,使得 1024 以下的源端口上的阻止位于端口 80 上的允许之前。

答案3

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

正确的规则:

$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

将运动规则上调。

测试:

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

答案4

您是否检查过 INPUT 规则的顺序?也许您的第一个 INPUT 规则允许该流量。

相关内容