Prova questo con accesso root :
# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Tieni presente che ciò interromperà brutalmente tutte le connessioni in esecuzione - questo include cose come la connessione SSH che puoi usare per amministrare il server. Usalo solo se hai accesso a una console locale.
Vedi la risposta di Miphix su come aggiungere un'eccezione per SSH.
Se lavori in remoto tramite SSH, potresti voler aggiungere questo (-I
lo inserisce prima di tutte le altre regole in INPUT
):
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
Se il tuo servizio SSH è in ascolto su un'altra porta, dovrai utilizzare quella porta invece di 22
.
In caso contrario, potresti perdere accidentalmente l'accesso.
Tieni presente che le altre risposte non coprono IPv6! Se il tuo sistema accetta il traffico IPv6, nessuna regola di iptables verrà applicata al traffico ipv6.
invece di usare direttamente iptables/ip6tables, consiglio di usare iptables-restore and save. Questi strumenti consentono di specificare una configurazione di iptables con più regole e di caricarla facilmente con un solo comando.
creare un file (l'ho chiamato iptables.rules) con il seguente contenuto:
*filter
# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]
# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]
# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]
# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# do not block localhost
-A INPUT -i lo -j ACCEPT
# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT
# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# commit changes
COMMIT
Nota che ho aggiunto qualche esempio in più se vuoi consentire l'ICMP e il traffico verso porte specifiche.
ora puoi caricarlo con questi comandi:
iptables-restore < iptables.rules
ip6tables-restore < iptables.rules
Ora le tue regole coprono anche ipv6 e sono facili da gestire.
Nota aggiuntiva per gli utenti Debian:se sei soddisfatto delle tue regole, puoi apt install iptables-persistent
quindi le regole vengono ripristinate dopo il riavvio. Le regole non vengono salvate automaticamente allo spegnimento, quindi esegui netfilter-persistent save
per aggiornare le regole persistenti.