RedHat Linux服務器安全配置細節
1.概述
Linux服務器版本:RedHat Linux AS 2.1
對于開放式的操作系統---Linux,系統的安全設定包括系統服務最小化、限制遠程存取、隱藏重要資料、修補安全漏洞、采用安全工具以及經常性的安全檢查等。
本文主要從用戶設置、如何開放服務、系統優化等方面進行系統的安全配置,以到達使Linux服務器更安全、穩定。
2.用戶管理
在Linux系統中,用戶帳號是用戶的身份標志,它由用戶名和用戶口令組成。
系統將輸入的用戶名存放在/etc/passwd文件中,而將輸入的口令以加密的形式存放在/etc/shadow文件中。
在正常情況下,這些口令和其他信息由操作系統保護,能夠對其進行訪問的只能是超級用戶(root)和操作系統的一些應用程序。但是如果配置不當或在一些系統運行出錯的情況下,這些信息可以被普通用戶得到。進而,不懷好意的用戶就可以使用一類被稱為“口令破解”的工具去得到加密前的口令。
2.1 刪除系統特殊的的用戶帳號和組帳號:
以上所刪除用戶為系統默認創建,但是在常用服務器中基本不使用的一些帳號,但是這些帳號常被黑客利用和攻擊服務器。
同樣,以上刪除的是系統安裝是默認創建的一些組帳號。這樣就減少受攻擊的機會。
2.2用戶密碼設置:
安裝linux時默認的密碼最小長度是5個字節,但這并不夠,要把它設為8個字節。修改最短密碼長度需要編輯login.defs文件(vi /etc/login.defs)
2.3 修改自動注銷帳號時間:
自動注銷帳號的登錄,在Linux系統中root賬戶是具有最高特權的。如果系統管理員在離開系統之前忘記注銷root賬戶,那將會帶來很大的安全隱患,應該讓系統會自動注銷。通過修改賬戶中“TMOUT”參數,可以實現此功能。TMOUT按秒計算。編輯你的profile文件(vi /etc/profile),在"HISTSIZE="后面加入下面這行:
TMOUT=300
300,表示300秒,也就是表示5分鐘。這樣,如果系統中登陸的用戶在5分鐘內都沒有動作,那么系統會自動注銷這個賬戶。
2.4 給系統的用戶名密碼存放文件加鎖:
注:chattr是改變文件屬性的命令,參數i代表不得任意更動文件或目錄,此處的i為不可修改位(immutable)。查看方法:lsattr /etc/passwd
3.服務管理
在Linux系統的服務管理方面,如果想做到服務的最好安全,其中主要的就是升級服務本身的軟件版本,另外一個就是關閉系統不使用的服務,做到服務最小化。
3.1 關閉系統不使用的服務:
在這里有兩個方法,可以關閉init目錄下的服務,一、將init目錄下的文件名mv成*.old類的文件名,即修改文件名,作用就是在系統啟動的時候找不到這個服務的啟動文件。二、使用chkconfig系統命令來關閉系統啟動等級的服務。
注:在使用以下任何一種方法時,請先檢查需要關閉的服務是否是本服務器特別需要啟動支持的服務,以防關閉正常使用的服務。
第一種:修改文件名的方法
第二種:使用chkcofig命令來關閉不使用的系統服務
注:以上chkcofig 命令中的3和5是系統啟動的類型,3代表系統的多用啟動方式,5代表系統的X啟動方式。
3.2 給系統服務端口列表文件加鎖
主要作用:防止未經許可的刪除或添加服務
3.3 修改ssh服務的root登錄權限
修改ssh服務配置文件,使的ssh服務不允許直接使用root用戶來登錄,這樣建設系統被惡意登錄攻擊的機會。
將這行前的#去掉后,修改為:PermitRootLogin no
4.系統文件權限
Linux文件系統的安全主要是通過設置文件的權限來實現的。每一個Linux的文件或目錄,都有3組屬性,分別定義文件或目錄的所有者,用戶組和其他人的使用權限(只讀、可寫、可執行、允許SUID、允許SGID等)。特別注意,權限為SUID和SGID的可執行文件,在程序運行過程中,會給進程賦予所有者的權限,如果被黑客發現并利用就會給系統造成危害。
4.1 修改init目錄文件執行權限:
4.2修改部分系統文件的SUID和SGID的權限:
4.3修改系統引導文件
5.系統優化
5.1 虛擬內存優化:
一般來說,linux的物理內存幾乎是完全used。這個和windows非常大的區別,它的內存管理機制將系統內存充分利用,并非windows無論多大的內存都要去使用一些虛擬內存一樣。
在/proc/sys/vm/freepages中三個數字是當前系統的:最小內存空白頁、最低內存空白頁和最高內存空白。
注意,這里系統使用虛擬內存的原則是:如果空白頁數目低于最高空白頁設置,則使用磁盤交換空間。當達到最低空白頁設置時,使用內存交換。內存一般以每頁4k字節分配。最小內存空白頁設置是系統中內存數量的2倍;最低內存空白頁設置是內存數量的4倍;最高內存空白頁設置是系統內存的6倍。
以下以1G內存為例修改系統默認虛擬內存參數大小:
6.日志管理
6.1 系統引導日志:
dmesg
使用 dmesg 命令可以快速查看最后一次系統引導的引導日志。通常它的
內容會很多,所以您往往會希望將其通過管道傳輸到一個閱讀器。
6.2 系統運行日志:
A、Linux 日志存儲在 /var/log 目錄中。這里有幾個由系統維護的日志文件,但其他服務和程序也可能會把它們的日志放在這里。大多數日志只有 root 才可以讀,不過只需要修改文件的訪問權限就可以讓其他人可讀。
以下是常用的系統日志文件名稱及其描述:
B、/var/log/messages
messages 日志是核心系統日志文件。它包含了系統啟動時的引導消息,以及系統運行時的其他狀態消息。IO 錯誤、網絡錯誤和其他系統錯誤都會記錄到這個文件中。其他信息,比如某個人的身份切換為 root,也在這里列出。如果服務正在運行,比如 DHCP 服務器,您可以在messages 文件中觀察它的活動。通常,/var/log/messages 是您在做故障診斷時首先要查看的文件。
C、/var/log/XFree86.0.log
這個日志記錄的是 Xfree86 Xwindows 服務器最后一次執行的結果。如果您在啟動到圖形模式時遇到了問題,一般情況從這個文件中會找到失敗的原因。
D、在/var/log 目錄下有一些文件以一個數字結尾,這些是已輪循的歸檔文件。日志文件會變得特別大,特別笨重。Linux 提供了一個命令來輪循這些日志,以使您的當前日志信息不會淹沒在舊的無關信息之中。 logrotate 通常是定時自動運行的,但是也可以手工運行。當執行后,logrotate 將取得當前版本的日志文件,然后在這個文件名最后附加一個“.1”。其他更早輪循的文件為“.2”、“.3”,依次類推。文件名后的數字越大,日志就越老。
可以通過編輯 /etc/logrotate.conf 文件來配置 logrotate 的自動行為。通過 man logrotate 來學習 logrotate 的全部細節。
其中:
# rotate log files weekly
weekly
這里代表每個日志文件是每個星期循環一次,一個日志文件保存一個星期的內容。
# keep 4 weeks worth of backlogs
rotate 4
這里代表日志循環的次數是4次,即可以保存4個日志文件。
E、定制日志
可以通過編輯 /et/syslog.conf 和 /etc/sysconfig/syslog 來配置它們的行為,可以定制系統日志的存放路徑和日志產生級別。
6.3 系統各用戶操作日志:
last
單獨執行last指令,它會讀取位于/var/log目錄下,名稱為wtmp的文件,并把該給文件的內容記錄的登入系統的用戶名單全部顯示出來。
history
history命令能夠保存最近所執行的命令。如果是root命令所保存的命令內容在/root/.bash_history文件中,如果是普通用戶,操作所命令保存在這個用戶的所屬目錄下,即一般的/home/username/.bash_history。這個history的保存值可以設置,編輯/etc/profile文件,其中的HISTSIZE=1000的值就是history保存的值。
7.防火墻
7.1 iptables類型防火墻:
7.1.1 iptables概念:
Iptalbes(IP包過濾器管理)是用來設置、維護和檢查Linux內核的IP包過濾規則的。
可以定義不同的表,每個表都包含幾個內部的鏈,也能包含用戶定義的鏈。每個鏈都是一個規則列表,對對應的包進行匹配:每條規則指定應當如何處理與之相匹配的包。這被稱作'target'(目標),也可以跳向同一個表內的用戶定義的鏈。
通過使用用戶空間,可以構建自己的定制規則,這些規則存儲在內核空間的信息包過濾表中。這些規則具有目標,它們告訴內核對來自某些源、前往某些目的地或具有某些協議類型的信息包做些什么。如果某個信息包與規則匹配,那么使用目標 ACCEPT 允許該信息包通過。還可以使用目標 DROP 或 REJECT 來阻塞并殺死信息包。對于可對信息包執行的其它操作,還有許多其它目標。
根據規則所處理的信息包的類型,可以將規則分組在鏈中。處理入站信息包的規則被添加到INPUT 鏈中。處理出站信息包的規則被添加到 OUTPUT 鏈中。處理正在轉發的信息包的規則被添加到 FORWARD 鏈中。這三個鏈是基本信息包過濾表中內置的缺省主鏈。另外,還有其它許多可用的鏈的類型(如 PREROUTING 和 POSTROUTING),以及提供用戶定義的鏈。每個鏈都可以有一個策略,它定義“缺省目標”,也就是要執行的缺省操作,當信息包與鏈中的任何規則都不匹配時,執行此操作。
建立規則并將鏈放在適當的位置之后,就可以開始進行真正的信息包過濾工作了。這時內核空間從用戶空間接管工作。當信息包到達防火墻時,內核先檢查信息包的頭信息,尤其是信息包的目的地。我們將這個過程稱為路由。
如果信息包源自外界并前往系統,而且防火墻是打開的,那么內核將它傳遞到內核空間信息包過濾表的 INPUT 鏈。如果信息包源自系統內部或系統所連接的內部網上的其它源,并且此信息包要前往另一個外部系統,那么信息包被傳遞到 OUTPUT 鏈。類似的,源自外部系統并前往外部系統的信息包被傳遞到 FORWARD 鏈。
7.1.2 iptables實例1:
7.1.3 iptables實例2:
注:這個實例中,只需要設置tcp、udp端口和服務器網絡段ip范圍即可,其他已經默認設置好。
7.2 ipchains類型防火墻:
7.2.1 ipchains概念:
Ipchains 被用來安裝、維護、檢查Linux內核的防火墻規則。規則可以分成四類:IP input鏈、IP output鏈、IP forward鏈、user defined 鏈。
一個防火墻規則指定包的格式和目標。當一個包進來時, 核心使用input鏈來決定它的命運。 如果它通過了, 那么核心將決定包下一步該發往何處(這一步叫路由)。假如它是送往另一臺機器的, 核心就運用forward鏈。如果不匹配,進入目標值所指定的下一條鏈,那有可能是一條user defined鏈,或者是一個特定值: ACCEPT,DENY,REJECT,MASQ,REDIRECT,RETURN。
ACCEPT意味著允許包通過,DENY 扔掉包就象沒有受到過一樣,REJECT也把包扔掉,但(假如它不是 ICMP 包)產生一個 ICMP 回復來告訴發包者,目的地址無法到達(請注意DENY和REJECT對于ICMP包是一樣的)。
MASQ 告訴核心偽裝此包,它只對forward 鏈和user defined鏈起作用,想讓它起作用, 編譯核心時必需讓 IP Masquerading 起作用。
REDIRECT只對input鏈和user defined鏈起作用。它告訴核心把無論應送到何處的包改送到一個本地端口. 只有 TCP 和 UDP 協議可以使用此指定. 任意用 '-j REDIRECT' 指定一個端口(名字或編號)可以使送往此的包被重定向到某個特殊的端口, 即使它被標記為送到其它端口。想讓它起作用,編譯內核時,必須讓CONFIG_IP_TRANSPARENT_PROXY起作用。
最后的一個目標指定是 RETURN, 它跳過它下面的所有規則, 直到鏈的末尾。
任何其它的目標指定表示一個用戶自定義的鏈。包將在那個鏈中通過. 假如那個鏈沒有決定此包的命運, 那么在那個鏈中的傳輸就完成了,包將通過當前鏈的下一個規則。
7.2.2 ipchains實例:
##清除input規則的規則,并改變input默認的規則鏈策略為REJECT
##以下是允許input規則鏈的tcp端口為:80 81 22 123
##設置除了以上允許的input規則鏈以為,拒絕0-1023、2049、6000-6009、7100的tcp和upd端口,
##允許系本身統網卡上發生的所有包通過
##清除output規則的規則,并改變output默認的規則鏈策略為ACCEPT-F
##清除forward規則的規則,并改變forward默認的規則鏈策略為DENY,設置了forward規則鏈允許對10.10.11.0/24網段的包可以轉發并且做偽裝處理。