Tentativo di utilizzare iptables per bloccare tutto il traffico tranne SSH e RDP


1

EDIT: script di lavoro per utilizzare iptables per bloccare tutto il traffico in entrata / in uscita ad eccezione di 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

Disfare:

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

Risposte:


1

Ti manca qualcosa come:

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

per continuare ad accettare i pacchetti dopo aver stabilito la connessione. Quando succede che la connessione viene spostata sul lato server su una porta casuale> 1024, ecco perché accettare i pacchetti sulla porta 22 e 3389 non è sufficiente.

Per consentire le ricerche 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

Per impostare la regola per più porte contemporaneamente (così --sportso --dports) è necessario abilitare il multiportmodulo. Altrimenti iptables si lamenterà dell'opzione sconosciuta "--dports" . Quindi, per consentire connessioni SSH e RDP in entrata su una riga:

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

Inoltre, poiché si imposta il criterio predefinito su DROP, non sono necessarie le ultime due righe in cui è stato impostato DROP aggiuntivo per le connessioni in / out. Capisco che ti facciano sentire più sicuro, ma è come impostare il nome host, e anche cron job per impostarlo per ogni minuto. In realtà questo può portare a problemi in futuro, quando ti dimentichi di quelle due righe e aggiungi alcune altre regole, e rimarrai perplesso sul perché non funzionano.


Grazie per la risposta. Questo ha aiutato a chiarire le cose, ma ho ancora problemi. Ho apportato le modifiche che hai menzionato e ho aggiunto la logica per consentire le ricerche DNS in uscita (modificato lo script nel post originale per riflettere ciò). Sfortunatamente, non riesco ancora ad accedere a questa casella. Qualche idea di cos'altro potrebbe esserci di sbagliato?
Bennett Lynch,

@BennettLynch grazie per aver aggiornato la domanda, controlla la mia modifica sulle ricerche DNS. e fammi sapere se mi ha aiutato.
rsm,

@BennettLynch Se questo risponde alla tua domanda, ti preghiamo di assegnargli il segno di spunta verde (e possibilmente un voto per essere d'aiuto), altrimenti ti preghiamo di spiegare cosa non funziona ancora.
rsm,

Apprezzo molto il tuo aiuto, ma sfortunatamente non ho ancora avuto fortuna. Ho aggiornato il mio post originale con la versione corrente dello script che sto usando. Ti dispiacerebbe provare a eseguirlo se hai un ambiente in cui testarlo in sicurezza? Attualmente sto eseguendo questo su un'istanza EC2 e provando successivamente a ssh sull'istanza, ma il mio tentativo ssh continua a scadere. Devo riavviare l'istanza per ripristinare ogni volta l'iptables.
Bennett Lynch,

@BennettLynch lo stavo testando solo per ssh, ecco perché ho perso il --dportsproblema. controlla la mia risposta aggiornata, parte su multiport.
rsm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.