当前位置: 首页 > Linux

芝麻开门-敲门

时间:2023-04-06 05:25:08 Linux

如果你有一个可公开访问的服务器,脚本小子可以很容易地扫描它的IP地址来寻找服务器上的开放端口(尤其是SSH的22端口),并对其进行暴力破解。防止SSH端口被暴力破解的方法一般有以下几种:1.修改默认端口22为其他端口2.禁止密码登录,只允许key登录或使用PAM模块开启二次认证3.使用ipfailban屏蔽暴力登录的IP对于上述方法,还有一种安全加固方法叫做端口敲门。从字面上看,类似于‘敲门’,只不过这里敲的是‘端口’,需要‘敲’端口的顺序。如果淘汰规则匹配,您可以让防火墙实时更改策略。从而达到切换防火墙的目的。简单的方法是安装knockd。knockd是一个端口测试服务器工具。它侦听以太网或其他可用接口上的所有流量,等待特定的端口命中序列。telnet或Putty等客户端软件通过向服务器上的端口发送TCP或数据包来启动端口命中。官网:https://zeroflux.org/projects...没有yum安装源,只能自己编译安装wgethttp://www.zeroflux.org/proj/knock/files/knock-0.8.tar.gzyuminstalllibpcap-develyuminstallautoconfautoreconf-fi./configure--prefix=/usr/localmakesudomakeinstallcpknockd.conf/etc/knockd-Vstartserviceknockd-iens192-d-v配置knockd服务使用默认值配置文件cat/etc/knockd.conf[options]UseSyslog[openSSH]sequence=7000,8000,9000seq_timeout=5command=/sbin/iptables-AINPUT-s%IP%-ptcp--dport22-jACCEPTtcpflags=syn[closeSSH]sequence=9000,8000,7000seq_timeout=5command=/sbin/iptables-DINPUT-s%IP%-ptcp--dport22-jACCEPTtcpflags=syn配置中有两个参数file:sequence:按照顺序访问端口,命令执行条件。比如这里是依次访问7000、8000、9000端口,默认使用TCP访问。command:当knockd检测到sequence端口访问完成后,再执行这里的命令,即通过iptables开启和关闭ssh外部访问。构建knock序列,直接手动构建打开SSHiptablestelnet7000telnet8000telnet9000关闭SSHiptablestelnet9000telnet8000telnet7000使用knock程序打开knock70008000Closeknock00900080007000NC或NmapOpen:nc-z700080009000Close:nc-z900080007000forxin700080009000;执行nmap-Pn--host_timeout201--max-retries0-p$x;done一般来说,到这里就结束了。但如果只是cv大法,就没有必要写这篇文章了。这里按照默认配置有个坑。我认为像knock-v10.180.249.61700080009000这样敲门是合乎逻辑的,但它给了我这个[root@managerknock-0.8]#knockd-iens192-vlisteningonens192...10.180.205.102:openssh:阶段110.180.205.102:openssh:阶段110.180.205.102:openssh:阶段110.180.205.102:openssh:openssh:阶段210.180.205.105closeSSH:Stage210.180.205.102:openSSH:Stage110.180.205.102:openSSH:Stage110.180.205.102:openSSH:Stage1,它把knock信号当做关闭信号,嗯,我把knock信号的端口和关闭的端口都设置了不同的端口,但是还是莫名其妙的输出,不是我期待的Stage1,Stage2,Stage3,command等执行日志。第一个和第二个信号可以接收到,但是第三个信号无论如何都接收不到。难道是前辈骗了我?改为敲门,关门只收到两个信号PSC:\Windows>telnet10.180.249.617000Connectingto10.180.249.61...无法打开与主机的连接。在端口7000上:连接失败PSC:\Windows>telnet10.180.249.618000正在连接到10.180.249.61...无法打开与主机的连接。在端口8000上:连接失败[root@managerknock-0.8]#knockd-iens192-vlisteningonens192...10.180.205.102:openSSH:Stage110.180.205.102:openSSH:Stage110.180.205.102:openSSH:Stage120.180.:openSSH:Stage210.180.205.102:openSSH:OPENSESAMEopenSSH:runningcommand:/usr/sbin/iptables-AINPUT-s10.180.205.102-ptcp--dport22-jACCEPT[root@manager~]#iptables-LChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTtcp--10.180.205.102anywheretcpdpt:sshChainFORWARD(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestination如果有两次以上的敲门信号,则门不能打开或关闭。这是一个错误吗?大概率是ip包到达服务器的时间可能乱了,会导致敲门失败。如果只看到open/closeSSH:Stage1或open/closeSSH:Stage2,看不到opencloseSSH:Stage3某些情况下,可以多试几次,或者手动依次执行。如果还是不行,建议检查端口是否被占用。如果最后还是失败,结论还是knockd处理tcp信号的bug。不建议配置两个以上的爆震信号。至于iptables的应用,我就不再细数了。另外,为了在重启过程中保存和恢复iptables设置,我们可以在knockd命令中添加相应的iptables-save和iptables-restore操作。看来knock还是有一定局限性的。还有其他工具吗?Knock官网还推荐了替代工具doorman和pasmal。有没有更简单的方法可以不依赖第三方工具,简单直接的实现Port-knocking?直接用iptables就可以了,先给服务器iptables添加两条策略\-ieth0\-traw--appendPREROUTING\-ptcp--dport8080--syn\-mrecent--nameknocked!--rcheck--seconds600\-jDROPiptables\-ieth0\-traw--appendPREROUTING\-pudp--dport30000\-mstring--string"OpenSesame"--algobm\-mrecent--nameknocked--set\-jDROP然后测试[root@manager~]#yuminstall-ysocat[root@manager~]#curl-i--connect-timeout5http://146.56.248.195:8080/hellocurl:(28)5001毫秒后连接超时[root@manager~]#echo"OpenSesame"|socat-udp4-datagram:146.56.248.195:30000[root@manager~]#curl-i--connect-timeout5http://146.56.248.195:8080/helloHTTP/1.1200OKDate:Tue,27Jul202102:38:47GMTContent-Type:text/plainContent-Length:21Connection:keep-aliveExpires:2021年7月27日星期二02:38:46GMTCache-Control:no-cachecontent-type:text/html

HelloWorld!

[root@manager~]#会敲门的,相信门也会被Port-knocking,不能作为一个独立的安全防御措施,因为它属于默默无闻的安全。多种策略的组合可以提高系统的安全性