iptables: consente alcuni ips e blocca tutte le altre connessioni


26

Come posso consentire determinati ips e bloccare tutte le altre connessioni in iptables?


Come dimostra Gilles, il concetto va in questo modo: aggiungi le regole ACCEPT per ogni cosa specifica che vuoi consentire sia per IP di origine che per altre qualifiche, quindi imposta la politica di default su REJECT.
Caleb,

Risposte:


27

Ho scritto un post sul blog sulle regole di base di Iptables per l'utente desktop molto tempo fa e probabilmente dovresti leggerlo, e il suo articolo collegato sul design del firewall Stateful . Ma pre kernel 2.6.39 (che include ipsete potresti volerlo usare per gli IP nella whitelist se hai più di 10 nella whitelist (dove 10 è arbitrario)).

Innanzitutto gestiamo lo stato che sappiamo di voler accettare o eliminare e le interfacce.

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Se vuoi solo fare un'autorizzazione solo tramite IP, senza stato

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

probabilmente ti imbatterai in problemi nel fare questo e suggerisco di usare lo stato per semplificarti la vita. Ad esempio, non consentire -i loe -o locertamente causerà problemi per alcune applicazioni.


4
Piuttosto che DROP, dovresti rifiutare i pacchetti indesiderati, perché facilita molto la diagnosi dei problemi e previene i timeout. Vedi Rifiuta i pacchetti IP con un errore ICMP o rilasciali?
Gilles 'SO- smetti di essere malvagio' il

Ho provato entrambe le configurazioni e KeePass2 non si avvia, qualche idea? Anche se lo facessi iptables -Fper cancellare tutte le regole, non posso nemmeno fare il ping su ubuntu.com
Pawel Cioch il

@PawelCioch perché KeePass2 avrebbe bisogno comunque di una connessione a Internet?
Alex,

@Alex per archiviare il file DB nella posizione remota, questo voglio un singolo IP. Ma ho capito tutto, l'installazione è più complicata dell'esempio qui
Pawel Cioch,

10

Ecco un esempio (non testato!) Che blocca solo le connessioni in entrata . Sono consentite connessioni tramite l'interfaccia di loopback, provenienti da 192.168.3.x, ICMP o alla porta SSH. Tutte le altre connessioni vengono rifiutate.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT

@Gilles per usare correttamente gli stati CORRELATI e STABILITI, devi abbinare il pacchetto iniziale come NUOVO stato. lonell'esempio sopra è escluso dalla corrispondenza dello stato e sempre consentito.
penguin359,

@ penguin359: potresti approfondire il motivo per cui è necessario NUOVO? Sono tutt'altro che un esperto di iptables, ho copiato in parte queste regole dal mio router di casa, che non corrisponde a NUOVO. A quanto ho capito, tutto ciò che rimane dopo che la prima regola sono i pacchetti NEW (o UNTRACKED) comunque. (Se sono troppo lontano il marchio e non si può spiegare in un commento, inviare le vostre versioni con le spiegazioni come una risposta e io cancellare il mio.)
Gilles 'stop SO-essere malvagio'

@Gilles Ho sempre lasciato cadere lo stato INVALID prima di accettare qualsiasi cosa ... il che rende qualsiasi cosa NON INVALID, RELATED, STTABLISHED, deve essere stato NEW. Ma non conosco alcun motivo per cui tutto il resto deve specificare NUOVO. In teoria, però, se non gestisci INVALID e non specifichi NEW, potresti finire per accettare INVALID. Ma una volta gestito INVALID, mi sembra che il controllo del NUOVO stato su ogni regola richieda semplicemente una maggiore elaborazione per il pacchetto.
xenoterracide,

@Gilles anche una politica di rifiuto predefinita è sbagliata, perché invia un pacchetto di rifiuto per ogni pacchetto ricevuto, questo aggrava un attacco DOS.
xenoterracide,

@xenoterracide: buon punto. REJECT dovrebbe mai essere usato? Ho chiesto: rifiutare i pacchetti IP con un errore ICMP o semplicemente rilasciarli?
Gilles 'SO- smetti di essere malvagio' il

7

La regola seguente consentirà solo il tuo IP e bloccherà tutti gli altri IP sulla porta 22 o ssh. Prova con un nuovo terminale prima di disconnetterti.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
grazie per la risposta sintetica. Come cambierebbe questo se volessi consentire alcuni IP e intervalli IP. Al posto di yourIPaddresspotrei aggiungere alcuni indirizzi IP e intervalli? E se sto usando SSH su una porta non standard come 2888, il comando cambierebbe il 22tuo esempio in 2288? Inoltre, questo bloccherà anche rsync, sftp, ecc. A questo server da tutti gli IP tranne quelli consentiti?
PKHunter

1
Nota che -p tcpqui è importante perché --dportnon funziona senza di essa. Vorrei anche suggerire di utilizzare -j REJECTanziché DROPperché REJECTrende la porta identica alla porta chiusa e DROPrende i pacchetti destinati a quella porta neri. In pratica, un utente malintenzionato remoto può rilevare DROPporte configurate da porte effettivamente chiuse.
Mikko Rantalainen,

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.