Материал просмотрен 2,022 раз(а)

В одной из предыдущих статей я обещал рассказать об интересной технологии, с помощью которой можно значительно обезопасить SSH сервер от посягательств извне.

Суть в том, что изначально поднята служба SSH, но файрволл запрещает доступ.

Так же поднята специальная служба, которая слушает сетевой интерфейс и как только на него придут определенные пакеты, выполняет нужную нам команду.

Например:

8001:udp, 8002:udp, 8004:udp с интервалом в 5 секунды – выполнить правило добавления IP-адреса отправителя в “белый список” файрволла.

Ну, думаю, подход понятен. Будем внедрять решение.

Топология для PortKnocking

Топология для PortKnocking

На сервере я поставил Debian 6, на клиенте будет у нас FreeBSD. На самом деле нет разницы, какие будут стоять системы. Итак, сперва ставим сервер.

Установки сервера.

# apt-get install knockd

Устанавливаем knockd на сервер

Устанавливаем knockd на сервер

Готово.

Настраиваем конфиг /etc/knockd.conf (переименовываем исходный knockd.conf.sample, если есть)

Настраиваем демон knockd

Настраиваем демон knockd

Здесь я поменял порты в параметрах sequence и указал logfile для удобства. В command добавляется правило в iptables, такое нас устраивает. Кстати, если меняли дефолтный порт в ssh, то и в правиле нужно указывать верный. Здесь под переменной %IP% будет подставлен IP, с которого пришли пакеты “стуки”.

Следующим шагом меняем файл /etc/default/knockd

Настройки демона

Настройки демона

Указываем автоматический старт демона START_KNOCKD=1 и прослушиваемый интерфейс (у меня это eth0);

Сохраняем, выходим. Теперь черед за IPTABLES. Создал файл firewall.conf следующего содержания:

Правила по дефолту

Правила по дефолту

Применил набор правил:

# sh firewall.conf

Не забываем запустить демон:

# /etc/init.d/knockd start

Настраиваем клиент FreeBSD

Ищем в портах стучалки:

Ищем стучалки

Ищем стучалки

Ставить будем /usr/ports/security/knock, так, наобум сказал 🙂

# cd /usr/ports/security/knock
#make config install clean

Устанавливаем клиент

Устанавливаем клиент

Ну чтож, пробуем!

FreeBSD-knock-knock

FreeBSD-knock-knock

# knock -v 10.0.0.2 8001:udp 8002:udp 8004:udp

А теперь смотрим логи на сервере:

# cat /var/log/knockd.log

Debian-knocklog

Debian-knocklog

Как видите, приняли последовательность пакетов на определенные порты и сработало правило. Смотрим список правил файрволла:

Debian-iptables

Debian-iptables

Добавилось правило в цепочку INPUT, разрешающее (ACCEPT) соединения с IP:10.0.0.1 (клиент) на порт 22 (SSH). Всё, что мы и хотели! А сейчас пошлём закрывашку – последовательность других портов, которая убирает разрешающее правило:

# knock -v 10.0.0.2 9001:udp 9002:udp 9004:udp

Debian-close

Debian-close

Таким образом можно в принципе настроить различные алгоритмы, вплоть до того, что меняется пропускная способность канала для определенных пользователей, поднимаются-ложатся определенные сервисы и т.д. При желании, можно даже настроить активацию своих правил файрволла дистанционно через браузер (кстати, скачать бесплатно http://onebooks.ru/brauzery/30-coolnovo.html браузер CoolNovo) или тем же телнетом, только нужно настроить соответственно протокол TCP, а порт указывать:

  • для браузера в адресной строке host:port
  • для телнета – telnet host port