Como posso diminuir o tráfego de entrada para a porta 80 (HTTP) das portas de origem abaixo de 1024?

1

Estou tentando fazer uma restrição simples nos pacotes www sob duas regras:

  1. Permitir pacotes de entrada / saída www. (Isso funciona.)
  2. Soltar o tráfego de entrada para a porta 80 das portas de origem abaixo de 1024. (Isso não funciona.)

Agora, tecnicamente, quando eu uso o hping para testar minhas regras,

hping3 192.168.100.100 -S -p80 -s 1023

Eu devo não receber qualquer pacote. No entanto, ainda recebo pacotes, o que significa que minha regra sobre descartar pacotes de portas abaixo de 1024 não funciona.

Alguém sabe por quê?

Estas são as regras do iptables no shell script até agora:

##!/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

Quando executo meu script de shell, aqui está o resultado do 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 

Qual é a maneira correta de usar hping para testar minha regra de outra máquina?

Aqui está o resultado dos meus pacotes:

[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 ~]# 
    
por snow 01.02.2011 / 08:39

4 respostas

2

Reorganize seu arquivo de script um pouco; Mova a regra "Eliminar tráfego de entrada para a porta 80 ..." acima da regra "Permitir tráfego de entrada www (80)".

Neste momento, a regra ACCEPT é avaliada antes da regra DROP, para que o tráfego possa passar até mesmo das portas < 1024.

Você pode verificar isso com iptables -vL e ver quais regras estão obtendo resultados.

    
por 01.02.2011 / 08:53
2

Se você observar a saída de iptables -L , verá que a regra para permitir pacotes de entrada na porta 80 é antes da regra bloquear pacotes na porta 80 com uma porta de origem abaixo de 1024. O efeito disso é permitir todos os pacotes na porta 80, pois o iptables pára as regras de processamento quando uma correspondência é encontrada.

Reorganize suas regras para que o bloco nas portas de origem abaixo de 1024 esteja antes da permissão na porta 80.

    
por 01.02.2011 / 08:59
2

Não use o hping3 para testar, ele incrementa o esporte com cada pacote sucessivo.

Regras corretas:

$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

Mova as regras do esporte para cima.

Teste:

server# nc -l -t -p 80
client# nc -t IP 80 -p 1023
client# nc -t IP 80 -p 1024
    
por 01.02.2011 / 09:13
0

Você verificou a ordem das suas regras de INPUT? Talvez o tráfego seja permitido pela sua primeira regra de ENTRADA.

    
por 01.02.2011 / 08:55

Tags