Tentando usar o iptables para bloquear todo o tráfego, exceto para SSH e RDP

1

EDIT: Script de trabalho para usar o iptables para bloquear todo o tráfego de entrada / saída, exceto ssh (porta 22) e RDP (porta 3389):

#!/bin/sh
# Block all incoming/outgoing traffic except for ssh and rdp

iptables -Z # zero counters
iptables -F # flush (delete) rules
iptables -X # delete all extra chains

# Set default filter policy to DROP
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

# Allow DNS
iptables -A INPUT --proto udp --sport 53 --jump ACCEPT
iptables -A OUTPUT --proto udp --dport 53 --jump ACCEPT
iptables -A OUTPUT --proto tcp --dport 53 --jump ACCEPT

# Allow unlimited traffic on loopback (localhost)
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow ssh (22) and rdp (3389)
iptables -A INPUT  -p tcp -m multiport --dports 22,3389 -j ACCEPT

# Continue accepting packets after connection is established (and moved to some random >1024 port)
iptables -A INPUT --match state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT --match state --state ESTABLISHED,RELATED -j ACCEPT

Desfazer:

#!/bin/sh

# Set default filter policy to ACCEPT
iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

iptables -Z # zero counters
iptables -F # flush (delete) rules
iptables -X # delete all extra chains
    
por Bennett Lynch 28.03.2017 / 22:25

1 resposta

1

Você sente falta de algo como:

iptables -A INPUT  --match state --state ESTABLISHED,RELATED --jump ACCEPT
iptables -A OUTPUT --match state --state ESTABLISHED,RELATED --jump ACCEPT

para continuar aceitando pacotes após a conexão ser estabelecida. Quando isso acontece, a conexão é movida no lado do servidor para alguma porta aleatória > 1024, é por isso que aceitar pacotes nas portas 22 e 3389 não é suficiente.

Para permitir pesquisas de DNS:

iptables -A INPUT  --proto udp --sport 53 --jump ACCEPT
iptables -A OUTPUT --proto udp --dport 53 --jump ACCEPT
iptables -A OUTPUT --proto tcp --dport 53 --jump ACCEPT

Para definir a regra para várias portas de uma vez (então --sports ou --dports ) você precisa habilitar multiport module. Caso contrário, o iptables irá reclamar sobre a opção desconhecida "--dports" . Então, para permitir conexões de entrada SSH e RDP em uma linha:

iptables -A INPUT --proto tcp -m multiport --dports 22,3389 --jump ACCEPT

Além disso, desde que você defina a política padrão como DROP, você não precisa das últimas duas linhas, nas quais também define DROP para conexões de entrada / saída. Eu entendo que eles fazem você se sentir mais seguro, mas é como configurar o hostname, e também o cron job para configurá-lo apenas no caso de cada minuto. Na verdade, isso pode levar a problemas no futuro, quando você esquecer essas duas linhas e acrescentar algumas outras regras, e ficará perplexo por que elas não funcionam.

    
por 28.03.2017 / 23:01