В одной из предыдущих статей я обещал рассказать об интересной технологии, с помощью которой можно значительно обезопасить SSH сервер от посягательств извне.
Суть в том, что изначально поднята служба SSH, но файрволл запрещает доступ.
Так же поднята специальная служба, которая слушает сетевой интерфейс и как только на него придут определенные пакеты, выполняет нужную нам команду.
Например:
8001:udp, 8002:udp, 8004:udp с интервалом в 5 секунды – выполнить правило добавления IP-адреса отправителя в “белый список” файрволла.
Ну, думаю, подход понятен. Будем внедрять решение.
На сервере я поставил Debian 6, на клиенте будет у нас FreeBSD. На самом деле нет разницы, какие будут стоять системы. Итак, сперва ставим сервер.
Установки сервера.
# apt-get install knockd
Готово.
Настраиваем конфиг /etc/knockd.conf
(переименовываем исходный knockd.conf.sample
, если есть)
Здесь я поменял порты в параметрах 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
Ну чтож, пробуем!
# knock -v 10.0.0.2 8001:udp 8002:udp 8004:udp
А теперь смотрим логи на сервере:
# cat /var/log/knockd.log
Как видите, приняли последовательность пакетов на определенные порты и сработало правило. Смотрим список правил файрволла:
Добавилось правило в цепочку INPUT, разрешающее (ACCEPT) соединения с IP:10.0.0.1 (клиент) на порт 22 (SSH). Всё, что мы и хотели! А сейчас пошлём закрывашку – последовательность других портов, которая убирает разрешающее правило:
# knock -v 10.0.0.2 9001:udp 9002:udp 9004:udp
Таким образом можно в принципе настроить различные алгоритмы, вплоть до того, что меняется пропускная способность канала для определенных пользователей, поднимаются-ложатся определенные сервисы и т.д. При желании, можно даже настроить активацию своих правил файрволла дистанционно через браузер (кстати, скачать бесплатно http://onebooks.ru/brauzery/30-coolnovo.html браузер CoolNovo) или тем же телнетом, только нужно настроить соответственно протокол TCP, а порт указывать:
- для браузера в адресной строке host:port
- для телнета – telnet host port
Comments: