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 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.
iptables -Fper 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
lonell'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
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?
-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.
Ecco un esempio di lavoro completo.
Fa anche funzionare le applicazioni (ri: il mio commento su keepass non si avvia)