Надоели мне письма от fail2ban и logcheck про попытки брутфорса и решил я сделать port knocking для SSH.
Что за зверь? Все просто, для открытия порта - стучимся на определенные другие порты (последовательность обычно). Профит в том, что никто кроме нас их не знает и соотв. доступ получить не может. Хотя могут заснифать в публичной сети, но от брутфорса пойдет.
Что за зверь? Все просто, для открытия порта - стучимся на определенные другие порты (последовательность обычно). Профит в том, что никто кроме нас их не знает и соотв. доступ получить не может. Хотя могут заснифать в публичной сети, но от брутфорса пойдет.
Ставим средствами вашего дистрибутива пакет, который обычно носит название knockd - это сервер.
Появляется конфиг /etc/knockd.conf
Там описываются правила для сервера по принципу - какую команду выполнять когда прошла очередь запросов на определенный порт. Уже настроены действия openSSH и closeSSH, только поменяйте порты в опциях sequence, умоляю.
Абсолютно все можно найти в man'е (man knockd) или по ссылке.
Только что еще необходимо - поправить /etc/defaults/knockd чтобы он выглядел следующим образом.
# Включаем knockd (по дефолту 0) START_KNOCKD=1 # Если сетевой интерфейс через который идет доступ # не eth0, то вписать -i имя_интерфейса # по умолчанию закомментировано # и равно -i eth0 KNOCKD_OPTS=""
Про сетевые интерфейсы и их имена читать тут.
Ах да! Никто за вас не будет запрещать доступ к 22 порту (или где у вас там SSH висит). Поэтому запретим. Сейчас очень осторожно, не самозабаньтесь.
Создаем файл /etc/iptables.rules следующего вида
*filter # Deny SSH -A INPUT -p tcp --destination-port 22 -j REJECT COMMITЭто мы создали файл настроек iptables, а теперь сделаем чтобы они загружались при старте. Создаем файл /etc/network/if-pre-up.d/iptables с содержимым
#!/bin/bash /sbin/iptables-restore < /etc/iptables.rules
И делаем его исполняемым
chmod +x /etc/network/if-pre-up.d/iptables
Все, перезагружаемся или выполняем только что созданный скрипт/вручную добавляем правило которое мы написали.
Теперь 22 порт всегда закрыт и откроется только для определенного IP, только тогда, когда он постучится по портам которые вы указали в /etc/knockd.conf
Постучаться можно тем же SSH
ssh user@host -p номер_порта
Или Telnet, nc. Но не HTTP (если это не так, поправьте меня).
Комментариев нет:
Отправить комментарий