資安無絕對,唯有縱深防禦。本文彙整 9 項經實戰驗證的 Linux 系統安全強化措施,涵蓋核心存取控制、服務收斂、漏洞管理、防火牆、稽核、入侵偵測與加密,適合作為基線核對清單。
Enforcing (強制) > Permissive (僅記錄) > Disabled。sestatus, getenforce, setenforce, audit2allow (由拒絕日誌產生政策)。systemctl list-unit-files --state=enabled # 檢視啟動服務
systemctl disable --now unused-service # 停用並禁用
dnf remove / apt purge unused-package # 徹底移除套件
減少攻擊面,降低修補負擔。
dnf-automatic, unattended-upgrades, yum-cron 自動安裝安全更新。trivy, grype, clair),CI/CD 管線整合阻斷高風險映像部署。# 預設拒絕所有輸入/轉發,僅允許明確需要的埠
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT # 或依策略限制輸出
# 允許已建立/相關連線
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允許本地回環
iptables -A INPUT -i lo -j ACCEPT
# 允許 SSH (限管理 IP)
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
# 允許 Web
iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT
# 持久化
iptables-save > /etc/iptables/rules.v4
rsyslog / syslog-ng → ELK / Loki / Graylog。/var/log/auth.log (登入), /var/log/secure, /var/log/audit/audit.log (SELinux/稽核)。logwatch, fail2ban (暴力破解封鎖), auditd (檔案/系統呼叫稽核)。# iptables port knocking 範例 (需先敲 7000,8000,9000 才開放 22)
iptables -N KNOCK
iptables -A KNOCK -m recent --name knock1 --rcheck --seconds 10 -j ACCEPT
iptables -A INPUT -p tcp --dport 9000 -m recent --name knock2 --set -j DROP
iptables -A INPUT -p tcp --dport 8000 -m recent --name knock1 --set -j DROP
iptables -A INPUT -p tcp --dport 7000 -m recent --name knock0 --set -j DROP
iptables -A INPUT -p tcp --dport 22 -j KNOCK
客戶端:knock host 7000 8000 9000 && ssh host。
# 安裝時選擇加密分區,或事後加密資料盤
cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 cryptdata
mkfs.ext4 /dev/mapper/cryptdata
mount /dev/mapper/cryptdata /data
# /etc/crypttab 設定開機解密 (需輸入密碼或金鑰檔)
防禦實體竊機、硬碟報廢流出資料。
/etc/sysctl.d/99-hardening.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.yama.ptrace_scope = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
