Вступление
Помимо изменения порта по умолчанию для SSH и использования пары ключей для аутентификации, стук портов может использоваться для дополнительной защиты (или, точнее, затемнения) вашего SSH-сервера. Он работает путем отказа от подключения к вашему сетевому порту SSH. По сути, это скрывает тот факт, что вы используете SSH-сервер, пока не будет предпринята последовательность попыток подключения к предопределенным портам. Очень безопасный и простой в реализации, стук портов является одним из лучших способов защитить ваш сервер от попыток злонамеренного SSH-соединения.
Предпосылки
- Сервер Vultr под управлением Ubuntu 18.04.
- Доступ в судо.
Прежде чем следовать приведенным ниже инструкциям, если вы не вошли в систему как пользователь root, получите временную корневую оболочку, запустив sudo -i
и введя свой пароль. Кроме того, вы можете sudo
использовать команды, показанные в этой статье.
Шаг 1: установка Knockd
Knockd - это пакет, который используется в сочетании с iptables для реализации стука портов на вашем сервере. Пакет ' iptables-persistent
' также требуется.
apt update
apt install -y knockd iptables-persistent
Шаг 2: правила iptables
Выполните следующие команды по порядку:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j DROP
iptables-save > /etc/iptables/rules.v4
Эти команды сделают следующее, соответственно:
- Поручите iptables сохранить существующие подключения.
- Поручите iptables разорвать любое соединение с портом tcp / 22 (если ваш демон SSH прослушивает порт, отличный от 22, вам следует соответствующим образом изменить указанную выше команду.)
- Сохраните эти два правила, чтобы они сохранялись после перезагрузки.
Шаг 3: Настройка Knockd
Используя выбранный вами текстовый редактор, откройте файл /etc/knockd.conf
.
Вы увидите следующее:
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
Вам следует изменить последовательность портов (выбрать номера портов выше 1024
и не использовать другие сервисы) и хранить их безопасно. Эта комбинация должна рассматриваться как пароль. Если вы забыли, вы потеряете доступ к SSH. Мы будем ссылаться на эту новую последовательность как x,y,z
.
seq-timeout
линия количество секунд Knockd будет ждать клиента , чтобы завершить последовательность портов-стук. Было бы неплохо изменить это значение на что-то большее, особенно если стук в порт будет сделан вручную. Однако меньшее значение тайм-аута безопаснее. 15
Рекомендуется изменить его на, так как мы будем стучать вручную в этом уроке.
Измените последовательность открытия для выбранных вами портов:
[openSSH]
sequence = x,y,z
Измените значение команды на следующее:
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Теперь измените последовательность закрытия соответственно:
[closeSSH]
sequence = z,y,x
Сохраните ваши изменения и выйдите, и откройте файл /etc/default/knockd
:
- Заменить
START_KNOCKD=0
на START_KNOCKD=1
.
- Добавьте следующую строку в конец файла:
KNOCKD_OPTS="-i ens3"
(замените ens3
на имя вашего общедоступного сетевого интерфейса, если он отличается.)
- Сохранить и выйти.
Теперь запустите Knockd:
systemctl start knockd
Если теперь отключиться от сервера, вы должны будете стучать по портам x
, y
и z
подключиться снова.
Шаг 4: Тестирование
Теперь вы не сможете подключиться к вашему SSH-серверу.
Вы можете проверить стук портов с помощью клиента telnet.
Пользователи Windows могут запустить telnet из командной строки. Если telnet не установлен, перейдите в раздел «Программы» панели управления, а затем найдите «Включить или отключить функции Windows». На панели функций найдите «Клиент Telnet» и включите его.
В своем терминале / командной строке введите следующее:
telnet youripaddress x
telnet youripaddress y
telnet youripaddress z
Сделайте все это за пятнадцать секунд, так как это ограничение, установленное в конфигурации. Теперь попробуйте подключиться к вашему серверу через SSH. Это будет доступно.
Чтобы закрыть доступ к SSH-серверу, выполните команды в обратном порядке.
telnet youripaddress z
telnet youripaddress y
telnet youripaddress z
Вывод
Лучшее в использовании стука портов - это то, что если он настроен параллельно с аутентификацией с помощью закрытого ключа, практически нет шансов, что кто-то еще сможет войти, если кто-то не знает вашу последовательность стука портов и не имеет вашего личного ключа.