Esteja ciente de que as outras respostas não cobrem o IPv6! Se o seu sistema aceitar tráfego IPv6, nenhuma regra do iptables será aplicada ao tráfego ipv6.
ao invés de usar iptables / ip6tables diretamente, eu recomendo usar o iptables-restore e salvar. Estas ferramentas permitem especificar uma configuração iptables com múltiplas regras e facilmente carregá-la com um comando.
crie um arquivo (denominei iptables.rules) com o seguinte conteúdo:
*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
Note que adicionei algum exemplo extra se você quiser permitir o ICMP e o tráfego para portas específicas.
agora você pode carregá-lo com estes comandos:
iptables-restore < iptables.rules
ip6tables-restore < iptables.rules
Agora, suas regras também abrangem o ipv6 e são fáceis de gerenciar.
Nota adicional para usuários do Debian: se você está satisfeito com suas regras, você pode apt install iptables-persistent
para que as regras sejam restauradas após a reinicialização. As regras não são salvas automaticamente no desligamento, portanto, execute netfilter-persistent save
para atualizar as regras persistentes.