Блокировка брутфорс атак на ssh средствами Packet Filter (pf

Ответить
admin
Администратор
Сообщения: 198
Зарегистрирован: 05 янв 2011, 04:19

Блокировка брутфорс атак на ssh средствами Packet Filter (pf

Сообщение admin »

PF поддерживает как IPv4 так и IPv6

OpenSSH предоставляет защищенную альтернативу протоколам первого поколения, таким как telnet и ftp, где логины и пароли передаются открытым текстом. Но простого использования SSH вместо telnet в наше время уже не достаточно.
Если используются простые пароли в SSH, то взломать их также легко, как если бы они передавались открытым текстом.

И нам предстоит защититься от перебора паролей средствами Packet Filter (pf)

Есть и другие способы защиты, такие как sshguard-ipfilter, sshguard-ipfw, sshguard-pf, sshguard.

Редактируем файл конфигурации PF:

vi /etc/pf.conf


Код: Выделить всё

table <sshblock> persist #создаём таблицу
set skip on lo0 #пропускаем проверку на петле
set block-policy return #для отброшенных пакетов TCP отсылается пакет TCP RST
#для прочих ICMP Unreachable
#если DOSят то можно указать "drop"
# set block-policy drop #пакет молча отбрасывается
scrub in all #собираем все части пакета перед отправкой
block all #запретим все отовсюду
block in log quick from <sshblock> #блокируем тех кто попал в sshblock
 
#=====это по статье==========
#pass in on $int_if proto tcp from $int_if:network to $int_if port ssh \
#synproxy state (max-src-conn-rate 2/60, overload <sshblock> flush global)
#===так лучше
pass in on $int_if proto tcp from $int_if:network to $int_if port ssh \
keep state (max-src-conn-rate 2/60, overload <sshblock> flush global)

#пропускаем на ssh из внутренней подсети, а злодеев заносим в таблицу
pass in on $ext_if proto tcp from any to $ext_if port ssh \
synproxy state (max-src-conn-rate 2/60, overload <sshblock> flush global)
#пропускаем на ssh из вешней подсети, и тоже заносим злодеев в таблицу
pass in on $int_if from any to any #разрешаем всё из локальной сети
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет
pass in inet proto icmp all icmp-type echoreq #разрешаем ping


Если вы получаете ip адрес по DHCP, то вместо переменной $ext_if вы можете указать имя WAN интерфейса в круглых скобках (rl0), тогда при смене ip адреса pf подменит его на лету.

посмотреть тех кто в таблице можно так:

pfctl -t sshblock -T show


Удалить ip адрес (например 192.168.1.9), из таблицы можно так:

pfctl -t sshblock -T delete 192.168.1.9


осталось настроить cron

crontab -e


30 * * * * root /sbin/pfctl -t sshblock -T expire 86400


Каждые час (в 30 минут) "-T expire 86400" удаляет все записи из таблицы старше 86400 секунд (сутки)

max number

Ограничение максимального количества записей в таблице состояний, которое может сделать данное правило. По достижении этого предела, будет отброшен любой пакет, который должен был бы завести новую запись в таблице состояний. Пакеты будут отбрасываться до тех пор, пока число записей в таблице состояний не уменьшится.

source-track

Эта опция даёт возможность отслеживать количество записей в таблице состояний в пересчёте на каждый адрес источника. Возможные форматы опции:

* source-track rule — Максимальное количество записей в таблице состояний созданных данным правилом ограничивается опциями max-src-nodes и max-src-states, заданными в этом правиле. Счётчики заводятся не глобальные, а локальные.

* source-track global — То же что и в предыдущем слуаче, но счётчики ведутся глобально. При этом каждое правило может иметь свои пределы max-src-nodes и max-src-states, однако счётчики будут общими для всех правил.

Общее количество адресов источников, для которых осуществляется глобальный контроль количества строк в таблице состояний, ограничивается при помощи опции src-nodes.

max-src-nodes number

При использовании опции source-track опция max-src-nodes ограничивает количество IP-адресов с которых можно одновременно открыть соединения.

max-src-states number

При использовании опции source-track опция max-src-states ограничивает количество соединений с одного IP-адреса.

max-src-conn number

Ограничение максимального количества TCP соединений прошедших тройное рукопожатие, которые можно открыть с одного IP-адреса.
max-src-conn-rate number / interval

Ограничение скорости с которой можно открывать новые соединения. Задаётся количество соединений за интервал времени.

Обе опции автоматически включают опцию state-track rule и не совместимы с state-track global.

В комбинации с данными опциями можно употреблять более агрессивные опции, для «наказания» «провинившихся».overload

При превышении лимитов занести адрес источника в таблицу.
flash [global]

Уничтожить все записи в таблице состояний соответствующие соединениям с данного IP-адреса. При указании опции global записи в таблице состояний сбрасываются независимо от того, какое правило её создало.
Ответить