Настройки безопасности 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
О настройках коротко, в инете туториалов и так полно
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, добавленные в и удалённые из таблицы фаервола. Особо настырных можно заблочить навсегда
Защита 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