Как известно, любой открытый порт представляет потенциальную угрозу безопасности. Чем меньше открытых портов тем лучше. Но что делать, когда отказаться от некоторых сервисов нет никакой возможности, а повысить безопасность системы все же необходимо? Тут на сцене появляется программа knockd, позволяющая позакрывать вообще все порты, сохранив при этом возможность работы со всеми популярными службами: SSH, FTP, HTTP и т.д.
Идея knockd проста и гениальна. Например, юзер желает установить связь с другим компьютером через SSH. Для этого на удаленной машине должен быть постоянно открыт порт 22. Knockd позволяет с помощью iptables закрыть 22й порт от внешнего мира и открыть в нужный момент только нужному IP. Как knockd узнает когда открыть порт и кому конкретно предоставить доступ?
В переводе с английского to knock — стучать. Чтобы knockd узнал «хозяина» и открыл нужный порт нужно «постучать» в заранее оговоренные порты в заранее оговоренной последовательности. Нижеприведенный пример конфигурации хорошо иллюстрирует открытие и закрытие SSH:
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 700,800,900
seq_timeout = 5
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 900,800,700
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
Если юзер попытается открыть на удаленной машине сначала порт 700, потом 800, а затем 900, то knockd создаст для фаервола новое правило, открывающее 22й порт для IP «постучавшего». Как видим, ничего сложного и все очень эффективно. После работы юзер должен закрыть обратно 22й порт, «постучав» в обратном порядке: 900, 800, 700.
Теперь о том как «постучать». Разумеется, вручную открывать какие-либо порты не требуется. Для удобства юзера существует команда knock. Пример:
knock 127.0.0.1 700 800 900
В качестве первого аргумента указывается адрес сервера с knockd, все остальные аргументы представляют собой номера портов, в которые нужно «постучаться».
Дополнительную информацию можно узнать на официальном сайте проекта.
супер! я восхищён
Ого... Ну, как говорится, всё гениальное... Авторам реальный респект)))
Прекраснейшая задумка, но, увы, бесполезная. Доступ к SSH можно перенести на другой порт и разрешить логин только по ключу, отключив парольный доступ. И все, такое сможет пробить только самый злобный каккер, да и то не всегда.
А вот SMTP, IMAP и т.п. очень нуждаются в дополнительной защите, но knockd по понятным причинам с ними работать не будет.