一觉睡醒,全世界都在连我的服务器怎么办!?

端口敲门

Knockd(port-knock server)是一个端口敲打服务。它监听以太网(或PPP)接口上的所有通信,查找端口命中的特殊“敲打”序列。客户端通过向服务器上的端口发送TCP(或UDP)数据包来实现这些端口命中。这个端口不需要打开——因为knockd在链路层级别侦听,所以它可以看到所有流量,即使它的目的地是一个关闭的端口。当服务器检测到特定的端口命中序列时,它运行在其配置文件中定义的命令。这可以用来在防火墙中打开漏洞,以便快速访问。

工作原理

初始防火墙设置:系统管理员首先设置防火墙规则,以拒绝所有对特定端口(如SSH端口22)的访问请求。

预设敲门序列:管理员在防火墙或专用服务(如 knockd)中定义一个特定的端口访问序列。例如,访问顺序可能是7000, 8000, 9000。

监听和监控:端口敲门服务(如 knockd)运行在服务器上,监听所有进入的网络流量,并监控是否有符合预设序列的端口访问。

执行操作:当端口敲门服务检测到正确的敲门序列时,它会运行预定义的命令,以更改防火墙规则。例如,它可以插入一个新规则来允许特定IP地址访问SSH端口。

恢复初始状态:在一定时间后或通过另一个敲门序列(关闭序列),防火墙规则恢复到初始状态,从而再次拒绝对特定端口的访问。

优点

安全性:端口敲门通过隐藏服务端口来增加安全性,使得攻击者难以发现开放的服务端口。

灵活性:可以定义任意长度和顺序的敲门序列,并结合超时时间等设置,提供灵活的访问控制。

隐蔽性:由于端口敲门的访问序列在正常的网络扫描中不会显现,因而具备一定的隐蔽性。

实现

安装 knockd

root@knockd:~# apt-get -y install knockd

配置 knockd

查看配置文件
root@knockd:~# vim /etc/knockd.conf
[options]
        logfile = /var/log/knockd.log
        Interface = ens192
[openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 5
        command     = /usr/sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn
[closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 5
        command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn
        
'sequence :是指定的敲门序列,即需要依次访问的端口。'

'seq_timeout :是指定每次敲门之间的最大时间间隔(以秒为单位)。如果敲门之间的时间间隔超过 seq_timeout,则敲门序列将被视为失败。'

'command :触发打开或关闭操作时发送到iptables防火墙的命令。 这些命令将规则添加到防火墙(以打开端口)或将其删除(以关闭端口)。'

'tcpflags :每个端口必须按秘密顺序接收的数据包类型。 SYN(同步)数据包是TCP连接请求中的第一个数据包,称为三向握手。'

'openSSH部分可以理解为必须向端口7000、8000和9000发出TCP连接请求(此顺序必须在5秒钟之内),才能将打开端口22的命令发送到防火墙。'

'closeSSH部分可以理解为必须向端口9000、8000和7000发出TCP连接请求(以该顺序并在5秒钟之内),以便关闭端口22的命令才能发送到防火墙。'
修改另一个配置文件
root@knockd:~# vim /etc/default/knockd 
# control if we start knockd at init or not
# 1 = start
# anything else = don't start
# PLEASE EDIT /etc/knockd.conf BEFORE ENABLING
START_KNOCKD=1

# command line options
KNOCKD_OPTS="-i ens192"

'找到行START_KNOCKD=0 。取消注释,并将值设置为 1。接下来,转到取消KNOCKD_OPTS="-i eth1"注释行,并将默认值替换为系统的活动网络接口'

启动 knockd

root@knockd:~# systemctl enable knockd --now
Synchronizing state of knockd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable knockd
Created symlink /etc/systemd/system/multi-user.target.wants/knockd.service -> /lib/systemd/system/knockd.service.
root@knockd:~# ps -ef| grep knockd
root     1196077       1  0 16:02 ?        00:00:00 /usr/sbin/knockd -i ens192
root     1196141 1195411  0 16:02 pts/0    00:00:00 grep knockd

添加拒绝SSH连接的规则

root@knockd:~# iptables -A INPUT -p tcp --dport 22 -j DROP
'别忘了永久保存'

使用端口敲门

测试端口是否开启
PS C:\Users\rouge> nmap -sV -sT 192.168.33.37 -p 22
Starting Nmap 7.95 ( https://nmap.org ) at 2024-07-01 16:36 中国标准时间
Nmap scan report for 192.168.33.37
Host is up (0.0010s latency).

PORT   STATE    SERVICE VERSION
22/tcp filtered ssh

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.48 seconds
使用
root@test:~# ssh root@192.168.33.37
ssh: connect to host 192.168.33.37 port 22: Connection timed out
'要想登录就要先敲门,输入正确的敲门端口序列,如下:'
root@test:~# knock 192.168.33.37 7000 8000 9000
root@test:~# ssh root@192.168.33.37
The authenticity of host '192.168.33.37 (192.168.33.37)' can't be established.
ED25519 key fingerprint is SHA256:LF63DoFSFTFTJGAWsvFvWWc59LFSPNWx818HQpMjYwg.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.33.37' (ED25519) to the list of known hosts.
root@192.168.33.37's password: 
Linux knockd 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jul  2 01:23:46 2024 from 192.168.5.44
root@knockd:~# 
'成功敲门后,SSH端口就处于开放中,这时,我们就可以通过SSH登录到服务器'
'其他服务器服务器想登录该服务器,要先进行敲门才能正常访问SSH端口。当客户端正确敲门后,服务端会在防火墙插入一条策略。可使用iptables -查看'
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勾魂皮卡丘

咋滴,打算白嫖啊?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值