将SSH端口(22)暴露在公网上极易招致自动化脚本和暴力破解攻击。一种简单的应对方法是修改SSH端口号,但这并非真正提升安全性——针对你IP的定向扫描仍会发现端口,不过对于大范围扫描22端口的攻击者来说,你确实会”隐身”。

然而,改端口并不总是可行。你可能有一些自动化脚本或工具依赖默认的22端口,或者你原则上反对任何形式的”隐蔽安全”,即使这种方法在一定程度上是有效的。

另一种常用方案是使用Fail2Ban,它能在客户端多次登录失败后自动封禁其IP,从而阻止暴力破解。

除此之外,还有一种更灵活的方法:端口敲门(Port Knocking)。它在允许访问SSH端口之前,要求客户端先完成一个特定”敲门”动作。触发方式多种多样,例如:

  • 向服务器发送特定邮件,由系统处理后临时开放SSH端口;
  • 修改某个特定网页内容,服务器定期检查并响应;
  • 通过私密聊天渠道(如Telegram)发送指令,服务器监听并执行;
  • 甚至是通过短信或Twilio等服务平台通知服务器开放访问。

其中最简单的实现方式,是通过预设的防火墙规则,要求客户端先访问一个”秘密端口”完成敲门,之后防火墙才临时允许该IP连接SSH。

下面我们以Debian 12为例,演示如何配置基于knockd的端口敲门。

一、安装所需软件

假设你的客户端IP是1.2.3.4,敲门端口为55025(可自定义)。

**Debian/Ubuntu系统:**
apt update
apt install knockd iptables-persistent

**RedHat系系统(Alma、Rocky、RHEL等):**
yum install epel-release
yum install knock knock-server iptables-services

二、配置knockd

编辑配置文件:

vi /etc/knockd.conf

写入如下配置:

[options]
        UseSyslog

[openSSH]
        sequence = 55025
        seq_timeout = 5
        command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags = syn

[closeSSH]
        sequence = 55025,55025
        seq_timeout = 5
        command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags = syn

该配置实现:

  • 单次敲门(55025)即临时开放22端口给对应IP;
  • 连续两次敲门(55025,55025)则关闭该IP的SSH访问。

三、设置默认防火墙规则

清除现有规则(如有):

iptables -F

默认禁止SSH连接:

iptables -A INPUT -p tcp --dport 22 -j DROP

放行其他必要流量(根据实际调整):

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

保存规则:

**Debian/Ubuntu:**
netfilter-persistent save

**RedHat系:**
service iptables save

四、启动knockd服务

Debian/Ubuntu需额外编辑 /etc/default/knockd,设置:

START_KNOCKD=1

然后启动服务(所有系统):

systemctl enable --now knockd

五、配置客户端敲门工具

  • Debian/Ubuntu
    apt install knock
  • macOS(需Homebrew):
    brew install knock
  • Windows
    knock项目页下载预编译二进制文件。

六、使用流程

  1. 敲门开启SSH
    knock your-server-ip 55025
  2. 连接SSH
    ssh your-user@your-server-ip
  3. 使用后关门(可选):
    knock your-server-ip 55025 55025

总结

通过端口敲门,你既保留了SSH默认端口,又显著减少了被自动化工具扫描和攻击的风险。该方法结合防火墙动态规则,实现了”看不见的入口”,适合需要兼顾安全与便利的场景。

作者 admin

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注