воскресенье, 17 марта 2013 г.

Port Knocking

Надоели мне письма от 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 (если это не так, поправьте меня).

Комментариев нет:

Отправить комментарий