Linux服務器安全防護完全指南:從0到1構(gòu)建銅墻鐵壁
前言:作為一名運維工程師,我見過太多因為安全配置不當而被攻破的服務器。本文將分享我多年來積累的實戰(zhàn)經(jīng)驗,教你如何構(gòu)建一套完整的Linux服務器安全防護體系。
真實案例:一次驚心動魄的入侵事件
去年某個深夜,我接到監(jiān)控告警:公司一臺Web服務器CPU使用率異常飆升。登錄后發(fā)現(xiàn)系統(tǒng)中運行著可疑進程,進一步排查發(fā)現(xiàn)服務器已被植入挖礦木馬。這次事件讓我深刻意識到服務器安全防護的重要性。
攻擊路徑復盤:
? 攻擊者通過SSH暴力破解獲得root權(quán)限
? 植入后門程序并建立持久化連接
? 下載挖礦程序消耗服務器資源
? 嘗試橫向滲透內(nèi)網(wǎng)其他主機
核心防護策略:多層安全防線
第一層:SSH安全加固
1. 修改默認端口
# 編輯SSH配置文件 vim /etc/ssh/sshd_config # 修改端口(建議使用10000-65535范圍) Port 22022 # 重啟SSH服務 systemctl restart sshd
2. 禁用root直接登錄
# 在sshd_config中設置 PermitRootLogin no # 創(chuàng)建普通用戶并加入sudo組 useradd -m -s /bin/bash admin usermod -aGsudoadmin
3. 配置密鑰認證
# 生成SSH密鑰對 ssh-keygen -t ed25519 -C"your_email@example.com" # 在服務器上創(chuàng)建authorized_keys mkdir-p ~/.ssh chmod700 ~/.ssh echo"your_public_key">> ~/.ssh/authorized_keys chmod600 ~/.ssh/authorized_keys # 禁用密碼認證 echo"PasswordAuthentication no">> /etc/ssh/sshd_config systemctl restart sshd
第二層:Fail2Ban防暴力破解
安裝配置Fail2Ban
# Ubuntu/Debian apt update && apt install fail2ban -y # CentOS/RHEL yum install epel-release -y && yum install fail2ban -y
自定義SSH防護規(guī)則
# 創(chuàng)建本地配置文件 cat> /etc/fail2ban/jail.local <'EOF' [DEFAULT] bantime = 3600 findtime = 600 maxretry = 3 ignoreip = 127.0.0.1/8 192.168.0.0/16 [sshd] enabled =?true port = 22022 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 86400 EOF # 啟動服務 systemctl?enable?fail2ban && systemctl start fail2ban
查看封禁狀態(tài)
# 查看被封IP fail2ban-client status sshd # 手動解封IP fail2ban-clientsetsshd unbanip 192.168.1.100
第三層:防火墻配置
UFW簡單防火墻
# 啟用UFW ufwenable # 設置默認策略 ufw default deny incoming ufw default allow outgoing # 允許SSH連接(使用自定義端口) ufw allow 22022/tcp # 允許Web服務 ufw allow 80/tcp ufw allow 443/tcp # 查看規(guī)則 ufw status verbose
iptables高級配置
#!/bin/bash # 清空現(xiàn)有規(guī)則 iptables -F iptables -X iptables -Z # 設置默認策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允許本地回環(huán) iptables -A INPUT -i lo -j ACCEPT # 允許已建立的連接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH限速(防暴力破解) iptables -A INPUT -p tcp --dport 22022 -m state --state NEW -m recent --set--name SSH iptables -A INPUT -p tcp --dport 22022 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP iptables -A INPUT -p tcp --dport 22022 -j ACCEPT # Web服務 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 保存規(guī)則 iptables-save > /etc/iptables/rules.v4
第四層:入侵檢測系統(tǒng)
部署OSSEC-HIDS
# 下載安裝OSSEC wget https://github.com/ossec/ossec-hids/archive/3.6.0.tar.gz tar -xzf 3.6.0.tar.gz &&cdossec-hids-3.6.0 ./install.sh # 配置監(jiān)控規(guī)則 vim /var/ossec/etc/ossec.conf
自定義監(jiān)控腳本
#!/bin/bash
# 系統(tǒng)異常檢測腳本
LOG_FILE="/var/log/security_check.log"
# 檢查異常進程
check_suspicious_processes() {
echo"[$(date)] 檢查可疑進程...">>$LOG_FILE
# 檢查CPU使用率異常的進程
ps aux --sort=-%cpu |head-10 |whilereadline;do
cpu=$(echo$line| awk'{print $3}')
if(( $(echo "$cpu>80" | bc -l) ));then
echo"警告:發(fā)現(xiàn)高CPU使用率進程:$line">>$LOG_FILE
fi
done
}
# 檢查異常網(wǎng)絡連接
check_network_connections() {
echo"[$(date)] 檢查網(wǎng)絡連接...">>$LOG_FILE
# 檢查異常端口監(jiān)聽
netstat -tlnp | grep -E':(1234|4444|5555|8080)'&& {
echo"警告:發(fā)現(xiàn)可疑端口監(jiān)聽">>$LOG_FILE
}
}
# 執(zhí)行檢查
check_suspicious_processes
check_network_connections
第五層:文件完整性監(jiān)控
使用AIDE工具
# 安裝AIDE apt install aide -y # Ubuntu/Debian yum install aide -y # CentOS/RHEL # 初始化數(shù)據(jù)庫 aide --init mv/var/lib/aide/aide.db.new /var/lib/aide/aide.db # 創(chuàng)建檢查腳本 cat> /usr/local/bin/aide_check.sh <'EOF' #!/bin/bash aide --check |?tee?/var/log/aide_check.log if?[ $? -ne 0 ];?then ? ??echo"文件完整性檢查發(fā)現(xiàn)異常,請查看日志文件" ? ??# 可以在這里添加郵件通知 fi EOF chmod?+x /usr/local/bin/aide_check.sh # 添加定時任務 echo"0 2 * * * /usr/local/bin/aide_check.sh"?| crontab -
高級防護技巧
1. 端口敲門技術
# 安裝knockd apt install knockd -y # 配置端口敲門 cat> /etc/knockd.conf <'EOF' [options] ? ? UseSyslog [openSSH] ? ? sequence ? ?= 7000,8000,9000 ? ? seq_timeout = 5 ? ??command? ? ?= /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22022 -j ACCEPT ? ? tcpflags ? ?= syn [closeSSH] ? ? sequence ? ?= 9000,8000,7000 ? ? seq_timeout = 5 ? ??command? ? ?= /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22022 -j ACCEPT ? ? tcpflags ? ?= syn EOF # 啟動服務 systemctl?enable?knockd && systemctl start knockd
2. 蜜罐部署(迷惑攻擊者)
# 安裝Cowrie SSH蜜罐 pip3 install cowrie # 配置虛假SSH服務監(jiān)聽22端口 # 真實SSH服務使用非標準端口
3. 日志分析自動化
#!/bin/bash # 自動日志分析腳本 LOGFILE="/var/log/auth.log" ALERT_EMAIL="admin@yourdomain.com" # 分析SSH登錄失敗 failed_attempts=$(grep"Failed password"$LOGFILE| grep"$(date '+%b %d')"|wc-l) if[$failed_attempts-gt 50 ];then echo"警告:今日SSH登錄失敗次數(shù)達到$failed_attempts次"| mail -s"SSH安全警報 -$(hostname)"$ALERT_EMAIL fi # 檢查新用戶創(chuàng)建 new_users=$(grep"new user"/var/log/auth.log | grep"$(date '+%b %d')") if[ ! -z"$new_users"];then echo"警告:檢測到新用戶創(chuàng)建:$new_users"| mail -s"用戶管理警報 -$(hostname)"$ALERT_EMAIL fi
監(jiān)控與告警系統(tǒng)
搭建輕量級監(jiān)控
# 安裝Netdata實時監(jiān)控 bash <(curl -Ss https://my-netdata.io/kickstart.sh) # 配置告警 vim /etc/netdata/health_alarm_notify.conf # 設置郵件通知 SEND_EMAIL="YES" DEFAULT_RECIPIENT_EMAIL="admin@yourdomain.com"
自定義告警腳本
#!/usr/bin/env python3 importpsutil importsmtplib fromemail.mime.textimportMIMEText importtime defcheck_system_health(): alerts = [] # CPU使用率檢查 cpu_percent = psutil.cpu_percent(interval=1) ifcpu_percent >80: alerts.append(f"CPU使用率過高:{cpu_percent}%") # 內(nèi)存使用率檢查 memory = psutil.virtual_memory() ifmemory.percent >85: alerts.append(f"內(nèi)存使用率過高:{memory.percent}%") # 磁盤使用率檢查 forpartitioninpsutil.disk_partitions(): disk_usage = psutil.disk_usage(partition.mountpoint) ifdisk_usage.percent >90: alerts.append(f"磁盤{partition.mountpoint}使用率過高:{disk_usage.percent}%") returnalerts defsend_alert(alerts): ifnotalerts: return msg = MIMEText(' '.join(alerts)) msg['Subject'] =f'服務器健康告警 -{time.strftime("%Y-%m-%d %H:%M")}' msg['From'] ='monitor@yourdomain.com' msg['To'] ='admin@yourdomain.com' # 發(fā)送郵件邏輯 print("發(fā)送告警:",' '.join(alerts)) if__name__ =="__main__": alerts = check_system_health() send_alert(alerts)
應急響應預案
發(fā)現(xiàn)入侵后的處理步驟
1.立即隔離
# 斷網(wǎng)隔離(保留SSH連接) iptables -A INPUT -j DROP iptables -I INPUT 1 -s YOUR_IP -j ACCEPT
2.保存證據(jù)
# 備份關鍵日志 tar -czf evidence_$(date+%Y%m%d_%H%M).tar.gz /var/log/auth.log /var/log/syslog /var/log/messages
3.清理后門
# 檢查計劃任務 crontab -l cat/etc/crontab ls-la /etc/cron.* # 檢查啟動項 systemctl list-unit-files --state=enabled ls-la /etc/init.d/
實戰(zhàn)演練
模擬攻擊測試
# 使用Nmap掃描自己的服務器 nmap -sS -O YOUR_SERVER_IP # 使用Hydra測試SSH暴力破解防護 hydra -l admin -P /usr/share/wordlists/rockyou.txt ssh://YOUR_SERVER_IP:22022 -t 4
性能優(yōu)化
# 優(yōu)化SSH配置性能 echo"ClientAliveInterval 60">> /etc/ssh/sshd_config echo"ClientAliveCountMax 3">> /etc/ssh/sshd_config echo"MaxAuthTries 3">> /etc/ssh/sshd_config echo"MaxSessions 5">> /etc/ssh/sshd_config
進階技巧分享
1. 使用PAM增強認證
# 配置Google Authenticator雙因子認證 apt install libpam-google-authenticator -y google-authenticator # 修改PAM配置 echo"auth required pam_google_authenticator.so">> /etc/pam.d/sshd
2. 自動化安全檢查
# 創(chuàng)建安全檢查清單腳本
cat> /usr/local/bin/security_audit.sh <'EOF'
#!/bin/bash
echo"=== Linux服務器安全檢查報告 ==="
echo"檢查時間:?$(date)"
echo""
# 檢查用戶賬戶
echo"1. 用戶賬戶檢查:"
awk -F:?'$3==0{print "警告: " $1 " 具有root權(quán)限"}'?/etc/passwd
# 檢查空密碼賬戶
echo"2. 空密碼賬戶檢查:"
awk -F:?'$2==""{print "警告: " $1 " 密碼為空"}'?/etc/shadow
# 檢查文件權(quán)限
echo"3. 關鍵文件權(quán)限檢查:"
ls?-l /etc/passwd /etc/shadow /etc/sudoers
# 檢查網(wǎng)絡監(jiān)聽
echo"4. 網(wǎng)絡監(jiān)聽端口:"
netstat -tlnp | grep LISTEN
echo"=== 檢查完成 ==="
EOF
chmod?+x /usr/local/bin/security_audit.sh
總結(jié)與建議
通過以上多層防護措施,可以顯著提升Linux服務器的安全性:
安全等級評估:
? 基礎級:修改SSH端口 + 密鑰認證
? 標準級:+ Fail2Ban + 防火墻配置
? 高級:+ 入侵檢測 + 文件監(jiān)控
? 專家級:+ 蜜罐 + 自動化響應
最佳實踐建議:
1. 定期更新系統(tǒng)和軟件包
2. 最小化權(quán)限原則
3. 定期審計和日志分析
4. 制定應急響應預案
5. 定期進行安全演練
-
Web
+關注
關注
2文章
1303瀏覽量
73951 -
Linux
+關注
關注
88文章
11681瀏覽量
218568 -
服務器
+關注
關注
14文章
10172瀏覽量
91238
原文標題:Linux服務器安全防護完全指南:從0到1構(gòu)建銅墻鐵壁
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
租用服務器后如何進行服務器安全防護
基于ARM和Linux的嵌入式Web服務器的構(gòu)建及應用
關于提升服務器安全防護等級的一些方法
關于云服務器需要做什么安全防護嗎
服務器的安全防護功能主要都有哪些
關于網(wǎng)站服務器安全防護的7個觀點分析
服務器安全防護經(jīng)驗分享
關于服務器的安全防護,主要的方式有哪些
為大家分享一下如何做好網(wǎng)站服務器安全防護
介紹一種基于eBPF的Linux安全防護系統(tǒng)
如何構(gòu)建Linux服務器安全防護體系
評論