bernardocr
(usa FreeBSD)
Enviado em 20/06/2014 - 15:17h
Boa tarde,
Tenho um comando que verifica as conexões ativas na minha máquina e executa o comando tcpdrop para derrubar as conexões acima de um número X (para minimizar os efeitos de um ataque synflood).
O comando é o seguinte (incluído no arquvi tcpdrop.sh):
netstat -an | grep ^tcp | awk '{ print $5 }' | egrep -v '^(172\.16|192\.168|127\.0)' | cut -f1-4 -d\. | awk '{ a[$1]++ } END { for (i in a) { if (a[i] > 70) { print i; } } }' | xargs -n1 -I % sh -c 'sockstat -c | grep %' | awk '{ print $6 " " $7 }' | sed -e 's/:/ /g' -e 's/^/ tcpdrop /' | sh
O comando funciona corretamente quando eu executo ./tcpdrop.sh, entretanto, ao colocar na crontab para que o script seja executado de tempos em tempos, retorna o seguinte erro:
tcpdrop: not found
tcpdrop: not found
tcpdrop: not found
Já tentei adicionar uma alias, tcpdrop=/usr/sbin/tcpdrop, mas não funcionou.
Pensei em uma saída, que seria colocar o output do "tcpdrop" para "/usr/sbin/tcpdrop", no trecho sed -e 's/:/ /g' -e 's/^/ tcpdrop /', mas não sei como fazer isso no comando, utilizando o "sed".
Outra dúvida seria como fazer para que o comando ignorasse alguns ips específicos, como por exemplo, 67.43.2.1, tentei incluir a exclusão do ip no trecho egrep -v '^(172\.16|192\.168|127\.0)', mas não consegui.
Agradeço a ajuda!