Як заблокувати зловмисні IP-адреси за допомогою pf у OpenBSD?


13

З журналів nginx ми бачимо, що IP-адреса робить неприємні речі.

Як ми можемо заблокувати його pfкомандою, а потім пізніше назавжди за допомогою /etc/pf.log? Як можна заблокувати x.x.x.x/24цей IP? Це приклад: 1.2.3.4

ОНОВЛЕННЯ: ні, схоже, що OpenBSD не має дозволу / заборонити файл у / etc. А AFAIK найкраще радить для блокування образливих IP-адрес - використання pf.

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

У вас є файл hosts.deny в каталозі / etc?
ryekayo

Відповіді:


13

Найкращий спосіб зробити це - визначити таблицю та створити правило для блокування хостів у pf.conf:

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

А потім динамічно додавати / видаляти з нього IP-адреси:

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

Інші команди "таблиця" включають flush(видалити всі) replaceта show. Дивіться man pfctlдокладніше.

Якщо ви хочете більш постійний список, ви можете зберігати його в одному (або більше) файлах. В pf.conf:

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

Ви можете також додати імена хостів замість IP-адрес. Дивіться розділ "Таблиці" man pf.confта man pfctl.

Примітка : Наведені вище приклади припускають , що інтернет-облицювальний інтерфейс fxp0, будь ласка , змінюються в відповідності з вашими настройками. Крім того, майте на увазі, що правила в pf.confоцінюються послідовно і для blockабо passправила - це останнє правило відповідності, яке застосовується. За допомогою цього набору правил

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

і після додавання до badhostsтаблиці 1.2.3.4 та 192.168.0.10

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

весь трафік від 1.2.3.4 і 192.168.0.10 буде заблокований , але другий господар буде мати можливість зробити підключення до порту інших машин 80 , тому що passправила матчі і перевизначати blockправила.


4
Правило блоку можна легше вказати як block in from <badhosts>. Вам не потрібно вказувати інтерфейс або to anyдеталь.
куртм

4

З інших відповідей незрозуміло, що вам потрібно створити фактичну таблицю зловживань, які ви намагаєтесь заблокувати.

Це стосується файлу pf.conf, наприклад, у мене є два файли badguys, 1 і 2 badguys1 - для тих, хто приходить і йде, а badguys2 - для постійного чорного списку.

Тож якщо вам потрібно додати ip того, хто викликає неприємності протягом певного періоду часу, додайте їх до badguys1.

Тепер у вашому файлі pf.conf ви маєте це. У своєму прикладі я використовую en1, тому що це мій інтерфейс WiFi. Встановіть це на будь-який інтерфейс, у який входить ваша мережа.

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

Тепер ви можете додати тимчасові адреси до badguys1. (НЕ шкідники, це назва таблиць)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Хоча в ньому сказано, що створена 1 таблиця - вона фактично додає ip, не створюючи нової таблиці. Тепер якщо ви заглянете в badguys1, ви побачите новий IP.

sudo pfctl -t badhosts -T show

3

Цю інформацію я отримав з веб-сайту і пробачив мені за те, що я погано знаю OpenBSD, але це справа. Погляньте на цю URL-адресу . Згідно з цим, він заявляє, що заблокувати IP-адресу ви б:

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

Тоді ви б перезапустили брандмауер:

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

Або додати без перезавантаження типу брандмауера:

pfctl -t blockedips -T add 111.222.333.444

Тепер, щоб перевірити, чи було додано тип:

pfctl -t blockedips -T show

Оновлення: Можливо, це допоможе.

  • Відкрийте наступний файл in vi:

    vi /etc/pf.conf

  • Додайте наступний рядок коду:

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

  • Після цього я спробую перезапустити брандмауер і підтвердити, що IP заблоковано, ввівши:

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

1
Я думаю, таблицю потрібно встановити для блокування, але ця частина незрозуміла в хоті, я дотримувався її, але IP все ще не заблокований
somelooser28533

Дозвольте мені побачити, чи можу я шукати, як це зробити.
ryekayo

2
Для перезавантаження pf.conf не потрібно робити відключення та повторне включення pf. pfctl -f /etc/pf.confдостатньо.
Зе Лофф

1
(Погано) HOWTO відлякують мислення та заохочують копіювати. Читайте man pf.conf, ви будете здивовані тим, наскільки хороші чоловічі сторінки OpenBSD. Крім того, pf.confфайли потрібно читати в цілому (порядок введення правил є вирішальним), тому копіювання та вставлення окремих рядків зазвичай є поганою ідеєю. Створіть файл і tableправило (настільки, що це правильно), але або ви поділитесь усім pf.confфайлом, або вирішувати відповідне blockправило та його розташування у файлі.
Зе Лофф

1
@ryekayo Якщо ви не можете обґрунтувати включення ext_if="bge0"макросу і чому у вас немає правила блоку, я буду критикувати вашу відповідь, оскільки вона неповна (тобто не є правильною відповіддю), незалежно від зусиль, які ви доклали до неї. Плюс мій коментар щодо HOWTO був адресований на ОП, а не ви (вибачте, я повинен був це зрозуміти).
Зе Лофф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.