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~~ | ||