如何儘量減少Linux伺服器安全漏洞

* 原則上講單一功能的系統比多功能的系統更安全。減少可用攻擊點,典型的包括卸載不必要的軟體,不必要的登錄用戶名,關閉或移除不必要的服務。其他的還有給kernel打補丁,重編譯kernel,關閉打開的網路介面,安裝侵入偵察系統,防火牆,入侵預防系統。

  • 第一步,通過伺服器的想要功能來決定安裝什麼服務。例如,如果要搭建web伺服器你應該安裝Linux, Nginx, postgresql, 和 python服務,其他的東西都不要安裝,因為安裝額外的軟體或運行額外的服務創造了不必要的易攻擊點。

  • Linux管理員可以通過命令列管理網路和服務,但是一些新手管理員傾向于用GUI,GUI佔用了大量系統資源,運行不必要的服務。如果要用,在用完之後可以殺掉GUI進程。

  • 一些通用安全優化步驟

    • 資料加密通訊
    • 避免用不安全的協定發送明文資訊或密碼
    • 最小化伺服器中不必要的軟體
    • 關閉不需要的 SUID 和 SGID 的特殊許可權
    • 保持系統為最新,尤其是安全補丁
    • 使用安全擴展
    • 考慮用SELinux
    • 提要使用者密碼複雜度
    • 定期更改密碼,避免重複使用同一個密碼
    • 當使用者登錄錯誤次數太多時,鎖定用戶
    • 不允許使用空密碼
    • SSH
    • 關閉不必要的服務
    • 提高 /tmp /var/tmp /dev/shm 目錄的安全性 +隱藏 BIND DNS 服務版本和 web server 版本
    • 提高 sysctl.conf 安全
    • 安裝 Root Kit Hunter and ChrootKit Hunter
    • 最小化開放網路埠
    • 配置系統防火牆
    • 更安全合理的分區
    • 關閉不需要的檔許可權
    • 維護系統日誌,把日誌鏡像到分離的日誌伺服器
    • 安裝Logwatch並每天查看Logwatch emails
    • 使用侵入偵察系統
    • 安裝linux Socket 監控
    • 安裝Mod_security
    • 限制用戶許可權
    • 備份
    • 伺服器物理安全

伺服器物理安全

  • 配置 BIOS,關閉從CD/DVD/USB和外部設備啟動。啟用 BIOS 密碼和GRUB密碼防治在物理上訪問你的系統。

保持系统最新

  • sudo apt-get update; sudo apt-get upgrade

su

  • 確保只有在 sudo 組裡的用戶可以運行su

關閉root用戶

  • 出於安全原因,可以在不需要root使用者操作伺服器時將其關閉
    • passwd -l root # 鎖定root
    • passwd -u root # 解鎖

關閉user shell登入

usermod -s /usr/sbin/nologin "username"

console

  • 在默认下,许多终端都是激活的,詳見/etc/securetty,注释掉不需要的终端。
  • 確保只有root用戶可以修改 /etc/securetty 檔
chown root:root /etc/securetty
chmod 0600 /etc/securetty

共享内存(Shared memory)

  • 共用記憶體可以用來攻擊運行的服務 如apache
vim /etc/fstab
# 加入行如下
#secure shared memory
tmpfs     /run/shm    tmpfs    defaults,noexec,nosuid    0    0

# 重新載入
# mount -a

提高IP安全

  • 在 /etc/sysctl.conf 文件中加入
# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

關閉IPv6

vi /etc/sysctl.conf

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

# 重新載入
sudo sysctl -p

TCP Wrapper

  • TCP Wrapper是基於規則的訪問清單,包含以下2個檔

    • /etc/hosts.allow
    • /etc/hosts.deny
  • 注意:

    • 每個服務在hosts.allow和hosts.deny只能有一個規則
    • 在hosts.allow和hosts.deny的設置立即生效
    • 在兩個檔中的最後一行必須以新的一行結束
  • 兩個檔的語法相似定義如下
daemon : client [:option1:option2:...]
  • 例如,如果你想允許指定IP(或IP範圍)而拒絕其他IP通過SSH訪問.
# 在 /etc/hosts.allow 文件中加入
sshd : 111.111, 222.222.222.222

# 在/etc/hosts.deny 文件中加入
sshd : ALL

參考資料

* http://blog.topspeedsnail.com/archives/132 

results matching ""

    No results matching ""