Настройка сервера Предварительная настройка брандмауэра Установка и настройка службы knockd Настройка клиента
Окружение
Knock — программное обеспечение, осуществляющее работу с использованием механизма Port Knocking в среде операционной системы РЕД ОС.
Port Knocking имеет следующий принцип работы – сетевой порт является по умолчанию закрытым до тех пор, пока на него не поступит заранее определённая последовательность пакетов данных, которая «заставит» порт открыться. Например, можно сделать недоступным для внешних подключений порт SSH, но в то же время открывать его только для тех, кто знает необходимую последовательность.
Вы можете подробнее ознакомиться с настройкой сервера Port Knocking, просмотрев наши обучающие видео:
на RuTube — Механизм защиты сервера Port Knocking;
в Яндекс.Дзен — Механизм защиты сервера Port Knocking;
в VK Видео — Механизм защиты сервера Port Knocking.
На наших каналах вы также сможете найти много другой полезной информации.
Для организации работы механизма Port Knocking в системе необходимо правильно настроить брандмауэр. Цепочка правил INPUT, которая отвечает за фильтрацию входящих подключений, обязательно должна начинаться с правила, разрешающего уже установленные и связанные соединения, а завершаться правилом, запрещающим любые входящие подключения. Между ними должны располагаться правила, разрешающие доступ к отдельным сервисам.
В минимальной конфигурации должны присутствовать следующие два правила, где enp9s0 – имя внешнего интерфейса:
# Разрешить установленные и связанные соединения iptables -A INPUT -i enp9s0 -m state --state ESTABLISHED,RELATED -j ACCEPT # Запретить входящие соединения извне iptables -A INPUT -i enp9s0 -j DROP
Данные команды можно ввести в консоли, и они начнут действовать немедленно. Однако обратите внимание, если команды будут выполняться удаленно с подключением через внешний интерфейс, можно полностью потерять связь с сервером до его последующей перезагрузки. В этом случае (при удаленном подключении) необходимо добавить между двумя вышеуказанными правилами еще одно дополнительное правило и не удалять его до тех пор, пока работа Port Knocking не будет организована как требуется.
# Разрешить подключение по SSH iptables -A INPUT -i enp9s0 -p tcp --dport 22 -j ACCEPT
Если указанные выше команды выполняются в терминале, разрешающее правило для SSH следует вводить после правила, разрешающего установленные и связанные соединения.
После проведенных манипуляций перезапустите службу iptables командой:
systemctl restart iptables
Значения будут применены автоматически.
Для реализации механизма Port Knocking необходимо настроить службу knockd, которая находится в репозитории РЕД ОС в составе пакета knock-server.
Для установки knock-server перейдите в сеанс пользователя root:
su -
и выполните команду:
dnf install knock-server
После установки необходимо отредактировать конфигурационный файл /etc/knockd.conf. В нем должна остатьcя только секция [options], которую необходимо привести к следующему виду:
[options]
[options] UseSyslog Interface = enp9s0
где:
UseSyslog – указывает, что события будут записываться в системный журнал;
UseSyslog
Interface – имя сетевого интерфейса, который будет слушать knockd (в примере указан интерфейс enp9s0).
Interface
После этого требуется создать секцию для доступа по SSH:
[SSH] sequence = 7000,9000,8000 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
sequence – задает последовательность подключений, по умолчанию используется протокол tcp, но если необходимо использовать протокол udp, следует указать его в формате <номер_порта>:<протокол>, например:
sequence
<номер_порта>:<протокол>
[SSH] sequence = 7000,9000:udp,8000
Так, порты 7000 и 8000 будут ожидать подключения по протоколу tcp, а порт 9000 — по протоколу udp.
seq_timeout – время в секундах, за которое клиент должен совершить всю последовательность подключений. Значение следует указать минимальным, но при этом необходимо учитывать возможные задержки каналов связи как сервера, так и клиента;
seq_timeout
tcpflags – определяет TCP-флаги пакетов, которые будут участвовать в последовательности. Флаг syn рекомендуется использовать совместно с SSH, так как SSH-трафик может мешать knockd, признавая последовательность недействительной.
tcpflags
start_command и stop_command – определяют команды, которые должен выполнить knoсkd с интервалом, указанном в опции cmd_timeout. Принцип действия следующий – получив указанную последовательность подключений, служба выполняет команду из опции start_command, по истечении заданного таймаута – команду stop_command.
start_command
stop_command
cmd_timeout
Основной задачей является предоставление доступа к порту SSН на время, достаточное для установления подключения. Поэтому в параметр start_command в качестве первого правила в цепочку INPUT добавляется разрешение подключения к SSH с адреса источника подключения. Обратите внимание, что для этого используется ключ -I, который без указания номера добавляет правило первой строкой, а также подстановочную конструкцию -s %IP%, которая установит в правило текущий адрес подключающегося. Вторая команда удаляет уже добавленное правило.
-I
-s %IP%
Таким образом, порт будет открыт на подключение только для адреса клиента и только на время, указанное в таймауте. Обратите внимание, что значение таймаута необходимо только для осуществления подключения, после успешного подключения клиента и истечения таймаута текущее соединение не разрывается, а продолжает сохраняться и переходит в состояние ESTABLISHED за счет заданного правила в цепочке INPUT, которое разрешает установленные и связанные подключения.
ESTABLISHED
Для сохранения конфигурации и запуска службы выполните команду:
systemctl start knockd
После завершения настройки можно попробовать подключиться к серверу с клиентской машины. Однако предварительно следует проверить состояние брандмауэра командой:
iptables -L -vn
В выводе отображаются действующие правила, которые сигнализируют о том, что подключение к серверу невозможно.
Теперь можно попробовать выполнить подключение к серверу. Информацию о подключении клиента к серверу см. в разделе «Настройка клиента».
Затем снова стоит проверить состояние брандмауэра:
После подключения клиента первым в цепочке INPUT появилось правило, разрешающее доступ к SSH с адреса клиента.
Ровно через указанное в таймауте время (в примере 60 секунд) правило исчезнет, поэтому рекомендуется устанавливать значение таймаута достаточным для выполнения необходимых действий по подключению.
Возможности knockd не ограничиваются одним только управлением правилами сетевого фильтра. Можно настраивать knockd на запуск определенных скриптов, способных выполнять практически любые действия на сервере (от создания резервных копий до полного удаления каких-либо важных данных с сервера).
Подробную информацию о подключении клиента к серверу с помощью механизма Port Knocking см. в нашей статье «Механизм защиты сервера Port Knocking. Подключение клиента».
Дата последнего изменения: 21.02.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
Нажимая «Отправить запрос», вы соглашаетесь с условиями обработки персональных данных.
Вы будете получать только актуальную информацию по обновлению безопасности
Подписываясь на уведомления, вы соглашаетесь с условиями обработки персональных данных.
На ваш почтовый адрес отправлено письмо с подтверждением подписки.