Настройки безопасности FreeBSD. Часть 3

Защита SSH

В первую очередь необходимо сменить порт SSH c 22 на какой-то другой, скажем 2022, это избавит от ботов, которые сканируют только дефолтные порты. Сделать это можно в конфиге /etc/ssh/sshd_config, после этого перезапустить sshd.

В идеале, доступ по SSH нужно ограничить только с IP или диапазона IP Вашего провайдера, ipfw:

add allow ip from 123.123.0.0/18 to me 2022
add deny ip from any to me 2022

Но, если доступ необходим с разных мест и IP заранее не известны, можно хотя бы устранить возможность подбора пароля. Для этого существует очень полезный скрипт bruteblock:

cd /usr/ports/security/bruteblock
make install clean

О настройках коротко, в инете туториалов и так полно :-P

ipfw правило

add deny ip from me to table(0)
add deny ip from table(0) to me

/etc/rc.conf

bruteblockd_enable="YES"
bruteblockd_table="0"
bruteblockd_flags="-s 5"

bruteblockd_table — номер таблицы, созданной в ipfw, туда будут добавляться IP для автоматической блокировки.

/etc/syslog.conf

auth.info;authpriv.info;mail.info         |exec /usr/local/sbin/bruteblock -f /usr/local/etc/bruteblock/bb.conf

mail.info тут добавлено для мониторинга подбора паролей ещё и к почтовым ящикам, пригодится.

/usr/local/etc/bruteblock/bb.conf

regexp          = sshd.*(?:Illegal|Invalid) user \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp1         = sshd.*Failed \S+ for (?:(?:illegal|invalid) user )?\S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp2         = sshd.*error: PAM: authentication error for (?:(?:illegal|invalid) user )\S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp3         = "sshd.*Failed keyboard-interactive\/pam for \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
regexp4         = sshd.*Did not receive identification string from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp5         = sshd.*User \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) not allowed because not listed in AllowUsers

regexp6         = dovecot.*auth failed.*rip=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*

# Количество неудачных попыток логина...
max_count       = 5
# ...за указанное время (в сек)
within_time     = 60
# Разбанивать IP через (сек):
reset_ip        = 3600
# Номер таблицы в ipfw
ipfw2_table_no = 0

Конфиг дефолтный, только добавлено выражение для парсинга логов Dovecot (попытки логина через POP3).

Запускаем демон:

/usr/local/etc/rc.d/bruteblockd start

Посмотреть текущих заблокированных брутфорсеров:

ipfw table 0 list

Если у Вас установлен logcheck, который я описывал в прошлой части, то в отчётах будут приходить все IP, добавленные в и удалённые из таблицы фаервола. Особо настырных можно заблочить навсегда :devil:

Защита POP3

Bruteblock, настроенный выше, защищает и от подбора паролей к ящикам, но Dovecot также имеет возможность ограничить доступ по IP или диапазону IP для каждого пользователя по отдельности.
Пример для passdb и userdb хранящихся в passwd-file. Путь к этому файлу прописан в конфиге /usr/local/etc/dovecot/dovecot.conf, например это /usr/local/etc/dovecot.passwd
В файле записаны юзеры, хэши их паролей, uid, gid и пути к ящикам, для ограничения достаточно в конце строки с нужным пользователем дописать через пробел allow_nets=123.123.0.0/18 например. Получится что-то вроде этого:

myemail@domain.ru:{CRAM-MD5}PASSW_HASH_HERE:1005:1002::/home/admin/data/email/domain.ru/myemail:::/var/mail/virtuser_1005 allow_nets=123.123.0.0/18

Теперь при попытке авторизации с IP вне указанного диапазона даже с правильным паролем сервер ответит Authentication failed.

Также в dovecot.conf будет полезно убрать PLAIN и LOGIN из механизмов авторизации, чтобы пароль в чистом виде не передавался от Вас серверу. Можно оставить cram-md5, The Bat! например его поддерживает:

auth_mechanisms = digest-md5 cram-md5

Оставить комментарий

Оповещать о новых комментариях по RSS