Linux 服务器安全优化:firewalld SSH 限制 白名单与 SCP 服务禁用流程
简介
在 Linux 服务器运维中,SSH 远程访问安全与文件传输管控是核心防护要点。这次从firewalld 防火墙配置与SCP 服务禁用两大关键操作展开,提供从环境准备到规则验证的全流程实战指南:先通过白名单模式精准限制仅指定 IP可访问 SSH,避免未授权 IP 渗透风险, SCP 禁用方法(卸载客户端、移除执行权限、修改 SSH 配置),满足不同场景下的文件传输管控需求。
一、前提准备:确认 firewalld 状态
首先确保 firewalld 已启动并正常运行
检查 firewalld 状态
systemctl status firewalld启动:
systemctl start firewalld
systemctl enable firewalld
二、核心配置步骤(白名单模式)
1. 移除可能存在的全局 SSH 允许规则(避免冲突)
若之前配置过开放 SSH(如 --add-service=ssh),需先移除,防止白名单规则被覆盖:
移除全局SSH服务允许规则
firewall-cmd --permanent --remove-service=ssh
2. 添加白名单规则:允许指定 IP 访问 SSH
分别放行 1.1.2.4(远程可信 IP)和 1.1.2.5(本机 IP):
1. 允许远程可信IP 1.1.2.4 访问SSH(默认端口22)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.1.2.4 " service name="ssh" accept'
2. 允许本机IP 1.1.2.5访问SSH(本机自身连接SSH时使用)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.1.2.5" service name="ssh" accept'
3. 添加拒绝规则:阻断所有其他 IP 访问 SSH (前面两个做了此步骤不做)
明确拒绝白名单外的所有 IP 访问 SSH,确保严格限制:
拒绝所有其他IPv4地址访问SSH服务
如果前面两步已经做了,这步可以忽略,不然可能面临前面规则作废,无法连接
规则白名单做了,就默认会拒绝除白名单之外的ip
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" reject'
4. 重新加载规则,使配置生效
所有规则需通过 --reload 应用到运行时环境:
firewall-cmd --reload
三、验证规则是否生效
配置完成后,通过以下命令确认白名单规则已正确添加:
查看所有永久规则(重点检查 SSH 相关的 rich rules)
firewall-cmd --permanent --list-all
正确输出示例(关键部分):
plaintext
public (active)
target: default
interfaces: eth0 # 实际网卡可能不同
services: dhcpv6-client
rich rules:
rule family="ipv4" source address="1.1.2.4 service name="ssh" accept
rule family="ipv4" source address="1.1.2.5" service name="ssh" accept
额外验证(可选):
从 1.1.2.4 主机尝试 SSH 连接 1.1.2.5,应能正常连接;
从其他 IP 1.1.2.8尝试连接,应被拒绝提示 “连接被拒绝” 或超时。
四、关键补充说明
若 SSH 端口非默认(如 2222):
若你修改过 SSH 端口(如 /etc/ssh/sshd_config 中改为 Port 2222),需将上述规则中的 service name="ssh" 替换为 port port="2222" protocol="tcp",示例:
#针对非默认端口2222的规则
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.1.2.4" port port="2222" protocol="tcp" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.1.2.5" port port="2222" protocol="tcp" accept'
前面两个做了,这个拒绝所有可不做
#firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="2222" protocol="tcp" reject'
加载
firewall-cmd --reload
五、禁用SCP
在Linux系统中,可以通过多种方法禁用SCP(Secure Copy Protocol)。以下是两种常用的方法:
方式1.
卸载openssh-clients
查看openssh文件:
rpm -qa | grep openssh-*
删除openssh-clients:yum remove openssh-clients -y
重启sshd服务:systemctl restart sshd.service
此方法会导致所有SSH客户端命令不可用,包括scp。
方式2.
移除scp执行权限
查找scp所在目录:
whereis scp
移除执行权限:cd /usr/bin
chmod -x scp
此方法会在远程执行scp命令时提示权限不够。
方式3.
修改SSH配置文件
打开SSH配置文件:
vi /etc/ssh/sshd_config
注释掉Subsystem sftp行:#Subsystem sftp /usr/libexec/openssh/sftp-server
重启sshd服务:service sshd restart