Tente isto:
ufw insert $(sed -n '/ALLOW/{s/^.*ALLOW *\[ *\([0-9]\+\).*$//;p;q}' <(ufw status numbered)) allow from '%IP%' to any; ufw reload
Em /etc/knockd.conf
eu quero um comando que será um comando ufw insert [line number]...
, o número da linha é dinâmico e pode ser obtido ao encontrar a primeira ocorrência de ALLOW
na saída do comando ufw status numbered
. Eu cheguei até aqui
ufw status numbered|sed -n '/ALLOW/p'|sed q|sed 's/].*//'|sed 's/\(\[\)//g'
que produz o número de que preciso. Esse número precisará se tornar uma parte intermediária do comando ufw insert
, para dinamicamente (virtualmente) produzir este comando:
ufw insert 5 allow from %IP% to any; ufw reload
O 5
acima é o número da linha de exemplo da primeira linha ALLOW
na saída de status ufw. O %IP%
está literalmente no comando virtual desejado.
Então, eu acho que a linha de comando começaria com o comando ufw status e sed, que produz o número da linha, e de alguma forma constrói o comando virtual e atribui o número a ele. Não esqueça que o comando virtual termina com o comando ufw reload.
Tudo isto faz parte de um sistema de vigilância em casa, um servidor headless rodando o Ubuntu 15.04. Eu escolhi knockd
porque os fabricantes de blacklists de firewall que eu vi não pegaram e colocaram o perp na lista negra na primeira sonda. Com o knockd, posso definir uma regra /etc/knockd.conf
para colocar na lista negra o IP de um perp baseado em um único hit em minha porta 22, 80, 443, o que eu quiser. Minhas regras do ufw têm três seções:
ufw insert 1 deny from %IP% to any; ufw reload
em /etc/knockd.conf
), Tente isto:
ufw insert $(sed -n '/ALLOW/{s/^.*ALLOW *\[ *\([0-9]\+\).*$//;p;q}' <(ufw status numbered)) allow from '%IP%' to any; ufw reload