Respostas:
Tente isso com acesso 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
Observe que isso reduzirá brutalmente todas as conexões em execução - isso inclui coisas como a conexão SSH que você pode usar para administrar o servidor. Use isso somente se você tiver acesso a um console local.
Veja a resposta do Miphix para saber como adicionar uma exceção ao SSH.
Se você estiver trabalhando remotamente via SSH, poderá adicionar isso ( -I
insere-o antes de todas as outras regras INPUT
):
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
Se o seu serviço SSH estiver escutando em outra porta, você precisará usá-la em vez de 22
.
Caso contrário, você poderá perder acidentalmente o acesso.
Esteja ciente de que as outras respostas não cobrem o IPv6! Se o seu sistema aceitar tráfego IPv6, nenhuma regra de iptables será aplicada ao tráfego IPv6.
em vez de usar o iptables / ip6tables diretamente, eu recomendo o uso do iptables-restore e salve. Essas ferramentas permitem especificar uma configuração do iptables com várias regras e carregá-la facilmente com um único comando.
crie um arquivo (denominado 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 um exemplo extra se você deseja 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ê estiver satisfeito com suas regras, poderá apt install iptables-persistent
fazê-lo 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.
As duas respostas acima, de alguma forma, estão corretas, mas não são precisas o suficiente para originar a resposta. (Desculpe, não tenho reputação suficiente para adicionar um comentário, por isso escreva a resposta completa).
No meu caso, conheci o servidor apache sobrecarregado, sobrecarregado com trabalhos cron, utilizando a CPU em excesso. Os limites de threads foram armazenados no banco de dados SQL, mas eu conheci o limite de suas conexões. Eu queria limitar as conexões apache recebidas do host local (esta parte é opcional), mas manter todas as outras conexões possíveis. Incluindo aqueles que foram realmente estabelecidos.
Eu fiz isso com comando
sudo iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j REJECT
Significa: para cada pacote tcp recebido na porta 80, state
módulo de carregamento e, se este for o primeiro pacote (conexão de entrada), rejeite-o. Para localhost, você pode apenas usar-s 127.0.0.0/8
E para uso no mundo real, em alguns casos, você pode adicionar 'INVALID' aos estados NEW,INVALID
, porque é possível enviar pacotes "maliciosos", tentando ignorar sua regra. E também substitua por -j DROP
para salvar seu tráfego de saída (ele não enviará sinal de rejeição)