Come bloccare indirizzi IP offensivi con pf in OpenBSD?


14

Dai registri nginx possiamo vedere che esiste un indirizzo IP che fa cose cattive.

Come possiamo bloccarlo con un pfcomando e successivamente in modo permanente con il /etc/pf.log? Come possiamo bloccare un x.x.x.x/24per quell'IP? È un esempio: 1.2.3.4

AGGIORNAMENTO: no, sembra che OpenBSD non abbia il file consenti / nega in / etc. E AFAIK il miglior consiglio per bloccare indirizzi IP offensivi sta usando pf.

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 

Hai un file hosts.deny nella directory / etc?
ryekayo,

Risposte:


13

Il modo migliore per farlo è definire una tabella e creare una regola per bloccare gli host, in pf.conf:

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

E quindi aggiungere / eliminare dinamicamente gli indirizzi IP da esso:

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

Altri comandi 'table' includono flush(rimuovi tutto) replacee show. Vedi man pfctldi più.

Se desideri un elenco più permanente, puoi tenerlo in uno (o più) file. In pf.conf:

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

È inoltre possibile aggiungere nomi host anziché indirizzi IP. Vedi la sezione "Tabelle" di man pf.confe man pfctl.

Nota : gli esempi sopra riportati presuppongono che l'interfaccia Internet sia fxp0, si prega di cambiare in base alla propria configurazione. Inoltre, tieni presente che le regole in pf.confvengono valutate in sequenza e per blocko passregole è l'ultima regola corrispondente che si applica. Con questo set di regole

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

e dopo aver aggiunto 1.2.3.4 e 192.168.0.10 alla badhoststabella

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

tutto il traffico da 1.2.3.4 e 192.168.0.10 verrà bloccato ma il secondo host sarà in grado di effettuare connessioni alla porta 80 di altre macchine perché la passregola corrisponde e sovrascrive la blockregola.


4
La regola di blocco può essere specificata più facilmente come block in from <badhosts>. Non è necessario specificare l'interfaccia o la to anyparte.
Kurtm,

4

Non è chiaro dalle altre risposte che è necessario creare una tabella effettiva dei badhosts che si sta tentando di bloccare.

Questo va nel file pf.conf, ad esempio ho due file badguys, 1 e 2 badguys1 è per quelli che vanno e vengono, e badguys2 è per la lista nera permanente.

Quindi, se hai bisogno di aggiungere un IP di qualcuno che è un fastidio per un periodo di tempo, aggiungilo a badguys1.

Ora, nel tuo file pf.conf hai questo. Nel mio esempio uso en1, perché questa è la mia interfaccia WiFi. Impostalo su qualsiasi interfaccia su cui acceda la tua rete.

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

Ora puoi aggiungere indirizzi temporanei a badguys1. (NON badhosts, questo è un nome per le tabelle)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Anche se dice 1 tabella creata - in realtà aggiunge l'ip, non creando una nuova tabella. Ora se guardi badguys1, vedrai il nuovo IP.

sudo pfctl -t badhosts -T show

3

Ho ricevuto queste informazioni dal sito Web e mi perdono per la mia scarsa conoscenza OpenBSD, ma eccolo qui. Dai un'occhiata a questo URL . Secondo esso, afferma che per bloccare un IP dovresti:

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

Quindi riavvieresti il ​​firewall:

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

Oppure, per aggiungere senza riavviare il tipo di firewall:

pfctl -t blockedips -T add 111.222.333.444

Ora per verificare se è stato aggiunto digitare:

pfctl -t blockedips -T show

Aggiornamento: forse questo sarebbe d'aiuto.

  • Apri il seguente file in vi:

    vi /etc/pf.conf

  • Aggiungi la seguente riga di codice:

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

  • Dopo quel punto, proverei a riavviare il firewall e a confermare che l'IP è bloccato digitando:

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    

1
Penso che la tabella debba essere impostata per bloccare, ma quella parte non è chiara nel howto, l'ho seguito, ma l'IP non è ancora bloccato
somelooser28533

Fammi vedere se riesco a cercare come farlo.
ryekayo,

2
Non è necessario disabilitare e riattivare pf per ricaricare pf.conf. pfctl -f /etc/pf.confè abbastanza.
Zé Loff,

1
(Cattivo) Gli HOWTO scoraggiano il pensiero e incoraggiano la copia. Leggi man pf.conf, rimarrai sorpreso da quanto siano buone le pagine man di OpenBSD. Inoltre, i pf.conffile devono essere letti nel loro insieme (l'ordine in cui vengono inserite le regole è fondamentale), quindi copiare e incollare singole righe è di solito una cattiva idea. Crea il file e la tableregola (che è molto corretto) ma o condividi l'intero pf.conffile o spetta a te capire la blockregola appropriata e la sua posizione nel file.
Zé Loff,

1
@ryekayo A meno che non si può giustificare l'inserimento della ext_if="bge0"macro e perché non si dispone di una regola di blocco poi mi si critica la tua risposta, perché è incompleta (cioè non una risposta adeguata), a prescindere dello sforzo che mettete in esso. Inoltre, il mio commento sugli HOWTO è stato rivolto all'OP, non a te (mi scuso, avrei dovuto chiarirlo).
Zé Loff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.