A correção que eu precisava: stdbuf -o0
para sed e awk contidos na linha de comando, assim:
tail -F /var/log/ufw.log|grep --line-buffered ...... | stdbuf -o0 sed ..... | stdbuf - o0 awk ...... |
Pode usar stdbuf -o0
com o grep também, em vez de --line-buffered. Isso é o que stdbuf -o0
faz - buffers de linha, que é o que o comando precisava no meu caso. É claro que o resto do comando precisava ser montado e refletido em 'at', mas essa parte era direta o bastante para mim (usando o awk pesadamente) assim que obtive o aspecto de buffer de linha conquistado. Eu acabei precisando de um script para facilitar a entrada manual, bem como desses endereços IP para a lista negra, juntamente com uma tarefa adicional ou duas, conforme mencionado abaixo.
Eu inicio o processo @reboot com o comando acima descrito em crontab tail-ing /var/log/kern.log, onde o iptables registra os pacotes de sondagem. Esse comando envia cada endereço IP de prova com tempo e detalhes de pacote em um script bash. Esse script bash, ao criar o comando iptables blacklisting final, transforma o /var/log/knockd.log em uma seqüência de knock iniciada com sucesso ('Stage n'), neste caso, envia uma versão do comando blacklist-IP construído em script 'at' para entrada na lista negra 3 minutos depois. Caso contrário, o comando blacklist-IP construído por script é executado imediatamente. Se a batida de porta for bem-sucedida, o IP será colocado na lista branca [FUTURE - o que impede que o comando IP de Lista Negra programado seja bem-sucedido (a versão do comando planejada em 'at' começará checando a presença de IP na lista de permissões)].
Estou dando os toques finais, como a versão agendada 'at' para verificar a presença da lista de permissões. Parei de usar o ufw e simplifiquei minha vida controlando o iptables diretamente. Não fail2ban, porque era muito inchado para o meu gosto apenas para garantir um sistema privado, apenas whitelist. Agora, sempre que qualquer porta do meu sistema for sondada apenas uma única vez, esse endereço IP será colocado na lista negra. Aqui estão algumas linhas do meu iptables, lista negra segue a lista de desbloqueio, não são mostradas são as regras de LOG e DROP no final (DROP necessário apenas se política = ACEITAR). Mais tarde eu vou compactar em sub-redes quando me apetecer.
(Desculpe a formatação se perdeu)
Chain INPUT (política ACCEPT 0 pacotes, 0 bytes)
um destino de destino de pkts bytes opt in out destino de origem
1 0 0 ACEITAR tudo - eth0 * xxx.72.26.233 0.0.0.0/0
2 592 53357 ACEITAR todos - * * 0.0.0.0/0 0.0.0.0/0 ctstate RELACIONADO, ESTABELECIDO
3 98 5922 ACEITAR tudo - lo * 0.0.0.0/0 0.0.0.0/0
4 0 0 ACEITAR tudo - eth1 * 0.0.0.0/0 0.0.0.0/0
5 1 60 ACEITAR todos - eth0 * xx.179.31.188 0.0.0.0/0 / * knocked Sun Oct 25 16:33:53 CDT 2015 * /
6 0 0 ACEITAR tudo - eth0 * xxx.32.31.196 0.0.0.0/0 / * servidor isp Seg Oct 26 12:43:59 CDT 2015 * /
7 0 0 ACEITAR tudo - eth0 * xxx.142.225.5 0.0.0.0/0 / * servidor isp seg Out 26 12:43:45 CDT 2015 * /
8 0 0 ACEITAR tudo - eth0 * xxx.32.31.195 0.0.0.0/0 / * servidor isp seg Out 26 12:43:31 CDT 2015 * /
9 0 0 ACEITAR tudo - eth0 * xxx.72.26.254 0.0.0.0/0 / * servidor isp seg Out 26 12:43:11 CDT 2015 * /
10 1 118 DROP all - eth0 * 185.86.148.68 0.0.0.0/0 / * kern.log 27 de outubro 22:29:53 PROTO = UDP SPT = 56177 DPT = 1900 * /
11 0 0 DROP all - eth0 * 184.105.247.220 0.0.0.0/0 / * kern.log Out 27 22:22:30 PROTO = UDP SPT = 53700 DPT = 53413 * /
12 0 0 DROP all - eth0 * 195.211.154.179 0.0.0.0/0 / * kern.log 27 de outubro 22:21:49 PROTO = TCP SPT = 48465 DPT = 21320 * /
13 2 120 DROP all - eth0 * 75.111.59.88 0.0.0.0/0 / * kern.log 27 de outubro 22:21:37 PROTO = TCP SPT = 35727 DPT = 23 * /
14 0 0 DROP all - eth0 * 74.82.47.16 0.0.0.0/0 / * kern.log 27 de outubro 22:17:34 PROTO = TCP SPT = 38695 DPT = 27017 * /
15 0 0 DROP all - eth0 * 1.93.3.124 0.0.0.0/0 / * kern.log 27 de outubro 22:16:33 PROTO = TCP SPT = 1414 DPT = 1433 * /
16 0 0 DROP all - eth0 * 184.105.139.96 0.0.0.0/0 / * kern.log 27 de outubro 22:12:42 PROTO = UDP SPT = 51153 DPT = 123 * /
17 0 0 DROP all - eth0 * 121.230.163.125 0.0.0.0/0 / * kern.log 27 de outubro de 21:57:06 PROTO = ICMP * /
18 0 0 DROP all - eth0 * 120.132.50.66 0.0.0.0/0 / * kern.log 27 de outubro de 21:53:30 PROTO = TCP SPT = 51864 DPT = 1023 * /