Как работает port knocking
Port knocking сохраняет службу невидимой, пока кто-то не докажет, что знает секрет. В этом руководстве рассказывается, как это работает, о двух распространённых реализациях — knockd и fwknop — и о том, почему стуки не срабатывают на практике.
Как работает port knocking
Брандмауэр отклоняет все подключения к защищённому порту, поэтому сканер ничего не видит. Небольшой демон отслеживает трафик, поступающий на брандмауэр. Когда один адрес источника создаёт ожидаемый шаблон, демон добавляет правило брандмауэра, разрешающее этот адрес, обычно на короткое время.
Шаблон — это стук. В knockd это последовательность попыток подключения к определённым портам в заданном порядке и за ограниченное время. В fwknop это один зашифрованный пакет.
knockd: последовательности стуков
knockd прослушивает интерфейс и сопоставляет попытки подключения с последовательностями из /etc/knockd.conf. Последовательность может сочетать порты TCP и UDP. При совпадении knockd выполняет команду — обычно правило iptables или nftables для стучащего адреса (%IP%).
В этом примере SSH открывается для стучащего адреса и снова закрывается через 10 секунд. Существующие сеансы SSH продолжают работать, если брандмауэр принимает установленные подключения.
[options]
UseSyslog
[openSSH]
sequence = 7311:tcp,8822:tcp,9133:udp
seq_timeout = 10
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 10
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT Выбирайте собственные порты; никогда не используйте повторно порты из опубликованных примеров. tcpflags = syn заставляет knockd учитывать только пакеты с флагом SYN — первый пакет попытки подключения.
fwknop: Single Packet Authorization
fwknop заменяет последовательность одним пакетом UDP, который зашифрован (AES) и аутентифицирован (HMAC). Серверный fwknopd пассивно перехватывает его, проверяет, убеждается, что пакет не воспроизведён повторно, и открывает запрошенный порт для адреса внутри пакета.
Создайте ключи командой fwknop --key-gen и поместите их в access.conf на сервере. Secret Knock импортирует клиентскую часть из вашего .fwknoprc.
SOURCE ANY
OPEN_PORTS tcp/22
KEY_BASE64 <output of fwknop --key-gen>
HMAC_KEY_BASE64 <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT 30 Поскольку разрешённый адрес передаётся внутри зашифрованного пакета, SPA может открыть порт для адреса, отличного от адреса отправителя пакета. Это удобно, когда вы стучите с телефона через мобильную сеть для ноутбука в другом месте.
Почему стуки не срабатывают
- IPv4 или IPv6: стук ушёл через одно семейство адресов, а SSH подключается через другое. Брандмауэр открыл дверь для адреса, который вы не используете.
- Другой общедоступный адрес: в мобильной сети, за NAT оператора или VPN сервер видит другой IP, не тот, который вы ожидаете. Проверьте адрес, с которого отправляете стук.
- Повторно переданные SYN: если на стук TCP нет ответа, операционная система клиента снова отправляет тот же SYN. В наших тестах knockd 0.8 сбрасывал последовательность при таком повторном SYN, поэтому клиент должен отправлять каждый стук один раз и быстро прекращать попытку.
- Время: стуки, пришедшие за пределами seq_timeout или в неверном порядке, запускают последовательность заново.
- Промежуточные сетевые устройства: некоторые сети блокируют или изменяют трафик к необычным портам, поэтому стук, работающий дома, может не сработать в сети отеля или офиса.
Это безопасно?
Последовательность knockd отправляется без шифрования: любой, кто наблюдает ваш трафик, может воспроизвести её. Используйте её, чтобы скрыть службу от сканеров, перед ключами SSH, а не вместо них. fwknop SPA устраняет этот недостаток с помощью шифрования, HMAC и защиты от повторного воспроизведения и является лучшим выбором, если ваш трафик могут наблюдать.
Стуки с iPhone, Mac и Apple Watch
Secret Knock отправляет последовательности knockd и пакеты fwknop SPA с iPhone, iPad и Mac, проверяет ответ порта и открывает ваше приложение SSH. Apple Watch стучат через сопряжённый iPhone, поскольку watchOS не позволяет приложениям отправлять необработанные пакеты TCP или UDP; вдали от iPhone они могут отправлять SPA по HTTP на серверы, где это включено.
Руководства по настройке
Держите дверь закрытой. Носите стук с собой.
Secret Knock скоро появится в App Store для iPhone, iPad, Mac и Apple Watch.
Secret Knock →