iptables question

3

Estou atualmente sob um ataque SSH.
O ataque é muito estranho por natureza, o invasor está usando uma botnet de computadores e os usando como tentativas de login individuais (veja o snippet de log):
Dez 11 08:30:51 rhea sshd [16267]: Usuário inválido maureen de 78.43.82.153
Dez 11 08:35:24 rhea sshd [20012]: usuário inválido maurizio de 201.244.188.202
Dez 11 08:44:46 rhea sshd [27711]: Usuário inválido max de 211.140.12.46
Dez 11 08:49:10 rhea sshd [31383]: Usuário inválido max de 190.144.47.82
Dez 11 08:58:19 rhea sshd [6659]: Máximo de usuários inválidos de 69.250.227.138
11 dez 09:07:28 rhea sshd [14249]: Máxima de usuário inválida de 93.63.231.55
Dez 11 09:12:03 rhea sshd [18127]: Usuário inválido maximus de 79.188.240.210

Estou disposto a filtrar todo o acesso à porta 22 (ou seja, permitir apenas IPs que eu especificar para conectar), e o que eu fiz alguns dias atrás (é bloquear todas as conexões para a porta 22, mas de mim mesmo). O que eu quero fazer é registrar todas as conexões que não têm uma regra de aceitação para registrar e soltá-la - dessa forma, posso rastrear todos os computadores no bot, sem dar a eles a oportunidade de tentar fazer o login.

O que eu tenho é algo assim:
-A INPUT -s my.addr (s) -j ACCEPT
-A INPUT -p tcp -m tcp --dportar 22 -j DROP

Atualizar
Eu adicionei isso ao meu iptables:
[0: 0] -A INPUT -m limit --limit5 / min -ptcp -m tcp --dport 22 -j LOG --log-level4 --log-prefixo "** DoS **"
e usei um link
Para configurar um arquivo separado, no entanto, só consigo ver os dados registrados no dmesg.

    
por Nathan Adams 11.12.2009 / 17:24

3 respostas

2

Para configurar um arquivo separado, no entanto, só consigo ver os dados registrados no dmesg.

As mensagens do subsistema netfilter são registradas por meio do mecanismo de registro kenerl. Isso aparece na saída do dmesg e também geralmente acaba no seu syslog através dos serviços de klogd .

Se você estiver executando rsyslog ou syslog-ng , eles geralmente leem dados de log do kernel nativamente.

As mensagens aparecem no syslog usando o recurso 'kern', então em um arquivo syslog.conf tradicional você pode fazer algo como:

kern.* /var/log/kernel-messages

(Mas note que você obterá todas as mensagens do kernel , não apenas o netfilter).

O rsyslog e o syslog-ng fornecem recursos de correspondência de padrões para lhe dar um controle mais granular sobre onde as mensagens de log vão.

    
por 11.12.2009 / 19:49
2

Editar:
Você apenas precisa da regra de registro entre as regras de aceitação e descarte , veja o exemplo a seguir, enviando-as para o syslog. link .

Isso funciona porque o log é diferente, pois é um destino "sem terminação", ou seja, a passagem da regra continua na próxima regra. - De man iptables '. Assim, ao contrário de suas outras regras, a verificação contra as regras não vai causar um curto-circuito quando atingir uma correspondência.

Além disso, consulte este link para saber como especificar o arquivo de log (mas observe o post de acompanhamento).

De Antes (Pergunta Mal-interpretada):
Você pode querer fail2ban , fazer isso para você automaticamente ... um monte de outras opções para este post: Centenas de logins SSH com falha .

    
por 11.12.2009 / 17:36
0

O que você quer é Ulogd que permite que você registre os pacotes iptables correspondentes em um arquivo especificado pelo usuário .

Uma vez instalado o ulogd, edite o arquivo /etc/ulogd.conf e remova o comentário da linha: plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"

Na seção [LOGEMU], você verá file="/var/log/ulogd.pktlog"

Aqui é onde seus logs do iptables irão. Eu sugiro que você também adicione este arquivo a logrotate se você tiver instalado, pois os logs podem ficar grandes rapidamente, mesmo com limites.

Quando o ulogd estiver configurado, você deverá substituir esta regra:

-A INPUT -m limit --limit 5/min -p tcp -m tcp --dport 22 -j LOG --log-level 4 --log-prefix "** DoS **"

Com esta regra:

-A INPUT -m limit --limit 5/min -p tcp -m tcp --dport 22 -j ULOG --ulog-prefix "** DoS **"

Também é importante notar que o ulogd permite que você registre pacotes em bancos de dados como MySQL, PostgreSQL e SQLite.

    
por 14.12.2009 / 08:03