linux系统加固建议
1. 安裝和升級
盡量選用最新的 Linux 發(fā)行版本,安裝前拔掉網(wǎng)線,斷開物理連接,
安裝時建議用 custom 自定義方式安裝軟件包,數(shù)量以少為好,
一般來說服務(wù)器沒有必要安裝 X-windows,
在 lilo/grub 引導(dǎo)器中加入口令限制,防止能夠物理接觸的惡意用戶
因為 Linux 安裝光盤的 rescue 模式可以跳過這個限制,所以還要給bios加上密碼或服務(wù)器機箱上鎖
/var, /home, /usr, /root 等目錄用獨立的物理分區(qū),防止垃圾數(shù)據(jù)和日志填滿硬盤而導(dǎo)致 D.o.S ***.
root 賬號給予強壯的口令.
安裝完畢立即用 up2date 或 apt 升級系統(tǒng)軟件,有時升級內(nèi)核也是必要的,因為內(nèi)核出現(xiàn)問題同樣會給***者提供機會
Apt 是 Debian GNU Linux 下的一個強大的包管理工具,也可用于其他版本的 Linux.
2. 賬號
如果系統(tǒng)中的用戶比較多,可以編輯 /etc/login.defs,更改密碼策略
刪除系統(tǒng)中不必要帳戶和組,
[root@ayazero /]# userdel -r username
如果不開匿名 ftp 則可以把 ftp 賬號也刪了
最安全的方式是本地維護,可惜不太現(xiàn)實,但還是需要限制 root 的遠程訪問,管理員可以用普通賬戶遠程登錄,
然后 su 到 root,我們可以把使用 su 的用戶加到 wheel 組來提高安全性
在 /etc/pam.d/su 文件的頭部加入下面兩行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
然后把可以執(zhí)行 su 的用戶放入 wheel 組
[root@ayazero /]# usermod -G10 admin
編輯 /etc/securetty,注釋掉所有允許 root 遠程登錄的控制臺,然后禁止使用所有的控制臺程序,
[root@ayazero /]# rm -f /etc/security/console.apps/servicename
登錄采用加密的 ssh,如果管理員只從固定的終端登陸,還應(yīng)限制合法 ssh 客戶端的范圍
防止嗅探及中間人***
將命令歷史紀錄歸為零,盡可能的隱藏你做過的事情
[root@ayazero /]# unset HISTFILESIZE
3. 服務(wù)
最少服務(wù)原則,凡是不需要的服務(wù)一律注釋掉
在 /etc/inetd.conf 中不需要的服務(wù)前加 "#",較高版本中已經(jīng)沒有 inetd 而換成了 Xinetd;
取消開機自動運行服務(wù),把 /etc/rc.d/rc3.d 下不需要運行的服務(wù)第一個字母大寫改稱小寫,
或者由 setup 命令啟動的 GUI 界面中的 service 更改
如果你希望簡單一點,可以使用 /etc/host.allow,/etc/host.deny 這兩個文件,
但是本文計劃用 iptables 防火墻,所以不在此詳述.
4. 文件系統(tǒng)權(quán)限
找出系統(tǒng)中所有含 "s" 位的程序,把不必要得 "s" 位去掉,或者把根本不用的直接刪除
[root@ayazero /]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {}
[root@ayazero /]# chmod a-s filename
防止用戶濫用及提升權(quán)限的可能性
把重要文件加上不可改變屬性
[root@ayazero /]# chattr +i /etc/passwd
[root@ayazero /]# chattr +i /etc/shadow
[root@ayazero /]# chattr +i /etc/gshadow
[root@ayazero /]# chattr +i /etc/group
[root@ayazero /]# chattr +i /etc/inetd.conf
[root@ayazero /]# chattr +i /etc/httpd.conf
...............................
具體視需要而定,我懷疑現(xiàn)在的***者都知道這個命令,
有些 exploit 溢出后往 inetd.conf 寫一條語句綁定 shell 在一個端口監(jiān)聽,
此時這條命令就起了作用,淺薄的***者會以為溢出不成功.
找出系統(tǒng)中沒有屬主的文件:
[root@ayazero /]# find / -nouser -o -nogroup
找出任何人都有寫權(quán)限的文件和目錄:
[root@ayazero /]# find / -type f ( -perm -2 -o -perm -20 ) -exec ls -lg {}
[root@ayazero /]# find / -type d ( -perm -2 -o -perm -20 ) -exec ls -ldg {}
防止***者向其中寫入***語句(諸如一個shell的拷貝)或繼承屬主權(quán)限而非法訪問
找出并加固那些歷來被***者利用的文件,比如 .rhosts
編輯 /etc/security/limits.conf,加入或改變?nèi)缦滦?
* hard core 0
* hard rss 5000
* hard nproc 20
5. Banner 偽裝
***者通常通過操作系統(tǒng),服務(wù)及應(yīng)用程序版本來***,
漏洞列表和***程序也是按此來分類,所以我們有必要作點手腳來加大***的難度
更改 /etc/issue,因為 reboot 后重新加載,所以編輯 /ect/rc.d/rc.local
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
把以上行前的 "#" 去掉
Apache 不回顯版本:
apache 的配置文件,找到 ServerTokens 和 ServerSignature 兩個 directive,修改默認屬性:
#ServerTokens Full
ServerTokens Prod <----------
#ServerSignature On
ServerSignature Off <----------
修改 uname
拿出 uname.c 的源碼,找到如下行
print_element (PRINT_SYSNAME, name.sysname);//操作系統(tǒng)名如 linux
print_element (PRINT_NODENAME, name.nodename);//主機名
print_element (PRINT_RELEASE, name.release);//發(fā)行版本,如:2.4.20-18
print_element (PRINT_VERSION, name.version);//
print_element (PRINT_MACHINE, name.machine);//機器類型,如i686
print_element (PRINT_PROCESSOR, processor);//處理器類型
可以修改為
print_element (PRINT_SYSNAME,"HP-UX");
.......
編譯后替換 /bin/uname
其他服務(wù)及程序的修改可以查看其配置文件或者源碼
不要改太多,否則會給系統(tǒng)管理帶來×××煩。
6. Iptales 防火墻規(guī)則
假設(shè)我們的服務(wù)器 server1 運行 apache,sshd (sshd 可以不運行在標準端口,配置文件中能修改)
eth0 網(wǎng)卡接 Internet,eth1 連接 LAN,管理員在家中撥號登陸到 server2 (其私用網(wǎng)絡(luò) IP 為 192.168.0.12),再登陸 server1
[roor@ayazero root]# iptables -A INPUT -i eth1 -s 192.168.0.12 -p tcp --dport 22 -j ACCEPT
為防止 IP spoofing 的可能,還可以綁定 server2 的網(wǎng)卡地址:
sh-2.05b# iptables -A INPUT -i eth1 -s 192.168.0.12 --mac-source 01:68:4B:91:CC:B7 -p tcp --dport 22 -j ACCEPT
不過好像也很少有***者能夠做到這種地步,而且沒什么利用的價值
[root@ayazero root]# iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
[root@ayazero root]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@ayazero root]# iptables -A INPUT -j DROP
對***有所了解的人都知道“端口重定向+反向管道”的美妙結(jié)合來穿越防火墻的例子吧
這種技巧已經(jīng)運用太廣,而危害很大
為了對抗這種難以防御的***,我們必須以犧牲一定的易用性為代價
[root@ayazero root]# iptables -A OUTPUT -o eth0 -p tcp --syn -j DROP
以上規(guī)則將阻止由內(nèi)而外的 TCP 主動連接
另外,用 tftp 或其他客戶端反向攫取文件的***行為也很普遍,
由于 tftp 以及其他一些工具依賴 UDP,所以現(xiàn)在要把它徹底抹煞掉
[root@ayazero root]# iptables -A OUTPUT -o eth0 -p udp -j DROP
PS: 在更新系統(tǒng)和調(diào)試網(wǎng)絡(luò)時需要把這兩條規(guī)則臨時去掉
因為***的本質(zhì)就是通過文本或圖形界面在標準或非標準端口得到目標操作系統(tǒng)的 shell,
所以,這不僅能阻止反向管道本身,還能免疫很多***技巧
不過對一般的系統(tǒng)管理員而言,這太苛刻了!
iptables 的一些***對策
Syn-flood protection:
[root@ayazero foo]# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
Furtive port scanner:
[root@ayazero foo]# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Ping of death:
[root@ayazero foo]# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
此外,iptables 還能配置出讓一些掃描行為比如 nmap 失效的規(guī)則,應(yīng)當注意:
防火墻不是萬能的,當一個***者足夠瘋狂時,不要指望你的防火墻能抵擋得住 DDoS 的洪水。
關(guān)于 iptables 得更多細節(jié),請參閱 Rusty Russell 的 Packet Filtering HOWTO
7. 完整性校驗
tripwire 是一個比較有名的工具,它能幫你判斷出一些重要系統(tǒng)文件是否被修改過
現(xiàn)在的 Linux 發(fā)行版中一般都帶有他的開源版本,在默認的校驗對象配置文件中加入一些敏感文件就可以使用
RPM MD5 校驗
[root@ayazero rpm]# rpm -V
用 "man rpm" 查看命令幫助,"-V" 參數(shù)用于 MD5 校驗,
注意要把 rpm 校驗產(chǎn)生的二進制數(shù)據(jù)文件作一個硬備份,以防止其本身被修改
8. 自行掃描
普通的安全加固基本上是做完了,現(xiàn)在讓我們來對自己做的系統(tǒng)做一個風險評估,
推薦使用 nessus latest version [homepage:http://www.nessus.org]
(既然從頭到尾用的都是開源的東西,這里也繼續(xù)節(jié)約成本,呵呵)
也許你覺得自己的系統(tǒng)沒有問題了,但有時 nessus 還是能報告出一些問題,
比如一個第三方的 webmail 有某些安全缺陷,
如果沒有問題最好,有問題我們再回去修補
9. 高級技巧
以上的措施已經(jīng)足以讓大多數(shù)***者望而卻步,接下來的部分給那些對安全極度敏感的偏執(zhí)狂
緩沖區(qū)溢出對策中有: stackgurad,stackshield,formatguard,heapguard,pointguard 等編譯技術(shù),
但他們需要重新編譯源碼,不僅麻煩而且會使系統(tǒng)性能有所下降.
所以這里打算用防止緩沖區(qū)溢出的內(nèi)核補丁.
比較熟知的是 PaX 內(nèi)核補丁,它主要通過數(shù)據(jù)區(qū) [heap/bss/stack] 不可執(zhí)行代碼來防御直接覆蓋返回地址后跳轉(zhuǎn)到數(shù)據(jù)區(qū)執(zhí)行 shellcode 的一些exploit
現(xiàn)在那些關(guān)于如何繞過補丁的高級 exploit 技巧已經(jīng)很不神秘,但是書寫那樣的***程序通常要滿足一定的條件,
即使那樣的程序被寫出來,函數(shù),文件指針被成功覆蓋,可能在這個系統(tǒng)上還是無法把那“溢出成果”傳遞給***者--仍然沒有辦法得到 shell 或是建立一個連接
lids
Linux 上的***檢測和防護系統(tǒng),內(nèi)核補丁,通過一個比 root 更大的 ring0 權(quán)限來提供增強的訪問控制,
甚至連 root 都不能改變,已有現(xiàn)成資料,不在此討論。
lids 和緩沖區(qū)溢出補丁可能不兼容,歡迎知道真相的朋友告訴我
10. 日志策略
主要就是創(chuàng)建對***相關(guān)的重要日志的硬拷貝,不至于應(yīng)急響應(yīng)的時候連最后的黑匣子都沒有
可以把他們重定向到打印機,管理員郵件,獨立的日志服務(wù)器及其熱備份
11. Snort ***檢測系統(tǒng)
對***響應(yīng)和安全日志要求較高的系統(tǒng)有此必要;
對于一般的系統(tǒng)而言,如果管理員根本不會去看一大堆日志,
那么它白白占用系統(tǒng)資源就如同雞肋一樣
12. 最后的建議
關(guān)心 bugtraq 上的漏洞列表
訂閱廠商的安全公告
勤打補丁
站在***者的角度去思考如何防御
小結(jié)
對***的思考:
假設(shè)有一個技術(shù)高超的***者,擁有自行挖掘系統(tǒng)底層漏洞的能力,
他發(fā)現(xiàn)了 apache 的一個漏洞,并書寫了 remote exploit,
這個漏洞暫時還沒有出現(xiàn)在 bugtraq 上,處于“未知”狀態(tài),
如果***者試圖***我們的系統(tǒng),
他必須能挖掘一個 apache 并且是 root 級的遠程溢出,
<1>在 shellcode 中植入代碼殺死 httpd 進程,并且把 sh 綁定在 80 端口
<2>在 80 端口復(fù)用
<3>讓 shellcode 執(zhí)行 iptables -F OUTPUT/INPUT,前提是他猜到有這么回事
以上均需要溢出后是 root 權(quán)限,并且是能繞過 PaX 的高級 exploit,另外 apach e殺掉后會自動重啟
如果想*** sshd,因為 iptables 將丟棄所有來自外網(wǎng)訪問 sshd 的包,所以即使有遠程溢出 (當然別忘了 PaX),此路不通
其他的方法,如果腳本***可以獲得允許遠程登錄 ssh 用戶的明文口令,或是利用腳本缺陷直接添加系統(tǒng)賬號,
這不僅需要系統(tǒng) root 權(quán)限,而且 /etc/passwd 已經(jīng)被 chattr 過,
滿足以上條件,并且攻破 server2,就有希望得到 shell
但提升權(quán)限的機會不大!普通腳本***在此無效,當然如果該系統(tǒng)并不運行 CGI 的話,此路更是不通
誠然***者很可能在 http 上破壞你的腳本,不過第三方的 web 安全加固暫不在本文討論之列
以上條件對大多數(shù)***者足夠苛刻,可以說幾乎不可能實現(xiàn).
但是我們?yōu)榇艘矤奚瞬簧?#xff0c;并且這些措施依賴一定的環(huán)境而實現(xiàn)
安全性和易用性,需要讀者站在自己的角度尋找他們的平衡點。
轉(zhuǎn)載于:https://blog.51cto.com/misujun/883935
總結(jié)
以上是生活随笔為你收集整理的linux系统加固建议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Modularity QuickStar
- 下一篇: metasploit 中文系统安装失败问