問題背景
新機器上線前不做安全加固,等于把門打開等人進來。生產(chǎn)環(huán)境的服務(wù)器一旦暴露在公網(wǎng),各種掃描、暴力破解、漏洞利用會在上線后幾小時內(nèi)接踵而至。等被黑了再去加固,不僅被動,而且恢復成本極高——日志可能被清、植入后門可能還在、數(shù)據(jù)可能已泄露。
服務(wù)器安全加固不是裝一個殺毒軟件那么簡單。它涉及操作系統(tǒng)層面的賬號與權(quán)限管理、網(wǎng)絡(luò)層面的防火墻配置、服務(wù)層面的安全選項、應(yīng)用層面的加密通信、系統(tǒng)層面的漏洞修復。每一個環(huán)節(jié)都有可能被利用。
這篇文章面向初中級 Linux 運維工程師,提供一份新機器上線前的安全加固清單,包含 20 個具體操作項,每個操作項都有操作步驟、驗證方法和風險說明。文章基于 CentOS 7/8 和 Ubuntu 20.04/22.04 兩個主流發(fā)行版,命令在兩個系統(tǒng)上分別標注。文中所有涉及網(wǎng)絡(luò)和服務(wù)重啟的操作都會標注風險級別。
適用場景
新采購的服務(wù)器首次上線
接手他人維護的服務(wù)器
服務(wù)器重裝系統(tǒng)后
等保合規(guī)整改
安全評估后發(fā)現(xiàn)基線不符合要求
參加 CTF 或滲透測試前的自我加固
加固前準備:快照和備份
任何生產(chǎn)環(huán)境操作前,都必須先做好備份和快照。加固涉及 SSH、iptables、服務(wù)重啟等操作,操作失誤可能導致服務(wù)器無法登錄。請務(wù)必在執(zhí)行前:
在云控制臺創(chuàng)建服務(wù)器快照(或用 VMware/vSphere 創(chuàng)建虛擬機快照)
記錄當前 SSH 連接的方式和 IP
準備ILO/IPMI/云廠商的VNC/遠程終端作為緊急回滾通道
如果通過快照恢復,請確認恢復后需要重新配置的項(IP、hostname、SSH keys等)。
第 1-5 項:賬號與權(quán)限管理
第 1 項:禁用 root 用戶直接登錄
root 是所有 Linux 系統(tǒng)的默認管理員賬號,也是黑客暴力破解的首要目標。禁用 root 直接登錄,迫使用戶使用普通賬號 + sudo,可以極大提高攻擊成本。
操作步驟(CentOS/RHEL):
# 1. 創(chuàng)建普通管理員賬號 sudo useradd -m -s /bin/bash -G wheel admin # 2. 設(shè)置 admin 賬號密碼 sudo passwd admin # 3. 將 admin 加入 wheel 組(Ubuntu 中默認已配置 sudo) # CentOS 中 wheel 組默認已配置為 sudo 組 # 4. 配置 SSH 禁止 root 登錄 sudo vi /etc/ssh/sshd_config # 找到并修改: # PermitRootLogin no # 或者在 Ubuntu 中默認可能是 without-password,改為 no # 5. 重啟 SSH 服務(wù) sudo systemctl restart sshd # 6. 驗證:另開一個終端,用 root 登錄應(yīng)該被拒絕
操作步驟(Ubuntu):
# 1. 創(chuàng)建管理員賬號(安裝時已創(chuàng)建,這里假設(shè)需要新建) sudo adduser admin sudo usermod -aG sudo admin # 2. 復制當前用戶的 SSH 公鑰到新用戶(如果有的話) sudo mkdir -p /home/admin/.ssh sudo chmod 700 /home/admin/.ssh sudo cp ~/.ssh/authorized_keys /home/admin/.ssh/ sudo chown -R admin:admin /home/admin/.ssh # 3. 配置 SSH 禁止 root 登錄 sudo vi /etc/ssh/sshd_config # 確認或添加: # PermitRootLogin no # 4. 重啟 SSH sudo systemctl restart sshd
驗證方法:
# 用普通賬號登錄后測試 sudo sudo -l # 應(yīng)該列出該用戶的 sudo 權(quán)限 # 用 root 登錄(另開終端測試) ssh root@# 應(yīng)該提示:Permission denied, please try again.
第 2 項:使用 SSH 公鑰認證,禁止密碼登錄
密碼登錄容易被暴力破解和字典攻擊。公鑰認證配合 SSH key,安全性高出幾個數(shù)量級。
操作步驟:
# 1. 在本地機器(你的電腦)上生成 SSH 密鑰對 ssh-keygen -t ed25519 -C"your_email@example.com" # 按回車接受默認路徑,建議設(shè)置 passphrase(密碼短語) # 2. 將公鑰上傳到服務(wù)器 ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@# 這次仍然需要輸入密碼,是最后一次 # 3. 確認公鑰已復制 ssh admin@ "cat ~/.ssh/authorized_keys" # 4. 修改 SSH 配置,禁止密碼登錄 sudo vi /etc/ssh/sshd_config # 確保以下配置存在且沒有被注釋: # PubkeyAuthentication yes # PasswordAuthentication no # ChallengeResponseAuthentication no # UsePAM yes # 5. 重啟 SSH sudo systemctl restart sshd
驗證方法:
# 在本地機器測試:使用公鑰登錄 ssh -i ~/.ssh/id_ed25519 admin@# 應(yīng)該不需要輸入密碼即可登錄 # 測試:禁用密碼登錄后,用密碼登錄應(yīng)該被拒絕 ssh admin@ # 輸入密碼應(yīng)該被拒絕:Permission denied (publickey,password)
風險提醒:在退出當前 SSH 會話前,務(wù)必確認新登錄方式(公鑰)能正常工作。如果公鑰配置有誤又禁止了密碼登錄,你將被鎖在服務(wù)器外面,只能通過 VNC/ILO 恢復。
第 3 項:刪除或鎖定不需要的系統(tǒng)賬號
Linux 系統(tǒng)默認會創(chuàng)建一些服務(wù)賬號(bin、daemon、adm、nobody 等)。如果這些賬號不需要登錄且不需要 shell,應(yīng)該鎖定它們。
操作步驟:
# 查看所有用戶賬號 cat /etc/passwd | grep -v /sbin/nologin | grep -v /bin/false| grep -v'^#' # 常見的應(yīng)該保留的系統(tǒng)賬號(不要動): # root # admin / ubuntu(你自己創(chuàng)建的普通管理員賬號) # daemon(部分系統(tǒng)服務(wù)需要) # sshd(SSH 服務(wù)需要) # 鎖定不需要登錄的賬號(使用 nologin 或 false shell) # 例如鎖定 games 賬號 sudo usermod -s /sbin/nologin games # 如果賬號根本不需要(比如刪除測試賬號) sudo userdel -r testuser # -r 同時刪除 home 目錄 # 鎖定賬號(禁止登錄,也不允許切換) sudo passwd -l# 鎖定 sudo passwd -u # 解鎖
驗證方法:
# 查看哪些賬號有有效 shell
cat /etc/passwd | awk -F:'{print $1":"$7}'| grep -v nologin | grep -vfalse
# 測試賬號是否被鎖定
su - # 應(yīng)該直接退出或提示 This account is currently not available
第 4 項:設(shè)置密碼策略
密碼策略包括密碼復雜度、密碼長度、密碼過期時間、密碼歷史記錄等。
操作步驟(CentOS/RHEL):
# 1. 安裝密碼策略工具 sudo yum install -y libpwquality cracklib # 2. 配置密碼復雜度 sudo vi /etc/security/pwquality.conf # 主要配置項: # minlen = 12 # 最小密碼長度 # dcredit = -1 # 至少包含一個數(shù)字 # ucredit = -1 # 至少包含一個大寫字母 # lcredit = -1 # 至少包含一個小寫字母 # ocredit = -1 # 至少包含一個特殊字符 # difok = 3 # 新密碼和舊密碼至少3個字符不同 # maxrepeat = 2 # 同一字符最多連續(xù)出現(xiàn)2次 # 3. 配置密碼過期時間 sudo vi /etc/login.defs # PASS_MAX_DAYS 90 # 密碼最長使用天數(shù) # PASS_MIN_DAYS 7 # 密碼最短使用天數(shù) # PASS_WARN_AYS 7 # 密碼過期前多少天警告 # 4. 對現(xiàn)有用戶設(shè)置密碼過期 sudo chage -M 90 admin # admin 賬號密碼 90 天過期 sudo chage -m 7 admin # 密碼至少使用 7 天才能改 sudo chage -W 7 admin # 過期前 7 天警告
操作步驟(Ubuntu):
# Ubuntu 默認使用 PAM(pam_pwquality) sudo apt-get install -y libpwquality # 配置密碼策略(和 CentOS 相同) sudo vi /etc/security/pwquality.conf # Ubuntu 中密碼策略也通過 /etc/login.defs 控制 sudo vi /etc/login.defs
驗證方法:
# 測試密碼復雜度(嘗試設(shè)置一個弱密碼) sudo passwd admin # 設(shè)置密碼時,如果提示 "BAD PASSWORD: ..." 說明被策略攔截 # 查看用戶密碼過期信息 sudo chage -l admin # 輸出: # Last password change: Apr 29, 2026 # Password expires: Jul 28, 2026 # Password inactive: never # Account expires: never # Minimum number of days between password change: 7 # Maximum number of days between password change: 90 # Number of days of warning before password expires: 7
第 5 項:配置 sudo 日志記錄
sudo 操作應(yīng)該被記錄,以便審計和排查問題。
操作步驟:
# 1. 確認 sudo 日志已啟用(默認已啟用) # CentOS/RHEL: sudo 日志記錄到 /var/log/secure # Ubuntu: sudo 日志記錄到 /var/log/auth.log # 2. 如果需要獨立的 sudo 日志,可以在 /etc/sudoers 中配置 sudo visudo # 添加: # Defaults logfile=/var/log/sudo.log # 3. 確保 rsyslog 或 journald 在記錄 sudo 日志 sudo systemctl status rsyslog # 或 sudo systemctl status systemd-journald
驗證方法:
# 查看 sudo 日志 # CentOS sudo tail -20 /var/log/secure | grep sudo # Ubuntu sudo tail -20 /var/log/auth.log | grep sudo # 測試日志記錄:執(zhí)行一個 sudo 命令 sudo whoami # 然后檢查日志中是否有記錄
第 6-10 項:防火墻與網(wǎng)絡(luò)配置
第 6 項:配置 iptables/firewalld 防火墻
防火墻是新服務(wù)器的第一道防線。即使云平臺有安全組,服務(wù)器內(nèi)部的防火墻也應(yīng)當配置,防止云安全組規(guī)則配置錯誤導致的暴露。
操作步驟(CentOS 7/8 - firewalld):
# 1. 啟動 firewalld sudo systemctl start firewalld sudo systemctlenablefirewalld # 2. 查看默認 zone sudo firewall-cmd --get-default-zone # 3. 添加允許的 SSH(防止把自己踢出去) # 先添加,確認能用,再移除 22/TCP 的 all 訪問 sudo firewall-cmd --zone=public --add-port=22/tcp --permanent # 4. 只允許特定 IP 段訪問 SSH(如果固定 IP) # sudo firewall-cmd --zone=public --add-source=192.168.1.0/24 --permanent # sudo firewall-cmd --zone=public --remove-port=22/tcp --permanent # 5. 允許必要的服務(wù) sudo firewall-cmd --zone=public --add-service=ssh --permanent sudo firewall-cmd --zone=public --add-service=https --permanent sudo firewall-cmd --zone=public --add-service=http --permanent # 6. 拒絕所有其他入站流量 sudo firewall-cmd --zone=public --add-rich-rule='rule protocol value=icmp drop'--permanent # 7. 重載防火墻規(guī)則 sudo firewall-cmd --reload # 8. 查看當前規(guī)則 sudo firewall-cmd --list-all
操作步驟(Ubuntu - ufw):
# 1. 啟用 ufw sudo ufwenable # 2. 設(shè)置默認策略:拒絕所有入站,允許所有出站 sudo ufw default deny incoming sudo ufw default allow outgoing # 3. 允許 SSH(先做,防止把自己踢出去) # 如果使用默認 22 端口 sudo ufw allow ssh # 如果使用非標準端口,比如 2222 sudo ufw allow 2222/tcp # 4. 只允許特定 IP 訪問 SSH(推薦) sudo ufw allow from 192.168.1.0/24 to any port 22 # 5. 允許必要的服務(wù) sudo ufw allow http sudo ufw allow https # 6. 查看規(guī)則 sudo ufw status numbered # 7. 刪除規(guī)則(如果需要) sudo ufw delete
驗證方法:
# 查看防火墻狀態(tài) # CentOS sudo firewall-cmd --state # 或 sudo systemctl status firewalld # Ubuntu sudo ufw status verbose # 測試防火墻規(guī)則:從另一臺機器測試 # 應(yīng)該只能訪問允許的端口 nmap -sT -p 22,80,443
風險提醒:配置防火墻前,務(wù)必確認:
你有其他方式(如VNC/ILO)訪問服務(wù)器
SSH 端口沒有被錯誤拒絕
如果有固定 IP,把固定 IP 加入 SSH 允許列表后再操作
第 7 項:關(guān)閉不必要的服務(wù)和端口
服務(wù)器上默認運行了很多不需要的服務(wù),每個服務(wù)都是潛在的攻擊面。
操作步驟:
# 1. 查看所有正在運行的服務(wù) sudo systemctl list-units --type=service --state=running # 2. 查看監(jiān)聽端口 sudo ss -tunapl | grep LISTEN # 3. 識別不需要的服務(wù)(常見可以禁用的) # telnet-server: 明文協(xié)議,應(yīng)該禁用 # rsh-server: 不安全的遠程 shell # vsftpd: 如果不用 FTP # named: 如果不用 DNS 服務(wù) # dovecot/postfix: 如果不用郵件服務(wù) # cups: 打印服務(wù),通常服務(wù)器不需要 # 4. 停止并禁用不需要的服務(wù) sudo systemctl stopsudo systemctldisable # 5. 常見可以安全禁用的服務(wù)示例: sudo systemctl stop anddisabletelnet.socket # CentOS sudo systemctl stop anddisablersh.socket # CentOS sudo systemctl stop cups # 打印服務(wù) sudo systemctl stop postfix # 郵件服務(wù) sudo systemctl stop dovecot # IMAP/POP3
驗證方法:
# 查看監(jiān)聽端口變化 sudo ss -tunapl | grep LISTEN # 確認服務(wù)已禁用 sudo systemctl is-enabled# 返回 "disabled" 表示已禁用 # 用 nmap 從外部掃描(如果有測試機) nmap -sT -p 1-1000 # 只應(yīng)該看到 SSH(22)和你明確開啟的端口
第 8 項:禁用 ICMP 響應(yīng)(可選但推薦)
禁用 ICMP(ping)響應(yīng)可以增加攻擊者掃描的難度,但不影響網(wǎng)絡(luò)功能。
操作步驟:
# 方法一:使用 iptables/firewalld 丟棄 ping 請求 # CentOS sudo firewall-cmd --permanent --add-icmp-block=echo-reply sudo firewall-cmd --permanent --add-icmp-block=echo-request sudo firewall-cmd --reload # Ubuntu sudo ufw insert 1 deny proto icmp from any to any icmptypeecho-request # 方法二:修改內(nèi)核參數(shù)(永久生效) sudo vi /etc/sysctl.conf # 添加: net.ipv4.icmp_echo_ignore_all = 1 # 應(yīng)用配置 sudo sysctl -p
驗證方法:
# 從外部機器測試 ping ping# 應(yīng)該無響應(yīng)或超時 # 在本機測試(應(yīng)該能 ping 自己) ping 127.0.0.1
風險提醒:有些監(jiān)控系統(tǒng)(如 Zabbix、Nagios)會通過 ping 檢測主機存活。禁用 ICMP 后需要確保監(jiān)控有其他方式檢測(如端口檢測)。另外,部分網(wǎng)絡(luò)故障排查工具依賴 ICMP,禁用后 Traceroute 可能不正常。
第 9 項:配置內(nèi)核網(wǎng)絡(luò)參數(shù)
Linux 內(nèi)核的網(wǎng)絡(luò)參數(shù)有很多可以加固的地方,比如 SYN Flood 攻擊防護、ICMP 廣播限制等。
操作步驟:
# 編輯 /etc/sysctl.conf sudo vi /etc/sysctl.conf # 添加以下內(nèi)容: # 防止 SYN Flood 攻擊 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_max_syn_backlog = 65535 # 禁止 IP 源路由(防止 IP 欺騙) net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # 禁止 ICMP 重定向 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 # 開啟 IP 轉(zhuǎn)發(fā)檢查 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 禁止 ICMP 廣播 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 忽略 ICMP ping 請求 net.ipv4.icmp_echo_ignore_all = 1 # 禁止 IP 路由到偽造地址(減少 IP 欺騙) net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # 應(yīng)用配置 sudo sysctl -p # 驗證 sudo sysctl net.ipv4.tcp_syncookies # 應(yīng)該返回 net.ipv4.tcp_syncookies = 1
第 10 項:限制文件描述符和進程數(shù)
資源耗盡攻擊(ulimit 耗盡)是一種 DoS 攻擊方式。默認的 ulimit 值可能不夠高。
操作步驟:
# 1. 查看當前限制 ulimit-a # 2. 修改 /etc/security/limits.conf sudo vi /etc/security/limits.conf # 添加: # 每個用戶最大打開文件描述符數(shù) * soft nofile 65535 * hard nofile 65535 # 每個用戶最大進程數(shù) * soft nproc 65535 * hard nproc 65535 # root 用戶不受限制(需要保留) root soft nofile 65535 root hard nofile 65535 # 3. 修改 /etc/pam.d/common-session(Ubuntu)或 /etc/pam.d/system-auth(CentOS) # 確保有這行: session required pam_limits.so # 4. 修改 /etc/sysctl.conf 中的 fs.file-max(系統(tǒng)級限制) sudo vi /etc/sysctl.conf fs.file-max = 655360 # 應(yīng)用 sudo sysctl -p
驗證方法:
# 重新登錄后測試 su - admin ulimit-n # 應(yīng)該顯示 65535 # 測試是否能達到這個限制 ulimit-n 65535
第 11-15 項:系統(tǒng)安全配置
第 11 項:更新系統(tǒng)和軟件包
操作步驟:
# CentOS/RHEL sudo yum update -y # 或 sudo dnf update -y # Ubuntu sudo apt update && sudo apt upgrade -y # 升級完成后重啟(如有必要) sudo reboot
驗證方法:
# 查看上次更新時間 rpm -qa --last | head -10 # 或 dpkg -l | tail -10
第 12 項:安裝并配置 fail2ban
fail2ban 可以自動封禁連續(xù)登錄失敗的 IP,是防止 SSH 暴力破解的利器。
操作步驟:
# 安裝 # CentOS(需要 EPEL 源) sudo yum install -y epel-release sudo yum install -y fail2ban # Ubuntu sudo apt-get install -y fail2ban # 配置 sudo vi /etc/fail2ban/jail.local # 如果文件不存在,創(chuàng)建它 # [DEFAULT] # bantime = 3600 # 封禁 1 小時 # findtime = 600 # 10 分鐘內(nèi) # maxretry = 5 # 最多 5 次嘗試 # banaction = iptables-multiport # [sshd] # enabled = true # port = ssh # filter = sshd # logpath = /var/log/secure # CentOS # logpath = /var/log/auth.log # Ubuntu # maxretry = 3 # 啟動 sudo systemctlenablefail2ban sudo systemctl start fail2ban
驗證方法:
# 查看 fail2ban 狀態(tài) sudo fail2ban-client status # 查看 SSH 防護狀態(tài) sudo fail2ban-client status sshd # 測試:從另一臺機器故意輸錯密碼 3 次,應(yīng)該被封禁 # 查看被封禁的 IP sudo iptables -L -n | grep fail2ban
第 13 項:配置 auditd 審計
auditd 可以記錄系統(tǒng)調(diào)用和文件訪問,是等保合規(guī)和事后審計的重要工具。
操作步驟:
# 安裝 # CentOS sudo yum install -y audit # Ubuntu sudo apt-get install -y auditd # 啟動 sudo systemctlenableauditd sudo systemctl start auditd # 配置審計規(guī)則 sudo vi /etc/audit/rules.d/audit.rules # 添加: # 記錄所有 rm mv chmod chown 等敏感操作 -w /usr/bin/rm -p x -k delete -w /usr/bin/mv -p x -k move -w /usr/bin/chmod -p x -k perm_chmod -w /usr/bin/chown -p x -k perm_chown # 記錄 /etc/passwd /etc/shadow 的修改 -w /etc/passwd -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/group -p wa -k identity # 記錄 SSH 配置修改 -w /etc/ssh/sshd_config -k sshd_config # 重載規(guī)則 sudo auditctl -R /etc/audit/rules.d/audit.rules # 或者直接添加規(guī)則(臨時生效) sudo auditctl -w /usr/bin/rm -p x -k delete
驗證方法:
# 查看審計日志 sudo ausearch -k delete | head -20 # 查看最近的審計事件 sudo ausearch -i | tail -20 # 查看 auditd 狀態(tài) sudo systemctl status auditd
第 14 項:關(guān)閉 Ctrl+Alt+Del 重啟
防止物理接觸服務(wù)器的人通過鍵盤組合鍵重啟系統(tǒng)。
操作步驟:
# CentOS 7/8 # 修改 /etc/systemd/system/ctrl-alt-del.target sudo systemctl mask ctrl-alt-del.target # Ubuntu # 修改 /etc/systemd/system/ctrl-alt-del.target 的軟鏈接 sudo systemctl mask ctrl-alt-del.target # 驗證 sudo systemctl status ctrl-alt-del.target # 應(yīng)該顯示 "masked"
第 15 項:設(shè)置 GRUB 密碼
防止未經(jīng)授權(quán)修改 GRUB 啟動參數(shù)(比如進入單用戶模式重置 root 密碼)。
操作步驟:
# 生成 GRUB 密碼哈希 grub2-mkpasswd-pbkdf2 # 或 # CentOS 8 中可能是 # grub2-mkpasswd-pbkdf2 # 輸入密碼后得到一串 hash # 編輯 /etc/grub.d/00_header sudo vi /etc/grub.d/00_header # 在文件末尾添加: cat << EOF set?superusers="admin" password_pbkdf2 admin <生成的hash> EOF # 重新生成 GRUB 配置 # CentOS sudo grub2-mkconfig -o /boot/grub2/grub.cfg # UEFI # sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # Ubuntu sudo update-grub
驗證方法:
# 重啟服務(wù)器,在 GRUB 菜單按 'e' 編輯 # 如果需要輸入 admin 密碼,說明配置成功
第 16-20 項:SSH 和遠程訪問加固
第 16 項:修改 SSH 默認端口
SSH 默認監(jiān)聽 22 端口,掃描器會首先掃描 22 端口。改成非標準端口可以減少大量無效掃描。
操作步驟:
# 1. 修改 SSH 配置 sudo vi /etc/ssh/sshd_config # 找到#Port22,改為非標準端口(如 2222) Port 2222 # 2. 確認新端口已在防火墻開放(先做?。?# CentOS sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload # Ubuntu sudo ufw allow 2222/tcp # 3. 重啟 SSH sudo systemctl restart sshd # 4. 驗證:用新端口登錄 ssh -p 2222 admin@# 5. 確認舊端口 22 不再監(jiān)聽(可選)
驗證方法:
# 查看 SSH 監(jiān)聽端口 sudo ss -tunapl | grep ssh # 從外部測試 nmap -sT -p 2222
風險提醒:修改 SSH 端口后,新的 SSH 連接命令必須加-p
第 17 項:配置 SSH 空密碼和公鑰檢查
操作步驟:
sudo vi /etc/ssh/sshd_config # 確保以下配置存在: # 不允許空密碼登錄 PermitEmptyPasswords no # 不允許使用公鑰認證時不檢查 key 的完整性(中間人攻擊防護) StrictHostKeyChecking ask # 禁用 .rhosts 文件 IgnoreRhosts yes # 禁用基于主機的認證 HostbasedAuthentication no
第 18 項:限制 SSH 允許的用戶和組
操作步驟:
sudo vi /etc/ssh/sshd_config # 只允許特定用戶登錄 AllowUsers admin deploy # 只允許特定組登錄 AllowGroups sudo admin # 禁止 root 用戶登錄(已在第 1 項中配置) PermitRootLogin no
第 19 項:安裝配置 AIDE 文件完整性檢測
AIDE(Advanced Intrusion Detection Environment)可以檢測系統(tǒng)文件被篡改。
操作步驟:
# 安裝 # CentOS sudo yum install -y aide # Ubuntu sudo apt-get install -y aide # 初始化數(shù)據(jù)庫(第一次運行) sudo aide --init # 移動數(shù)據(jù)庫文件 sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 定期檢查(建議加入 cron) # 0 3 * * * /usr/sbin/aide --check | /usr/bin/mail -s "AIDE check report" admin@example.com # 手動檢查 sudo aide --check
驗證方法:
# 修改一個文件,測試 AIDE 能否檢測到 sudo touch /tmp/test_change sudo aide --check | grep /tmp/test_change # 應(yīng)該報告文件被修改 # 清理測試文件 sudo rm /tmp/test_change
第 20 項:配置日志集中收集和告警
服務(wù)器的安全日志需要集中收集和分析,防止被篡改或刪除。
操作步驟(使用 rsyslog 發(fā)送到日志服務(wù)器):
# 1. 配置 rsyslog 發(fā)送日志到遠程服務(wù)器
sudo vi /etc/rsyslog.conf
# 添加(UDP 方式):
# *.* @log-server-ip:514
# 或(TCP 方式,更可靠):
# *.* @@log-server-ip:514
# 2. 啟用并重啟 rsyslog
sudo systemctlenablersyslog
sudo systemctl restart rsyslog
# 3. 配置日志輪轉(zhuǎn),防止日志過大
sudo vi /etc/logrotate.d/syslog
# 確保有類似內(nèi)容:
# /var/log/secure
# /var/log/messages
# {
# daily
# rotate 30
# missingok
# notifempty
# compress
# sharedscripts
# postrotate
# /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` || true
# endscript
# }
驗證方法:
# 測試日志能否發(fā)送到遠程服務(wù)器 logger"Test log from$(hostname)" # 在日志服務(wù)器上檢查是否收到 # 查看日志輪轉(zhuǎn)配置 sudo logrotate -d /etc/logrotate.conf | head -30
加固完成后的驗證
檢查清單
#!/bin/bash # save as: security_check.sh # 服務(wù)器安全加固完成后的自檢腳本 echo"===== 服務(wù)器安全加固自檢 =====" echo"[1] 檢查 root 登錄是否禁用..." grep"PermitRootLogin"/etc/ssh/sshd_config echo"[2] 檢查 SSH 公鑰認證..." grep"PubkeyAuthentication"/etc/ssh/sshd_config grep"PasswordAuthentication"/etc/ssh/sshd_config echo"[3] 檢查防火墻狀態(tài)..." systemctl status firewalld 2>/dev/null | grep"Active"|| ufw status 2>/dev/null | head -3 echo"[4] 檢查 fail2ban..." systemctl status fail2ban 2>/dev/null | grep"Active" echo"[5] 檢查不必要的服務(wù)..." systemctl list-units --type=service --state=running | grep -E"telnet|rsh|vsftpd|cups|postfix" echo"[6] 檢查文件描述符限制..." ulimit-n echo"[7] 檢查內(nèi)核參數(shù)..." sysctl net.ipv4.tcp_syncookies sysctl net.ipv4.icmp_echo_ignore_all echo"[8] 檢查 auditd..." systemctl status auditd 2>/dev/null | grep"Active" echo"[9] 檢查 AIDE..." aide --check 2>/dev/null | head -5 echo"[10] 檢查密碼策略..." grep"minlen"/etc/security/pwquality.conf grep"PASS_MAX_DAYS"/etc/login.defs
總結(jié)
服務(wù)器安全加固是"縱深防御"的體現(xiàn)——每一層都有防線,即使某一層被突破,還有其他層保護。以下 20 項操作的優(yōu)先級和分類:
高優(yōu)先級(必須做):
禁用 root 登錄
SSH 公鑰認證 + 禁止密碼登錄
配置防火墻(iptables/firewalld/ufw)
關(guān)閉不必要的服務(wù)和端口
更新系統(tǒng)補丁
fail2ban 防暴力破解
中優(yōu)先級(應(yīng)該做):
禁用 ICMP 響應(yīng)
內(nèi)核網(wǎng)絡(luò)參數(shù)加固
資源限制(ulimit)
sudo 日志記錄
密碼策略
SSH 端口修改
低優(yōu)先級(推薦做):
auditd 審計
GRUB 密碼
AIDE 文件完整性檢測
日志集中收集
安全加固不是一次性的工作,應(yīng)該定期:
每季度審查一次賬號和權(quán)限
每次系統(tǒng)更新后確認加固配置未被動
定期查看 fail2ban 和 auditd 日志
定期檢查是否有新的漏洞和加固手段
-
Linux
+關(guān)注
關(guān)注
88文章
11839瀏覽量
219696 -
服務(wù)器
+關(guān)注
關(guān)注
14文章
10399瀏覽量
91803 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
8349瀏覽量
95655
原文標題:服務(wù)器安全加固清單:新機器上線前必做的 20 件事
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
全國產(chǎn)北斗ntp網(wǎng)絡(luò)時間同步服務(wù)器 #北斗對時服務(wù)器 #北斗ntp網(wǎng)絡(luò)時間服務(wù)器# 校時器#
100%國產(chǎn)率北斗衛(wèi)星對時服務(wù)器 北斗對時服務(wù)器 北斗ntp網(wǎng)絡(luò)時間服務(wù)器# 對時服務(wù)器# 時間服務(wù)器
網(wǎng)絡(luò)授時服務(wù)器 ntp時間服務(wù)器品牌 校時服務(wù)器廠家#電工
時鐘服務(wù)器廠商 gps網(wǎng)絡(luò)校時服務(wù)器 衛(wèi)星時鐘服務(wù)器#電工
如果同時部署應(yīng)用安全、防火墻、系統(tǒng)加固,是不是比僅靠高防服務(wù)器更安全?
恒訊科技解析:如何在日本服務(wù)器上安裝和配置數(shù)據(jù)庫(如MySQL)?
如何構(gòu)建Linux服務(wù)器安全防護體系
華納云服務(wù)器角色服務(wù)器失敗的原因和解決辦法
AI 服務(wù)器電源如何迭代升級?
國外服務(wù)器地址怎么填寫才正確?#國外服務(wù)器 #國外服務(wù)器地址 #服務(wù)器
DNS服務(wù)器無法訪問?2分鐘快速排查與解決!#DNS服務(wù)器 #DNS #服務(wù)器
服務(wù)器安全加固清單要點
評論