01 简介
在网络清静演练、攻击案例中,,,,,,,攻击方通过信息网络获取目的可用的信息,,,,,,,将各攻击点毗连汇成攻击面,,,,,,,攻击面越广意味着发明潜在误差的可能性越大,,,,,,,攻击乐成的概率也就越高。。。。。。。因此,,,,,,,通过清静计划最小化袒露面可以有用镌汰信息系统遭受入侵的概率。。。。。。。本文主要探讨攻击面收敛中通过Port Knocking手段隐藏SSH服务器的要领,,,,,,,使公共网络上的攻击者更难发明该服务器,,,,,,,抵达收敛袒露面,,,,,,,降低清静危害的目的。。。。。。。
02 更改默认 SSH 端口
隐藏 SSH 服务器的第一步是更改默认 SSH 端口。。。。。。。在本文演示案例中SHH端口号设置为60636,,,,,,,现实操作中可以使用恣意自界说端口号。。。。。。。翻开终端并使用以下下令通过 SSH 毗连到服务器:
$ ssh -i path-to-identity-file username@SERVER_IP
在服务器上使用vi终端中的下令或任何文本编辑器翻开 SSH 设置文件:
$ vi /etc/ssh/sshd_config
现在将默认端口22更新为60636。。。。。。。
操作完成后重新启动 SSH 服务器守护程序,,,,,,,以便将更新应用于新的传入的所有SSH毗连。。。。。。。
$ systemctl restart sshd.service
SSH服务器现在将接受并毗连端口60636,,,,,,,操作下令如下:
$ ssh -i path-to-identity-file username@SERVER_IP -p 60636

需要注重的是,,,,,,,若是该服务器上设置了防火墙,,,,,,,还应该同步更新防火墙规则,,,,,,,允许端口上的 SSH 60636毗连,,,,,,,阻止SSH 22毗连。。。。。。。
03 使用knockd实现端口碰撞
端口碰撞是一种在一组预先指定的关闭端口上爆发毗连请求,,,,,,,从外部翻开防火墙上的端口的要领。。。。。。。一旦收到准确的毗连请求序列,,,,,,,防火墙规则就会被动态修改,,,,,,,允许发送毗连请求的主机通过特定端口举行毗连。。。。。。。端口碰撞的主要目的是避免攻击者通过端口扫描来扫描系统中潜在的可使用服务,,,,,,,除非攻击者发送准确的碰撞序列,,,,,,,不然受;;;;;さ亩丝诮允疚乇铡。。。。。。
3.1 装置和设置 knockd
为了实现端口碰撞,,,,,,,首先要在Linux服务器上装置knockd。。。。。。。运行以下下令举行装置:
$ sudo apt-get install knockd
接下来翻开knockd位于/etc/knockd.conf的设置文件:

在设置文件中相识一下默认设置值包括的信息:
●sequence是一组端口号,,,,,,,被视为碰撞序列。。。。。。。
●seq_timeout界说序列的有用期。。。。。。。
●command包括iptables添加规则以允许来自指定 IP 地点的传入 SSH 毗连的下令。。。。。。。仅当用户启动有用的碰撞序列时才会执行此下令。。。。。。。
●tcpflags界说碰撞毗连中要接受的 TCP 数据包类型。。。。。。。SYN在这种情形下分派了一个TCP类型的数据包。。。。。。。
[openSSH]块和[closeSSH]块之间的主要区别在于[closeSSH]块具有端口号的关闭序列和iptables删除插入[openSSH]块中的规则的下令。。。。。。。
下面是参考的最终设置文件。。。。。。。注重,,,,,,,由于默认值 ( 7000, 8000, 9000) 众所周知,,,,,,,以是现已将开放序列值更改为20001, 20002,,,,,,,20003。。。。。。。同样也更新了默认的关闭顺序。。。。。。。除此之外还将端口更改为22,,,,,,,60636,,,,,,,由于已经在上一步中将 SSH 端口更新为此值。。。。。。。另外注重,,,,,,,在该[openSSH]块中,,,,,,,iptables下令值从更改-A为-I,,,,,,,体现此iptables规则将打起源口并将成为第一个执行的规则。。。。。。。最后将超时值从5增添到10,,,,,,,由于 5 秒是在碰撞序列后连忙启动 SSH 毗连的一个小窗口。。。。。。。

