web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-open-ssh-and-fail2ban
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версия | |||
web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-open-ssh-and-fail2ban [05.09.2025 12:04] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1 | web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-open-ssh-and-fail2ban [05.09.2025 12:04] (текущий) – ↷ Страница перемещена из unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-open-ssh-and-fail2ban в web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-open-ssh-and-fail2ban Алексей Максимов | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 2. Настройка OpenSSH и Fail2ban ===== | ||
+ | ==== Установка и настройка OpenSSH ==== | ||
+ | |||
+ | <WRAP center important> | ||
+ | Если ОС Ubuntu на вашем сервере развёрнута не вами самостоятельно, | ||
+ | |||
+ | Во первых, | ||
+ | < | ||
+ | Во вторых, | ||
+ | < | ||
+ | openssh-blacklist openssh-blacklist-extra \ | ||
+ | openssh-client openssh-server ssh</ | ||
+ | |||
+ | </ | ||
+ | |||
+ | В нашем случае система установлена своими силами и ещё не имеет службы SSH-сервера, | ||
+ | < | ||
+ | |||
+ | Откроем основной конфигурационный файл: | ||
+ | |||
+ | < | ||
+ | |||
+ | Ниже приведён пример конфигурационного файла, который отражает не все его параметры, | ||
+ | |||
+ | <file c / | ||
+ | |||
+ | # Меняем порт по умолчанию (порт 22) на другой порт. | ||
+ | # При смене порта, в целях безопасности, | ||
+ | # так как именно этот нижний диапазон портов может использоваться только пользователями | ||
+ | # системы с root-овыми привилегиями | ||
+ | Port 758 | ||
+ | |||
+ | # Явно задаём IP адрес на котором должен работать SSH-сервер | ||
+ | ListenAddress 11.22.33.44 | ||
+ | |||
+ | # Явно задаём использование только протокола v2 | ||
+ | Protocol 2 | ||
+ | |||
+ | # Явно указываем используемый протокол. | ||
+ | # В данном случае отключаем прослушиватель на IPv6, так как он не используется | ||
+ | AddressFamily inet | ||
+ | |||
+ | # Запрещаем доступ пользователя root через SSH | ||
+ | PermitRootLogin no | ||
+ | |||
+ | # Запрещаем доступ с " | ||
+ | PermitEmptyPasswords no | ||
+ | |||
+ | # Запрещаем использовать файлы ~/.rhosts и ~/.shosts, имеющиеся у пользователя, | ||
+ | # чтобы запретить небезопасный доступ через RSH | ||
+ | IgnoreRhosts yes | ||
+ | RhostsRSAAuthentication no | ||
+ | |||
+ | # Запрещаем кросс-хостинговую аутентификацию | ||
+ | HostbasedAuthentication no | ||
+ | |||
+ | # Отключаем использование sftp-server. Вместо него можно использовать утилиту scp | ||
+ | #Subsystem sftp / | ||
+ | |||
+ | # Явно указываем локальных пользователей, | ||
+ | AllowUsers petya | ||
+ | |||
+ | # Выполняем сброс бездействующих сессий через 900 секунд (15 минут). | ||
+ | ClientAliveInterval 900 | ||
+ | ClientAliveCountMax 0 | ||
+ | |||
+ | # Отключаем использование DNS для обратного резолва имени клиента | ||
+ | # Отключение также рекомендуется для File2Ban | ||
+ | # (http:// | ||
+ | UseDNS no | ||
+ | |||
+ | </ | ||
+ | |||
+ | После изменения конфигурационного файла перезапускаем службу | ||
+ | |||
+ | < | ||
+ | |||
+ | Разрешим в фаерволе подключения на ранее назначенный порт SSH и второй командой сохраним обновлённые правила iptables: | ||
+ | |||
+ | < | ||
+ | sudo iptables-save | sudo tee / | ||
+ | </ | ||
+ | |||
+ | Проверим с другого компьютера имеющего подключение к Интернет подключение к SSH-серверу: | ||
+ | |||
+ | < | ||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | ==== Установка и настройка Fail2ban ==== | ||
+ | |||
+ | Для того, чтобы больше обезопасить наш SSH-сервер на предмет противодействия атакам по подбору паролей методом грубой силы (**brute force attack**) можно использовать разные инструменты и средства. Например можно воспользоваться дополнительной настройкой параметра **MaxStartups** в конфигурационном файле **/ | ||
+ | |||
+ | Пакет **DenyHosts** уже достаточно давно не обновлялся, | ||
+ | |||
+ | Пакет **Fail2Ban** в свою очередь является более универсальным и гибким средством, | ||
+ | |||
+ | < | ||
+ | http:// | ||
+ | |||
+ | Если же всё таки вам будет интересно почитать по DenyHosts, посмотреть на пример его применения можно [[http:// | ||
+ | |||
+ | Итак, наш выбор остановился на **Fail2Ban**, | ||
+ | < | ||
+ | |||
+ | === Настраиваем fail2ban === | ||
+ | |||
+ | Основные настройки работы процесса fail2ban расположены в файле **/ | ||
+ | |||
+ | Основные настройки блокировок для разных приложений можно найти в файле | ||
+ | sudo nano **/ | ||
+ | Скопируем файл **jail.conf** в **jail.local** и будем править именно него, это позволит обновлять в дальнейшем пакет без дополнительных предупреждений о переписывании основного конфига jail.conf, и к тому же, мы всегда будем иметь под руками для примера актуальную версию jail.conf. | ||
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | |||
+ | Файл разделён на секции. | ||
+ | Секция '' | ||
+ | Далее идут секции описывающие параметры блокировок для конкретных приложений | ||
+ | |||
+ | По умолчанию в fail2ban сразу после установки включается защита для службы SSH-сервера с параметрами - при превышении 6 неудачных вводов пароля подряд = блокировка IP-адреса подключающегося SSH-клиента на 600 секунд. | ||
+ | Измените эти параметры под себя. | ||
+ | |||
+ | |||
+ | Пример важных параметров в секции '' | ||
+ | |||
+ | <file c / | ||
+ | ... | ||
+ | [DEFAULT] | ||
+ | |||
+ | # IP–адреса с маской подсети, | ||
+ | # Можно задать список IP-адресов разделяя значения пробелами. | ||
+ | # Стандартную строку локального адреса лучше закомментировать, | ||
+ | # так как при проникновении в систему под любой непривилегированной учётной записью, | ||
+ | # можно произвести атаку перебором на пользователя с root-привилегиями. | ||
+ | # | ||
+ | #ignoreip = 127.0.0.1/8 | ||
+ | |||
+ | # Далее идут правила блокировки следующего порядка: | ||
+ | # Если в течении 30 минут было 3 неудачных попытки = блокируем IP-адрес клиента на 24 часа. | ||
+ | |||
+ | # Время блокировки в секундах, | ||
+ | # по истечении которого IP–адрес удаляется из пула заблокированных | ||
+ | bantime | ||
+ | |||
+ | # Время, в течение которого суммируются подозрительные попытки в количестве maxretry | ||
+ | findtime = 1800 | ||
+ | |||
+ | # Количество подозрительных попыток, | ||
+ | # Применительно к sshd — это число неудачных попыток входа, | ||
+ | # после которых происходит блокировка. | ||
+ | maxretry = 3 | ||
+ | |||
+ | # Файлы с правилами реагирования - в каталоге / | ||
+ | # По умолчанию используется файл iptables-multiport.conf. | ||
+ | # Заглянув в этот файл можно понять как fail2ban работает с правилами iptables. | ||
+ | # Можем оставить всё без изменений. | ||
+ | banaction = iptables-multiport | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | |||
+ | Пример изменённой секции [ssh] в конфигурационном файле jail.local с комментариями по каждому параметру: | ||
+ | <file c / | ||
+ | ... | ||
+ | [ssh] | ||
+ | |||
+ | # Признак активности изолятора (jail) | ||
+ | enabled = true | ||
+ | |||
+ | # Порт на котором запущено наблюдаемое приложение. | ||
+ | # Может быть указан как в виде номера порта, | ||
+ | # например для SSH-сервера по умолчанию - 22, так в виде его буквенного обозначения - ssh | ||
+ | # Именно этот порт будет блокироваться средствами iptables | ||
+ | # в случае обнаружения попыток несанкционированного доступа к приложению. | ||
+ | port = 758 | ||
+ | |||
+ | # Имя файла фильтра с регулярными выражениями из каталога / | ||
+ | # по которым идёт поиск подозрительных совпадений в логе приложения. | ||
+ | # По умолчанию фильтру для SSH-сервера соответствует файл / | ||
+ | filter = sshd | ||
+ | |||
+ | # Путь к наблюдаемому логу, | ||
+ | # который fail2ban будет обрабатывать с помощью заданного ранее фильтра. | ||
+ | # Вся история удачных и неудачных входов в систему, | ||
+ | # по умолчанию записывается в лог / | ||
+ | logpath = / | ||
+ | |||
+ | # Количество подозрительных попыток | ||
+ | # (может переопределяеть глобавльны параметр из секции [DEFAULT]) | ||
+ | maxretry = 3 | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | После изменения настроек конфигурационных файлов перезапускаем службу fail2ban: | ||
+ | |||
+ | < | ||
+ | |||
+ | При запуске службы fail2ban в **iptables** будет создана отдельная цепочка для каждого приложения. Формат именования цепочки будет такой: '' | ||
+ | |||
+ | < | ||
+ | |||
+ | Chain fail2ban-ssh (1 references) | ||
+ | target | ||
+ | RETURN | ||
+ | |||
+ | Эта цепочка будет пополняться правилами блокировки IP-адресов, | ||
+ | |||
+ | А цепочка **fail2ban-ssh**, | ||
+ | |||
+ | < | ||
+ | |||
+ | Chain INPUT (policy DROP) | ||
+ | target | ||
+ | fail2ban-ssh | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | </ | ||
+ | |||
+ | === Тестируем результат === | ||
+ | |||
+ | Давайте протестируем работу fail2ban... | ||
+ | |||
+ | Предварительно проверим на сервере цепочку iptables fail2ban и убедимся в том, что она не содержит правил | ||
+ | |||
+ | < | ||
+ | |||
+ | Chain fail2ban-ssh (1 references) | ||
+ | target | ||
+ | RETURN | ||
+ | |||
+ | Заходим с внешнего IP, отличного от нашего, | ||
+ | |||
+ | < | ||
+ | |||
+ | После третьей попытки ввода неверных учётных данных SSH-сервер должен начать отвергать запросы клиента на соединение соединение. | ||
+ | Проверим на SSH-сервере правила и убедимся в том, что для зловредного клиента появилось правило блокировки | ||
+ | |||
+ | < | ||
+ | |||
+ | Chain fail2ban-ssh (1 references) | ||
+ | target | ||
+ | REJECT | ||
+ | RETURN | ||
+ | |||
+ | Как видим, механизм защиты сработал. Добавленное в iptables правило должно будет автоматически удалиться через 24 часа, согласно заданным нами настройкам, | ||
+ | \\ | ||
+ | |||
+ | === Разблокировка IP-адреса в fail2ban === | ||
+ | |||
+ | Чтобы вручную разблокировать IP-адрес, | ||
+ | |||
+ | < | ||
+ | |||
+ | Например, | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Дополнительные источники информации ==== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{tag> | ||
+ | |||
+ | ~~DISCUSSION~~ |