安全加固
SSH
配置文件 /etc/ssh/sshd_config
- ssh.socket(systemd socket unit)
- 负责“监听端口/地址”。当有连接到来时,systemd 才按需启动 ssh.service。
- 属于按需(on-demand)激活的机制:空闲时不占用一个常驻的守护进程。
$ systemctl status ssh.socket
● ssh.socket - OpenBSD Secure Shell server socket
Loaded: loaded (]8;;file://serverx/usr/lib/systemd/system/ssh.socket/usr/lib/systemd/system/ssh.socket]8;;; enabled; preset: enabled)
Drop-In: /run/systemd/generator/ssh.socket.d
└─]8;;file://serverx/run/systemd/generator/ssh.socket.d/addresses.confaddresses.conf]8;;
Active: active (running) since Wed 2025-08-20 07:29:48 CST; 5min ago
Triggers: ● ssh.service
Listen: [::]:2222 (Stream)
Tasks: 0 (limit: 1857)
Memory: 8.0K (peak: 256.0K)
CPU: 865us
CGroup: /system.slice/ssh.socket
Aug 20 07:29:48 serverx systemd[1]: Listening on ssh.socket - OpenBSD Secure Shell server socket.
- ssh.service(systemd service unit)
- 负责运行 sshd 进程(OpenSSH 守护进程),处理实际的 SSH 会话与认证。
- 在未使用 socket 激活时,它会常驻监听端口;使用 socket 激活时,它由 ssh.socket 触发启动。
$ systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (]8;;file://serverx/usr/lib/systemd/system/ssh.service/usr/lib/systemd/system/ssh.service]8;;; disabled; preset: enabled)
Active: active (running) since Wed 2025-08-20 07:29:48 CST; 8min ago
TriggeredBy: ● ssh.socket
Docs: ]8;;man:sshd(8)man:sshd(8)]8;;
]8;;man:sshd_config(5)man:sshd_config(5)]8;;
Process: 96667 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 96669 (sshd)
Tasks: 1 (limit: 1857)
Memory: 1.2M (peak: 1.5M)
CPU: 39ms
CGroup: /system.slice/ssh.service
└─96669 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
Aug 20 07:29:48 serverx systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Aug 20 07:29:48 serverx sshd[96669]: Server listening on :: port 2222.
Aug 20 07:29:48 serverx systemd[1]: Started ssh.service - OpenBSD Secure Shell server.
- 修改默认端口
默认端口为 22,比如修改为2222
# When systemd socket activation is used (the default), the socket
# configuration must be re-generated after changing Port, AddressFamily, or
# ListenAddress.
#
# For changes to take effect, run:
#
# systemctl daemon-reload
# systemctl restart ssh.socket
#
Port 2222
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
配置生效,需要加载配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
- 禁用 root 用户登录
禁止通过 SSH 直接以 root 登录,以降低未授权访问的风险。相反,创建具有 sudo 权限的标准用户账户来执行管理任务。这种做法可缓解针对 root 账户的暴力破解攻击。
sudo adduser <username>
sudo usermod -aG sudo <username>
PermitRootLogin no
sudo systemctl reload sshd
- 限制身份验证最大尝试次数
Fail2ban
Fail2ban 是一个基于日志的入侵防护工具,常用于阻止暴力破解(如 SSH、FTP、HTTP 基本认证等)。
工作原理:监控服务日志 → 匹配失败模式(filter)→ 触发封禁动作(action),通常通过 iptables/nftables 临时封 IP。
# 安装
sudo apt update
sudo apt install fail2ban
# 启动并开机自启
sudo systemctl enable --now fail2ban
# 查看状态与日志
systemctl status fail2ban
sudo journalctl -u fail2ban -f
sudo fail2ban-client status
sudo fail2ban-client get sshd bantime
sudo fail2ban-client get sshd findtime
sudo fail2ban-client get sshd maxretry