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) #пропускаем на 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
pfctl -t sshblock -T show
pfctl -t sshblock -T delete 192.168.1.9
crontab -e
30 * * * * root /sbin/pfctl -t sshblock -T expire 86400
Нам предстоит защититься от перебора паролей средствами sshguard который контролирует активность на 22м порту.
Sshguard работает с любыми фаервол системами PF, netfilter/iptables, IPFIREWALL/ipfw, IPFILTER. Он следит за количеством и попытками входа и заносит ip адреса атакующих в таблицу.По умолчанию sshguard добавляет ip адрес в таблицу после 4-х неудачных попыток входа за 20-ти минутный период.
Блокировка происходит по следующей схеме:
первый раз блокируется на 420 секунд и удаляется через 7 минут второй раз на 2*420 у удаляется через 14 минут третий раз на 2*2*420 и удаляется через 28 минут и тд... 2^(N-1)*420 N-й раз.
Устанавливаем sshguard-pf:
cd /usr/ports/security/sshguard-pf && make install clean
vi /etc/syslog.conf
auth.info;authpriv.info |exec /usr/local/sbin/sshguard
killall -HUP syslogd
vi /etc/pf.conf
table <sshguard> persist
block in log quick on $ext_if proto tcp from <sshguard> to any port \ ssh label "ssh bruteforce"
block in log quick from <sshguard> label "ssh bruteforce"
pfctl -f /etc/pf.conf
pfctl -t sshguard -T show
pfctl -t sshguard -T delete 192.168.1.9
Документация по sshguard
Документация по Packet Filter (pf)