===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 2. Настройка OpenSSH и Fail2ban =====
==== Установка и настройка OpenSSH ====
sudo rm /etc/ssh/ssh_host_*
Во вторых, переустановить пакеты связанные с SSH из официальных репозитариев Ubuntu:
sudo apt-get install --reinstall libssh2-1:amd64 \
openssh-blacklist openssh-blacklist-extra \
openssh-client openssh-server ssh
sudo apt-get install openssh-server
Откроем основной конфигурационный файл:
sudo nano /etc/ssh/sshd_config
Ниже приведён пример конфигурационного файла, который отражает не все его параметры, а лишь те, на которые стоит обратить внимание или отредактировать. Перед каждым параметром будет приведён небольшой комментарий:
sudo service ssh restart
Разрешим в фаерволе подключения на ранее назначенный порт SSH и второй командой сохраним обновлённые правила iptables:
sudo iptables -A INPUT -p tcp --dport 758 -i eth0 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables.conf
Проверим с другого компьютера имеющего подключение к Интернет подключение к SSH-серверу:
ssh -p 758 petya@11.22.33.44
\\
\\
==== Установка и настройка Fail2ban ====
Для того, чтобы больше обезопасить наш SSH-сервер на предмет противодействия атакам по подбору паролей методом грубой силы (**brute force attack**) можно использовать разные инструменты и средства. Например можно воспользоваться дополнительной настройкой параметра **MaxStartups** в конфигурационном файле **/etc/ssh/sshd_config**. Или можно воспользоваться сторонними вспомогательными инструментами, самые известные из которых, это [[http://www.fail2ban.org/wiki/index.php/Main_Page|Fail2Ban]] и [[http://denyhosts.sourceforge.net/|DenyHosts]].
Пакет **DenyHosts** уже достаточно давно не обновлялся, и имеет проблемы из-за которых он даже, [[https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for-debian/|по некоторой информации]] был снят с поддержки в Debian Jessie.
Пакет **Fail2Ban** в свою очередь является более универсальным и гибким средством, что подтверждается [[http://serverfault.com/questions/128962/denyhosts-vs-fail2ban-vs-iptables-best-way-to-prevent-brute-force-logons/|мнениями сообщества]]. Если DenyHosts заточен именно под SSH, то Fail2Ban способен обеспечивать дополнительную защиту помимо SSH и ряду других приложений.
Fail2ban is similar to DenyHosts ... but unlike DenyHosts which focuses on SSH, fail2ban can be configured to monitor any service that writes login attempts to a log file, and instead of using /etc/hosts.deny only to block IP addresses/hosts, fail2ban can use Netfilter/iptables and TCP Wrappers /etc/hosts.deny\\ http://en.wikipedia.org/wiki/Fail2banЕсли же всё таки вам будет интересно почитать по DenyHosts, посмотреть на пример его применения можно [[http://anosov.me/2011/07/five-simple-steps-for-ssh-protect-in-ubuntu/|здесь]]. Итак, наш выбор остановился на **Fail2Ban**, и мы выполняем его установку:
sudo apt-get install fail2ban
=== Настраиваем fail2ban ===
Основные настройки работы процесса fail2ban расположены в файле **/etc/fail2ban/fail2ban.conf**. Можно оставить эти настройки без изменений.
Основные настройки блокировок для разных приложений можно найти в файле
sudo nano **/etc/fail2ban/jail.conf**
Скопируем файл **jail.conf** в **jail.local** и будем править именно него, это позволит обновлять в дальнейшем пакет без дополнительных предупреждений о переписывании основного конфига jail.conf, и к тому же, мы всегда будем иметь под руками для примера актуальную версию jail.conf.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Файл разделён на секции.
Секция ''[DEFAULT]'' содержит основные настройки для блокировок любых приложений
Далее идут секции описывающие параметры блокировок для конкретных приложений
По умолчанию в fail2ban сразу после установки включается защита для службы SSH-сервера с параметрами - при превышении 6 неудачных вводов пароля подряд = блокировка IP-адреса подключающегося SSH-клиента на 600 секунд.
Измените эти параметры под себя.
Пример важных параметров в секции ''[DEFAULT]'' в конфигурационном файле **jail.local** с комментариями к параметрам:
sudo service fail2ban restart
При запуске службы fail2ban в **iptables** будет создана отдельная цепочка для каждого приложения. Формат именования цепочки будет такой: ''fail2ban-<имя приложения из названия jail-секций>'', например, при включении в файле **jail.local** секции **ssh**, в iptables появится цепочка **fail2ban-ssh**
$ sudo iptables -L fail2ban-ssh
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Эта цепочка будет пополняться правилами блокировки IP-адресов, с которых были предприняты попытки перебора учётных данных.
А цепочка **fail2ban-ssh**, в свою очередь, будет входить в самое начало системной цепочки **INPUT**:
$ sudo iptables -L INPUT
Chain INPUT (policy DROP)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports 758
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:758
=== Тестируем результат ===
Давайте протестируем работу fail2ban...
Предварительно проверим на сервере цепочку iptables fail2ban и убедимся в том, что она не содержит правил
$ sudo iptables -L fail2ban-ssh
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Заходим с внешнего IP, отличного от нашего, чтобы не заблокировать свой же адрес, с помощью SSH клиента
ssh -p 758 fakeuser@11.22.33.44
После третьей попытки ввода неверных учётных данных SSH-сервер должен начать отвергать запросы клиента на соединение соединение.
Проверим на SSH-сервере правила и убедимся в том, что для зловредного клиента появилось правило блокировки
$ sudo iptables -L fail2ban-ssh
Chain fail2ban-ssh (1 references)
target prot opt source destination
REJECT all -- r-88-111-222-88.provider.ru anywhere reject-with icmp-port-unreachable
RETURN all -- anywhere anywhere
Как видим, механизм защиты сработал. Добавленное в iptables правило должно будет автоматически удалиться через 24 часа, согласно заданным нами настройкам, что предотвратит разрастание соответствующих цепочек и не окажет отрицательного влияния на производительность iptables
\\
=== Разблокировка IP-адреса в fail2ban ===
Чтобы вручную разблокировать IP-адрес, который был заблокирован fail2ban можно выполнить команду в формате:
sudo fail2ban-client set unbanip
Например, удалим из блокировки IP-адрес 22.33.44.55, который был заблокирован в соответствии с правилами секции [ssh] :
sudo fail2ban-client set ssh unbanip 22.33.44.55
==== Дополнительные источники информации ====
* [[http://help.ubuntu.ru/wiki/ssh|Ubuntu.ru Wiki -SSH]]
* [[http://www.nestor.minsk.by/sr/2007/11/sr71104.html|Сетевые решения A-Z - хитрости SSH]]
* [[http://serverfault.com/questions/128962/denyhosts-vs-fail2ban-vs-iptables-best-way-to-prevent-brute-force-logons|ServerFault.com - Denyhosts vs fail2ban vs iptables- best way to prevent brute force logons?]]
* [[http://rus-linux.net/nlib.php?name=/MyLDP/sec/openssh.html|Linux по русски - 20 советов по безопасному использованию сервера OpenSSH]]
* [[http://help.ubuntu.ru/wiki/fail2ban|Ubuntu.ru Wiki - Fail2ban]]
* [[http://linuxstar.ru/nastroyka-fail2ban-v-ubuntu-server.html|LinuxStar.ru - Настройка fail2ban в ubuntu server ]]
* [[http://anosov.me/2011/07/five-simple-steps-for-ssh-protect-in-ubuntu/|Андрей Аносов - Пять простых шагов для защиты ssh в Ubuntu. Часть I]]
* [[http://anosov.me/2011/08/port-knocking/|Андрей Аносов - Пять простых шагов для защиты ssh в Ubuntu. Часть II — Port knocking]]
----
{{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 18.03.2016 15:41
{{tag>Linux Ubuntu "Ubuntu 14.04" "14.04 LTS" "Ubuntu Server" Security SSH sshd OpenSSH openssh-server Fail2ban iptables DenyHosts jail "Brute Force" }}
~~DISCUSSION~~