Найти в Дзене
Phoin

Настройка port knocking на сервере

Port Knocking представляет собой технологию скрытия сетевых сервисов путем их временного открытия только после получения специальной последовательности запросов на закрытые порты. В этой статье мы детально рассмотрим процесс настройки Port Knocking для защиты SSH-сервера на системе Linux, используя демон knockd. Весь процесс разбит на логические этапы, каждый из которых сопровождается подробными объяснениями, командами и примерами конфигурационных файлов. Первым шагом необходимо установить пакет knockd, который является реализацией механизма Port Knocking для Linux. Для систем на базе Debian/Ubuntu (включая Astra Linux) выполните следующие команды: sudo apt install knockd Далее настроим конфигурацию knockd основной файл конфигурации knockd находится по пути /etc/knockd.conf. Он определяет поведение демона: какие порты прослушивать, какую последовательность использовать для открытия доступа, какие команды выполнять при успешном "постукивании". Откройте файл конфигурации для редактирован
Оглавление

Port Knocking представляет собой технологию скрытия сетевых сервисов путем их временного открытия только после получения специальной последовательности запросов на закрытые порты. В этой статье мы детально рассмотрим процесс настройки Port Knocking для защиты SSH-сервера на системе Linux, используя демон knockd. Весь процесс разбит на логические этапы, каждый из которых сопровождается подробными объяснениями, командами и примерами конфигурационных файлов.

Установка демона knockd

Первым шагом необходимо установить пакет knockd, который является реализацией механизма Port Knocking для Linux. Для систем на базе Debian/Ubuntu (включая Astra Linux) выполните следующие команды:

sudo apt install knockd

Настройка конфигурации knockd

Далее настроим конфигурацию knockd основной файл конфигурации knockd находится по пути /etc/knockd.conf. Он определяет поведение демона: какие порты прослушивать, какую последовательность использовать для открытия доступа, какие команды выполнять при успешном "постукивании". Откройте файл конфигурации для редактирования:

sudo nano /etc/knockd.conf

Замените содержимое файла на следующую конфигурацию(так как изначально в файле находится шаблон):

[options]
UseSyslog
Interface = eth0
[SSH]
sequence = 7000,8000,9000
seq_timeout = 5
tcpflags = syn
start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 60

Объяснение конфигурации:

  • [options] — секция общих настроек демона
    UseSyslog — указывает демону использовать системный журнал (syslog) для записи событий
    Interface = emp3s0 — задает сетевой интерфейс, на котором будет работать knockd (замените emp3s0 на имя вашего интерфейса, которое можно узнать командой ip addr)
  • [SSH] — секция, определяющая правило для доступа к SSH
    sequence = 7000,8000,9000 — последовательность портов, которую должен "простучать" клиент. В данном случае это порты 7000, 8000 и 9000 в указанном порядке
    seq_timeout = 5 — временное окно в секундах, в течение которого должна быть введена вся последовательность. Если между запросами пройдет более 5 секунд, последовательность сбросится
    tcpflags = syn — тип TCP-пакетов, которые будут распознаваться. Обычно используются SYN-пакеты, так как они являются первыми в установлении TCP-соединения
    start_command — команда, выполняемая при успешном получении правильной последовательности. Она добавляет правило в iptables, разрешающее подключение по SSH (порт 22) с IP-адреса, с которого пришла последовательность
    stop_command — команда, выполняемая по истечении таймаута (cmd_timeout). Она удаляет ранее добавленное правило, тем самым снова закрывая доступ
    cmd_timeout = 60 — время в секундах, на которое открывается доступ. Через 60 секунд после последнего успешного knock доступ автоматически закрывается

Важно отметить, что %IP% в командах является переменной, которая автоматически заменяется на IP-адрес клиента, отправившего правильную последовательность.

Настройка параметров запуска

Файл /etc/default/knockd содержит параметры, передаваемые демону при запуске. Отредактируйте его:

sudo nano /etc/default/knockd

Установите следующие значения:

# 1 = запускать любое другое значение = не запускать
START_KNOCKD=1
KNOCKD_OPTS="-i eth0"

Настройка правил iptables

Выполните следующие команды для настройки базовых правил безопасности:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# По умолчанию блокируем все входящие SSH-подключения (knockd будет временно открывать доступ для конкретных IP)
sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

# Блокируем ICMP echo-запросы (ping) для скрытия системы
sudo iptables -A INPUT -p icmp --icmp-type 8 -j DROP

Для просмотра текущих правил iptables с нумерацией строк выполните:

sudo iptables -L --line-numbers

Запуск и настройка автозапуска knockd

После настройки конфигурации и правил iptables необходимо запустить демон knockd и настроить его автоматический запуск при загрузке системы.

sudo systemctl start knockd

# Включение автозапуска при загрузке системы
sudo systemctl enable knockd

# Проверка статуса службы
sudo systemctl status knockd

Сохранение правил iptables

Правила iptables, настроенные через командную строку, являются временными и сбросятся после перезагрузки системы. Для их сохранения используйте пакет iptables-persistent.

sudo apt install iptables-persistent
sudo service netfilter-persistent save

Тестирование работы Port Knocking

После полной настройки необходимо протестировать работу системы.

for x in 7000 8000 9000; do nmap -Pn --max-retries 0 -p $x 46.148.229.110; done

46.148.229.110 - ip адрес сервера для примера

Когда выполнили стук по нужным портам можем подключиться к серверу:

ssh username@46.148.229.110

В статье была рассмотрена технология Port Knocking, для обеспечения полного цикла безопасного функционирования ssh сервера можно выполнить:

1 - настроить вход по ключам

2 - изменить стандартный порт ssh

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