Борьба с брутфорсом SSH

Материал из RSU WiKi
Перейти к: навигация, поиск

Содержание

Vyatta

Защита SSH самой Vyatta:

set firewall name self_in rule 115 action 'drop'
set firewall name self_in rule 115 description 'Limit SSH against BruteForce'
set firewall name self_in rule 115 destination port '22'
set firewall name self_in rule 115 protocol 'tcp'
set firewall name self_in rule 115 recent count '4'
set firewall name self_in rule 115 recent time '60'
set firewall name self_in rule 115 state new 'enable'
set firewall name self_in rule 120 action 'accept'
set firewall name self_in rule 120 description 'permit ssh'
set firewall name self_in rule 120 destination port '22'
set firewall name self_in rule 120 protocol 'tcp'

Защита от перебора паролей для машин внутри DMZ:

set firewall name outside_in rule 115 action 'drop'
set firewall name outside_in rule 115 description 'Limit SSH against BruteForce'
set firewall name outside_in rule 115 destination address '198.51.100.0/24'
set firewall name outside_in rule 115 destination port 'ssh'
set firewall name outside_in rule 115 protocol 'tcp'
set firewall name outside_in rule 115 recent count 4
set firewall name outside_in rule 115 recent time 60
set firewall name outside_in rule 115 state new enable

set firewall name outside_in rule 120 action 'accept'
set firewall name outside_in rule 120 description 'permit ssh for all RealIP'
set firewall name outside_in rule 120 destination address '198.51.100.0/24'
set firewall name outside_in rule 120 destination port 'ssh'
set firewall name outside_in rule 120 protocol 'tcp'

Основная статья: Vyatta

SuSE Linux

SuSEfirewall2

Отредактируйте /etc/sysconfig/SuSEfirewall2:

Здесь не надо открывать порт для ssh

Attention.pngВНИМАНИЕ!
Обязательно проверьте, что в этих строках SSH не открыт! Иначе все выкрутасы с FW_SERVICES_ACCEPT_EXT просто-напросто не работают!
FW_SERVICES_EXT_TCP=""
FW_CONFIGURATIONS_EXT=""

Добавьте это правило:

FW_SERVICES_ACCEPT_EXT="0.0.0.0/0,tcp,22,,hitcount=3,blockseconds=60,recentname=ssh"

Перезапустите файерволл:

rcSuSEfirewall2 restart

Теперь у атакующего будет только три попытки до того момента, как он будет заблокирован на 60 секунд.

Основная статья: SuSE Linux

Установка и настройка Fail2ban

Part I – Fail2ban with FirewallD Install fail2ban from EPEL repo.

yum install -y epel-release
yum install -y fail2ban fail2ban-systemd

Deal with SELinux, there are two options to choose from. Update SELinux Policy

yum update -y selinux-policy*

OR Disable SELinux Configure fail2ban, we prefer iptables-services here. Put the following lines in /etc/fail2ban/jail.d/sshd.local

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = %(sshd_log)s
maxretry = 5
bantime = 86400

Note 1 : ipset should also be installed beforehand is already a dependency of fail2ban. Note 2 : Thanks to Scott’s comment bellow, the action line should be commented out or removed otherwise fail2ban will fail to start.

Enable and start fail2ban.

systemctl enable fail2ban
systemctl start fail2ban

Старая статья Устанавливаем и настраиваем пакет fail2ban. Для SLES 11 SP1 воспользуемся репозиторием с software.opensuse.org:

zypper ar http://download.opensuse.org/repositories/security/SLE_11 OpenSUSE_Security4SLE11
zypper in fail2ban

В конф. файле /etc/fail2ban/jail.conf настраиваем интересующие сервисы, напр. SSH:

[ssh-tcpwrapper]
enabled     = true
filter      = sshd
action      = hostsdeny
              sendmail-whois[name=SSH, dest=postmaster@example.com]
ignoreregex = for myuser from
logpath     = /var/log/messages

Включаем сервис:

chkconfig fail2ban on

Проверить как работает можно почитав лог /var/log/fail2ban.log

В случае, если на сервере установлен Communigate Pro может потребоваться команда:

ln -s /opt/CommuniGate/sendmail /usr/sbin/sendmail

Отключение удаленного входа для ROOT

В конфигурационном файле /etc/ssh/sshd_config меняем строку

PermitRootLogin yes

на

PermitRootLogin no

Перезапускаем sshd:

service sshd restart

Создаем обычного пользователя:

useradd exampleuser

Дальнейшую работу по администриованию системы ведем из под него при помощи "sudo" или "su -"

Как настроить защиту об брутфорса по ssh через iptables?

Статья Защита от bruteforce средствами iptables В заметке приведены различные варианты защиты от bruteforce-атак, на примере блокирования последовательного подбора паролей через ssh.

Общий шаблон правил

  iptables -P INPUT DROP
  iptables -P OUTPUT DROP
  iptables -P FORWARD DROP
  iptables -A INPUT -p all -i lo -j ACCEPT
  iptables -A OUTPUT -p all -o lo -j ACCEPT

Здесь будут наши правила (вариант)

  iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
  iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


Вариант 1, используя модуль recent:

Добавляем ip в таблицу

  iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name BLOCK -set

С одного ip разрешаем 2 (--hitcount 3-1) запроса на соединение (NEW) в минуту (60 секунд), третье блокируется и все последующие в течение минуты

  iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name BLOCK --update --seconds 60 --rttl --hitcount 3 -j DROP

Разрешаем входящие соединения на 22 порт

  iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT


Вариант 2, используя модуль hashlimit:

С одного ip разрешаем 2 запроса на соединение (NEW) в минуту (2/m) все остальные пакеты (NEW) c этого ip блокируется

  iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m hashlimit \
     --hashlimit-name BLOCK --hashlimit-mode srcip --hashlimit-above 2/m --hashlimit-burst 2 -j DROP

Разрешаем входящие соединения на 22 порт

  iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT


Вариант 3, используя модули connlimit, limit:

С одного ip разрешаем не больше одно соединения (! --connlimit-above 1) на 22 порт, пропускаем 2 пакета в минуту с запросом на соединение (NEW), все остальные пакеты (NEW) c этого ip блокируется

  iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m connlimit ! \
     --connlimit-above 1 -m limit --limit 2/m --limit-burst 2 -j ACCEPT

Вариант 4, параноидальный:

Два раза в течение минуты разрешено подключаться к 22 порту, при превышении порога ip блокируется на 10 минут.

блокируем ip с запросом на соединение (NEW) попавшие в динамически обновляемую таблицу на 600 секунд

  iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name BLOCK --rcheck --seconds 600 -j DROP

С одного ip разрешаем 2 запроса на соединение (NEW) в минуту (2/m), если превышен порог,то добавляем ip в таблицу BLOCK для блокировки на 600 секунд (10 минут)

  iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m hashlimit \
     --hashlimit-name BLOCK --hashlimit-mode srcip --hashlimit-above 2/m --hashlimit-burst 2 -m recent --name BLOCK --set -j DROP

Разрешаем входящие соединения на 22 порт

  iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT



Под Linux или OS X сгенерировать ключи для входа по ssh можно при помощи простого скрипта ssh-keyput.

Примечания

См. также

Ссылки

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты