ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Debian OpenSSH 安全配置:端口、AllowUsers、密钥登录与 Fail2ban

Debian OpenSSH 安全配置:端口、AllowUsers、密钥登录与 Fail2ban Debian OpenSSH 安全配置端口、AllowUsers、密钥登录与 Fail2ban1. 服务介绍OpenSSH 提供 Linux 远程登录、命令执行和 SFTP 文件传输能力是服务器管理和自动化运维的基础服务。安全配置重点包括监听端口、来源限制、用户白名单、密钥认证、root 登录策略、失败次数限制和审计日志。本文以 Debian 为例整理一套可复用的 SSH 安全配置使用合法的自定义端口限制允许登录用户使用 sudo 代替 root 远程登录配置密钥认证和 Fail2ban并把 sshd 认证日志单独写入 /var/log/ssh.log。2. 准备运行环境• 操作系统Debian Linux使用 systemd 管理 ssh 服务。• 权限服务端需要 root 或 sudo 权限修改 sshd 配置前必须保留一个已验证的管理会话。• 节点SSH 服务端、管理客户端使用 SSH_SERVER_IP、CLIENT_IP 和 SSH_PORT 替换现场参数。• 端口本文示例使用 TCP 2222生产环境按端口规划替换修改端口前先放行防火墙并保留当前会话。• 软件openssh-server、openssh-client需要封禁暴力尝试时安装 fail2ban需要单独日志时安装 rsyslog。• 账号创建普通管理账号并授予最小 sudo 权限不把密码写进脚本、命令或文章。• 备份备份 /etc/ssh/sshd_config、Fail2ban 和 rsyslog 配置确认 sshd -t 通过后再 reload。3. 相关知识与注意点• Debian 服务单元通常是 ssh守护进程配置检查命令是 sshd -t。• PermitRootLogin no 禁止 root 通过 SSH 登录管理员使用普通账号加 sudo。• AllowUsers 是 SSH 层用户白名单。配置后未列出的账号不能通过 SSH 登录即使系统本地账号存在。• PasswordAuthentication no 只适用于密钥登录已经验证成功的场景不要先关闭密码再测试密钥。• MaxAuthTries 限制一次连接允许的认证失败次数Fail2ban 负责在一段时间内封禁重复失败来源。• 修改端口不能代替认证安全。端口限制、来源防火墙、密钥、MFA 和审计应组合使用。• Fail2ban 依赖正确日志来源。使用 systemd journal 或 /var/log/auth.log 时backend 和 logpath 要与系统实际配置一致。• 修改远程服务时保持第二个已登录会话避免配置错误导致无法回连。4. 实验步骤4.1 安装 OpenSSH 和基础工具服务端安装apt update apt install -y openssh-server openssh-client systemctl enable --now ssh systemctl status ssh --no-pager确认当前监听ss -lntp | grep ssh ssh -V4.2 创建受限管理账号创建普通管理账号密码通过交互式 passwd 设置adduser cskadmin usermod -aG sudo cskadmin id cskadmin使用 sudoers 单独文件授予管理员权限visudo -f /etc/sudoers.d/cskadmin加入以下内容cskadmin ALL(ALL:ALL) ALL不要给账号配置远程 root 登录权限。先在本地或现有安全会话中确认su - cskadmin sudo -v sudo id4.3 配置 sshd 端口和用户策略备份并编辑配置cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date %F-%H%M%S) vim /etc/ssh/sshd_config按实际策略配置。下面示例使用 2222 端口只允许 cskadmin关闭 root 登录Port 2222 PermitRootLogin no AllowUsers cskadmin PubkeyAuthentication yes PasswordAuthentication yes MaxAuthTries 3 LogLevel VERBOSE如果已确认密钥登录成功再把 PasswordAuthentication 改为 no。若题目要求只允许 user01使用 AllowUsers user01并先确保 user01 的密钥或密码策略已验证不要同时保留互相矛盾的白名单。检查配置并 reloadsshd -t systemctl reload ssh ss -lntp | grep :2222不要先关闭旧 SSH 会话。用第二个终端测试新端口ssh -p 2222 cskadminSSH_SERVER_IP4.4 配置密钥登录在管理客户端生成 Ed25519 密钥ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 ssh-copy-id -p 2222 cskadminSSH_SERVER_IP测试密钥登录ssh -o IdentitiesOnlyyes -i ~/.ssh/id_ed25519 -p 2222 cskadminSSH_SERVER_IP确认成功后再在服务端关闭密码认证PasswordAuthentication no KbdInteractiveAuthentication no再次检查并 reloadsshd -t systemctl reload ssh4.5 配置 Fail2ban安装 Fail2banapt install -y fail2ban systemctl enable --now fail2ban创建本地 jail 配置vim /etc/fail2ban/jail.d/sshd.local[sshd] enabled true port 2222 backend systemd maxretry 3 findtime 60 bantime 3600检查并重启fail2ban-client -t systemctl restart fail2ban fail2ban-client status sshd如果系统日志不在 systemd journal改用实际 auth.log 路径并配置 logpath不要同时配置错误的 backend 和不存在的日志文件。4.6 分离 SSH 审计日志确认 rsyslog 已安装apt install -y rsyslog systemctl enable --now rsyslog创建规则vim /etc/rsyslog.d/50-sshd.confif ($programname sshd) then /var/log/ssh.log stop检查规则并重启 rsyslogrsyslogd -N1 systemctl restart rsyslog tail -n 20 /var/log/ssh.logSSH 日志通常包含用户、认证结果、来源地址和来源端口目标地址、目标端口还应结合服务端监听配置和网络流量验证。5. 验证与排错5.1 服务端验证sshd -t systemctl is-active ssh systemctl status ssh --no-pager ss -lntp | grep :2222 journalctl -u ssh -n 50 --no-pager5.2 用户、密钥和来源限制grep -E ^(Port|AllowUsers|PermitRootLogin|PubkeyAuthentication|PasswordAuthentication|MaxAuthTries) /etc/ssh/sshd_config id cskadmin ls -l ~/.ssh/authorized_keys ssh -vvv -p 2222 cskadminSSH_SERVER_IP从允许客户端和禁止客户端分别验证• 允许客户端端口可达、cskadmin 密钥登录成功。• 非白名单账号被 AllowUsers 拒绝。• root被 PermitRootLogin no 拒绝。• 未授权客户端由防火墙或来源策略拒绝。• 密钥错误客户端日志出现 publickey 认证失败不应退回弱密码认证。5.3 Fail2ban 验证fail2ban-client status fail2ban-client status sshd journalctl -u fail2ban -n 50 --no-pager不要在生产环境用连续错误登录制造封禁。测试时使用隔离客户端和明确的解封操作fail2ban-client set sshd unbanip CLIENT_IP5.4 日志验证grep -E Accepted|Failed|Invalid user|authentication failure /var/log/ssh.log | tail -n 20 journalctl -u ssh --since -10 min --no-pager tail -n 50 /var/log/auth.log6. 小结SSH 安全配置链路是安装服务、创建普通管理账号、配置合法端口、限制允许用户、验证密钥登录、关闭 root 或密码登录、配置 Fail2ban、分离审计日志。完成修改后必须同时验证 sshd -t、监听端口、允许账号、禁止账号、密钥认证、Fail2ban 状态和日志结果。远程修改时保留已有会话真实地址、密码和密钥不应写入发布文档。
返回列表