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