服务器被暴力SSH爆破,如何防护与封禁IP
前言
公网服务器的22端口每天都会被机器人字典爆破,日志里满是 Failed password。口令弱就容易被撞库拿到root。本篇从"先排查→临时封禁→加固配置→自动防护"给出一套可落地的做法。
一、先确认是不是被爆破
# 统计失败次数最多的IP
lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head
# 或看secure日志里的失败记录
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head
出现大量同一IP的失败尝试,就是爆破。
二、手动封禁恶意IP(应急)
firewalld 临时/永久拉黑:
# 临时封禁
firewall-cmd --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'
# 永久封禁
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'
firewall-cmd --reload
# 查看已加规则
firewall-cmd --list-rich-rules
# 解除封禁
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'
也可用 iptables -A INPUT -s 1.2.3.4 -j DROP。
三、加固sshd配置(根本)
编辑 /etc/ssh/sshd_config:
# 修改默认端口,别再用22
Port 2222
# 禁止root直接密码登录
PermitRootLogin no
# 禁用空密码
PermitEmptyPasswords no
# 建议改用密钥登录后关闭密码
PasswordAuthentication no
# 最大尝试次数
MaxAuthTries 3
# 10分钟无活动断开
ClientAliveInterval 600
改完 systemctl restart sshd,先保留当前会话再重启,防止把自己锁外面;新端口记得在防火墙放行。
四、自动防爆:fail2ban
自动统计失败次数并封IP,最省事:
yum install -y fail2ban fail2ban-firewalld
新建 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
maxretry = 5
findtime = 600
bantime = 86400
启动并自启:
systemctl enable --now fail2ban
# 查看封禁名单
fail2ban-client status sshd
五、常见坑
- 改端口只改sshd忘了防火墙放行:自己也连不上,务必先
firewall-cmd --permanent --add-port=2222/tcp; - 关密码登录前没配好密钥:直接被锁门外;
- 只封一次IP:机器人换段继续扫,要用fail2ban自动封;
- 云安全组没限制:在安全组只放行你常用IP访问SSH端口,比本机防护更前置;
- 弱密码root:PermitRootLogin no + 密钥才是正解,改端口只是提高门槛。
总结
应急用firewalld拉黑,长期靠改端口、禁root密码、上密钥,再用fail2ban自动封高频失败IP,云安全组白名单兜底。层层叠加,爆破就很难成功。
遇到问题加QQ23979811 协助处理
Linux防火墙配置
Linux防火墙配置
引言
云服务器安全不能只靠系统防火墙,开通端口是上线必经步骤。CentOS 7以上默认使用firewalld,很多新手忘了放行端口,导致网站、SSH、数据库从外部连不上。
firewalld常用命令
#查看防火墙状态
firewall-cmd --state
#查看已放行端口
firewall-cmd --list-ports
#永久放行80、443端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
#重新加载生效
firewall-cmd --reload
#移除某个端口
firewall-cmd --permanent --remove-port=3306/tcp
区域概念
firewalld分public、internal等zone,默认public。--permanent写入永久规则,不加只对当前会话生效,重启失效。改完必须reload。
常用放行场景
- Web服务:80、443;
- SSH远程:22(建议改非默认端口再放行);
- 不要对公网开放3306、6379、27017等数据库端口;
- 只允许指定IP访问管理端口更安全:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=1.2.3.4 port port=22 protocol=tcp accept'
注意事项
- 云服务器除了系统防火墙,还要在云厂商控制台安全组同步放行;
- 改SSH端口前先确认新端口放行,避免把自己挡在门外;
- 防火墙规则最小化,只开放必要端口。
总结
firewalld核心:查看列表、永久加端口、reload生效。记住系统防火墙和云安全组两层都要放行,数据库端口绝不暴露公网,管理端口限制来源IP。
MySQL远程连接失败,权限和防火墙问题
前言
本地能连MySQL,远程连接就报错。常见原因:用户没授权、防火墙没开、MySQL只监听本地。
报错长什么样
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx'
或者:
ERROR 1130 (HY000): Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
原因一:用户没授权远程登录
排查
SELECT user, host FROM mysql.user;
看root用户的host是 localhost 还是 %。
如果是 localhost,就只能本地登录。
解决
授权远程登录:
-- 方法1:授权root所有IP
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码';
-- 方法2:只允许某个IP
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100' IDENTIFIED BY '你的密码';
-- 刷新
FLUSH PRIVILEGES;
原因二:防火墙没开3306端口
排查
在本地服务器上测试:
netstat -tlnp | grep 3306
看MySQL监听的是 127.0.0.1:3306 还是 0.0.0.0:3306。
如果是 127.0.0.1:3306,说明只监听本地。
解决防火墙
CentOS7 firewalld
# 开3306端口
firewall-cmd --permanent --add-port=3306/tcp
# 重载
firewall-cmd --reload
Ubuntu ufw
ufw allow 3306/tcp
原因三:MySQL只监听本地
排查
netstat -tlnp | grep 3306
如果显示 127.0.0.1:3306,就是只监听本地。
解决
改my.cnf:
[mysqld]
bind-address = 0.0.0.0
注释掉 skip-networking(如果有的话)。
重启MySQL:
systemctl restart mysqld
原因四:云服务器安全组
阿里云、腾讯云等云服务器,除了系统防火墙,还有安全组。
解决
在云服务器控制台,找到安全组,放行3306端口。
原因五:MySQL版本问题
MySQL 8.0默认用 caching_sha2_password,老客户端不支持。
解决
创建用户时指定老的加密方式:
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
排查步骤
第一步:本地能连吗
先在服务器上本地连一下:
mysql -u root -p
本地能连,说明MySQL本身没问题。
第二步:看MySQL监听地址
netstat -tlnp | grep 3306
第三步:防火墙开了吗
firewall-cmd --list-ports
看3306在不在。
第四步:远程telnet测试
在本地电脑上测试:
telnet 服务器IP 3306
如果连不上,就是网络/防火墙问题。
常见坑
坑1:改了授权忘了刷新
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
改完就退出,结果还是连不上。
解决: 执行 FLUSH PRIVILEGES;
坑2:bind-address没改
授权了,防火墙也开了,还是连不上。
原因: MySQL只监听本地。
解决: 改 bind-address = 0.0.0.0
坑3:安全组没开
系统防火墙开了,云服务器安全组没开。
解决: 去云控制台放行3306端口。
坑4:密码不对
报错不是"连接不上",而是"Access denied"。
原因: 密码错了。
解决: 确认密码,注意大小写。
总结
远程连接失败排查顺序:
- 先授权远程用户
- 再开防火墙3306
- 然后改bind-address
- 最后查云安全组
记住: 90%的情况都是没授权或者防火墙没开。
遇到问题加QQ23979811 协助处理
Linux 防火墙配置详解
Linux 防火墙配置详解
服务器安全第一步就是防火墙,学会配置很重要。
1. firewalld(CentOS 7+)
查看状态:
systemctl status firewalld
开启/关闭:
# 开启
systemctl start firewalld
# 关闭
systemctl stop firewalld
# 开机自启
systemctl enable firewalld
2. 开放端口
开放单个端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
开放多个端口:
firewall-cmd --zone=public --add-port=80-90/tcp --permanent
重新加载生效:
firewall-cmd --reload
3. 查看端口
# 查看所有开放端口
firewall-cmd --list-ports
# 查看某个端口是否开放
firewall-cmd --query-port=80/tcp
4. 关闭端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --reload
5. iptables(旧版)
查看规则:
iptables -L -n
开放端口:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
保存规则:
service iptables save
6. 常用端口
# 常用端口
22 SSH
80 HTTP
443 HTTPS
3306 MySQL
6379 Redis
8080 Tomcat
7. 常见问题
1)端口开了还是访问不了:
- 检查云服务商安全组
- 检查服务器内部防火墙
2)远程连接不上:
- 检查 22 端口是否开放
- 检查 sshd 是否启动
总结
Linux 防火墙要点:
- firewalld 管理端口
- --permanent 永久生效
- --reload 重新加载
- 记得开放安全组
- 常用端口按需开放
做运维,防火墙是基本功。
Linux 防火墙配置详解
Linux 防火墙配置详解
服务器安全第一关就是防火墙,配置错了就远程连不上了,这篇讲常用配置。
1. firewalld(CentOS7 默认)
查看状态:
# 查看防火墙状态
firewall-cmd --state
# 查看开放的端口
firewall-cmd --list-ports
# 查看开放的服务
firewall-cmd --list-services
开放端口:
# 开放 80 端口
firewall-cmd --permanent --add-port=80/tcp
# 开放 443 端口
firewall-cmd --permanent --add-port=443/tcp
# 开放多个端口范围
firewall-cmd --permanent --add-port=8000-9000/tcp
# 重载生效
firewall-cmd --reload
关闭端口:
# 关闭 80 端口
firewall-cmd --permanent --remove-port=80/tcp
# 重载
firewall-cmd --reload
开放服务:
# 开放 nginx 服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 重载
firewall-cmd --reload
2. iptables(老系统常用)
查看规则:
iptables -L -n
开放端口:
# 开放 22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 开放 80 端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 保存规则
service iptables save
3. 常用安全配置
只允许指定 IP 访问 SSH:
# 只允许 192.168.1.100 访问 22 端口
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port='22' accept"
# 拒绝其他所有 IP
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
4. 常用端口说明
| 端口 | 服务 |
|---|---|
| 22 | SSH 远程连接 |
| 80 | HTTP 网站 |
| 443 | HTTPS 网站 |
| 3306 | MySQL 数据库 |
| 6379 | Redis 缓存 |
| 8080 | 应用服务 |
5. 常见问题
1)SSH 连不上了:
- 检查防火墙是不是把 22 端口关了
- 用控制台登录服务器重新开放
2)网站打不开:
- 检查 80/443 端口开了没
- 重载防火墙生效
3)数据库连不上:
- 3306 端口别对公网开放
- 只允许本地或指定 IP 访问
总结
防火墙配置记住三点:
- 先开 22 端口,不然自己都连不上
- 网站开 80 和 443
- 数据库别对外网开放
安全第一,别图省事直接关防火墙。
CentOS7 关闭防火墙,永久关闭firewalld
前言
刚装好的 CentOS7 默认开了防火墙,很多端口都访问不了。有时候为了省事想直接关掉防火墙,本文讲一下怎么操作,以及临时关和永久关的区别。
查看防火墙状态
先看看防火墙现在是开还是关:
systemctl status firewalld
输出里有 active (running) 就是开着,inactive (dead) 就是关了。
或者用:
firewall-cmd --state
输出 running 就是开着,not running 就是关了。
临时关闭防火墙
只关掉当前运行状态,重启后又会自动开起来:
systemctl stop firewalld
永久关闭防火墙
永久关闭,重启后也不会再开:
systemctl stop firewalld
systemctl disable firewalld
两条命令一起执行,先停掉当前的,再禁止开机自启。
重新开启防火墙
如果以后又想开起来:
systemctl start firewalld
systemctl enable firewalld
验证是否关闭成功
执行完之后再看一下状态:
systemctl status firewalld
应该显示 inactive (dead)。
常见坑
坑1:只 stop 了但没 disable
执行了 systemctl stop firewalld,但重启后防火墙又自己开起来了。
原因: 只停了当前运行,没关开机自启。
解决: 还要执行 systemctl disable firewalld。
坑2:关了防火墙但还是访问不了
防火墙关了,但外部还是访问不了网站。
原因: 除了系统防火墙,云服务商还有一层安全组。
解决: 去云服务商控制台(阿里云、腾讯云、华为云等)的安全组里,把对应的端口也开放了。
坑3:Ubuntu 用的不是 firewalld
在 Ubuntu 上执行 firewalld 命令报错。
原因: Ubuntu 默认用 ufw 防火墙,不是 firewalld。
解决: Ubuntu 关防火墙用:
ufw stop
ufw disable
坑4:关闭防火墙不安全
直接关了防火墙,服务器暴露在公网上很危险。
建议: 生产环境不要直接关防火墙,而是只开放需要的端口。比如只开 80、443、22 端口,其他都关。
总结
| 操作 | 命令 |
|---|---|
| 查看防火墙状态 | systemctl status firewalld |
| 临时关闭 | systemctl stop firewalld |
| 永久关闭 | systemctl stop firewalld && systemctl disable firewalld |
| 开启防火墙 | systemctl start firewalld |
| 开机自启 | systemctl enable firewalld |
注意: 生产环境建议不要直接关防火墙,用开放指定端口的方式更安全。
遇到问题加QQ23979811 协助处理
CentOS7 防火墙开放端口范围,一次性开放多个端口
前言
有时候需要一次性开放很多端口,或者开放一段端口范围,一个个加太麻烦。CentOS7 的 firewalld 支持开放端口范围,也支持一次性开放多个端口,本文讲一下怎么操作。
查看当前开放的端口
先看看现在防火墙开了哪些端口:
firewall-cmd --list-ports
输出类似:
80/tcp 443/tcp 8080/tcp
开放单个端口
永久开放
firewall-cmd --permanent --add-port=80/tcp
然后重载生效:
firewall-cmd --reload
开放 UDP 端口
把 tcp 改成 udp 就行:
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --reload
一次性开放多个端口
方法一:一条命令加多个
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp --add-port=8080/tcp
firewall-cmd --reload
多个 --add-port 用空格分开就行。
方法二:开放端口范围
如果要开放一段连续的端口,比如 8000 到 9000:
firewall-cmd --permanent --add-port=8000-9000/tcp
firewall-cmd --reload
这样 8000 到 9000 之间所有 TCP 端口都开放了。
方法三:同时开放 TCP 和 UDP
firewall-cmd --permanent --add-port=53/tcp --add-port=53/udp
firewall-cmd --reload
移除端口
移除单个端口
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
移除端口范围
firewall-cmd --permanent --remove-port=8000-9000/tcp
firewall-cmd --reload
常见场景
场景1:开放 20 到 80 之间的所有端口
firewall-cmd --permanent --add-port=20-80/tcp
firewall-cmd --reload
场景2:同时开放 HTTP 和 HTTPS 服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
场景3:只允许某个 IP 访问某个端口
这个更安全,只允许 192.168.1.100 访问 3306 端口:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port='3306' accept"
firewall-cmd --reload
常见坑
坑1:加了端口没生效
执行了 add-port 但还是访问不了。
原因: 没加 --permanent,或者没 reload。
解决: 一定要加 --permanent 参数,然后执行 firewall-cmd --reload。
坑2:端口范围写反了
写成了 9000-8000,报错。
原因: 范围必须从小到大写。
正确写法: 8000-9000/tcp
错误写法: 9000-8000/tcp
坑3:防火墙没启动
执行 firewall-cmd 报错。
原因: firewalld 服务没启动。
解决:
systemctl start firewalld
systemctl enable firewalld
坑4:开了端口但还是访问不了
防火墙开了端口,但是外部还是访问不了。
原因: 除了防火墙,还有可能是云服务商的安全组没开。
解决: 去云服务商控制台(阿里云、腾讯云等)的安全组里,把对应的端口也开放了。
总结
| 操作 | 命令 |
|---|---|
| 开放单个端口 | firewall-cmd --permanent --add-port=80/tcp |
| 开放多个端口 | firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp |
| 开放端口范围 | firewall-cmd --permanent --add-port=8000-9000/tcp |
| 移除端口 | firewall-cmd --permanent --remove-port=8080/tcp |
| 查看已开放端口 | firewall-cmd --list-ports |
| 重载生效 | firewall-cmd --reload |
记住:加完端口一定要 --reload 才生效。
遇到问题加QQ23979811 协助处理
CentOS7 firewalld开放80、443端口永久生效命令
CentOS 7 默认使用 firewalld 作为防火墙管理工具。很多新手搭建网站后发现外网访问不了,90% 都是因为 80、443 端口没开放。下面是完整的操作步骤,照抄就能用。
1. 先确认防火墙状态
systemctl status firewalld
如果显示 active (running) 说明防火墙正在运行,需要继续下面的操作。如果是 inactive 那就是防火墙没开,问题不在这里。
2. 开放 80 端口(HTTP)
firewall-cmd --zone=public --add-port=80/tcp --permanent
参数说明:
--zone=public:作用域为公共区域--add-port=80/tcp:开放 80 端口,TCP 协议--permanent:永久生效,不加这个重启服务器就失效了
3. 开放 443 端口(HTTPS)
firewall-cmd --zone=public --add-port=443/tcp --permanent
4. 一次性开放多个端口
如果需要同时开放多个端口,可以一条命令搞定:
firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent
5. 重载防火墙使配置生效
⚠️ 重点:开放端口后必须重载,否则不生效!
firewall-cmd --reload
6. 查看已开放的端口
确认一下端口有没有真正开放成功:
firewall-cmd --list-ports
正常会输出类似:
80/tcp 443/tcp
7. 常用其他端口开放命令
SSH 端口(默认22,建议改成别的):
firewall-cmd --zone=public --add-port=22/tcp --permanent
MySQL 端口(如果需要远程连接数据库):
firewall-cmd --zone=public --add-port=3306/tcp --permanent
Redis 端口:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
8. 移除/关闭已开放的端口
如果某个端口不需要了,想关掉:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
常见坑
-
加了
--permanent还是不生效?
忘记firewall-cmd --reload了。永久配置写入后必须重载才会加载到运行时。 -
端口开放了还是访问不了?
检查云服务商的安全组(阿里云/腾讯云/华为云都有这个东西),防火墙和安全组是两层,都要开。 -
firewalld 命令找不到?
CentOS 7 最小化安装可能没装,执行yum install firewalld -y安装。 -
临时开放端口(重启就失效)
去掉--permanent参数就是临时开放,重启或 reload 后自动关闭。
遇到服务器、Nginx、MySQL 报错,可以加微信远程协助排查问题。
Linux 防火墙配置技巧
Linux 防火墙配置技巧
服务器安全第一步就是配好防火墙,只开需要的端口,其他全关。
1. firewalld(CentOS 7+ 默认)
# 查看状态
firewall-cmd --state
# 查看已开放端口
firewall-cmd --list-ports
# 开放端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
# 开放多个端口
firewall-cmd --permanent --add-port=8000-9000/tcp
# 开放指定 IP 访问
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port=3306 accept"
# 重载配置(必须重载才生效)
firewall-cmd --reload
# 删除端口
firewall-cmd --permanent --remove-port=8080/tcp
2. ufw(Ubuntu 默认)
# 查看状态
ufw status
# 开启防火墙
ufw enable
# 允许 SSH
ufw allow 22
# 允许 80 和 443
ufw allow 80
ufw allow 443
# 允许指定 IP
ufw allow from 192.168.1.100 to any port 3306
# 拒绝某个 IP
ufw deny from 1.2.3.4
# 删除规则
ufw delete allow 8080
3. iptables(经典)
# 查看规则
iptables -L -n
# 允许 22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 80 端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 默认拒绝其他
iptables -P INPUT DROP
# 保存规则(CentOS)
service iptables save
4. 安全建议
- 只开必要端口:SSH、HTTP、HTTPS,其他全关
- SSH 改端口:不要用默认 22,改成其他端口
- 限制 SSH 登录 IP:只允许你的 IP 登录 SSH
- 数据库不对外暴露:MySQL、Redis 只允许本地访问
- 定期查看日志:/var/log/secure 看有没有暴力破解
5. 常用端口速查
- 22:SSH
- 80:HTTP
- 443:HTTPS
- 3306:MySQL
- 6379:Redis
- 8080:应用端口
总结
Linux 防火墙核心:
- CentOS 用 firewalld
- Ubuntu 用 ufw
- 只开必要端口
- 数据库不对外暴露
- SSH 限制 IP 访问
配好防火墙,服务器安全提升一大截。
Linux 服务器安全加固:10个必须做的基础配置
前言
刚装完的 Linux 服务器就像没锁门的房子,任何人都能进来。本文整理了 10 个最基础但最重要的安全加固配置,帮你把门锁上。
1. 修改 SSH 端口,禁止 root 登录
默认 22 端口是黑客扫描的首选目标,改个端口能挡掉 90% 的自动扫描。
# 编辑 sshd 配置
vi /etc/ssh/sshd_config
# 修改端口
Port 22222
# 禁止 root 登录
PermitRootLogin no
# 重启 sshd
systemctl restart sshd
注意:改完端口后,记得在防火墙和安全组里放行新端口,否则你自己也进不去了。
2. 使用 SSH 密钥登录,禁用密码登录
密码再复杂也扛不住暴力破解,密钥登录才是正道。
# 本地生成密钥对(在你自己的电脑上执行)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 把公钥传到服务器
ssh-copy-id -p 22222 user@your_server_ip
# 服务器上禁用密码登录
vi /etc/ssh/sshd_config
PasswordAuthentication no
3. 配置防火墙,只开必要端口
# 只开 SSH、HTTP、HTTPS
ufw default deny incoming
ufw default allow outgoing
ufw allow 22222/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw enable
4. 自动安全更新
# Ubuntu/Debian
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
# CentOS/RHEL
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer
5. 创建普通用户,配置 sudo
永远不要用 root 跑日常操作,创建一个普通用户,需要时用 sudo 提权。
# 创建用户
adduser deploy
# 加入 sudo 组
usermod -aG sudo deploy
6. 禁用不必要的服务
# 查看正在运行的服务
systemctl list-unit-files --type=service --state=enabled
# 禁用不需要的服务
systemctl disable --now avahi-daemon
systemctl disable --now cups
7. 配置 fail2ban 防暴力破解
apt install fail2ban
# 配置 sshd 防护
vi /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22222
maxretry = 3
bantime = 3600
systemctl restart fail2ban
8. 设置密码策略
# 编辑 pwquality 配置
vi /etc/security/pwquality.conf
minlen = 12 # 最小长度
dcredit = -1 # 至少1个数字
ucredit = -1 # 至少1个大写字母
lcredit = -1 # 至少1个小写字母
ocredit = -1 # 至少1个特殊字符
9. 监控日志,定期检查
# 查看登录失败记录
grep "Failed password" /var/log/auth.log
# 查看当前登录用户
w
# 查看最近登录记录
last -n 20
10. 定期备份,备份再备份
安全加固做得再好,也不如有一份能快速恢复的备份。
# 简单的文件备份脚本
tar -czf backup_$(date +%Y%m%d).tar.gz /var/www/
把备份文件同步到异地存储,别只放在同一台服务器上。
总结
这 10 条配置不需要高深的技术,但每一条都能实实在在地降低服务器被攻破的风险。建议新服务器装好后,第一件事就是把这 10 条全部过一遍。
安全不是一次性的工作,而是一个持续的过程。定期更新系统、监控日志、检查异常,才能真正把服务器守好。