Я изучал возможность использования порта как способ скрыть / защитить SSHD. Я знаю о knockd и других реализациях, но мне нужно что-то портативное и простое. Итак, я решил, что iptables с последним модулем достаточно хорош.
Я уже отключил вход на основе пароля и мне нужен открытый / закрытый ключ. Я просто хочу, чтобы это выглядело так, как будто SSHD отсутствует на сервере, даже для сканера портов.
Я видел много примеров правил iptables и не совсем понимаю, как они должны работать.
Я хочу постучать по одному непонятному порту, чтобы открыть порт 22. В то же время я хочу на некоторое время отключить стук по портам, если к ним осуществляется доступ. Так что, если бы мой порт для детонации был 123, постукивание по этому порту открыло бы порт 22 на 5 секунд только для молотка. Но если постучать по порту 122 или 124, это отключит стук порта для молотка на 15 минут (так что даже если они постучат по 123, в этот период времени ничего не произойдет).
Какие правила iptables позволят добиться этого?
Редактировать: Добавлю, что использую CentOS 5.5. Можно использовать модули iptable.
Все эти правила имеют iptables -A INPUT
перед ними.
# if port 122 or 124 is touched add to block list
-m state --state NEW -m tcp -p tcp -–dport 122 -m recent --set --name blocked
-m state --state NEW -m tcp -p tcp -–dport 124 -m recent --set --name blocked
# if you are on the block list you cannot touch 123 for 15min
-m state --state NEW -m tcp -p tcp --dport 123 -m recent --rcheck --name blocked --seconds 900 -j DROP
# if port 123 is touched add to the knocked list
-m state --state NEW -m tcp -p tcp --dport 123 -m recent --set --name knocked
# if you are on the knock list you can initiate an ssh session for 5 seconds
-m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name knocked --seconds 5 -j ACCEPT
Единственное предостережение: я не знаю, может ли ipt_recent отслеживать в течение 15 минут.
Изменить: попытаться улучшить комментарии и добавить отсутствующие «недавние».
Я не вижу другого выхода, кроме как иметь conntrack helper для netfilter написан специально для этой цели - вы не можете "скрипт" динамических наборов правил iptables и должны будут использовать механизмы conntrack. Очевидно, что это не будет работать с ванильными iptables, но потребует специально скомпилированного модуля.