Port Knocking - это эффективный способ контроля доступа к портам, позволяющий получить доступ к ним только легитимным пользователям. В этом случае брандмауэр открывает порт только при получении правильной последовательности попыток соединения. Это полезная техника для защиты доступа к портам на вашем сервере. В основном она используется для блокирования доступа автоматических сетевых сканеров, которые ищут открытые порты на серверах. В этой статье мы узнаем, как установить port knocking и настроить его для защиты службы SSH.
Как использовать нокирование портов для защиты SSH в Linux
Для этого мы будем использовать службу knockd.
1. Установка и настройка Knockd
Откройте терминал и выполните следующую команду для установки службы knockd.
1 | sudo apt install knockd |
Для систем на базе RHEL
1 | yum install knock-server |
После установки откройте файл конфигурации knockd в текстовом редакторе.
1 | sudo nano /etc/knockd.conf |
Вы увидите различные секции конфигурации в квадратных скобках [...].
В разделе [openSSH] измените стандартную последовательность стуков - 7000,8000,9000 на что-нибудь другое, поскольку она уже хорошо известна и может быть использована для компрометации вашей системы.
Например, мы установим последовательность стуков на 10005, 10006, 10007.
В третьей строке команды измените -A на -I сразу после /sbin/iptables и перед INPUT.
В разделе [closeSSH] измените последовательность стуков на значение, отличное от значения по умолчанию. Это последовательность, используемая для закрытия SSH-соединения после выхода пользователя из сервера.
Вот как выглядит окончательная конфигурация.
1 2 3 4 5 6 7 8 9 | [openSSH] sequence = 10005, 10006, 10007 ... command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT ... [closeSSH] sequence = 10007, 10006, 10005 ... |
Сохраните и закройте файл. Мы также должны изменить конфигурационный файл /etc/default/knockd. Откройте его в текстовом редакторе.
1 | sudo nano /etc/default/knockd |
Найдите строку START_KNOCKD=0. Откомментируйте ее и установите значение 1.
Далее перейдите к строке KNOCKD_OPTS="-i eth1". Откомментируйте строку и замените eth1 на активный сетевой интерфейс системы. Вы можете получить его с помощью команд ipaddr или ifconfig. Вот пример конфигурации.
для систем на базе RHEL, раскоментируйте строку OPTIONS и добавьте следующий параметр
1 | OPTIONS="-i ethN" |
где ethN - это наименование интерфейса.
Сохраните и выйдите из файла, чтобы применить изменения. Запустите и включите демон knockd.
1 2 | sudo systemctl start knockd sudo systemctl enable knockd |
Чтобы проверить состояние демона knockd, выполните команду.
1 | sudo systemctl status knockd |
2. Закройте порт SSH 22 в брандмауэре
Поскольку knockd сам будет предоставлять или запрещать доступ к SSH, мы собираемся закрыть порт 22. Выполните следующую команду для просмотра существующих правил брандмауэра.
1 | sudo ufw status numbered |
Удалите правила, которые начинаются с 22/tcp. Вот пример удаления правил 5 и 9, относящихся к нему.
1 2 | sudo ufw delete 9 sudo ufw delete 5 |
ИЛИ
1 | sudo ufw deny 22/tcp |
Если появится сообщение с подтверждением, введите y, чтобы продолжить.
3. Настройка клиента Knock
Мы настроили сервер для получения стука сервера. Теперь мы настроим клиент для отправки сообщений стука сервера.
Сначала откройте терминал на клиентской машине и выполните следующую команду для установки клиента knockd.
1 | sudo apt install knockd |
Для RHEL систем
1 | sudo yum install knock |
После завершения установки используйте следующую команду для отправки последовательности стуков.
1 | knock -v server_ip knock_sequence |
Вот пример команды для отправки последовательности стуков 10005 10006 10007 на 54.43.32.21. Она должна совпадать с последовательностью, описанной в секции [openSSH] конфигурационного файла knockd на сервере.
1 | knock -v 12.34.56.27 10005 10006 10007 |
Если вы получите сообщение 'hitting tcp 12.34.56.27:10005...', это означает, что стук прошел успешно.
После этого вы должны иметь возможность успешно подключиться к службе SSH с помощью обычной команды.
1 | ssh username@54.43.32.21 |
Введите пароль SSH, когда появится запрос.
После завершения работы отправьте на сервер последовательность стуков, описанную в секции [closeSSH] конфигурационного файла knockd.
1 | knock -v 12.34.56.27 10007 10006 10005 |
Приведенная выше команда закроет порт SSH для вашего клиента. Если вы захотите снова подключиться к SSH-серверу, вам нужно будет снова отправить команду knockd для открытия SSH-порта.
Заключение
В этой статье мы узнали, как использовать кнокинг порта для защиты SSH в Linux.