Jak zablokować obraźliwe adresy IP za pomocą pf w OpenBSD?


13

Z dzienników nginx widać, że adres IP robi paskudne rzeczy.

Jak możemy to zablokować za pomocą pfpolecenia, a następnie na stałe za pomocą /etc/pf.log? Jak możemy zablokować x.x.x.x/24dla tego adresu IP? Jest to przykład: 1.2.3.4

AKTUALIZACJA: nie, wygląda na to, że OpenBSD nie ma pliku zezwolenia / odmowy w / etc. A AFAIK najlepszą radą do blokowania niewłaściwych adresów IP jest użycie pf.

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

Czy masz plik hosts.deny w katalogu / etc?
ryekayo

Odpowiedzi:


13

Najlepszym sposobem na to jest zdefiniowanie tabeli i utworzenie reguły blokującej hosty w pf.conf:

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

A następnie dynamicznie dodawaj / usuwaj z niego adresy IP:

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

Inne polecenia „table” obejmują flush(usuń wszystko) replacei show. Zobacz man pfctlwięcej.

Jeśli chcesz mieć bardziej trwałą listę, możesz przechowywać ją w jednym (lub więcej) plikach. W pf.conf:

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

Możesz także dodać nazwy hostów zamiast adresów IP. Zobacz sekcję „Tabele” man pf.confi man pfctl.

Uwaga : w powyższych przykładach założono, że interfejs internetowy to: fxp0Zmień w zależności od konfiguracji. Należy również pamiętać, że reguły pf.confsą oceniane kolejno i dla blocklub passrządzi ostatnią pasującą regułą, która ma zastosowanie. Z tym zestawem reguł

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

i po dodaniu 1.2.3.4 i 192.168.0.10 do badhoststabeli

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

cały ruch z 1.2.3.4 i 192.168.0.10 zostanie zablokowany, ale drugi host będzie mógł nawiązywać połączenia z portem 80 innych komputerów, ponieważ passreguła jest zgodna i zastępuje blockregułę.


4
Regułę bloku można łatwiej określić jako block in from <badhosts>. Nie musisz określać interfejsu ani to anyczęści.
kurtm

4

Z innych odpowiedzi nie wynika jasno, że musisz utworzyć rzeczywistą tabelę złych hostów, które próbujesz zablokować.

Dotyczy to pliku pf.conf, na przykład mam dwa pliki badguys, 1 i 2 badguys1 jest dla tych, którzy przychodzą i odchodzą, a badguys2 jest na stałe na czarnej liście.

Więc jeśli chcesz dodać ip kogoś, kto jest uciążliwy przez pewien czas, dodaj go do badguys1.

Teraz masz to w pliku pf.conf. W moim przykładzie używam en1, ponieważ taki jest mój interfejs WiFi. Ustaw to na jakimkolwiek interfejsie, w którym pojawia się twoja sieć.

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

Teraz możesz dodawać tymczasowe adresy do badguys1. (NIE złe hosty, to nazwa tabel)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Chociaż mówi, że utworzono 1 tabelę - w rzeczywistości dodaje ip, nie tworząc nowej tabeli. Teraz, jeśli spojrzysz na badguys1, zobaczysz nowy adres IP.

sudo pfctl -t badhosts -T show

3

Otrzymałem te informacje ze strony internetowej i wybaczam mi moją złą wiedzę OpenBSD, ale proszę bardzo. Spójrz na ten adres URL . Zgodnie z nim stwierdza blokowanie adresu IP, który:

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

Następnie zrestartujesz zaporę:

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

Lub, aby dodać bez ponownego uruchamiania typu zapory:

pfctl -t blockedips -T add 111.222.333.444

Teraz, aby sprawdzić, czy został dodany, wpisz:

pfctl -t blockedips -T show

Aktualizacja: Może to pomogłoby.

  • Otwórz następujący plik w vi:

    vi /etc/pf.conf

  • Dodaj następujący wiersz kodu:

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

  • Po tym punkcie spróbowałbym zrestartować zaporę ogniową i potwierdzić, że adres IP jest zablokowany, wpisując:

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

1
Myślę, że tabela musi być ustawiona na blokowanie, ale ta część nie jest jasna w howto, poszedłem za nią, ale IP wciąż nie jest zablokowany
somelooser28533

Zobaczę, czy mogę to zrobić.
ryekayo

2
Nie ma potrzeby wyłączania i ponownego włączania pf, aby ponownie załadować pf.conf. pfctl -f /etc/pf.confwystarczy.
Zé Loff,

1
(Złe) HOWTO zniechęcają do myślenia i zachęcają do kopiowania. Przeczytaj man pf.conf, zdziwisz się, jak dobre są strony podręcznika OpenBSD. Ponadto pf.confpliki należy odczytywać jako całość (kolejność, w jakiej reguły są wprowadzane, ma kluczowe znaczenie), więc kopiowanie i wklejanie pojedynczych wierszy jest zwykle złym pomysłem. Utwórz plik i tableregułę (to wszystko jest poprawne), ale albo udostępniasz cały pf.confplik, albo od Ciebie zależy, czy znajdziesz odpowiednią blockregułę i jej lokalizację w pliku.
Zé Loff,

1
@ryekayo O ile nie możesz uzasadnić włączenia ext_if="bge0"makra i dlaczego nie masz reguły blokowania , skrytykuję twoją odpowiedź, ponieważ jest ona niekompletna (tj. nie jest poprawną odpowiedzią), niezależnie od wysiłku włożonego w to. Dodatkowo mój komentarz dotyczący HOWTO został skierowany do PO, a nie do ciebie (przepraszam, powinienem był to wyjaśnić).
Zé Loff,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.