Как заблокировать некорректные 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
# 
somelooser28533
источник
У вас есть файл 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

Другие команды 'table' включают в себя 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

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

$ 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
user160328
источник
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

Обновление: возможно, это поможет.

  • Откройте следующий файл в 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
    
ryekayo
источник
1
Я думаю, что таблицу нужно настроить на блокировку, но эта часть не ясна в инструкции, я следовал ей, но IP все еще не заблокирован
somelooser28533
Дай мне посмотреть, смогу ли я посмотреть, как это сделать.
ryekayo
2
Нет необходимости отключать и включать pf для перезагрузки pf.conf. pfctl -f /etc/pf.confдостаточно.
Zé Loff
1
(Плохо) HOWTO мешают думать и поощряют копирование. Читайте man pf.conf, вы будете удивлены, насколько хороши справочные страницы OpenBSD. Кроме того, pf.confфайлы должны быть прочитаны целиком (порядок, в котором устанавливаются правила, имеет решающее значение), поэтому копирование и вставка отдельных строк обычно является плохой идеей. Создайте файл и tableправило (это правильно), но вы либо поделитесь своим pf.confфайлом целиком, либо вам нужно выяснить подходящее blockправило и его расположение в файле.
Зе Лофф
1
@ryekayo Если вы не можете оправдать включение ext_if="bge0"макроса и почему у вас нет правила блокировки, я буду критиковать ваш ответ, потому что он неполный (т.е. не правильный ответ), независимо от того, какие усилия вы в него вложили. Плюс мой комментарий, касающийся HOWTO, был адресован OP, а не вам (извините, я должен был это прояснить).
Зе Лофф