Linux服务器安全加固实操手册:SSH防护、内核参数与入侵检测配置

SSH访问安全加固:从默认配置到生产级防护

Linux服务器暴露在公网后,SSH是头号攻击入口。默认配置的SSH服务几乎等同于邀请攻击者来试密码。安全加固的第一步就是收紧SSH。

修改/etc/ssh/sshd_config:

# 禁用root直接登录
PermitRootLogin no

# 禁用密码认证,仅允许密钥
PasswordAuthentication no
PubkeyAuthentication yes

# 修改默认端口(减少自动化扫描命中)
Port 2222

# 限制登录尝试
MaxAuthTries 3
LoginGraceTime 30

# 仅允许特定用户组登录
AllowGroups ssh-users

# 禁用空密码
PermitEmptyPasswords no

# 设置登录超时
ClientAliveInterval 300
ClientAliveCountMax 2

修改后执行systemctl restart sshd生效。注意:改端口前确认防火墙已放行新端口,否则直接锁死自己。

内核参数加固:网络与文件系统层面

通过sysctl调整内核参数,可以在系统层拦截大量自动化攻击和异常行为。

/etc/sysctl.d/99-security.conf:

# 禁用IP转发(非路由器场景)
net.ipv4.ip_forward = 0

# 防SYN Flood攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2

# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# 防IP欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

# 限制core dump
fs.suid_dumpable = 0

# 隐藏内核指针
kernel.kptr_restrict = 2

# 限制dmesg访问
kernel.dmesg_restrict = 1

执行sysctl -p /etc/sysctl.d/99-security.conf立即生效。这些参数不影响正常业务,但能有效阻断常见网络层探测手段。

防火墙规则:白名单思维而非黑名单

安全策略的核心原则:默认拒绝,显式放行。不要逐个封禁已知攻击IP——那是打地鼠,永远打不完。

# 清空现有规则
iptables -F
iptables -X

# 默认策略:拒绝所有入站
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 放行回包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 放行lo
iptables -A INPUT -i lo -j ACCEPT

# 放行SSH(新端口)
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# 放行HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 放行ICMP(限制速率)
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/s --limit-burst 3 -j ACCEPT

# 记录被拒绝的包
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4

SSH那两行recent模块规则实现了暴力破解防护:同一IP在60秒内尝试超过4次连接直接丢弃。

入侵检测:AIDE文件完整性校验

AIDE(Advanced Intrusion Detection Environment)通过对比文件哈希值检测系统文件是否被篡改。

# 安装
apt install aide   # Debian/Ubuntu
yum install aide   # CentOS/RHEL

# 初始化数据库
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 执行检查
aide --check

# 更新数据库(确认变更合法后)
aide --update
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

将AIDE检查加入cron,每天凌晨执行一次,结果发送到管理员邮箱。任何关键二进制文件被修改都会被检出。

# /etc/cron.d/aide
0 3 * * * root /usr/bin/aide --check | /usr/bin/mail -s "AIDE Report $(hostname)" admin@example.com

日志审计与异常行为检测

系统日志是事后追溯的核心依据。配置集中式日志采集,同时设置关键事件实时告警。

# /etc/audit/rules.d/audit.rules
# 监控关键系统文件变更
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k ssh_config
-w /etc/sudoers -p wa -k privilege

# 监控sudo使用
-w /usr/bin/sudo -p x -k sudo_usage

# 监控用户切换
-w /bin/su -p x -k su_usage

# 监控cron任务变更
-w /etc/cron* -p wa -k cron_changes

执行augenrules加载规则,ausearch -k identity查询特定事件的审计记录。

常见问题排查

Q: 加固后SSH连不上怎么办?
A: 保持一个已建立的SSH会话不要断开,在另一个终端修改配置。如果已经断开,通过VNC或IPMI控制台登录回滚配置。建议每次修改SSH配置前先做备份。

Q: sysctl参数不生效?
A: 检查/etc/sysctl.d/下是否有多个文件定义了相同参数,后加载的会覆盖先加载的。用sysctl -a | grep 参数名确认实际运行值。

Q: AIDE报告大量误报?
A: 排除频繁变化的文件路径,在/etc/aide/aide.conf中添加!/var/log!/run!/proc等排除项。只监控核心系统文件和业务配置文件。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-cao-shou-ce-ssh-fang-hu/

(0)
小编小编
上一篇 14小时前
下一篇 14小时前

相关推荐

