我一直在研究使用端口敲击来隐藏/保护SSHD。 我知道knockd和其他的实现,但我想要一些便携和简单的东西。 所以我已经决定使用最近的模块是足够好的iptables。
我已经禁用基于密码的login,并要求公钥/私钥。 我只是希望它出现像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分钟。
编辑:尝试提出更好的意见,并添加缺less“最近”。
除了拥有一个专门为此目的而编写的netfilter的conntrack helper之外,我看不到一种方法 – 你不能“编写”dynamic的iptables规则集,而必须使用conntrack机制。 这显然不适用于香草iptables,但需要一个自定义编译模块。