iptables e prevenção contra hackers

0

Olá, companheiros 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. Eu provavelmente tenho cerca de 100 ou mais IPs / domínios que estou soltando.

Meu problema é que quando eu derrubo um novo ip como x.x.x.x, 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

Isso de alguma forma, na verdade, não está soltando o endereço IP como eu quero. Eu tenho um script de shell que uso para remover usuários / domínios:

./ drop-user

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

./ drop-domain

 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 x.x.x.x ip acima dessa linha:

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

e, em seguida, chamando:

sudo iptables-restore < /etc/iptables.rules

O que há de errado com o meu processo, se houver alguma coisa? Existe uma maneira melhor? Cada dia eu gasto cerca de 10 minutos lidando com hacks e a maior parte do tempo é fazendo a edição dos meus arquivos iptables.rules e depois restaurando através do iptables-restore. Eu gostaria de poder apenas chamar ./drop-user ou ./drop-domain e terminar com isso, mas sinto que não entendo o suficiente sobre o iptables.

Devo estar fazendo os seguintes comandos antes da restauração do iptables?

 sudo iptables -F
 sudo iptables -Z

Obrigado antecipadamente!

    
por Peter S 12.03.2016 / 10:36

1 resposta

1

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

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

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

Instalar e configurar o fail2ban

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

Isso instala e copia o arquivo de configuração para um novo arquivo para suas personalizações. Essa é uma prática recomendada, pois impede que suas edições sejam sobrescritas se o pacote for atualizado.

Minha preferência pessoal é estender o tempo de proibição e encontrar o horário dos padrões. O tempo de bloqueio é por quanto tempo um invasor é banido, e encontrar tempo é a janela do tempo em que suas tentativas são contadas, no caso de eles classificarem ataques de limite. Encontre e edite bantime = 21600 (aumentada para seis horas, o valor do tempo está em segundos) e também findtime = 3600 (máximo de 3 tentativas de ataque por hora).

Liberar regras Iptables existentes e definir novos padrões

Este é um one-liner que deve ser usado em um servidor da Web típico com portas de entrada que atendem apenas na porta 22 (SSH) da porta 80 (HTTP) e na porta 443 (HTTPS). Este tutorial da DigitalOcean é uma boa referência para criar ou personalizar o meu. Tenha cuidado com o Iptables e defina as regras DROP, se você errar a ordem, ficará permanentemente bloqueado! Dito isto, esta frase é o que eu uso e é seguro, testado e funcionando 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

Fazer alterações persistentes nas reinicializações

A última etapa é instalar e configurar o pacote iptables-persistent , que automatizará o salvamento e a restauração das regras 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ê deverá usar a tecla tab para selecionar 'yes' para cada e salvar. Ele será iniciado automaticamente ao reinicializar, para que você não precise se preocupar em configurá-lo ainda mais.

Uma coisa a observar sobre tornar as regras persistentes é que você precisa informar manualmente o processo sobre quaisquer novas regras adicionadas ou editadas (como se você tivesse adicionado ou removido HTTPS na porta 443, por exemplo). Para fazer isso, execute sudo service iptables-persistent save , que 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 save se o primeiro não funcionar.

Resumo

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

Invertendo todas as etapas acima se você quiser 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 aqui está 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). Depois de um reinício, você deve estar de volta ao que era antes - menos quaisquer configurações personalizadas do Iptables que você precisará adicionar manualmente novamente como está fazendo atualmente.
por Tom Brossman 12.03.2016 / 11:26