Comando grep -q com problemas ou formatado de maneira errada?

1. Comando grep -q com problemas ou formatado de maneira errada?

Andre Lopes
morrab

(usa CentOS)

Enviado em 07/01/2020 - 16:53h

Pessoal boa tarde,

Estou montando um Script que pega informações dos arquivos de Log do Linux e depois verifica se existe o Ip está bloqueado no iptables e caso não esteja, ele bloqueia.
Estou tendo dificuldade no retorno do iptables com grep -q. Segue parte do script:

cat /root/attacks/attack | sort -u > /root/attacks/attack.log
rm -rf /root/attacks/attack

for i in `cat /root/attacks/attack.log`; do
# Verificando se já está bloqueado, caso não, bloqueia
IPBLQ=`iptables -S | grep -qE "INPUT.* $i.* ATTACK_BLQ"`

if [ $IPBLQ == 0 ]; then
iptables -A INPUT -i ppp0 -s $i -j ATTACK_BLQ
fi
done


Obrigado!

Sds,

André


  


2. Re: Comando grep -q com problemas ou formatado de maneira errada?

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/01/2020 - 17:07h

Use o teste do grep diretamente.
Algo como:
if iptables -S | grep -qE "INPUT.* $i.* ATTACK_BLQ"; then
iptables -A INPUT -i ppp0 -s $i -j ATTACK_BLQ
fi


Mas também acho que funcionaria:
IPBLQ=`iptables -S | grep -qE "INPUT.* $i.* ATTACK_BLQ"; echo "${?}"`

if [ $IPBLQ == 0 ]; then
iptables -A INPUT -i ppp0 -s $i -j ATTACK_BLQ
fi


Pois o 'if' testa o valor de saída dos comandos, que não é lançado para o stdout, mas fica armazenado em uma variável especial '$?'. Então a única maneira de imprimir o código de saída na variável IPBLQ, é dando um echo dessa variável..
Mas você não precisa disso para fazer este teste...



3. Re: Comando grep -q com problemas ou formatado de maneira errada?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/01/2020 - 18:49h

morrab escreveu:

Pessoal boa tarde,

Estou montando um Script que pega informações dos arquivos de Log do Linux e depois verifica se existe o Ip está bloqueado no iptables e caso não esteja, ele bloqueia.
Estou tendo dificuldade no retorno do iptables com grep -q. Segue parte do script:

cat /root/attacks/attack | sort -u > /root/attacks/attack.log
rm -rf /root/attacks/attack

for i in `cat /root/attacks/attack.log`; do
# Verificando se já está bloqueado, caso não, bloqueia
IPBLQ=`iptables -S | grep -qE "INPUT.* $i.* ATTACK_BLQ"`

if [ $IPBLQ == 0 ]; then
iptables -A INPUT -i ppp0 -s $i -j ATTACK_BLQ
fi
done
Obrigado!
Sds,
André

Boa noite André.
Segue sugestão:

iptables -S > regras.txt;
while read line; do
if ! grep -q "INPUT.*${line}.* ATTACK_BLQ" regras.txt;then
iptables -A INPUT -i ppp0 -s ${line} -j ATTACK_BLQ
fi
done<<<$(sort -u /root/attacks/attack)


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts