Como bloquear endereços IP abusivos com pf no OpenBSD?

14

Podemos ver nos logs do nginx que há um endereço IP fazendo coisas desagradáveis.

Como podemos bloqueá-lo com um pfcomando e depois permanentemente com o /etc/pf.log? Como podemos bloquear um x.x.x.x/24para esse IP? É um exemplo: 1.2.3.4

UPDATE: não, parece que o OpenBSD não possui arquivo de permissão / negação em / etc. E o AFAIK, o melhor conselho para bloquear endereços IP abusivos, está usando o pf.

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 
somelooser28533
fonte
Você tem um arquivo hosts.deny no diretório / etc?
precisa saber é o seguinte

Respostas:

13

A melhor maneira de fazer isso é definir uma tabela e criar uma regra para bloquear os hosts, em pf.conf:

table <badhosts> persist
block on fxp0 from <badhosts> to any

E adicione / exclua dinamicamente endereços IP a partir dele:

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4

Outros comandos da 'tabela' incluem flush(remover tudo) replacee show. Veja man pfctlpara mais.

Se você deseja uma lista mais permanente, pode mantê-la em um (ou mais) arquivos. Em pf.conf:

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any

Você também pode adicionar nomes de host em vez de endereços IP. Veja a seção "Tabelas" de man pf.confe man pfctl.

Nota : Os exemplos acima assumem que a interface da Internet é fxp0, altere de acordo com a sua configuração. Além disso, lembre-se de que as regras pf.confsão avaliadas sequencialmente e são blockou são passa última regra de correspondência que se aplica. Com este conjunto de regras

table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80

e depois de adicionar 1.2.3.4 e 192.168.0.10 à badhoststabela

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10

todo o tráfego de 1.2.3.4 e 192.168.0.10 será bloqueado, mas a segunda série vai ser capaz de fazer conexões à porta de outras máquinas de 80 porque os passjogos de regras e substitui a blockregra.

Zé Loff
fonte
4
A regra de bloqueio pode ser mais facilmente especificada como block in from <badhosts>. Você não precisa especificar a interface ou a to anypeça.
Kurtm
4

De outras respostas, não está claro que você precisa criar uma tabela real dos badhosts que você está tentando bloquear.

Isso ocorre no arquivo pf.conf, por exemplo, eu tenho dois arquivos badguys, 1 e 2 badguys1 são para aqueles que vêm e vão e badguys2 é para lista negra permanente.

Portanto, se você precisar adicionar um ip de alguém que seja incômodo por um período de tempo, adicione-o ao badguys1.

Agora, no seu arquivo pf.conf, você tem isso. No meu exemplo eu uso en1, porque essa é a minha interface WiFi. Defina isso para qualquer interface da sua rede.

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any

Agora você pode adicionar endereços temporários ao badguys1. (NÃO badhosts, esse é um nome para as tabelas)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Embora diga 1 tabela criada - ele realmente adiciona o ip, não criando uma nova tabela. Agora, se você olhar em badguys1, verá o novo IP.

sudo pfctl -t badhosts -T show
user160328
fonte
3

Eu obtive essas informações no site e me perdoe pelo meu mau conhecimento OpenBSD, mas aqui vai. Dê uma olhada neste URL . Segundo ele, ele afirma que, para bloquear um IP, você:

echo '123.123.123.123' >> /etc/pf.blocked.ip.conf

Então você reiniciaria o firewall:

pfctl -d
pfctl -e -f /etc/pf.conf

Ou, para adicionar sem reiniciar o tipo de firewall:

pfctl -t blockedips -T add 111.222.333.444

Agora, para verificar se foi adicionado, digite:

pfctl -t blockedips -T show

Atualização: Talvez isso ajude.

  • Abra o seguinte arquivo no vi:

    vi /etc/pf.conf

  • Adicione a seguinte linha de código:

    table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="bge0" # interface connected to internet

  • Após esse ponto, tentaria reiniciar o firewall e confirmar que o IP está bloqueado digitando:

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    
ryekayo
fonte
1
Eu acho que as necessidades de mesa para ser definido como bloco, mas essa parte não é claro no howto, segui-lo, mas o IP ainda não está bloqueado
somelooser28533
Deixe-me ver se consigo descobrir como fazê-lo.
precisa saber é o seguinte
2
Não há necessidade de desativar e reativar o pf para recarregar o pf.conf. pfctl -f /etc/pf.confbasta.
Zé Loff
1
(Maus) HOWTOs desencorajam o pensamento e incentivam a cópia. Leia man pf.conf, você ficará surpreso com o quão boas as páginas de manual do OpenBSD são. Além disso, os pf.confarquivos precisam ser lidos como um todo (a ordem na qual as regras são colocadas é crucial); portanto, copiar e colar linhas únicas geralmente é uma má idéia. Crie o arquivo e a tableregra (isso está correto), mas você compartilha todo o pf.confarquivo ou depende de você descobrir a blockregra apropriada e sua localização no arquivo.
Zé Loff 10/09
1
@ryekayo A menos que você possa justificar a inclusão da ext_if="bge0"macro e por que você não tem uma regra de bloqueio , criticarei sua resposta, porque ela é incompleta (ou seja, não é uma resposta adequada), independentemente do esforço que você coloca nela. Além disso, meu comentário sobre os HOWTOs foi abordado no OP, não você (desculpas, eu deveria ter deixado isso claro).
Zé Loff 10/09