完玉成部操作后生涯更改并退出文件。。。。。。。
3.2 设置 knockd 侦听特定网络接口
knockd监听的网络接口的名称需要指定。。。。。。。在这里使用ip addr下令来检查与服务器关联的网络接口列表,,,,,,,并选择想要knockd监听的接口名称。。。。。。。

这种情形下,,,,,,,eth0是绑定到公共 IP 地点的接口。。。。。。。以是用这个接口来设置knockd。。。。。。。接下来,,,,,,,编辑knockd设置文件。。。。。。。

生涯更改并退出文件,,,,,,,连忙启动knockd服务:
$ systemctl start knockd
启用knockd服务,,,,,,,以便在下次启动服务器时同步启动该服务。。。。。。。
$ systemctl enable knockd
3.3 在防火墙上阻止端口 60636
为了实现60636动态翻开knockd端口的目的,,,,,,,默认情形下将阻止对该端口的会见,,,,,,,使用iptables下令来执行此操作。。。。。。。执行以下下令就不会破损目今的运动毗连:
$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
接下来执行下令,,,,,,,以默认iptables阻止端口上的所有传入 SSH 毗连60636:
$ sudo iptables -A INPUT -p tcp --dport 60636 -j REJECT
现在实验再次毗连到 SSH 服务器,,,,,,,应该会收到“Connection refused”响应:
$ ssh -i path-to-identity-file username@SERVER_IP -p 60636ssh: connect to host SERVER_IP port 60636: Connection refused
Linux 服务器现在设置了knockd,,,,,,,并且 SSH 端口将只开放给可以乐成泛起敲击序列的特定 IP。。。。。。。
04 毗连 SSH 服务器
现在已经更改了默认的 SSH 端口,,,,,,,实现了只有提供准确的碰撞序列时才打起源口60636的功效,,,,,,,接下来测试一下。。。。。。。
由于已经设置knockd监听TCP SYN端口上的数据包20001,,,,,,,20002且20003作为碰撞序列,,,,,,,现在可以使用恣意允许启动到这些特定端口的 TCP 毗连工具,,,,,,,下面演示详细操作办法。。。。。。。
4.1 使用碰撞
首先,,,,,,,在客户端盘算机中装置knockd。。。。。。。
$ sudo apt-get install knockd
使用如下knock下令执行碰撞序列:

现在可以通过SSH会见毗连 Linux 服务器:
$ ssh -i path-to-identity-file username@SERVER_IP -p 60636
...
完成 SSH 会见后可以启动关闭序列,,,,,,,如下所示:
$ knock -v SERVER_IP 20003 20002 20001 -d 500
可以审查knockd登录syslog浏览详细信息:

4.2 使用远程登录
使用以下下令启动敲击序列telnet:

收到“Connection refused”新闻并毗连失败,,,,,,,但没关系,,,,,,,由于该端口上禁用了 telnet,,,,,,,我们只想发送在 telnet 毗连时代发送的 TCP SYN 数据包。。。。。。。完成所有三个序列的 telnet 下令后即可通过 SSH 毗连到服务器。。。。。。。
05 参考链接
https://goteleport.com/blog/ssh-port-knocking/
https://www.howtoing.com/how-to-use-port-knocking-to-hide-the-ssh-port-from-attackers-on-ubuntu
- 要害词标签:
- 清静运营 检测与防护能力 网络清静演练 Port Knocking隐藏SSH服务器

京公网安备 11010802026257号