Поиск по сайту:

Как использовать перехват портов для защиты службы SSH в Linux


Перекрытие порта — это изящный метод контроля доступа к порту, позволяющий только законным пользователям получать доступ к службе, работающей на сервере. Это работает таким образом, что при правильной последовательности попыток подключения межсетевой экран с радостью открывает порт, который был закрыт.

Логика блокировки портов заключается в том, чтобы защитить вашу систему Linux от автоматических сканеров портов, которые ищут открытые порты. В этом руководстве мы рассмотрим, как установить выбивание портов и как его настроить для защиты службы SSH. В демонстрационных целях мы будем использовать Ubuntu 18.04.

Шаг 1. Установите и настройте Knockd

Чтобы начать, войдите в свою систему Linux и установите демон knockd, как показано.

sudo apt install knockd

После установки откройте конфигурацию knockd.conf в предпочитаемом вами текстовом редакторе. Здесь мы используем текстовый редактор командной строки vim.

sudo vim /etc/knockd.conf

Файл конфигурации по умолчанию выглядит следующим образом.

В разделе [openSSH] нам нужно изменить последовательность стуков по умолчанию — 7000,8000,9000 — на что-то другое. Это связано с тем, что эти значения уже известны и могут поставить под угрозу безопасность вашей системы.

В целях тестирования мы установили значения 10005, 10006, 10007. Это последовательность, которая будет использоваться для открытия порта SSH из клиентской системы.

В третьей строке, начиная с команды, измените -A на -I сразу после /sbin/iptables. команда и перед INPUT.

И, наконец, в разделе [closeSSH] снова измените последовательность по умолчанию на предпочитаемую вами. Это последовательность, которая будет использоваться для закрытия SSH-соединения после того, как пользователь завершит работу и выйдет из сервера.

Вот наша полная конфигурация.

Как только вы закончите, сохраните изменения и выйдите.

Еще одна конфигурация, которую нам нужно изменить, — это файл /etc/default/knockd. Еще раз откройте его с помощью текстового редактора.

sudo vim /etc/default/knockd

Найдите строку START_KNOCKD=0. Раскомментируйте его и установите значение 1.

Затем перейдите к строке KNOCKD_OPTS= ”-i eth1 ” Раскомментируйте ее и замените значение по умолчанию eth1 на активный сетевой интерфейс вашей системы. Чтобы проверить сетевой интерфейс, просто запустите команду ip addr или ifconfig.

В нашей системе enp0s3 является активной сетевой картой.

Полная конфигурация такая, как показано.

Сохраните изменения и выйдите.

Затем запустите и включите демон knockd, как показано.

sudo systemctl start knockd
sudo systemctl enable knockd

Чтобы проверить статус демона knockd, выполните команду:

sudo systemctl status knockd

Шаг 2. Закройте порт SSH 22 на брандмауэре

Поскольку целью службы knockd является предоставление или запрет доступа к службе ssh, мы собираемся закрыть порт ssh на брандмауэре. Но сначала давайте проверим состояние брандмауэра UFW.

sudo ufw status numbered

Из выходных данных мы ясно видим, что порт SSH 22 открыт как для протоколов IPv4, так и для IPv6 с номерами 5 и 9 соответственно.

Нам нужно удалить эти два правила, как показано, начиная с самого высокого значения — 9.

sudo ufw delete 9
sudo ufw delete 5

Теперь, если вы попытаетесь удаленно войти на сервер, вы получите ошибку тайм-аута соединения, как показано.

Шаг 3. Настройте Knock-клиент для подключения к SSH-серверу.

На последнем этапе мы настроим клиент и попытаемся войти в систему, сначала отправив последовательность сообщений, которую мы настроили на сервере.

Но сначала установите демон knockd так же, как вы это делали на сервере.

sudo apt install knockd

После завершения установки отправьте последовательность ударов, используя показанный синтаксис.

knock -v server_ip knock_sequence

В нашем случае это означает:

knock -v 192.168.2.105 10005 10006 10007

Вы должны получить результат, аналогичный тому, что имеем мы, в зависимости от вашей последовательности. Это показывает, что попытки стука были успешными.

На этом этапе вы сможете успешно войти на сервер с помощью SSH.

Как только вы закончите свою работу на удаленном сервере, закройте порт SSH, отправив последовательность закрывающих стуков.

knock -v 192.168.2.105 10007 10006 10005

Любые попытки войти на сервер завершатся неудачей, как показано.

Заключительные мысли

На этом завершается руководство о том, как использовать перехват портов для защиты службы SSH на вашем сервере. Лучшим и простым подходом было бы настроить аутентификацию SSH по паролю с использованием пар ключей SSH. Это гарантирует, что только пользователь с закрытым ключом сможет аутентифицироваться на сервере, на котором хранится открытый ключ.