Самый простой и действенный способ – это изменить 22-й порт, используемый по умолчанию, например, на 2002-й, если это не мешает другим задачам. Вносим запись в /etc/ssh/sshd_config:
Port 2002
После этого попытки подбора паролей практически прекращаются. Бывают случаи, когда изменить порт нельзя. Как вариант, можно ограничить доступ по SSH определенным пользователям (в частности, root) или группе. В sshd_config за это отвечает ряд параметров: AllowUsers, AllowGroups, DenyUsers и DenyGroups. Удобно, что с логином можно указать IP или подсеть. Например, разрешим доступ пользователю admin и user, последнему только с одного IP:
AllowUsers admin [email protected]
Еще один действенный вариант защиты от перебора – использование для аутентификации сертификатов. Причем с помощью специального параметра match можно создать условный блок, в котором переопределить параметры глобальной секции. Например, запретим вход по SSH по паролю для пользователя root, разрешив всем остальным:
# всем разрешаем доступ по паролю
PasswordAuthentication yes
# root будет использовать только сертификат
match user root
PasswordAuthentication no
KbdInteractiveAuthentication no
Используя TCP Wrapper, также можем ограничить доступ к любому сервису только с определенных IP, для этого следует лишь прописать в файл /etc/hosts.allow или /etc/hosts.deny нужное правило. Разрешим в /etc/hosts.allow доступ только с нужной подсети:
sshd : 192.168.1.0/24 : allow
Или в /etc/hosts.deny:
sshd : ALL : deny
sshd : ALL EXCEPT 192.168.1.0/24 : allow
Пакетный фильтр позволяет очень точно задавать параметры соединений, отбрасывая ненужные пакеты. С его помощью легко ограничить доступ к 22-му порту только определенным адресам. Простой пример:
iptables -A INPUT -s !192.168.0.1 -p tcp -m tcp --dport 22 ↵
-j REJECT —reject-with icmp-port-unreachable
Фильтрация пакетов по портам и IP-адресам не очень эффективна, если Aдмин не привязан к рабочему месту. В этом случае помогут специальные утилиты: Fail2ban, Sshguard. Fail2ban изначально разрабатывался для защиты SSH. Хотя сегодня это уже фреймворк, который можно легко настроить под любые приложения. Принцип работы очень прост. Демон периодически проверяет журналы на наличие записей о любых подозрительных действиях. Затем подозрительный IP-адрес блокируется средствами iptables или TCP Wrapper. Через указанное в настройках время блокировка обычно снимается, чтобы случайно не заблокировать легальный узел. При срабатывании правила записывается событие в журнал /var/log/fail2ban.log, и может быть отправлен email.
Один процесс может контролировать сразу несколько сервисов, а в пакете поставляются готовые настройки для популярных приложений Linux. В настройках по умолчанию защищается только SSH.
В Ubuntu и Debian устанавливается командой:
$ sudo apt-get install fail2ban
Все настройки производятся в нескольких файлах, размещенных в каталоге /etc/fail2ban. В fail2ban.conf хранятся параметры запуска самого демона, в jail.conf описываются контролируемые сервисы (внутри секции SSH).
[ssh] enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Фильтры и действия прописываются в файлах, размещенных в подкаталогах filter.d и action.d. По умолчанию все файлы имеют расширение .conf, их лучше не трогать (в т.ч. и jail.conf). Все изменения следует заносить в файл с расширением .local (например, jail.local), параметры которого замещают установки из первого, а при обновлении не будут потеряны. Для проверки работы фильтра можно использовать утилиту fail2ban-regex.
Port 2002
После этого попытки подбора паролей практически прекращаются. Бывают случаи, когда изменить порт нельзя. Как вариант, можно ограничить доступ по SSH определенным пользователям (в частности, root) или группе. В sshd_config за это отвечает ряд параметров: AllowUsers, AllowGroups, DenyUsers и DenyGroups. Удобно, что с логином можно указать IP или подсеть. Например, разрешим доступ пользователю admin и user, последнему только с одного IP:
AllowUsers admin [email protected]
Еще один действенный вариант защиты от перебора – использование для аутентификации сертификатов. Причем с помощью специального параметра match можно создать условный блок, в котором переопределить параметры глобальной секции. Например, запретим вход по SSH по паролю для пользователя root, разрешив всем остальным:
# всем разрешаем доступ по паролю
PasswordAuthentication yes
# root будет использовать только сертификат
match user root
PasswordAuthentication no
KbdInteractiveAuthentication no
Используя TCP Wrapper, также можем ограничить доступ к любому сервису только с определенных IP, для этого следует лишь прописать в файл /etc/hosts.allow или /etc/hosts.deny нужное правило. Разрешим в /etc/hosts.allow доступ только с нужной подсети:
sshd : 192.168.1.0/24 : allow
Или в /etc/hosts.deny:
sshd : ALL : deny
sshd : ALL EXCEPT 192.168.1.0/24 : allow
Пакетный фильтр позволяет очень точно задавать параметры соединений, отбрасывая ненужные пакеты. С его помощью легко ограничить доступ к 22-му порту только определенным адресам. Простой пример:
iptables -A INPUT -s !192.168.0.1 -p tcp -m tcp --dport 22 ↵
-j REJECT —reject-with icmp-port-unreachable
Фильтрация пакетов по портам и IP-адресам не очень эффективна, если Aдмин не привязан к рабочему месту. В этом случае помогут специальные утилиты: Fail2ban, Sshguard. Fail2ban изначально разрабатывался для защиты SSH. Хотя сегодня это уже фреймворк, который можно легко настроить под любые приложения. Принцип работы очень прост. Демон периодически проверяет журналы на наличие записей о любых подозрительных действиях. Затем подозрительный IP-адрес блокируется средствами iptables или TCP Wrapper. Через указанное в настройках время блокировка обычно снимается, чтобы случайно не заблокировать легальный узел. При срабатывании правила записывается событие в журнал /var/log/fail2ban.log, и может быть отправлен email.
Один процесс может контролировать сразу несколько сервисов, а в пакете поставляются готовые настройки для популярных приложений Linux. В настройках по умолчанию защищается только SSH.
В Ubuntu и Debian устанавливается командой:
$ sudo apt-get install fail2ban
Все настройки производятся в нескольких файлах, размещенных в каталоге /etc/fail2ban. В fail2ban.conf хранятся параметры запуска самого демона, в jail.conf описываются контролируемые сервисы (внутри секции SSH).
[ssh] enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Фильтры и действия прописываются в файлах, размещенных в подкаталогах filter.d и action.d. По умолчанию все файлы имеют расширение .conf, их лучше не трогать (в т.ч. и jail.conf). Все изменения следует заносить в файл с расширением .local (например, jail.local), параметры которого замещают установки из первого, а при обновлении не будут потеряны. Для проверки работы фильтра можно использовать утилиту fail2ban-regex.