iptables e prevenção de hackers

iptables e prevenção de hackers

Olá colegas Ubuntuers!

aqui está um exemplo do meu arquivo iptables.rules:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:f2b-sshd - [0:0]
:f2b-sshd-ddos - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -s 202.215.160.75/32 -j DROP
-A INPUT -s 66.210.251.136/32 -j DROP
-A INPUT -s 61.40.0.0/16 -j DROP
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -i tap0 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -i br0 -j ACCEPT
-A FORWARD -i br0 -j ACCEPT
-A f2b-sshd -j RETURN
-A f2b-sshd-ddos -j RETURN
COMMIT

observe que esta é uma versão condensada do meu arquivo. Provavelmente tenho cerca de 100 IPs/domínios que estou descartando.

Meu problema é que quando eu deixo cair um novo ip como xxxx, ele adiciona da seguinte forma:

-A INPUT -i br0 -j ACCEPT
-A INPUT -s x.x.x.x/32 -j DROP
-A FORWARD -i br0 -j ACCEPT

De alguma forma, isso não está descartando o endereço IP como eu quero. Eu tenho um script de shell que uso para descartar usuários/domínios:

./drop-user

sudo iptables -A INPUT -s $1 -j DROP
sudo sh -c "iptables-save > /etc/iptables.rules" 

./drop-domínio

 sudo iptables -A INPUT -s $1/16 -j DROP
 sudo sh -c "iptables-save > /etc/iptables.rules"

Para combater esse problema, estou editando manualmente os arquivos /etc/iptables.rules para mover o ip xxxx acima desta linha:

 -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos

e então ligando:

sudo iptables-restore < /etc/iptables.rules

O que há de errado com meu processo, se houver alguma coisa? Existe uma maneira melhor? Cada dia eu passava cerca de 10 minutos lidando com hacks e a maior parte desse tempo editando meus arquivos iptables.rules e depois restaurando-os via iptables-restore. Eu gostaria de poder chamar ./drop-user ou ./drop-domain e terminar com isso, mas sinto que não tenho conhecimento suficiente de iptables.

Devo executar os seguintes comandos antes do iptables-restore?

 sudo iptables -F
 sudo iptables -Z

Desde já, obrigado!

Responder1

Eu recomendo fortemente que você automatize o processo de banimento com fail2ban, que funciona perfeitamente bem em uma configuração padrão e pode ser personalizado ainda mais se você quiser monitorar mais serviços.

Quando combinado com iptables-persistent, preservará as regras nas reinicializações, o que é útil.

Aqui está uma visão geral básica do que faço com qualquer servidor Ubuntu:

Instalar e configurar fail2ban

sudo aptitude install fail2ban && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && sudo nano /etc/fail2ban/jail.local

Isso o instala e copia o arquivo de configuração em um novo arquivo para suas personalizações. Esta é uma prática recomendada porque evita que suas edições sejam substituídas se o pacote for atualizado.

Minha preferência pessoal é estender ohora da proibiçãoeEncontre tempodos padrões. O tempo de banimento é por quanto tempo um invasor fica banido, e o tempo de descoberta é a janela de tempo em que suas tentativas são contadas, caso eles limitem a taxa de ataques. Encontre e edite bantime = 21600(aumentado para seis horas, o valor do tempo está em segundos) e também findtime = 3600(máximo de 3 tentativas de ataque por hora).

Limpe as regras existentes do Iptables e defina novos padrões

Este é um one-liner que deve ser usado em um servidor web típico com portas de entrada escutando apenas na porta 22 (SSH), porta 80 (HTTP) e porta 443 (HTTPS).Este tutorial DigitalOceané uma boa referência sobre como construir o seu próprio ou personalizar o meu.Tenha cuidado com o Iptables e com a definição de regras DROP, se você errar o pedido, você ficará permanentemente bloqueado!Dito isto, este one-liner é o que eu uso e é seguro, testado e funciona perfeitamente:

sudo iptables -P INPUT ACCEPT && sudo iptables -F && sudo iptables -A INPUT -i lo -j ACCEPT && sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT && sudo iptables -A INPUT -j LOG && sudo iptables -A FORWARD -j LOG && sudo ip6tables -A INPUT -j LOG && sudo ip6tables -A FORWARD -j LOG && sudo iptables -A INPUT -j DROP

Torne as alterações persistentes durante as reinicializações

A última etapa é instalar e configurar o iptables-persistentpacote, que automatizará as regras de salvamento e restauração nas reinicializações.

sudo aptitude install iptables-persistent && sudo service iptables-persistent start

Ele solicitará a confirmação das regras IPV4 e IPV6, e você deve usar a tecla Tab para selecionar 'sim' para cada uma e salvar. Ele será iniciado automaticamente durante a reinicialização, então você não precisa se preocupar em configurá-lo ainda mais.

Uma coisa a ser observada sobre como tornar as regras persistentes é que você precisa informar manualmente ao processo sobre quaisquer novas regras que você adicionar ou editar (como se você adicionou ou removeu HTTPS na porta 443, por exemplo). Para fazer isso, execute sudo service iptables-persistent saveo qual atualizará o conjunto atual de regras em vigor. Acho que o comando foi alterado para "netfilter-persistent" nas versões posteriores a 14.04, então use sudo service netfilter-persistent savese o primeiro não funcionar.

Resumo

Agora o fail2ban monitorará ataques ao SSH e adicionará e subtrairá endereços IP automaticamente de acordo com os parâmetros que você definir. O Iptables ignorará todo o tráfego de entrada das portas que você não abriu e essas regras persistirão durante as reinicializações, portanto, não há muito mais que você precise fazer. Aproveite o tempo livre extra, eu acho!

Revertendo todas as etapas acima se desejar desfazer todas as alterações

Se por algum motivo você não quiser continuar usando esse método, poderá desfazer tudo rapidamente. Isso não é recomendado, mas é a sua máquina, então veja como:

  1. Limpe todas as regras do Iptables e aceite todo o tráfego em todas as portas sudo iptables -P INPUT ACCEPT && sudo iptables -F(você deve fazer isso para remover a regra DROP no final ou será bloqueado)
  2. Remova os pacotes instalados anteriormente e suas configurações sudo aptitude purge fail2ban iptables-persistent(ou talvez netfilter-persistent, dependendo da sua versão do servidor Ubuntu). Após a reinicialização, você deverá voltar ao que era antes - sem quaisquer configurações personalizadas do Iptables que você precisará adicionar novamente manualmente, como está fazendo atualmente.

informação relacionada