Linux服務(wù)器安全防護(hù)完全指南:從0到1構(gòu)建銅墻鐵壁
前言:作為一名運(yùn)維工程師,我見(jiàn)過(guò)太多因?yàn)榘踩渲貌划?dāng)而被攻破的服務(wù)器。本文將分享我多年來(lái)積累的實(shí)戰(zhàn)經(jīng)驗(yàn),教你如何構(gòu)建一套完整的Linux服務(wù)器安全防護(hù)體系。
真實(shí)案例:一次驚心動(dòng)魄的入侵事件
去年某個(gè)深夜,我接到監(jiān)控告警:公司一臺(tái)Web服務(wù)器CPU使用率異常飆升。登錄后發(fā)現(xiàn)系統(tǒng)中運(yùn)行著可疑進(jìn)程,進(jìn)一步排查發(fā)現(xiàn)服務(wù)器已被植入挖礦木馬。這次事件讓我深刻意識(shí)到服務(wù)器安全防護(hù)的重要性。
攻擊路徑復(fù)盤(pán):
? 攻擊者通過(guò)SSH暴力破解獲得root權(quán)限
? 植入后門程序并建立持久化連接
? 下載挖礦程序消耗服務(wù)器資源
? 嘗試橫向滲透內(nèi)網(wǎng)其他主機(jī)
核心防護(hù)策略:多層安全防線
第一層:SSH安全加固
1. 修改默認(rèn)端口
# 編輯SSH配置文件 vim /etc/ssh/sshd_config # 修改端口(建議使用10000-65535范圍) Port 22022 # 重啟SSH服務(wù) systemctl restart sshd
2. 禁用root直接登錄
# 在sshd_config中設(shè)置 PermitRootLogin no # 創(chuàng)建普通用戶并加入sudo組 useradd -m -s /bin/bash admin usermod -aGsudoadmin
3. 配置密鑰認(rèn)證
# 生成SSH密鑰對(duì) ssh-keygen -t ed25519 -C"your_email@example.com" # 在服務(wù)器上創(chuàng)建authorized_keys mkdir-p ~/.ssh chmod700 ~/.ssh echo"your_public_key">> ~/.ssh/authorized_keys chmod600 ~/.ssh/authorized_keys # 禁用密碼認(rèn)證 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防護(hù)規(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 # 啟動(dòng)服務(wù) systemctl?enable?fail2ban && systemctl start fail2ban
查看封禁狀態(tài)
# 查看被封IP fail2ban-client status sshd # 手動(dòng)解封IP fail2ban-clientsetsshd unbanip 192.168.1.100
第三層:防火墻配置
UFW簡(jiǎn)單防火墻
# 啟用UFW ufwenable # 設(shè)置默認(rèn)策略 ufw default deny incoming ufw default allow outgoing # 允許SSH連接(使用自定義端口) ufw allow 22022/tcp # 允許Web服務(wù) ufw allow 80/tcp ufw allow 443/tcp # 查看規(guī)則 ufw status verbose
iptables高級(jí)配置
#!/bin/bash # 清空現(xiàn)有規(guī)則 iptables -F iptables -X iptables -Z # 設(shè)置默認(rèn)策略 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服務(wù) 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
第四層:入侵檢測(cè)系統(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)異常檢測(cè)腳本 LOG_FILE="/var/log/security_check.log" # 檢查異常進(jìn)程 check_suspicious_processes() { echo"[$(date)] 檢查可疑進(jìn)程...">>$LOG_FILE # 檢查CPU使用率異常的進(jìn)程 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使用率進(jìn)程:$line">>$LOG_FILE fi done } # 檢查異常網(wǎng)絡(luò)連接 check_network_connections() { echo"[$(date)] 檢查網(wǎng)絡(luò)連接...">>$LOG_FILE # 檢查異常端口監(jiān)聽(tīng) netstat -tlnp | grep -E':(1234|4444|5555|8080)'&& { echo"警告:發(fā)現(xiàn)可疑端口監(jiān)聽(tīng)">>$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ù)庫(kù) 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)異常,請(qǐng)查看日志文件" ? ??# 可以在這里添加郵件通知 fi EOF chmod?+x /usr/local/bin/aide_check.sh # 添加定時(shí)任務(wù) echo"0 2 * * * /usr/local/bin/aide_check.sh"?| crontab -
高級(jí)防護(hù)技巧
1. 端口敲門技術(shù)
# 安裝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 # 啟動(dòng)服務(wù) systemctl?enable?knockd && systemctl start knockd
2. 蜜罐部署(迷惑攻擊者)
# 安裝Cowrie SSH蜜罐 pip3 install cowrie # 配置虛假SSH服務(wù)監(jiān)聽(tīng)22端口 # 真實(shí)SSH服務(wù)使用非標(biāo)準(zhǔn)端口
3. 日志分析自動(dòng)化
#!/bin/bash # 自動(dòng)日志分析腳本 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ù)達(dá)到$failed_attempts次"| mail -s"SSH安全警報(bào) -$(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"警告:檢測(cè)到新用戶創(chuàng)建:$new_users"| mail -s"用戶管理警報(bào) -$(hostname)"$ALERT_EMAIL fi
監(jiān)控與告警系統(tǒng)
搭建輕量級(jí)監(jiān)控
# 安裝Netdata實(shí)時(shí)監(jiān)控 bash <(curl -Ss https://my-netdata.io/kickstart.sh) # 配置告警 vim /etc/netdata/health_alarm_notify.conf # 設(shè)置郵件通知 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使用率過(guò)高:{cpu_percent}%") # 內(nèi)存使用率檢查 memory = psutil.virtual_memory() ifmemory.percent >85: alerts.append(f"內(nèi)存使用率過(guò)高:{memory.percent}%") # 磁盤(pán)使用率檢查 forpartitioninpsutil.disk_partitions(): disk_usage = psutil.disk_usage(partition.mountpoint) ifdisk_usage.percent >90: alerts.append(f"磁盤(pán){partition.mountpoint}使用率過(guò)高:{disk_usage.percent}%") returnalerts defsend_alert(alerts): ifnotalerts: return msg = MIMEText(' '.join(alerts)) msg['Subject'] =f'服務(wù)器健康告警 -{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)
應(yīng)急響應(yīng)預(yù)案
發(fā)現(xiàn)入侵后的處理步驟
1.立即隔離
# 斷網(wǎng)隔離(保留SSH連接) iptables -A INPUT -j DROP iptables -I INPUT 1 -s YOUR_IP -j ACCEPT
2.保存證據(jù)
# 備份關(guān)鍵日志 tar -czf evidence_$(date+%Y%m%d_%H%M).tar.gz /var/log/auth.log /var/log/syslog /var/log/messages
3.清理后門
# 檢查計(jì)劃任務(wù) crontab -l cat/etc/crontab ls-la /etc/cron.* # 檢查啟動(dòng)項(xiàng) systemctl list-unit-files --state=enabled ls-la /etc/init.d/
實(shí)戰(zhàn)演練
模擬攻擊測(cè)試
# 使用Nmap掃描自己的服務(wù)器 nmap -sS -O YOUR_SERVER_IP # 使用Hydra測(cè)試SSH暴力破解防護(hù) 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
進(jìn)階技巧分享
1. 使用PAM增強(qiáng)認(rèn)證
# 配置Google Authenticator雙因子認(rèn)證 apt install libpam-google-authenticator -y google-authenticator # 修改PAM配置 echo"auth required pam_google_authenticator.so">> /etc/pam.d/sshd
2. 自動(dòng)化安全檢查
# 創(chuàng)建安全檢查清單腳本 cat> /usr/local/bin/security_audit.sh <'EOF' #!/bin/bash echo"=== Linux服務(wù)器安全檢查報(bào)告 ===" echo"檢查時(shí)間:?$(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. 關(guān)鍵文件權(quán)限檢查:" ls?-l /etc/passwd /etc/shadow /etc/sudoers # 檢查網(wǎng)絡(luò)監(jiān)聽(tīng) echo"4. 網(wǎng)絡(luò)監(jiān)聽(tīng)端口:" netstat -tlnp | grep LISTEN echo"=== 檢查完成 ===" EOF chmod?+x /usr/local/bin/security_audit.sh
總結(jié)與建議
通過(guò)以上多層防護(hù)措施,可以顯著提升Linux服務(wù)器的安全性:
安全等級(jí)評(píng)估:
? 基礎(chǔ)級(jí):修改SSH端口 + 密鑰認(rèn)證
? 標(biāo)準(zhǔn)級(jí):+ Fail2Ban + 防火墻配置
? 高級(jí):+ 入侵檢測(cè) + 文件監(jiān)控
? 專家級(jí):+ 蜜罐 + 自動(dòng)化響應(yīng)
最佳實(shí)踐建議:
1. 定期更新系統(tǒng)和軟件包
2. 最小化權(quán)限原則
3. 定期審計(jì)和日志分析
4. 制定應(yīng)急響應(yīng)預(yù)案
5. 定期進(jìn)行安全演練
-
Web
+關(guān)注
關(guān)注
2文章
1296瀏覽量
73072 -
Linux
+關(guān)注
關(guān)注
88文章
11576瀏覽量
216669 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
10000瀏覽量
90128
原文標(biāo)題:Linux服務(wù)器安全防護(hù)完全指南:從0到1構(gòu)建銅墻鐵壁
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
租用服務(wù)器后如何進(jìn)行服務(wù)器安全防護(hù)
基于ARM和Linux的嵌入式Web服務(wù)器的構(gòu)建及應(yīng)用
關(guān)于提升服務(wù)器安全防護(hù)等級(jí)的一些方法
關(guān)于云服務(wù)器需要做什么安全防護(hù)嗎
服務(wù)器的安全防護(hù)功能主要都有哪些
關(guān)于網(wǎng)站服務(wù)器安全防護(hù)的7個(gè)觀點(diǎn)分析
服務(wù)器安全防護(hù)經(jīng)驗(yàn)分享
關(guān)于服務(wù)器的安全防護(hù),主要的方式有哪些
為大家分享一下如何做好網(wǎng)站服務(wù)器安全防護(hù)
【虹科講座預(yù)告】如何更有效進(jìn)行服務(wù)器安全防護(hù)

介紹一種基于eBPF的Linux安全防護(hù)系統(tǒng)

評(píng)論