Linux服务器安全加固实操手册:SSH防护、内核参数与入侵检测配置

SSH访问安全加固:从默认配置到生产级防护

Linux服务器暴露在公网后,SSH是头号攻击入口。默认配置的SSH服务几乎等同于邀请攻击者来试密码。安全加固的第一步就是收紧SSH。

修改/etc/ssh/sshd_config:

# 禁用root直接登录
PermitRootLogin no

# 禁用密码认证,仅允许密钥
PasswordAuthentication no
PubkeyAuthentication yes

# 修改默认端口(减少自动化扫描命中)
Port 2222

# 限制登录尝试
MaxAuthTries 3
LoginGraceTime 30

# 仅允许特定用户组登录
AllowGroups ssh-users

# 禁用空密码
PermitEmptyPasswords no

# 设置登录超时
ClientAliveInterval 300
ClientAliveCountMax 2

修改后执行systemctl restart sshd生效。注意:改端口前确认防火墙已放行新端口,否则直接锁死自己。

内核参数加固:网络与文件系统层面

通过sysctl调整内核参数,可以在系统层拦截大量自动化攻击和异常行为。

/etc/sysctl.d/99-security.conf:

# 禁用IP转发(非路由器场景)
net.ipv4.ip_forward = 0

# 防SYN Flood攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2

# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# 防IP欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

# 限制core dump
fs.suid_dumpable = 0

# 隐藏内核指针
kernel.kptr_restrict = 2

# 限制dmesg访问
kernel.dmesg_restrict = 1

执行sysctl -p /etc/sysctl.d/99-security.conf立即生效。这些参数不影响正常业务,但能有效阻断常见网络层探测手段。

防火墙规则:白名单思维而非黑名单

安全策略的核心原则:默认拒绝,显式放行。不要逐个封禁已知攻击IP——那是打地鼠,永远打不完。

# 清空现有规则
iptables -F
iptables -X

# 默认策略:拒绝所有入站
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 放行回包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 放行lo
iptables -A INPUT -i lo -j ACCEPT

# 放行SSH(新端口)
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# 放行HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 放行ICMP(限制速率)
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/s --limit-burst 3 -j ACCEPT

# 记录被拒绝的包
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4

SSH那两行recent模块规则实现了暴力破解防护:同一IP在60秒内尝试超过4次连接直接丢弃。

入侵检测:AIDE文件完整性校验

AIDE(Advanced Intrusion Detection Environment)通过对比文件哈希值检测系统文件是否被篡改。

# 安装
apt install aide   # Debian/Ubuntu
yum install aide   # CentOS/RHEL

# 初始化数据库
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 执行检查
aide --check

# 更新数据库(确认变更合法后)
aide --update
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

将AIDE检查加入cron,每天凌晨执行一次,结果发送到管理员邮箱。任何关键二进制文件被修改都会被检出。

# /etc/cron.d/aide
0 3 * * * root /usr/bin/aide --check | /usr/bin/mail -s "AIDE Report $(hostname)" admin@example.com

日志审计与异常行为检测

系统日志是事后追溯的核心依据。配置集中式日志采集,同时设置关键事件实时告警。

# /etc/audit/rules.d/audit.rules
# 监控关键系统文件变更
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k ssh_config
-w /etc/sudoers -p wa -k privilege

# 监控sudo使用
-w /usr/bin/sudo -p x -k sudo_usage

# 监控用户切换
-w /bin/su -p x -k su_usage

# 监控cron任务变更
-w /etc/cron* -p wa -k cron_changes

执行augenrules加载规则,ausearch -k identity查询特定事件的审计记录。

常见问题排查

Q: 加固后SSH连不上怎么办?
A: 保持一个已建立的SSH会话不要断开,在另一个终端修改配置。如果已经断开,通过VNC或IPMI控制台登录回滚配置。建议每次修改SSH配置前先做备份。

Q: sysctl参数不生效?
A: 检查/etc/sysctl.d/下是否有多个文件定义了相同参数,后加载的会覆盖先加载的。用sysctl -a | grep 参数名确认实际运行值。

Q: AIDE报告大量误报?
A: 排除频繁变化的文件路径,在/etc/aide/aide.conf中添加!/var/log!/run!/proc等排除项。只监控核心系统文件和业务配置文件。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-cao-shou-ce-ssh-fang-hu/

(0)
小编小编
上一篇 14小时前
下一篇 14小时前

相关推荐