Come posso consentire determinati ips e bloccare tutte le altre connessioni in iptables?
Come posso consentire determinati ips e bloccare tutte le altre connessioni in iptables?
Risposte:
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 ipset
e 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 lo
e -o lo
certamente causerà problemi per alcune applicazioni.
iptables -F
per cancellare tutte le regole, non posso nemmeno fare il ping su ubuntu.com
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
lo
nell'esempio sopra è escluso dalla corrispondenza dello stato e sempre consentito.
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
yourIPaddress
potrei aggiungere alcuni indirizzi IP e intervalli? E se sto usando SSH su una porta non standard come 2888, il comando cambierebbe il 22
tuo esempio in 2288
? Inoltre, questo bloccherà anche rsync, sftp, ecc. A questo server da tutti gli IP tranne quelli consentiti?
-p tcp
qui è importante perché --dport
non funziona senza di essa. Vorrei anche suggerire di utilizzare -j REJECT
anziché DROP
perché REJECT
rende la porta identica alla porta chiusa e DROP
rende i pacchetti destinati a quella porta neri. In pratica, un utente malintenzionato remoto può rilevare DROP
porte configurate da porte effettivamente chiuse.
Ecco un esempio di lavoro completo.
Fa anche funzionare le applicazioni (ri: il mio commento su keepass non si avvia)