使用knockd隐藏端口
如果你有一台公众可访问的服务器,黑客可以轻松扫描其IP地址,查找服务器上的开放端口(尤其是用于SSH的端口22)。将服务器隐藏起来、不让黑客看见的一种方法是使用knockd。knockd是一种端口试探服务器工具,它侦听以太网或其他可用接口上的所有流量,等待特殊序列的端口命中(port-hit)。客户软件通过向服务器上的端口发送TCP或数据包来启动端口命中
安装knockd Server
-
尝试使用yum或apt安装knockd-server服务(yum install knock-server),如果不行,使用以下步骤继续
-
下载knockd-server的rpm源
https://pkgs.org/download/knock-server
进入下载页面后需要先根据图案完成手工验证后才可以看到下载链接,下载对应版本的rpm文件
最终获取到的下载地址为:https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/k/knock-server-0.7.8-10.20151227git258a27e.el7.x86_64.rpm
在Linux中执行命令:wget 下载该rpm文件:
安装knockd-serverrpm -ivh knock-server-0.7.8-10.20151227git258a27e.el7.x86_64.rpm
yum install knock-server
systemctl status knockd 如果服务已经存在,则说明安装成功
配置knockd-server
- 编辑配置文件/etc/knockd.conf
[options]
#UseSyslog
logfile = /root/knockd.log
Interface = ens33
[opencloseSSH]
sequence = 2222:udp,3333:tcp,4444:udp
seq_timeout = 15
tcpflags = syn
start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport ssh -j ACCEPT
cmd_timeout = 10
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport ssh -j ACCEPT
以上是默认配置,也可以将opencloseSSH分开进行设置 - 配置修改完成后,请重启knockd服务
systemctl restart knockd
- 使用iptables添加以下防火墙规则
iptables -A INPUT -s 192.168.17.125 -j ACCEPT #允许宿主机连接,方便实验的时候可以用SSH进行连接
iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT #允许本机的连接
iptables -A INPUT -j DROP #拒绝其他所有IP的连接
或:iptables -A INPUT -p tcp --dport 22 -j REJECT #只阻止22号端口
隐藏和打开端口实验
-
使用nmap对端口进行扫描
以下扫描请不要在宿主机上进行,因为宿主机是可以正常访问22号端口的,可以使用一台Kali主机nmap -sC -Pn -sV -p 22 -A 192.168.112.215
Starting Nmap 7.93 ( https://nmap.org ) at 2023-03-29 11:42 CST
Nmap scan report for 192.168.112.215
Host is up.
PORT STATE SERVICE VERSION
22/tcp filtered ssh
Too many fingerprints match this host to give specific OS details从上述结果可以看出,22号端口被iptables的最后一条规则给过滤了
-
在其他主机上安装knock客户端工具,可以使用一台Kali主机
yum install knock
apt install knockd -
使用以下命令敲门
knock -v 192.168.112.215 2222:udp 3333:tcp 4444:udp
此时,在knockd-server的日志大致会显示以下内容:
[2023-03-29 12:46] 192.168.112.216: opencloseSSH: Stage 1
[2023-03-29 12:46] 192.168.112.216: opencloseSSH: Stage 2
[2023-03-29 12:46] 192.168.112.216: opencloseSSH: Stage 3
[2023-03-29 12:46] 192.168.112.216: opencloseSSH: OPEN SESAME
[2023-03-29 12:46] opencloseSSH: running command: /sbin/iptables -I INPUT -s 192.168.112.216 -p tcp --dport ssh -j ACCEPT
敲门成功后iptables会将22号端口开放出来 -
使用以下命令关门
knock -v 192.168.112.215 4444:udp 3333:tcp 2222:udp
此时,在knockd-server的日志大致会显示以下内容:
[2023-03-29 12:47] 192.168.112.216: opencloseSSH: Stage 1
[2023-03-29 12:47] 192.168.112.216: opencloseSSH: command timeout
[2023-03-29 12:47] opencloseSSH: running command: /sbin/iptables -D INPUT -s 192.168.112.216 -p tcp --dport ssh -j ACCEPT
此时,防火墙将删除允许22号端口通过的命令,关闭22号端口