Altre risposte stanno usando iptables -I
nei loro esempi, che spesso non è quello che dovresti usare.
iptables eseguirà la prima regola che corrisponde, quindi l'ordine delle regole è molto importante. -I
è il comando "inserisci" e deve essere utilizzato con un parametro index per specificare a quale elenco appartiene una determinata regola. -A
è il comando "append", che aggiungerà la regola alla fine dell'elenco.
In alcune distrobuzioni (forse tutte) l'uso -I
senza un parametro di indice aggiungerà la regola per indicizzarne una, rendendola la prima regola selezionata. In questo scenario, se l'ultimo comando che esegui è iptables -I INPUT -s tcp 0.0.0.0/0 -j DROP
iptables, eliminerà tutto il traffico, indipendentemente dal fatto che tu abbia o meno delle ACCEPT
regole successive nella catena.
Ecco un esempio di impostazione di una regola che consente solo SSH da un singolo IP:
A partire senza regole:
#> iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Aggiungi una nuova regola "consenti SSH da 1.2.3.4":
#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
Blocca SSH da tutti gli altri IP:
#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
Ora la tua catena INPUT sarà simile a:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Successivamente, se è necessario autorizzare un secondo IP, è possibile utilizzare il -I
parametro per posizionarlo prima della regola della lista nera.
#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 4.3.2.1 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Si noti che l'utilizzo ha -I INPUT 2
aggiunto la nuova regola come regola numero 2 e ha portato la regola DROP al numero 3.
iptables
supporta l'inversione con l'operatore bang nel caso in cui tu voglia fare un bersaglioDROP
. Esempio:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP