Защита от брутфорса с помощью inetd
Введение
В этой статье я рассмотрю способ защиты от брутфорса (и DDoS-атак) FTP, SSH, POP3 и IMAP сервисов с помощью штатных возможностей inetd.
По умолчанию через inetd запускаются FTP и SSH сервисы:
# /etc/inetd.conf ftp stream tcp nowait root /usr/local/sbin/in.proftpd proftpd ssh stream tcp nowait root /usr/sbin/sshd sshd -i -4
Матчасть
Интересующие нас параметры inetd:
-c maximum Определение максимального числа одновременных запусков каждой службы; по умолчание не ограничено. Может быть переопределено индивидуально для каждой службы при помощи параметра max-child.
-C rate Определение по умолчанию максимального количества раз, которое служба может быть вызвана с одного IP-адреса в минуту; по умолчанию не ограничено. Может быть переопределено для каждой службы параметром max-connections-per-ip-per-minute.
-R rate Определяет максимальное количество раз, которое служба может быть вызвана в минуту; по умолчанию 256. Частота, равная 0, не ограничивает число вызовов.
-s maximum Задает максимальное количество процессов, одновременно обслуживающих один сервис для одного IP адреса; по умолчанию не ограничено. Может переопределяться для каждой службы параметром max-child-per-ip.
Строки в файле /etc/inetd.conf имеют такой формат: service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] user[:group][/login-class] server-program server-program-arguments
Реализация
Модифицируем параметры для сервисов FTP и SSH следующим образом:
# /etc/inetd.conf ftp stream tcp nowait/5/1/2 root /usr/local/sbin/in.proftpd proftpd ssh stream tcp nowait/5/1/2 root /usr/sbin/sshd sshd -i -4
Перезапускаем inetd:
[root@host ~]# /etc/rc.d/inetd restart
В данном случае к службам одновременно могут обратиться 5 клиентов, с одного IP-адреса возможно одновременно 2 подключения, причем c одного IP-адреса нельзя будет подключиться чаще 1 раза в минуту.
Дополнительная защита для ssh
В файл /etc/sshd_config добавляем следующую опцию:
MaxAuthTries 1
Это означает, что пользователь имеет право на MaxAuthTries + 1 = 2 попытки авторизации.
Чтобы разрешить только 1 попытку авторизации, необходимо выставить значение MaxAuthTries в 0:
MaxAuthTries 0
Дополнительная защита для proftpd
В файл /usr/local/etc/proftpd.conf добавляем:
MaxLoginAttempts 1
Теперь при соединении возможна только 1 попытка авторизации
Защищаем почту (dovecot)
В прочем, я этим не ограничился, и решил dovecot (POP3 и IMAP сервер) также пустить через inetd.
Для этого останавливаем dovecot:
[root@host ~]# /usr/local/etc/rc.d/dovecot stop
После чего в файле /etc/rc.conf комментируем запись про dovecot:
#dovecot_enable="YES"
И добавляем в /etc/inetd.conf следующие записи:
imap stream tcp nowait/5/1/2 root /usr/libexec/tcpd /usr/local/libexec/dovecot/imap-login imaps stream tcp nowait/5/1/2 root /usr/libexec/tcpd /usr/local/libexec/dovecot/imap-login --ssl pop3 stream tcp nowait/5/1/2 root /usr/libexec/tcpd /usr/local/libexec/dovecot/pop3-login pop3s stream tcp nowait/5/1/2 root /usr/libexec/tcpd /usr/local/libexec/dovecot/pop3-login --ssl
После чего перезапускаем inetd:
[root@host ~]# /etc/rc.d/inetd restart
Заключение
Выставив ограничения, мы ограничиваем активность нежелательных на нашем сервере персон.
Разумеется, вы предпочтете модифицировать лимиты по вашему усмотрению, соответственно вашим потребностям.