試驗5
HTTP服務
估計時間: 1個小時
目標: 建立基本的擁有CGI的具有虛擬主機的Web服務器
試驗的起點: 標準的Red Hat Linux安裝
在整個試驗中,主機和域名取決于您的機器的IP地址。如果下面的試驗出現了X字樣的名稱,您應該把X字樣的名稱替換成您的工作站的號碼(您的IP地址的最后一個部分)。例如,如果您的工作站的IP的地址是192.168.0.3,您應該將stationX.domainX.example.com轉換成station3.domain3.example.com。
將數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉。缺省的安裝將會有一個文件叫做“/etc/sysconfig/iptables”,該文件配置了iptable的功能。運行“chkconfig iptables off”。為了去除空間中所有的規則,運行“service iptables stop”
步驟1:服務的安裝和基本的配置
場景/故事
您的組織需在一個小時內要一個Web服務器,擁有充足的CGI的能力比國內且具有為不同的虛擬主機提供不同的內容服務。
任務:
1. 需要如下的軟件包:httpd和httpd-manual。如果需要的話,從CD或者ftp://server1/pub/RedHat/RPMS安裝并...。使用chkconfig 來啟動服務。
2. 啟動httpd服務使用缺省的配置:service httpd restart
3. 檢查在文件/etc/httpd/conf/httpd.conf中的DocumentRoot項目和下面的一樣
DocumentRoot /var/www/html
4. 開啟一個Web瀏覽器并且設定URL到:
http://stationX.example.com
如果您的瀏覽器在工作,您將看到缺省的服務器的索引頁面。注意該文件并不是所存儲的HTML文件,而是服務器在這些目錄中沒有缺省的index.html文件的時候自動生成的。
5.建立一個新的目錄層次和一些新的內容
mkdir –p /var/www/virtual/wwwX.example.com/html
cd /var/www/virtual/wwwX.example.com/html
cat > index.html <
wwwX.example.com
EOF
(這建立一個只有一行的HTML文件)
6.在/etc/httpd/conf/httpd.conf尾部加入以下幾行:
NameVirtualHost 192.168.0.X
7.確保您的DNS系統哦功能能夠解析您的虛擬主機的名稱。
dig wwwX.example.com
8. 重新啟動httpd: service httpd reload
9.在您的Web瀏覽器并且設定URL到新的虛擬主機:
http://wwwX.example.com
您看到您自己定義的頁面了么?
步驟2:使用CGI
任務
1. 在步驟1設定的 塊中增加一行:
ScriptAlias /cgi-bin/
/var/www/virtual/wwwX.example.com/cgi-bin/
以上僅為一行并且在httpd.conf中不換行,注意給上面的兩個元素之間留出空格。
2. 建立目錄,然后在里面建立文件叫做test.sh 包含以下內容:
/var/www/virtual/wwwX.example.com/cgi-bin/test.sh
#!/bin/bashechoContent-Type: text/html;echo My username is:whoamiechoecho My idis:idechoecho My shell setting are:setechoecho My environment variableare:envechoecho Here is /etc/passwdcat /etc/passwdecho
3.通過把您的瀏覽器指向下面的地址嘗試執行該CGI腳本
http://wwwX.example.com/cgi-bin/test.sh
為什么這個腳本不執行?檢查日志文件/avr/log/httpd/獲得信息來幫助你找到答案。(您是否計的重新啟動或者重新載入服務器?)
4. 使得該腳本對于用戶,組和其他可讀并且可執行:
chmod 555 test.sh
現在腳本能夠執行麼?
挑戰1:為您的Web站點的文檔提供安全訪問
任務:
在wwwX.example.com的文檔的根目錄建立一個文件叫做.htaccess,并采用以下內容:
/var/www/virtual/wwwX.example.com/html/.htaccess
Authname “restricted stuff”AuthType BasicAuthUserFile /etc/httpd/conf/wwwXX.htpasswdrequire valid-user
2.建立您的域的密碼文件。該文件必須被apache組可讀。
htpasswd –mc /etc/httpd/conf/wwwX.htpasswd user_name
chgrp apache /etc/httpd/conf/wwwX.htpasswd
chmod g+r /etc/httpd/conf/wwwX.htpasswd
3.訪問http://wwwX.example.com頁面,您是否...httpd獲得線索。
4.添加下列行到服務器的配置文件httpd.conf,在wwwX.example.com虛擬主機的 塊中增加一行:
AllowOverride AuthConfig
5.再次嘗試訪問http://wwwX.example.com頁面,您是否...室趁嫻娜ㄏ廾矗?/a>
步驟3:Squid的基本配置
1. 在您的系統上安裝squid
rpm –Uvh ftp://server1.example.com/pub/RedHat/RPMS/squid*
2.開始服務(service squid start),然后配置您的瀏覽器使用您的localhost作為您的Proxy并且把端口設定為3128。
3.嘗試訪問一些主頁。如果教師里面沒有Internet可以訪問,那么試圖訪問http://server1.example.com,將會返回服務器的測試頁面。
4. 現在使用您的鄰居來吧您的主機當作Proxy。這樣子應該不能工作。
squid返回的頁面在/var/log/squid/access.log文件的底部有所解釋。
5.使用您喜歡的文本編輯器打開/etc/squid/squid.conf文件。正如您所看到的,大部分是文檔和注釋。您也該注意到squid是非常易于調校的。對于本實驗,我們僅作簡單的配置,熟悉了以后您將會適應更加復雜的配置。
6.在文件中查找第二次出現Recommend minimum configuration的地方。您將會會看到缺省的存取控制列表(acl)。在CONNECT method CONNECT 行的下面添加一個對于本地網絡的存取訪問列表項目:
acl example src 192.168.0.0/24
對于這個配置您可以把它作為參考以應用到其他的任何地方。src是該acl的源IP地址。
7.在文件中查找INSERT YOUR RULE(S) HERE,在localhost acl的上面增加如下的內容:
http_access allow example
重新啟動squid。 您的鄰居將能夠訪問您的Web緩存了。
8.一些URL最好能夠避免。返回到acl的部分,在您新添加行的下面(使用example.com如果您在教師里面沒有Internet訪問權限的話)
acl otherguys dstdomain .yahoo.com
acl otherguys dstdomain .hotmail.com
這里有一些要提及的東西。首先,注意到acl的附加屬性。第二注意到dstdomain的acl類型,指明了關心的目的域。第三、注意到在域名前的點表示符號,確保加上點。
9.增加一條拒絕訪問規則應用到這些存在問題的域。返回到您剛在添加allow的地方,在其下面增加如下行:
http_access deny otherguys
再次重新啟動squid,再次檢查這些相關的域,非常不幸,訪問沒有被拒絕。
10.再次打開配置文件,將您添加的拒絕規則放在example的允許規則之前。也就是說,在otherguys拒絕規則之前的example允許規則使得訪問被允許,但是拒絕沒有被生效。在移動規則以后,重新啟動squid。這回它將禁止訪問在任何上面禁止訪問的域內的站點了。
復習的問題
1.根據/var/www/manual提及的服務器的手冊。ServerAlias是起到什么作用?
2.根據/var/www/manual/suexec.html, suEXE對于CGI進程擁有什么特性?
3.下列命令起什么作用,何時使用它?
httpd –t
4. 您是否對您的用戶能夠通過CGI腳本看到您的/etc/passwd而感到不安?是否有方法阻止顯示系統的密碼文件?
試驗6
NFS 和 FTP
估計時間: 1個小時
目標: 管理和配置vsftpd和NFS
試驗的起點: 標準的Red Hat Linux安裝
關掉包過濾:在著手試驗之前需要確認包過濾沒有被激活,默認情況下iptables會調用/etc/sysconfig/iptables這個配置文件,刪除或重命名這個文件,iptables就會在下次啟動時失效?;蛘呤褂妹頲hkconfig iptables off也行。如果想讓iptables立刻失效可以用命令 service iptables stop.
步驟1:使用vsftpd允許匿名用戶上傳
1. 需要以下包:vsftpd 。如果沒有安裝,從CD或者ftp://server1/pub/RedHat/RPMS安裝。激活vsftpd服務
2. Vsftpd包提供了/var/ftp作為匿名ftp用戶的下載文件的目錄。但是默認沒有匿名上傳的文件夾。要配置vsftpd來允許匿名上傳,首先要準備一個上傳目錄:
cd /var/ftp
mkdir incoming
chown root.ftp incoming
chmod 730 incoming
現在檢驗一下新目錄的權限:
ls –ld /var/ftp/incoming
3. 配置/etc/vsftpd/vsftpd.conf文件中如下各行:
anon_upload_enable = YES
chown_uploads = YES
chown_username = daemon
anon_umask = 077
另外, 默認情況下anonymous_enable = YES(允許匿名訪問)已經被配置了
重啟vsftpd服務
4.剛才配置的結果是使匿名用戶可以上傳文件到/var/ftp/incoming中,但是不能從這個文件夾中下載文件或者列出文件(使用ls命令),這樣可以防止“warez”之類的組織用我們的上傳目錄作為“drop box”來放盜版軟件或數據。如果希望匿名用戶上傳文件,應該讓 /var/ftp/incoming 文件夾的所有者為daemon 所有組為 ftp,并且權限為600(只允許deamon用戶讀寫)。
步驟2:NFS
任務:
5. 需要如下的軟件包:nfs-utils。如果需要安裝的話,請從CD或者ftp://server1/pub/RedHat/RPMS安裝并...及nfslock服務。
6. 創建一個用戶并且配置NFS共享他的主目錄,共享給example.com讀寫權限。
a) 在配置NFS服務器之前,查看一下RPC服務是否在運行
rpcinfo –p
showmount –e localhost
b) 創建一個測試用戶
useradd nfstest
c) 編輯 /etc/exports 來共享 /home/nfstest給example.com。如果你不知道這個文件的格式,請查看exports的man page。
d) 安裝NFS的軟件包,配置init運行級別3到5啟用NFS服務,但是因為啟動時如果/etc/exports 文件丟失或者它的大小為零, NFS服務不會啟動。所以,你現在要來手動啟動它,下一次啟動時NFS就會自動啟動了。
e) 觀察RPC服務是否啟動,看一看是否將/home/nfstest用nfs共享出來了:
rpcinfo –p
showmount –e localhost
f) 與一個或兩個搭檔相互mount對方的共享,然后再讀取里面的內容,嘗試用root和nfstest向其中寫文件(如果你機器上的nfstest用戶的UID和GID與搭檔機器上該用戶的不同,則把它們改成一樣的)??匆幌聲鯓??為什么會這樣?
試驗8
身份驗證服務
估計時間: 45分鐘
目標: 培養有關身份驗證的技巧
試驗的起點: 標準的Red Hat Linux安裝
關掉包過濾:在著手試驗之前需要確認包過濾沒有被激活,默認情況下iptables會調用/etc/sysconfig/iptables這個配置文件,刪除或重命名這個文件,iptables就會在下次啟動時失效?;蛘呤褂妹頲hkconfig iptables off也行。如果想讓iptables立刻失效可以用命令 service iptables stop.
步驟1:使用PAM限制登陸的位置
場景/故事
您的系統中有高安全的內容。為了保證數據不被泄漏,你需要限制用戶的訪問,除了本地控制臺,禁止任何其他方式訪問系統。
任務:
1. 創建用戶bill,他是user組的成員,再創建一個用戶biff,他是finance組的成員
2. 編輯 /etc/security/access.conf 限定finance組的用戶只能在第二個虛擬控制臺登陸。為了達到這個目的,在這個文件的最后一行添加:
- : finance : ALL EXCEPT tty2
3. 通過編輯 /etc/pam.d/system-auth來限制所有服務,把以下這行添加到以auth開頭的所有行后:
account required /lib/security/$ISA/pam_access.so
4. 如果你的限定起了作用,bill和root可以登陸到任何控制臺,而biff只能在第二個虛擬控制臺登陸
5. 清理:你如果運行authconfig工具,以上的操作將會被刪除,你怎樣確認你的設置有沒有變化呢?
步驟2:使用NIS做身份驗證
任務:
你應該與你旁邊的人合作,然后決定誰做NIS的服務器端,誰做NIS的客戶端,通過這個實驗,你和你的同伴一起配置NIS的服務器端和客戶端。你們要確定NIS的域名,還要注意每一個工作站的名字和IP地址,在開始以下的步驟之前,請確認以上內容。
1. 配置NIS服務器
a) 從ftp://server1/pub/RedHat/RPMS、光盤...搶鋨滄耙部梢浴?/a>
b) 編輯 /etc/sysconfig/network ,添加這樣一行:
NISDOMAIN = <你們的NIS域名>
下次啟動時才會起作用,設置了NIS域名之后不要重新啟動,運行命令:
domainname <你們的NIS域名>
c) 先將 /var/yp/Makefile 文件copy一份作為備份,編輯all部分只包含passwd和group:
all: passwd group
d) 打開portmap服務和ypserv服務
service portmap start
service ypserv start
e) 確保make包在你的系統中安裝,(以下的命令是在 server1:/var/ftp/pub 已經被mount到/mnt/server1后才能使用)
rpm –Uvh /mnt/server1/RedHat/RPMS/make*
f) 使用ypinit產生NIS數據庫(maps),注意可能出現的錯誤信息
/usr/lib/yp/ypinit -m
(注意:你不用在列表中添加任何主機,只要按 < CTRL - D > )
g) 啟動NIS password升級進程
service yppasswdd start
h) 如果ypinit在第六步時沒有錯誤,重新啟動ypserv服務:
service ypserv restart
i) 使用ps auxf | grep yp確定ypserv服務運行,如果有錯誤的話查看日志 /var/log/messages
完成:正在正常工作的NIS服務器
2. 配置NIS客戶端
到現在,任務只完成一半,你和你的同伴需要再配置這個NIS服務器的客戶端。
a) 在客戶端,確認已經安裝以下幾個包:portmap,ypbind,yp-tools和authconfig
b) 確認客戶端可以看到服務器上的portmap服務
rpcinfo –p 你們的NIS服務器
c) 使用authconfig工具配置你的客戶端使用NIS進行身份驗證,選定“Use NIS”,在“Domain:”后指定你的NIS域,在“Server:”后指定你的NIS服務器。
d) 確認authconfig正確工作,當authconfig完成后,它會自動開啟ypbind服務,是否有出錯信息出現在控制臺上或者 /var/log/messages中?
e) 測試你的NIS客戶端,使用root用戶登陸你的客戶端,root用戶是客戶端上的root還是NIS服務器上的?測試 客戶端----服務器的連接,使用:
ypcat passwd
這樣會顯示出NIS服務器上的password數據,(請記住,只有在服務器上/etc/passwd文件中UID大于等于500的用戶才會被放進數據庫中)
f) 使用useradd在客戶端創建一個新的用戶,然后在服務器端創建一個不同的用戶,然后使用passwd設置他們的密碼。
(在客戶端): useradd -u 1024 localguy
passwd localguy
(在服務器): useradd -u 1025 nisuser
passwd nisuser
g) 確認使用localguy能在本地登陸,nisuser能在服務器上登陸。然后使用nisuser帳號在客戶端上登陸,應該是不可以的。
h) 在服務器上的 /var/yp 目錄,執行make命令,當命令完成,再使用nisuser從客戶端上登陸,這回應該成功了,為什么?
i) 使用passwd改變nisuser的密碼,是否改變了服務器上的 /etc/passwd 和 /etc/shadow 文件?NIS服務器中的文件是否改變了呢?你可以使用如下命令測試:
ypcat passwd | grep nisuser
j) 使用localguy登陸到客戶端,是不是即時ypbind在運行仍然可以登陸?
k) 當你使用nisuser登陸到客戶端時,你的主目錄是什么?NIS僅僅提供驗證信息,不提供客戶端和服務器端的文件共享機制
完成:一個從NIS服務器上獲得得驗證信息的客戶機
步驟3:限制NIS用戶
任務:
我們的客戶端現在是公司NIS體系的一部分,因為他儲存了秘密數據,不是所有的用戶都可以訪問這臺機器,只有特定的遠程用戶才能訪問。
1. 這個測試需要添加一個NIS用戶,使用useradd命令添加一個名叫baduser的用戶。
useradd –u 1026 baduser
passwd baduser
2. 一個解決方案是使用pam_listfile,只允許nisuser訪問我們的系統。打開 /etc/pam.d/system-auth ,緊接著auth開頭的之后添加以下一行:
account required /lib/security/pam_listfile.so item=user sense=allow
file=/etc/nisusers onerr=fail
3. 假如測試目前的設置,你將會發現連root也不能登陸,所以千萬不要關掉root的shell!你要創建 /etc/nisusers 然后把所有允許訪問的用戶添加到文件中,一行一個用戶名,我們只想允許nisuser用戶,所以我們的文件會非常短。
4. 現在綣?閬氳鍬嫉轎謀究刂鋪ǎ?揮衝isuser可以進入,因為其他人不在文件中,把root添加到 /etc/nisusers 中。
5. 我們的任務還是允許所有本地用戶登陸的,我們可以把 passwd文件中的用戶都添加到我們的列表中,但這不是最好的方法,我們可以使用PAM庫中的pam_localuser來達到目的。添加以下這行到pam_localuser.so之后。
account required /lib/security/pam_localuser.so
6. 測試這樣的配置,你會發現仍然只有root可以登陸,為什么呢?
7. 是因為required字段的關系,把上面添加的兩行的required都改成sufficient,現在好了吧?如果改成requisite會怎么樣?
8. 清理:再次運行authconfig工具,刪除所有設置,并且禁用NIS。
試驗9
系統監視
估計時間: 1小時15分鐘
目標: 使用查找文件的方法來保護系統
試驗的起點: 標準的Red Hat Linux安裝
步驟1:定位易被攻擊的文件或目錄
場景/故事
查找文件系統中易被攻擊的文件或目錄
任務:
6. 查找有SUID和SGID的文件,并且把他們的名字存在 /root/stickyfiles中:
find / -type f -perm +6000 2> /dev/null > /root/stickyfiles
7. 查找任何人都可以寫入的文件,把它們的名字儲存在 /root/worls.writalbe.files:
find / -type f -perm -2 > /root/world.writalbe.files
8. 看一下 /root/stickyfiles 和 /root/world.writable.files 有哪些文件
步驟2:使用tripwire監視文件系統的完整性
場景/故事
你決定使用tripwire來確認數據的完整性
任務:
9. 使用root登陸并且安裝tripwire 的RPM包(運行下面的這個命令之前需要把server1上的共享mount到 /mnt/server1目錄上):
rpm –Uvh /mnt/server1/RedHat/RPMS/tripwire*
10. 看一下tripwire包中提供哪些文件和文檔:
rpm –ql tripwire
11.編輯 /etc/tripwire/twpol.txt 來定義你的主機策略文件。默認的策略文件是基于Red Hatlinux的everything安裝,這樣它就會試圖監視你沒有安裝的文件。結果是會產生一些出錯消息,這些消息可以忽略。最好的方法是刪除所有你沒有安裝的文件。
你應該定義自己的策略,仔細看一下策略文件,刪除其中你機器上沒有的文件。即使是只刪除一兩個你沒有的文件就要花很長時間?,F在來添加目前沒有被監視的文件,添加 /etc/samba 目錄到“Critical Configuration”部分。
12. 現在你定義完了你的策略,運行 /etc/tripwire/twinstall.sh ,這個腳本將建立加密的策略、配置和密鑰文件。你需要輸入一些密碼,一旦這些步驟完成,在 /etc/tripwire中就會有一些新的文件產生。
13. 現在來用 tripwire –init 命令來初始化tripwire的數據庫
tripwire會報告很多警告,這是因為它找不到在策略文件中包含的文件,你可以忽略它們。
14. 我們來測試tripwire,需要按照以下步驟完成
a) mv /sbin/ifconfig /sbin/ifconfig.bak
b) tripwire --check
15. 使用twprint生成一份報告,命令是這樣的:
twprint -m r --twrfile \
/var/lib/tripwire/report/somehost.somedomain-200009-12134.twr
是否tripwire偵測到文件變化了?tripwire 會正確偵測到 /sbin/ifconfig丟失了。
把ifconfig還原回去,再次運行tripwire –check,這回還能偵測到改變嗎?
mv /sbin/ifconfig.bak /sbin/ifconfig
tripwire –check
即使你把ifconfig還原了,但是修改的時間已經變化了,所以tripwire將會報告錯誤,升級tripwire的數據庫
tripwire --update --twrfile \
/var/lib/tripwire/report/your_lastest_report_file
這將會啟動默認的編輯器,這樣你可以同意目前的變化。完成后退出編輯器,tripwire會升級你的數據庫。
16.你可能會注意到top程序沒有被監視,這個文件經常被“root kits”所替換調,所以它應該被tripwire監視,編輯/etc/tripwire/twpol.txt,在“System Administration Programs”項中添加/usr/bin/top 這項規則。
/user/bin/top -> $(SEC_CRIT);
升級你的策略:
Tripwire --update-policy /etc/tripwire/twpol.txt
完成:
數據完整性的工具應該每天根據數據庫來運行。
步驟3:使用tmpwatch來清理臨時文件目錄
場景/故事
你需要確定或者確定并刪除已經有一定時間沒有人訪問的文件。
任務:
1. 運行tmpwatch的test選項,這樣可以看一下哪些文件7天沒有人訪問了:
tmpwatch –v –test 168 /tmp
步驟4:文件的訪問控制
場景/故事
你想創建一些用戶可以使用的文件,然而你想控制用戶對這些文件的訪問類型。
任務:
1. 創建一個名為supervisor的用戶
2. 在supervisor的主目錄下創建兩個文件:
touch /home/supervisor/
3. 防止payroll文件被刪除
chattr +i /home/supervisor/payroll
4. 只允許數據附加在old.employees文件上
chattr +a /home/supervisor/old.employees
5. 確認文件的屬性被更改:
lsattr /home/supervisor/*
6. 試著刪除payroll文件:
rm /home/supervisor/payroll
你收到什么錯誤的信息?
7. 試著編輯old.employees文件,在保存文件時有沒有錯誤消息?為什么會/不會這樣?出錯的消息是什么意思?輸入以下命令:
echo “foobar” >> /home/supervisor/old.employees
為什么這個命令可以工作?
完成:
1. 不能被刪除的payroll文件
2. /home/supervisor/old.employee文件只能把數據添加到其中,不能刪除任何文件中的內容。
步驟5:將日志集中寫入一個專門的日志主機中
場景/故事
你的老板認為將所有日志寫到一個專用的日志主機中是個非常好的主意
任務:
與你的旁邊的人一起做實驗
1. 首先配置syslogd可以接收遠程的消息,編輯 /etc/sysconfig/syslog :
SYSLOGD_OPTIONS=”-r –m 0”
2. 重啟syslogd:
service syslog restart
現在你的主機可以接收其他機器的消息了
3. 配置syslogd發消息給別的機器,在/etc/syslog.conf添加下面這行:
user.* @stationX
在這里stationX是旁邊的機器
4. 重啟syslogd:
service syslog restart
現在你的機器就會把用戶運行的程序發給旁邊的機器了
5. 使用logger創建一個syslog的消息
logger –i –t yourname ”this is a test”
這則消息是否顯示在你旁邊機器的 /var/log/messages中了呢?
問題:
為什么這個消息會顯示在 /var/log/messages?
你怎么避免這種情況?
試驗10
使網絡安全
估計時間: 1小時
目標: 學習使用iptables構建一個防火墻
試驗的起點: 標準的Red Hat Linux安裝,kernel要支持防火墻,iptables
要安裝
步驟1:創建一個簡單的防火墻
場景/故事
你要建立一個防火墻保護你的主機不受可疑主機192.168.0.254的騷擾,可疑的主機不只這一個,你還要創建一個規則防止你的一個鄰近的主機使用ping-flooding(洪水ping)攻擊你的計算機。
任務:
9. 刪除所有已經存在的用戶定義的chains,重置所有chains上的默認規則,刷新所有規則:
iptables –F; iptables –X
for chain in INPUT FORWARD OUTPUT; do
iptables –p $chain ACCEPT
done
或者
service iptables stop
10. 阻止所有從鄰近的主機(192.168.0.Y)的進來的連接:
iptables –A INPUT –s 192.168.0.Y –m state --state NEW –j DROP
這樣還是允許你打開到他們系統的連接,但不是所有的
11. 限制從你的鄰居(192.168.0.X)進來的ICMP echo request(回應請求)包
iptables -A INPUT -s 192.168.0.X -p icmp --icmp-type echo-request \
-m limit --limit 6/minute --limit-burst 2 -j ACCEPT
iptables -A INPUT -s 192.168.0.X -p icmp --icmp-type echo-request \
-j DROP
12. 顯示你的防火墻策略
iptables -nl
13. 測試你的防火墻配置
a) 你的鄰居(192.168.0.Y)能連接到你的系統嗎?你能ping通他嗎?
b) 確認你的鄰居(192.168.0.X)使用的不是你在上面第2步時設置的地址。
c) 你的鄰居(192.168.0.X)能ping通你的系統嗎?你能ping通他嗎?
14. 保存你的防火墻設置:
iptables-save > /etc/sysconfig/iptables
或者
service iptables save
15. 配置你的系統重啟后仍保留新的防火墻規則:
chkconfig --level 2345 iptables on
現在確認一下
chkconfig --list iptables
16. 重新啟動確認你的策略仍在。
完成:
1. 你可以主動連接你的鄰居(192.168.0.Y)
2. 所有的主機都可以主動連接你,除了你的鄰居(192.168.0.Y)
3. 你的另一個鄰居(192.168.0.X)不能用ping-flood攻擊你的系統。
清理:
當你確信成功完成了實驗,讓你剛才創建的策略實效:
service iptables stop
chkconfig iptables off
試驗11
使服務安全
估計時間: 1小時
目標: 使用tcp_wrappers和xinetd限制用戶對系統的訪問
試驗的起點: 標準的Red Hat Linux安裝
步驟1:限制特定主機對服務的訪問
場景/故事
某些特定主機和特定網段比較危險,為了保護你的主機,你決定阻止它們訪問你的一些敏感的服務
任務:
把你的主機配置成以下的描述的樣子(你需要跟其他兩個人合作,讓他們來測試),注意:如果沒有安裝telnet-server和openssh-server,要把它們的rpm包裝上。
17. ssh可以被本地子網訪問,但是不能讓其他網段的用戶訪問。
18. telnet可以被你的三個鄰居訪問,但是不允許其他人來訪問。
19. 任何服務都不接受從cracker.org來訪問(你能找出特定的IP地址范圍嗎?)
你可以找出不同的解決方案,下一頁是其中一種解決方法。
一種解決方法:
假定你使用旁邊的三臺計算機stationX.example.com、stationY.example.com、stationZ.example.com來測試你的配置。
1. 安裝telnet-server:
rpm –Uvh /mnt/server1/RedHat/RPMS/telnet-server*
chkconfig telnet on
安裝openssh-server:
rpm –Uvh /mnt/server1/RedHat/RPMS/openssh-server*
chkconfig sshd --add
2. /etc/hosts.deny
sshd :ALL EXCEPT 192.168.0.
3. /etc/xinetd.d/telnet:
only_from = 192.168.0.X 192.168.0.Y 192.168.0.Z
4. /etc/xinetd.conf
no_access = 192.168.1.0/24
如果想偵測出cracker.org的IP地址,你可以使用host命令:
host –l cracker.org server1.example.com
以上的命令查詢名稱服務器server1.example.com中的cracker.org區域信息,從返回的IP來看所有的記錄都是192.168.1.0這個子網的。呵呵世界上的事情不可能如此簡單,通常名稱服務器(DNS服務器)只允許它的從服務器進行區域傳遞,而不會允許其他計算機這樣的。所以為了保護你的安全,想知道整個區域的信息非常不容易實現。
步驟2
場景/故事
你已經通過配置/etc/hosts.deny限制FTP和telnet訪問,現在要審核你正在運行的服務了,你需要一個搭檔掃描你主機的端口。
如果你在一個可以連通到Internet的教室中,不要用nmap掃描外面的example.com域或192.168.0/24之外其他的網段,謝謝您的配合!
任務:
1. 找一臺別人的主機用以下命令進行端口掃描:
nmap –sSUR –P0 –vO &> scan_of_stationX.txt
2. 在你的主機上使用root帳戶登陸,運行以下命令查看你的哪些進程正在監聽著哪些端口:
netstat –tulpe
主機上列出的端口與用nmap掃描的端口是否一致?如果你使用GNOME桌面環境,幾個GNOME的連接端口可能會打開,退出X-window,進入運行級別3,netstat會報告相同的端口嗎?
3. 現在使用chkconfig來驗證你的系統,輸入:
chkconfig --list |grep on
你的還配置了其他你不太了解的服務了嗎,使用chkconfig和ntsysv命令來關閉你不用的服務,之后從新啟動,重復第二步以上的步驟,netstat還會報告你關掉的服務的端口嗎?
完成:系統審核顯示只有需要的服務被運行。
試驗12
數據安全
估計時間: 1個半小時
目標: 熟悉基于加密的工具
需要的RPM軟件包: openssl,openssh,eopssh-clients,openssh-server
步驟1:使用gpg來交換加密的電子郵件
用戶alice和bob希望能夠安全的交換信息,使用GNU的Privacy Guard(gpg)來提供加密服務。您將建立兩個用戶,為他們的每個建立公鑰和私鑰。下一步,alice將獲得bob的公鑰,并且使用該公鑰來加密給他的信息,bob將解密信息。
1. 建立用戶
root@localhost# useradd alice; useradd bob
root@localhost# passwd alice
root@localhost# passwd bob
2.為每個用戶建立公鑰和密鑰。注意到gpg第一次運行的時候,會建立缺省的初始化用戶文件:當提示“…your message”,按下CTRL-C。
alice@localhost# gpg
alice@localhost# gpg –help
alice@localhost# gpg –gen-key
您將被提示多種的密鑰參數。選擇缺省的選項。當詢問您的細節的時候,設定真實的名稱為Alice。其他的信息您隨便填寫。您同時將被會問及您的密碼。您可以使用任何密碼(但是您必須自己記得?。。?;或者簡單的敲兩下<回車>不使用密碼。
對于用戶bob采用相同的步驟,設定其“真實的名稱”為Bobby(gpg抱怨bob太短了)
3. 檢查alice的公鑰和密鑰,該公鑰和密鑰存儲在pubring.gpg和secring.gpg中。
alice@localhost$ ls ~/.gnupg
alice@localhost$ echo no-secmem-warning >> ~/.gnupg/gpg.conf
alice@localhost$ gpg --list-keys
/home/alice/.gnupg/pubring.gpg
------------------------------
pub 1024D/168F25D7 2003-09-18 Alice (demo key)
sub 1024g/CE26F831 2003-09-18
alice@localhost$ gpg --list-secret-keys
/home/alice/.gnupg/secring.gpg
------------------------------
sec 1024D/168F25D7 2003-09-18 Alice (demo key)
ssb 1024g/CE26F831 2003-09-18
4.讓bob把他的公鑰放在ASCII文件中以便方便的傳遞給alice。接下來,讓alice導入bob的公鑰到她的公鑰環中去。
bob@localhost$ gpg --export --armor Bobby > /tmp/bob.key
bob@localhost$ cat /tmp/bob.key
alice@localhost$ gpg --import /tmp/bob.key
alice@localhost$ gpg --list-keys
/home/alice/.gnupg/pubring.gpg
------------------------------
pub 1024D/168F25D7 2003-09-18 Alice
sub 1024g/CE26F831 2003-09-18
pub 1024D/67C0F0AD 2003-09-18 Bobby
sub 1024g/FDD05A7A 2003-09-18
5.現在alice獲得了bob公鑰的副本,并且把它加入到她的公鑰環中去。她可以給bob發送加密的消息。使用下面的命令步驟來使得alice發送給bob一個加密的/var/log/dmesg的副本。
alice@localhost$ cp /var/log/dmesg message.txt
alice@localhost$ gpg --encrypt --armor --recipient Bobby message.txt
alice@ station1$ head message.txt.asc
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
hQEOAzUJ6BL90Fp6EAP+J1gPH9RHQ1C+CaJGWSzUD2A603nspW2Ab+fQy7rmJbSA
5lwIPe5IzdmgSwMy80aefARQokI/cgdiWpb20Wzy2bltP413j/mrOiworKCOKguH
IJDQPqYxeticJSbwdZoTozsnLmWKp4uxappv3IaSI91w7REgN0KcwVetIn6UsYsE
AIKOqs1oXdYfU3Kzmt3DficQsZDgCuU1mVESCprb7Iyo/TvjjNuc9imqskrSveZZ
vFU8Loc7uI+gQ4HGUpFNryErMbaR2+KQnJCIz9GZJG/Lr7tFND4wCkFsu3jXvN6e
hUl5KRmRV3MWAkdOT4E3ZYF3dOhrdScxnpeIZdL5IDPo0usB9t2ZgIPHp9jKIIAc
alice@localhost$ mail -s "here it is" bob
6.現在讓bob檢查他的郵件,保存alice的郵件到文件。如果您不熟悉郵件客戶端,您可以使用一個簡單的基于命令行的mail工具
bob@localhost$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/bob": 1 message 1 new
>N 1 alice@stationa Thu Sep 18 22:02 84/4746 "here it is"
& w message_from_alice
"message_from_alice" New file
& q
bob@localhost$ less message_from_alice
bob@localhost$ gpg message_from_alice
您將被提示作為純文本文件的文件名。使用缺省的message.txt。注意gpg自動的執行期望的動作,即,使用恰當的私鑰進行解密。缺省的行為可以通過命令行的參數進行改變。
附加的步驟1的練習
1.使用gpg,使得alice能夠向bob發送使用對成密鑰加密的消息。
2.使得alice簽署和加密消息給bob,bob需要什么其他的附加信息來驗證簽名
3.使得alice為她的消息建立一個拆離的簽名,發送給bob消息和簽名。讓bob來驗證拆離的簽名
4.讓bob簽署alice的公鑰,由此使得別人相信alice就是公鑰的主人。
步驟2:使用ssh來進行加密的傳輸
場景A
alice和bob可能是不同工作站上的用戶,他們希望建立等同的帳號。也就是說,alice希望訪問bob的帳號而不需要輸入密碼,反之亦然。您將使用ssh提供如此的等同性。
在此步驟中提到的stationa指的是用戶alice,然而stationb指的是用戶bob。在執行此試驗的時候您只需調正西醫的步驟以適應您的主機名稱。如果您的伙伴一起做這個試驗,那么stationa和stationb指的就是您的機器的名稱和他的機器的名稱。如果您使用單一的機器,那么所有的機器名稱將設定為localhost。
1. 確保適當的RPM軟件包被安裝
alice@stationa$ rpm -q openssh
alice@stationa$ rpm -q openssh-clients
alice@stationa$ rpm -q openssh-server
2.使得root帳戶來確定bob機器上的sshd守護進程在運行
root@stationb# service sshd start
root@stationb# service sshd status
3.如果alice知道bob的密碼,那么她可以通過ssh來訪問其帳戶。注意所有的和bob帳戶的交互過程都是加密的,包括密碼的傳遞。作為alice,運行如下的命令,在合適的時候提供bob的密碼。
alice@stationa$ ssh bob@stationb ls /tmp
alice@stationa$ ssh bob@stationb
alice@stationa$ scp bob@stationb:/etc/services .
alice@stationa$ scp –r bob@stationb:/etc/xinetd.d .
4. 假設alice和bob希望采用更加安全的模式,讓alice建立ssh的公鑰和密鑰對。注意到ssh-keygen應該被-t命令行開關啟動,以至于密鑰是通過DSA算法生成的。讓alice檢視其密鑰(id_dsa)和公鑰(id_dsa.pub)。
alice@stationa$ ssh-keygen –t dsa
alice@stationa$ ls ~/.ssh
alice@stationa$ less ~/.ssh/id_dsa
alice@stationa$ less ~/.ssh/id_dsa.pub
選擇缺省的密鑰位置的選項。同時,在提示的時候,通過按下選擇一個空密碼 。
5.讓alice寄給bob她的公鑰的副本。讓bob把這個副本保存到文件~/.ssh/authorized_keys中去。
alice@stationa$ mail -s "my key" bob < ~/.ssh/id_dsa.pub
bob@stationb$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/bob": 1 message 1 new
>N 1 alice@stationa Fri Sep 19 15:56 13/982 "my key"
& w alice_key
"alice.key" New file
& q
bob@stationb$ mkdir ~/.ssh; chmod 700 ~/.ssh
bob@stationb$ cat alice_key >> ~/.ssh/autorized_keys
bob@stationb$ chmod 600 ~/.ssh/autorized_keys
6. 假設所有的東西都在其正確的地方(即,bob在他的授權的密鑰中擁有alice的公鑰的副本),alice現在可以訪問bob的帳號,而不用提供密碼。
alice@stationa ssh bob@stationb id
uid=508(bob) gid=508(bob) groups=508(bob)
alice@stationa ssh bob@stationb cvzf - /home/bob/ > \
> /tmp/bob.stationb.tgz
如果沒有正確的配置的話,那么ssh仍然將會采用密碼認證,并且提示alice輸入密碼。有幾個步驟幫助您調試這種情況。首先,檢查在服務器上的/var/log/messages和/var/log/secure文件以幫助您獲得有用的信息。第二步,在ssh的客戶端上采用-v命令行開關。這將會產生有用的調試信息。
7.對于bob也采用相同的配置,以至于其能夠進入alice的帳戶。
場景B
alice建立了公鑰認證的Shell可以訪問bob的帳戶。她現在要求安全的訪問(基于文本的)在bob機器上的Web服務。
1. 確保在bob機器上的Web服務運行正常。如果不是,那么通過root帳號登陸bob的機器,安裝并且啟動apache web服務。
alice@stationa$ lynx http://stationb/
2.使用ssh,使得alice連接到bob的帳戶,為了達到另外一種效果,在alice的端口12345(或者其他未使用的端口)到bob的機器的Web服務器(端口80)建立一個加密的管道。
alice@stationa$ ssh bob@stationb –L 12345:stationb:80
(并且在另外一個終端)
alice@stationa$ lynx http://localhost:12345
alice將能夠在步驟1和步驟2看到相同的Web頁面。然而在第一步驟中,數據從Web服務器到alice的Lynx客戶端是通過明文的方式發送的,這樣很容易被嗅探到。在第二步中,數據包從Web服務器通過bob的ssh守護進程,通過密文的形式越過網絡到達alice的ssh的客戶端,并且解密和傳送到alice的lynx客戶端。