Применение метода Port Knocking для обеспечения безопасности SSH-сервиса (Debian/Ubuntu)

В этом руководстве я продемонстрирую, как применять технологию port knocking для обеспечения безопасности SSH-сервиса на серверах с Debian и Ubuntu.

Port Knocking в SSH — это метод защиты, при котором доступ к серверу возможен только после отправки определенной последовательности пакетов на заранее установленные порты.

Порт-нокинг — это метод, позволяющий предоставлять доступ к серверным сервисам исключительно авторизованным пользователям, и в этом руководстве рассматривается пример с SSH. Хотя SSH работает на сервере, его порт закрыт для внешних подключений с помощью настроек брандмауэра, что предотвращает прямой доступ к порту 22.

На сервере работает демон knockd, который позволяет изменять правила брандмауэра и временно открывать порт SSH 22 для пользователя при выполнении определенной последовательности стуков в заданные порты. Такая последовательность стуков выступает в роли пароля для доступа к порту SSH. Только пользователи, знающие правильную комбинацию стуков, могут активировать knockd для открытия SSH-порта. Когда пользователь завершает сеанс, используется другая комбинация стуков для закрытия порта SSH.

Читайте также:  Как применять SaferVPN на Linux – скидка 81%!

Давайте разберем процесс установки и настройки knockd, а также создание правила для межсетевого экрана. Это руководство рассчитано на пользователей Linux на клиентской машине.

Установка и конфигурация Knockd на сервере с Debian/Ubuntu

Введите следующую команду для установки knockd из стандартного программного репозитория.

sudo apt-get install knockd

Откройте основной конфигурационный файл для редактирования с помощью текстового редактора командной строки, например, Nano.

sudo nano /etc/knockd.conf

Необходимо изменить три элемента в данном файле. В блоке [openSSH] по умолчанию установлена последовательность knock: 7000,8000,9000. При желании её можно настроить по своему усмотрению, например, указав 10001,10002,10003. Также можно задать 4 и более порта для этой последовательности. При этом открывать эти порты в брандмауэре не требуется.

В команде iptables замените — A на — I, чтобы данное правило стало первым в списке правил. Порядок правил в iptables имеет важное значение. Как только вы отправите нужную последовательность knock, программа knockd выполнит данную команду iptables, открыв порт SSH исключительно для вашего IP-адреса. Все остальные IP-адреса останутся заблокированными для подключения к порту SSH.

В разделе [closeSSH] измените стандартную последовательность knock для закрытия порта на вашу, например, 10003,10002,10001.

Читайте также:  Командная строка Linux

Порт-нокинг SSH на Debian и Ubuntu

Сохраните файл и закройте его.

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

ip addr

У меня это ens18. Теперь необходимо внести изменения в файл конфигурации, находящийся по адресу /etc/default/knockd.

sudo nano /etc/default/knockd

START_KNOCKD=0

Замените 0 на 1, чтобы активировать автозапуск при старте системы.

START_KNOCKD=1

По умолчанию программа knockd отслеживает интерфейс eth0. Если у вашего сервера используется другой сетевой интерфейс, необходимо внести соответствующие изменения. Найдите строку ниже.

#KNOCKD_OPTS="-i eth1"

Уберите символ # и замените eth1 на название главного сетевого интерфейса вашего сервера.

KNOCKD_OPTS color: #ff00ff;">ens18"

Сохраните файл и закройте его. После этого запустите демон knockd.

sudo systemctl start knockd

sudo systemctl enable knockd

Убедитесь в его состоянии, чтобы подтвердить, что он функционирует.

systemctl status knockd

демон портового стучания для Ubuntu

Блокируйте SSH-порт 22.

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

sudo ufw status numbered

Первое и третье правило, как вы можете заметить, разрешают доступ к SSH-порту. Для того чтобы закрыть TCP-порт 22, необходимо удалить эти два правила.

sudo ufw delete 3 sudo ufw delete 1

Совет: сначала необходимо удалить правило с наибольшим индексом.

Читайте также:  Свой репозиторий для CentOS

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

Примените клиент Knock для передачи серии Knock.

Демон knockd идет в комплекте с клиентом knock, поэтому вы можете установить его на своем клиентском компьютере с операционной системой Debian или Ubuntu, выполнив следующую команду:

sudo apt-get install knockd

Для активации файрвола сервера на TCP-порту 22 необходимо выполнить правильную последовательность knock с вашего клиентского устройства.

knock - v 10.0.0.104 10001 10002 10003

попытка tcp 10.0.0.104:10001 попытка tcp 10.0.0.104:10002 попытка tcp 10.0.0.104:10003

Попытка knock может не увенчаться успехом, если между клиентом и сервером наблюдается высокая задержка. Возможно, потребуется несколько раз отправить последовательность knock, если порт SSH по-прежнему остается закрытым.

После удачного выполнения knock вы сможете установить SSH-соединение с вашим сервером. Когда все задачи будут завершены, вы можете снова использовать knock, чтобы закрыть SSH-порт для вашего IP-адреса.

knock - v 10.0.0.104 10003 10002 10001

Учтите, что knockd будет реагировать только на последовательность knock, отправленную на главный сетевой интерфейс (т. е. на основной IP-адрес). Если на сервере имеется несколько IP-адресов и вы попытаетесь отправить последовательность knock на альтернативный IP, knockd не сможет активировать SSH-порт.

Автоматический перезапуск Knockd.

Если демон knockd прекращает свою работу на сервере, вы потеряете возможность подключения к нему через SSH. Чтобы предотвратить это, вы можете настроить задание cron, которое будет автоматически перезапускать knockd каждый час.

Внесите изменения в файл crontab для пользователя root.

sudo crontab - e<