Abrindo todas as portas no host local para comunicação interna

0

Atualmente, eu tenho que permitir que todas as portas que eu quero conectar de & para localhost ( iptables -A INPUT -i lo -p tcp -m tcp --dport 8888 -j ACCEPT ), que é a) um pouco irritante a cada vez eb) muitas vezes impossível com serviços que mudam sua porta local.

Estou testando isso com netcat no debian:

nc -vv -l -s 127.0.0.1 -p 8888

está escutando na interface 127.0.0.1 na porta 8888. Tentando se conectar

nc 127.0.0.1 8888

resulta em uma conexão recusada, até que eu adicione manualmente a regra acima. Como posso fazer isso funcionar?

Eu tentei permitir todo o tráfego na interface de loopback, sem sucesso:

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

e também para permitir tudo de 127.0.0.1 :

-A INPUT -s 127.0.0.1 -j ACCEPT

Isso não deve funcionar, pois netstat está listando como vindo de 127.0.0.1:

tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      15338/nc

Aqui estão minhas regras atuais:

# Generated by iptables-save v1.6.0 on Thu Jan 25 08:01:28 2018
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.20.0.0/24 -j MASQUERADE
COMMIT
# Completed on Thu Jan 25 08:01:28 2018
# Generated by iptables-save v1.6.0 on Thu Jan 25 08:01:28 2018
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:port-scan - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 67:68 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2368 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 9987 -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1666 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m limit --limit 25/min --limit-burst 100 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 53 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j DROP
-A FORWARD -i wintap0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A port-scan -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j RETURN
-A port-scan -j DROP

Nota: Obviamente, não quero as portas visíveis para o mundo exterior, apenas internamente.

    
por Leandros 25.01.2018 / 09:59

2 respostas

2

O problema é quase certamente esta linha:

-A INPUT -j REJECT --reject-with icmp-port-unreachable

Como vem antes de suas regras que permitem o tráfego para lo e não tem filtro, as quatro últimas regras nunca são vistas:

-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 53 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j DROP

Você não precisa se preocupar com as pessoas que podem se conectar a um serviço que está ouvindo apenas a interface lo (127.0.0.1/8): essa é uma interface somente interna.

    
por 25.01.2018 / 10:56
1

Ao contrário de adicionar a linha persistentemente, anexando:

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

Tente adicionar a linha persistentemente inserindo:

-I INPUT -i lo -j ACCEPT
-I OUTPUT -o lo -j ACCEPT

Isso posicionará a regra na frente da cadeia INPUT, em oposição ao final. O

 -A INPUT -j REJECT --reject-with icmp-port-unreachable

está impedindo que a regra seja lida.

    
por 25.01.2018 / 11:21