class="22677">
一、
當在一台PC機上安裝了Linux系統,你就擁有了一個強大的、高級的、多任務的網絡操作系統。但時候該系統功能有些過於強大了些。某些發布版本缺省啟動很多服務(如:rlogind, inetd, httpd, innd, fingerd,timed, rhsd,等等)。作為系統管理員需要熟悉了解這些服務。若機器連接了Internet,就更需要關自己系統的安全。
大多數攻擊者並不是一個革新者,他們往往利用最新的公布的系統工具技術等突破一個所周知的或 一個新的剛剛發現的安全漏洞。但作為一個管理者,通過訪問你使用的Linux發布的官方站點如
www.redhat.com、www.calderasystems.com等可以獲知最新的安全漏洞及相應的補丁程序。也可以通過定
期訪問www.securityfocus.com、www.cert.org等安全漏洞通告站點。
控制訪問服務器的最方便的方法是通過一個叫TCP wrapper的程序。在大多數發布版本中該程序往往是缺 省地被安裝。利用TCP wrapper你可以限制訪問前面提到的某些服務。而且TCP wrapper的記錄文件記錄了所 有的企圖訪問你的系統的行為。通過last命令查看該程序的log,管理員可以獲知誰企圖連接你的系統。
在Linux的/etc目錄下,有一個如下所示inetd.conf文件,該文件是TCP wrapper的配置文件,定義了 TCP wrapper可以控制啟動哪些服務。比如要將finger服務去除,就將finger服務的那一行注釋掉(在前面 加上"# "即可);
# inetd。conf This file describes the services that will be available
# through the INETD TCP/IP super server. To re-configure
# the running INETD process, edit this file, then send the
# INETD process a SIGHUP signal。
#
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
# Finger, systat and netstat give out user information which may be
...............
但是對於諸如sendmail,named等服務,由於它們不象finger,telnet等服務,在請求到來時由inet守護 進程啟動相應的進程提供服務,而是在系統啟動時,單獨作為守護進程運行的。在slackware版本的Linux,可 以通過修改/etc/rc.d目錄下的啟動配置文件rc.M文件,將啟動sendmail的命令行注釋掉:
#!/bin/sh
# rc。M This file is executed by init(8) when the system is being
# initialized for one of the "multi user" run levels (i.E.
# levels 1 through 6). It usually does mounting of file
# systems et al.
# Start the sendmail daemon:
# if [ -x /usr/sbin/sendmail ]; then
# echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q 15m)… "
# /usr/sbin/sendmail -bd -q 15m
# fi
............
(注:對於redhat發布,可以鞏固運行chkconfig命令或linuxconfig命令來管理是否啟動某項服務,如: chkconfig --level 345 sendmail on 來實現系統在345運行級別下自動啟動sendmail) 對於諸如named等其他服務,也是通過將同一個目錄下相應啟動配置文件中相應的啟動命令注釋掉,從而當 你重新啟動機器時,相應的服務將不會啟動。而對於高版本的redhat linux,提供了一個linuxconfig命令, 可以通過它在圖形界面下交互式地設置是否在啟動時,運行相關服務。 但是對於telnet、ftp等服務,如果將其一同關閉,那麼對於管理員需要遠程管理時,將非常不方便。
Linux提供另外一種更為靈活有效的方法來實現對服務請求用戶的限制,從而可以在保證安全性的基礎上, 使可信任用戶使用各種服務。
在/etc目錄下,有兩個文件:hosts.deny hosts.allow 通過配置這兩個文件,你可以指定哪些機器可 以使用這些服務,哪些不可以使用這些服務。配置這兩個文件是通過一種簡單的訪問控制語言來實現的,訪 問控制語句的基本格式為: 程序名列表,主機名/IP地址列表。
程序名列表指定一個或者多個提供相應服務的程序的名字,名字之間用逗號或者空格分隔,可以在 inetd.conf文件裡查看提供相應服務的程序名:如上面的文件示例中,telent所在行的最後一項就是所 需的程序名:in.telnetd 主機名/IP地址列表指定允許或者禁止使用該服務的一個或者多個主機的標識,主機名之間用逗號或空格 分隔。程序名和主機地址都可以使用通配符,實現方便的指定多項服務和多個主機。 當服務請求到達服務器時,訪問控制軟件就按照下列順序查詢這兩個文件,直到遇到一個匹配為止:
1. 當在/etc/hosts.allow裡面有一項與請求服務的主機地址項匹配,那麼就允許該主機獲取該服務
2. 否則,如果在/etc/hosts.deny裡面有一項與請求服務的主機地址項匹配,就禁止該主機使用該項服務
3. 否則允許使用該服務 如果相應的配置文件不存在,訪問控制軟件就認為是一個空文件,所以可以通過刪除或者移走配置文 件實現對所有主機關閉所有服務。
在文件中,空白行或者以#開頭的行被忽略,你可以通過在行前加 # 實 現注釋功能。Linux提供了下面靈活的方式指定進程或者主機列表:
1. 一個以"."起始的域名串,如 .amms.ac.cn 那麼www.amms.ac.cn就和這一項匹配成功
2. 以'.'結尾的IP串如 202.37.152. 那麼IP地址包括202.37.152. 的主機都與這一項匹配
3. 格式為n.n.n.n/m.m.m.m表示網絡/掩碼,如果請求服務的主機的IP地址與掩碼的位與的結果等於n.n.n.n 那麼該主機與該項匹配。
4. ALL表示匹配所有可能性
5. EXPECT表示除去後面所定義的主機。如:list_1 EXCEPT list_2 表示list_1主機列表中除去List_2所列 出的主機
6. LOCAL表示匹配所有主機名中不包含'.'的主機 上面的幾種方式只是Linux提供的方式中的幾種,但是對於我們的一般應用來說是足夠了。
我們通過舉幾 個例子來說明這個問題:
例一:我們只希望允許同一個局域網的機器使用服務器的ftp功能,而禁止副廣域網上面的ftp服務請求, 本地局域網由 202.39.154. 、202.39.153. 和202.39.152. 三個網段組成。在hosts.deny文件中, 我們定義禁止所有機器請求所有服務: ALL:ALL 在hosts.allow文件中,我們定義只允許局域網訪問ftp功能: in.ftpd -l -a: 202.39.154 202.39.153. 202.39.152. 這樣,當非局域網的機器請求ftp服務時,就會被拒絕。而局域網的機器可以使用ftp服務。 ALL:ALL 然後重新啟動你的 inetd進程: /etc/rc.d/init.d/inet restart 但是hosts.deny文件只能控制/etc/inetd.conf文件中包含的服務的訪問這些服務有/usr/bin/tcpd管 理。TCP wrapper監聽接入的網絡請求,然後與在hosts.allow和hosts.deny的中的服務比較,然後做出允 許或拒絕的決定。 但是對於wrapper沒有包含的服務你就需要采用其他方法了
二、
保護你的系統最簡單有效的的方法是TCP wrapper.Linux系統在跟蹤對你的機器的訪問記錄方面作了大量的
工作。wrapper拒絕對你的系統的某些訪問的同時,系統在一些LOG文件中增加了一些信息內容。在/var/log
目錄下,一般可以看到如下文件:
boot.log cron cron.1 cron.2 dmesg httpd
lastlog lastlog.1 maillog maillog.1
maillog.2
messages messages.1 netconf.log
netconf.log.1
netconf.log.2 secure secure.1 secure.2
secure.3 secure.4 spooler spooler.1 spooler.2
uucp wtmp wtmp.1 xferlog xferlog.1
xferlog.2
可以看到某些LOG文件有1,2等擴展名。這是由於系統運行cron.daily引起的。實際上,cron.daily是
在/etc下面的子目錄,包含了很多系統自動運行的管理script文件。不需要你參與,這些script實現一些
任務的自動化:如輪轉log文件使其不會變的過分大。作為管理員你應該熟悉如何通過修改這些script來定
時運行程序。當然 ,現在有很多功能完善的文本模式或圖形模式的log文件分析器,自動發現危險的攻擊
跡象,然後象管理者發送信件。在http://www.freshmeat.net/ tucows等可以找到很多這樣的工具。
從攻擊者的觀點而言,他們對你的你服務器上的安全文件最感興趣。若你關閉外部網絡對你的服務器
的訪問。你可能會遇到這樣的情況:
[root@linux /]#grep refused /var/log/secure*
Sep 12 07:52:42 netgate in.rlogind[7138]: refused
connect from 2??.?.5?.?42
Sep 12 07:52:52 netgate in.rshd[7139]: refused
connect from 2??.?.5?.?42
Sep 12 07:52:55 netgate in.rexecd[7144]: refused
connect from 2??.?.5?.?42
Sep 12 07:52:59 netgate imapd[7146]: refused connect
from 2??.?.5?.42
Sep 12 07:52:59 netgate in.fingerd[7142]: refused
connect from 2??.?.5?.?42
Sep 12 07:53:00 netgate ipop3d[7143]: refused
connect from 2??.?.5?.?42
Sep 12 07:53:07 netgate in.ftpd[7147]: refused
connect from 2??.?.5?.?42
Sep 12 07:53:10 netgate gn[7145]: refused connect
from 2??.?.5?.?42
Sep 12 07:53:22 netgate in.telnetd[7149]: refused
connect from 2??.?.5?.?42
Sep 12 07:56:34 netgate imapd[7150]: refused connect
from 2??.?.5?.?42
正如你看到的那樣,攻擊者已經試圖連接服務器上的若干個端口。但是由於服務器關閉了inetd啟動的
所有服務,所以LOG系統記錄下了這些訪問拒絕。若在你的機器中沒有發現這樣的服務拒絕並不能說明你的機
器沒有被攻擊。maillog文件將保存那些通過服務器被轉發的email信息。xferlog保存ftp的log信息等等。
若你希望查看wtmp,你可以使用last命令
# last | more fishduck ttyp6 nexus Tue Sep 28 16:03 still logged in birdrat ttyp5 spee