服務器加固是通過各種方法增強服務器安全性的過程。我們有很多步驟來保護服務器。通過保護您的 linux 系統免受黑客、破解者和攻擊者的侵害,讓您和您的公司遠離您!您可以通過以下步驟將易受攻擊的盒子變成加固的服務器。它將幫助您防止外部攻擊。這里我描述的是 centos 的服務器加固。
要知道什么
本指南將引導您完成安全強化 CentOS 7 所需的步驟。強化系統將使其更具限制性,您可能會遇到問題。我建議創建一個可用于故障排除的重復虛擬機。您將在下面找到一個基本步驟列表,您可以并且應該在配置后立即強化您的服務器。
1. 安全的遠程訪問
有時我們通過遠程方法訪問我們的服務器,如果它不安全,我們可以公開我們的服務器。OpenSSH 選項是通過/etc/ssh/sshd_config文件控制的。
禁用 SSH 密碼驗證方法并啟用公鑰驗證方法
重要的是禁用密碼遠程登錄方法并啟用身份驗證公鑰
將
ChallengeResponseAuthentication和PasswordAuthentication更改為no 以停用密碼方法
PasswordAuthentication no
ChallengeResponseAuthentication no
授權公鑰認證
RSAAuthentication yes
PubkeyAuthentication yes
現在您可以生成新的密鑰對
# ssh-keygen -t rsa
禁用直接root登錄
允許 root 直接登錄服務器是一種風險安全措施。相反,您應該以您的帳戶登錄系統,然后執行su -以 root 身份登錄。因此,您需要將PermitRootLogin yes更改為PermitRootLogin no
PermitRootLogin no
更改默認 SSH 監聽端口(例如:8500)
有時不建議使用默認端口,因為它是全世界都知道的并且存在安全風險。個性化要使用的端口很好
port 8500
2. 使用 grub 密碼保護引導加載程序
通過保護引導加載程序,我們可以防止訪問以 root 身份自動登錄的單用戶模式。這是通過GRUB 通過設置默認以純文本形式存儲的密碼來完成的。
對于 Debian 系統
# grub-mkpasswd-pbkdf2
對于 Centos
# grub2-mkpasswd-pbkdf2
3.監聽網絡端口
配置網絡服務后,重要的是要注意哪些端口實際上正在偵聽系統的網絡接口。任何開放的端口都可能是入侵的證據。
# nmap -sT -O localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2017-06-07 23:13 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000061s latency).
Other addresses for localhost (not scanned): 127.0.0.1
rDNS record for 127.0.0.1: centos-01
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
2049/tcp open nfs
要列出所有打開的端口和相關程序,請使用以下命令
# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN
4. 縮小權限
縮小系統文件和文件夾的權限以限制風險。
# chmod 700 /root
# chmod 700 /var/log/audit
# chmod 740 /etc/rc.d/init.d/iptables
# chmod 740 /sbin/iptables
# chmod -R 700 /etc/skel
# chmod 600 /etc/rsyslog.conf
# chmod 640 /etc/security/access.conf
# chmod 600 /etc/sysctl.conf
5.檢查空密碼的帳戶
任何密碼為空的帳戶都意味著它被打開以供網絡上的任何人未經授權訪問,并且它是 Linux 服務器中安全性的一部分。要檢查密碼為空的帳戶,請使用以下命令
# cat /etc/shadow | awk -F: '($2==""){print $1}'
paul
為了安全起見,最好鎖定所有空密碼帳戶:
# passwd -l paul
Locking password for user paul.
passwd: Success
6.調整內核參數
Sysctl 是一個用于在 Linux 操作系統中檢查和動態更改參數的接口。編輯/etc/sysctl.conf 文件以優化內核參數
sysctl 是用于在運行時修改內核參數的命令。
# sysctl -a
# sysctl -A
# sysctl net.ipv4.conf.all.rp_filter
To load settings, enter:
# sysctl -p
將以下內容復制粘貼到/etc/sysctl.conf
# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1
# Enable IP spoofing protection
net.ipv4.conf.all.rp_filter=1
# Disable IP source routing
net.ipv4.conf.all.accept_source_route=0
# Ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1
# Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Disable ICMP routing redirects
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv6.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv6.conf.all.send_redirects=0
# Disables the magic-sysrq key
kernel.sysrq = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
7.禁用不需要的服務
您需要從系統啟動中刪除所有不需要的服務和守護程序(在后臺運行的服務),這些服務和守護程序在啟動時以運行級別 3啟動。
# chkconfig --list | grep '3:on'
要禁用服務,請輸入:
# service serviceName stop
# chkconfig serviceName off
8. 單用戶模式需要認證
建議進入單用戶模式時要求輸入root密碼。打開/etc/sysconfig/init 文件并添加以下行:
SINGLE=/sbin/sulogin
9. 安全增強型 Linux (SELinux)
SELinux 是一組安全規則,用于確定哪個進程可以訪問哪個文件、目錄、端口等。每個文件、進程、目錄和端口都有一個特殊的安全標簽,稱為 SELinux 上下文。上下文只是 SELinux 策略用來確定進程是否可以訪問文件、目錄或端口的名稱。默認情況下,該策略不允許任何交互,因此顯式規則授予訪問權限。如果沒有允許規則,則不允許訪問。
getenforce 命令告訴我們 SELinux 處于什么模式。
我們可以通過更改來將 SELinux 模式更改為強制SELINUX=enforcing執行/etc/sysconfig/selinux
該文件中有三個指令,如下所述。
- 強制: SELinux 安全策略被強制執行。
- Permissive: SELinux 打印警告而不是強制執行。
- 禁用: SELinux 完全禁用。
您可以使用以下命令檢查 SELinux 的狀態
# sestatus
SELinux status: disabled
您會看到它已被禁用。要啟用它,您可以使用
# setenforce enforcing
10. 使用 iptables 設置防火墻
iptables 是一個用戶空間應用程序,允許系統管理員配置 Linux 內核防火墻提供的表及其存儲的鏈和規則。
關閉所有不需要的端口
iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP
灣。阻止不良IP
iptables -A INPUT -s IP_ADDRESS -j DROP
C。阻止與網絡接口的連接
要阻止從特定 IP 地址到特定網絡接口的連接,請使用命令
# iptables -A INPUT -i ens0 -s 6.6.6.6 -j DROP
d。列出 iptables 規則
可以通過命令查看所有 iptables 規則
iptables -L -n -v
11. 驗證文件系統
當 SUID/SGID 可執行文件存在安全問題時,所有啟用 SUID/SGID 位的文件都可用于惡意活動。所有本地或遠程用戶都可以使用此類文件。
識別不需要的 SUID 和 SGID 二進制文件
find / ( -perm -4000 -o -perm -2000 ) -print
find / -path -prune -o -type f -perm +6000 -ls
識別世界可寫文件
find /dir -xdev -type d ( -perm -0002 -a ! -perm -1000 ) -print
識別孤立的文件和文件夾
find /dir -xdev ( -nouser -o -nogroup ) -print
12. 保持 /boot 為只讀
Linux 內核及其相關文件在 /boot 目錄下,默認為可讀寫。將其更改為只讀可降低未經授權修改關鍵引導文件的風險。我們需要編輯/etc/fstab文件并在下面插入行<
LABEL=/boot /boot ext2 defaults,ro 1 2
13. 拒絕所有 TCP WrAppers
TCP 包裝器可以提供一種快速簡便的方法來控制對鏈接到它們的應用程序的訪問。因此建議屏蔽所有未使用的應用程序,然后只授權將要使用的應用程序。
例如,我們將阻止所有應用程序,但僅授權 ssh
echo "ALL:ALL" >> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.allow
14. 為未經授權的用戶鎖定 cronjobs
Cron 用于在特定時間自動執行作業。可以指定誰可以或不可以運行作業。這是通過使用名為/etc/cron.allow和的文件來控制的/etc/cron.deny。要使用 cron 鎖定用戶,只需在 cron.deny 中添加用戶名并允許用戶在 cron.allow 文件中運行 cron 添加。
# echo ALL >>/etc/cron.deny
15. 保護服務器免受緩沖區溢出
當程序或進程嘗試將更多數據寫入固定長度的內存塊或緩沖區時,會發生緩沖區溢出,而不是分配給緩沖區的內容。再次保護您的服務器很重要
一種。啟用 ExecShield
它有助于防止堆棧粉碎。通常,緩沖區溢出漏洞會覆蓋返回地址,以便函數返回攻擊者選擇的地址。您需要在當前內核上啟用
sysctl -w kernel.exec-shield=1
您還可以將下面的行添加到/etc/sysctl.conf
kernel.exec-shield = 1
檢查/啟用 ASLR
地址空間布局隨機化是一種防御功能,可以使緩沖區溢出更加困難。ASLR 使攻擊者難以找到要跳轉的地址。您需要通過為kernel.randomize_va_space設置運行時來啟用隨機虛擬內存區域放置
sysctl -q -n -w kernel.randomize_va_space=2
/etc/sysctl.conf如果它不存在,則添加下面的行
kernel.randomize_va_space = 2
結論
這些是嘗試運行自己的服務器的新用戶的一些基本注意事項。請記住,餅干總是領先一步;他們一直在尋找任何漏洞來入侵您的服務器。重要的是要認識到,雖然遲到總比沒有好,但您等待實施的時間越長,安全措施的有效性就會降低