Ubuntu:使用Port Knocking隐藏SSH端口

来自wiki,关于Port Knocking的介绍:

端口试探(port knocking)是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。

端口试探的主要目的是防治攻击者通过端口扫描的方式对主机进行攻击。

端口试探类似于一次秘密握手协议,比如一种最基本的方式:发送一定序列的UDP、TCP数据包。当运行在主机上的daemon程序捕捉到数据包以后,如果这个序列正确,则开启相应的端口,或者防火墙允许客户端通过。

前面有文章介绍过<更改SSH默认端口>、<使用Fail2Ban保护SSH>,和今天介绍的Port Knocking相比,前面的两种方法弱爆了。

我使用的服务器系统是Ubuntu。要实现的功能:客户端按一定顺序telnet自定义的一系列端口之后,打开SSH的22端口。

例:

客户端执行:

我设置的敲门顺序是4444->5555->6666,按顺序执行上面命令之后会打开Ubuntu的22号端口。

现在,可以通过ssh连接到Ubuntu服务器。

关闭22端口:

注意:一定要记住你设置的端口和顺序。一旦忘了,尤其是服务器不在身边的时候,那可就虾米了。

确保安装有如下软件包

SSH服务(如果你没有安装)

iptables防火墙(如果你没有安装)


安装knockd,它是端口试探的核心软件:

添加防火墙规则

flush已存在的防火墙规则,不阻止对外连接

确保允许建立连接:

注意,STABLISHED,RELATED之间没有空格

阻止22端口的连接:

永久保存防火墙规则:

配置knockd

knocked的配置文件是/etc/knockd.conf,编辑:

参数说明:

  • 在options块中,UseSyslog很直观,记录敲门日志
  •  openSSH和closeSSH两段,开启ssh和关闭ssh配置
  • 自动把%IP%替换为客户端的ip地址,添加的防火墙规则允许这个ip地址连接22端口
  • sequence代表敲门顺序,间隔时间是5秒(seq_timeout)。

启用knockd,编辑/etc/default/knockd:

把START_KNOCKD的值改为1:

启动knockd:

测试

如果按以上配置,你现在不能通过SSH直接连接服务器,因为端口被防火墙屏蔽。

使用telnet进行Port Knocking,开启22端口:

如果是Linux,使用apt安装telnet。如果是windows,安装Telnet组件(在程序和功能里)。

现在可以正常使用ssh连接了。

使用完成之后,关闭SSH连接:


经过配置Port Knocking,基本没有人可以通过ssh hack你的系统了。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注