drop ips com iptables from awk result [closed]

1

Eu tenho um arquivo de log assim:

Frq:15 IP:0.0.0.0 Date: 2014-03-21 12:19:31 AM
Frq:9 IP:198.252.206.25 Date: 2014-03-21 12:19:31 AM

Agora eu recebo a coluna de endereços IP com o awk:

cat /tmp/test | awk '{print $2}'|awk '{gsub("IP:", "");print}' 

E o resultado é:

0.0.0.0
198.252.206.25

Eu quero adicionar este endereço IP no iptables para ser DROP de INPUT, mas eu não sei como

Obrigado amigos.

    
por Morteza Soltanabadiyan 20.03.2014 / 22:02

3 respostas

1

Minha tentativa:

awk '{sub("IP:", "", $2); print $2}' /tmp/test | xargs -n1 -I{} iptables -A INPUT -s {} -j DROP
    
por 20.03.2014 / 22:43
6

Você estará mais à frente ao estender fail2ban ao inserir um arquivo de configuração personalizado em sua .d config directory.

Faça o mínimo de trabalho possível!

    
por 20.03.2014 / 23:10
1

Você pode escrever um script que faça um loop sobre o resultado awk e crie as regras iptables adequadas:

#!/bin/sh

cat /tmp/test | awk '{print $2}'|awk '{gsub("IP:", "");print}' | while read IP
do
  iptables -A INPUT -s $IP -j DROP
done

No entanto, eu não sei o seu contexto e como seu arquivo de log pode ser confiável, mas é perigoso e você deve pesquisar quais IPs você está soltando.

Para um exemplo, o seguinte faz uma exceção para 127.0.0.1 :

#!/bin/sh

cat /tmp/test | awk '{print $2}'|awk '{gsub("IP:", "");print}' | while read IP
do
  if [ "$IP" != "127.0.0.1" ]; then
    iptables -A INPUT -s $IP -j DROP
  fi
done
    
por 20.03.2014 / 22:31