Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Сообщество системных администраторов Litl-Admin.ru Port Knocking — открыть порт по «стуку» снаружи


Ссылка на материал

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

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

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

Например:

1000:tcp, 2000:tcp, 4000:udp с интервалом в 3 секунды — выполнить правило добавления IP-адреса отправителя в «белый список» файрволла.

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

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

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

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

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

# apt-get install knockd

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

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

Готово.

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

Настраиваем демон 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

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



В избранное