IPTables: consenti solo l'accesso SSH, nient'altro dentro o fuori


11

Come si configura IPTables in modo che solo consentirà SSH, e permettere nessun altro traffico in o out ?

Qualche precauzione di sicurezza che qualcuno può raccomandare?

Ho un server che credo sia stato migrato da GoDaddy con successo e credo che non sia più in uso.

Ma voglio essere sicuro solo perché ... non lo sai mai. :)

Si noti che questo è un server virtuale dedicato di GoDaddy ... Ciò significa che non è presente alcun backup e praticamente nessun supporto.

Risposte:


13

Devi solo impostare il criterio predefinito su DROP sulle catene INPUT e OUTPUT.

Per consentire l'accesso a SSH, sono necessari i seguenti comandi:

$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Gli ultimi due comandi consentono il traffico di loopback poiché questo è richiesto da alcune applicazioni per funzionare correttamente. È possibile limitare l'accesso SSH da un IP specifico utilizzando l' -s source_ipopzione.

L'esecuzione dei comandi nell'ordine mostrato sopra provocherà il blocco della sessione SSH corrente. Questo perché i comandi di iptables hanno effetto immediato. È necessario eseguirli in uno script di shell per evitare di perdere la possibilità di connettersi al computer durante l'esecuzione in remoto.


4
--state RELATEDsull'ultima regola non è necessario; --state ESTABLISHEDè abbastanza. Potresti anche voler consentire il traffico DNS e probabilmente dovresti consentire qualsiasi cosa sull'interfaccia di loopback, o ogni cosa potrebbe comportarsi in modo molto strano.
MadHatter,

@MadHatter: Sì, hai ragione soprattutto riguardo le cose del loopback :)
Khaled,

Grazie, sarebbe possibile ottenere l'intero file da te? cioè qualcosa che posso copiare e incollare direttamente in / etc / sysconfig / iptables? Non ho abbastanza esperienza con questo da fidarmi del mio intuito per fare le modifiche appropriate.
Disco

2
ps. stabilire la connessione verrà forzato chiuso dopo il primo comando
user956584

3
Dovresti davvero cambiare l'ordine di questi comandi. Le linee della politica dovrebbero apparire come le ultime. Chiunque copierà questo in una sessione SSH sarà HUP e verrà immediatamente chiuso
AndreasT

4

Qualcosa come questo:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT  # or iptables -P INPUT DROP

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP

1
Penso che tu -i lonon intenda -s lo; ancora una volta, ESTABLISHEDè necessario solo nelle regole statali, e probabilmente dovrebbe esserci anche un --sport 22là dentro. Perché tutti sono così desiderosi di permetterlo RELATED?
MadHatter,

@MadHatter: Informazioni RELATED: è effettivamente utile per abbinare elementi non TCP, come le risposte ping e le risposte DNS. Almeno, è quello che avevo sempre ipotizzato.
Steven lunedì

2
La mia convinzione è che non corrisponderà a nessuno di questi. Ad esempio, corrisponderebbe a una risposta ICMP proibita dal punto di vista amministrativo, ma è utile quanto può; e se non qualificato, corrisponderà a qualsiasi traffico correlato, non solo al traffico correlato alla riga precedente.
MadHatter,

@MadHatter: suppongo che dovrò eseguire alcuni test per vedere se hai ragione. Grazie per aver sfidato il mio presupposto.
Steven lunedì

Sì, lo stato ESTABLISHED è tutto ciò che serve per abbinare le risposte DNS UDP e le risposte echo ICMP.
Steven lunedì
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.