Защита от брутфорса с помощью inetd

Материал из wiki.p3.ru

Введение

В этой статье я рассмотрю способ защиты от брутфорса (и 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

Заключение

Выставив ограничения, мы ограничиваем активность нежелательных на нашем сервере персон.

Разумеется, вы предпочтете модифицировать лимиты по вашему усмотрению, соответственно вашим потребностям.