介紹這些工具的目的只是給您一個提示的方向,并不是讓您拘泥于這些工具。畢竟安全是一個過程,不是一個產(chǎn)品。
一、Sxid
sxid 是一個系統(tǒng)監(jiān)控程序。它可以監(jiān)視系統(tǒng)中 suid,sgid 文件以及沒有屬主的變化。并且以可選的形式報告這些改變,你可以在配置文件中設(shè)置用 email 的形式通知這些改變,也可以不使用 email 而直接在標(biāo)準(zhǔn)輸出上顯示這些變化。Suid,sgid 文件以及沒有屬主的文件很有可能是別人放置的后門程序,這些都是您所要特別注意的。
你可以從下面的網(wǎng)址獲得 sxid:
ftp://marcus.seva.net/pub/sxid/
如果您安裝過其他工具,那么您一定也會安裝這個工具,它在安裝上沒有什么特別的地方。
缺省安裝的時候,配置文件為 /usr/local/etc/sxid.conf,這個文件中有很明顯的注釋很容易看懂。在這個文件中定義了 sxid 的工作方式。日志文件缺省為 /var/log/sxid.log,日志文件的循環(huán)次數(shù)在 sxid.conf 文件中定義。您可以在配置固定后把 sxid.conf 設(shè)置為不可改變,把 sxid.log 設(shè)置為只可添加(使用 chattr 命令)。
您可以用 sxid -k 加上 -k 選項來進(jìn)行檢查,這時檢查很靈活,既不記入日志,也不會發(fā)出 email。這樣您就可以隨時做檢查。但是我還是建議您把檢查放入 crontab 中,使用 crontab -e 編輯加入下面的條目:
0 4 * * * /usr/bin/sxid
表示每天上午 4 點執(zhí)行這個程序。
如果您還想了解更詳細(xì)的信息,可以參考:
man sxid
man 5 sxid.conf
二、Skey
您認(rèn)為您的密碼安全嗎?即使您的密碼很長,有很多特殊字符,解密工具很難破解,但您的密碼在網(wǎng)絡(luò)中傳送時是以明文形式的,在以太網(wǎng)中隨便一個嗅探器就可以截取您的密碼?,F(xiàn)在在交換環(huán)境中也能實現(xiàn)這種技術(shù)。在這種情況下,skey 對您來說是一個選擇。
Skey 是一次性口令的一個工具。它是一個基于客戶\服務(wù)器的應(yīng)用程序。首先在服務(wù)器端可以用 keyinit 命令為每個用戶建立一個 skey 客戶,這個命令需要指定一個秘密口令,然后就可以為客戶端的用戶產(chǎn)生一次性口令列表。當(dāng)用戶通過 telnet,ftp 等與服務(wù)器進(jìn)行連接時就可以按照一次性口令列表中的口令順序輸入自己的密碼,下次再連接時候密碼就換成了列表中的下一個。
可以從下面的網(wǎng)址獲得 skey:
ftp://ftp.cc.gatech.edu/ac121/Linux/system/network/sunacm/other/skey
skey 的服務(wù)器端使用有下面的步驟:
1.使用下面的命令初始化用戶 mary:
keyinit mary
keyinit 每次為用戶生成 99 個一次性口令,這時就會在 /etc/skeykeys 文件建立這個用戶,該文件中保存了服務(wù)器端計算下一個一次性口令的一些信息。用上面的 keyinit 命令時就會在 /etc/skeykeys 中有下面的記錄:
mary 0099 to25065 be9406d891ac86fb Mar 11, 2001 04:23:12
上面的記錄中從左到右依次是用戶名,要使用的一次性口令序號,口令的種類,16 進(jìn)制表示的口令,日期和時間。
2.將一次性口令列表提供給 mary
您可以打印出口令列表然后送給 mary。這樣比較安全,密碼不會在網(wǎng)絡(luò)中傳遞。
3.為 mary 修改缺省的登陸 shell 為 /usr/local/bin/keysh
由于 PAM 的作用,mary 登陸時要輸入密碼,她輸入這個一次性口令后服務(wù)器端要對這個口令進(jìn)行校驗,校驗通過連接就被許可了。
可能有些用戶不喜歡書面的口令列表,用戶可以使用 key 命令在自己的客戶端得到一次性口令。您可以通過開兩個窗口,一個對服務(wù)器進(jìn)行連接獲得一次性口令的種類和序號,然后在另一個窗口用 key 命令根據(jù)口令的種類和序號獲得所要的密碼。但是必須提醒您,您這樣的方便是以一定的危險性為代價的。
如果您的缺省的 99 個口令用完了,您可以使用 keyinit -s 刷新口令列表。
在 /usr/src/skey/misc 目錄中有許多其他的替換 keysh 的提供其他服務(wù)的程序,例如:su,login,ftp 等等。這樣您可以應(yīng)付不同的服務(wù)的連接請求了。
為了安全,您最好設(shè)置一下/etc/skeykeys 文件的屬性和權(quán)限。
三、三個日志管理工具
3.1 logrotate
一般的 Linux 發(fā)行版中都自帶這個工具。日志文件過大如何處理是一個問題。它可以自動使日志循環(huán),刪除保存最久的日志。你可以把它放在 crontab 中,每天定期運行。這在很多 Linux 發(fā)行版中都是缺省設(shè)置的。
您可以從下面的網(wǎng)址獲得新版本的 logrotate:
ftp://ftp.redhat.com/pub/redhat
它的配置文件是 /etc/logrotate.conf 我們可以在這個文件中設(shè)置日志的循環(huán)周期,日志的備份數(shù)目,以及如何備份日志等等。
在 /etc/logrotate.d 目錄下包括一些工具的日志循環(huán)設(shè)置文件。例如:syslog,samba,cron 等等,在這些文件中指定如何根據(jù) /etc/logrotate.conf 做日志循環(huán),您也可以在這里面添加其他的文件以循環(huán)其他服務(wù)的日志。
關(guān)于配置文件的詳細(xì)信息您可以參閱 man logrotate。
最后還是提醒您使用 cron 運行 logrotate。
3.2 swatch
swatch 是一個實時的日志監(jiān)控工具。您可以設(shè)置您所感興趣的事件,它可以在事件發(fā)生的時候告訴您。Swatch 有兩種運行方式:一種可以在檢查日志完畢退出,另一種可以連續(xù)監(jiān)視日志中的新信息。
Swatch 提供了許多通知方式,例如:email,振鈴,終端輸出,多種顏色等等。
您可以從下面的站點下載:
ftp://ftp.stanford.edu/general/security-tools/swatch/
swatch 的安裝需要一些 perl 庫的支持,安裝前確信您的系統(tǒng)已經(jīng)可以支持 perl。
Swatch 可以在命令行中進(jìn)行一些簡單的設(shè)置,例如日志循環(huán)時告訴 swatch 在循環(huán)完畢后重新啟動等等。
配置文件 swatchmessage 是 swatch 軟件的重點。這個文本文件告訴 swatch 需要監(jiān)視什么日志,需要尋找什么觸發(fā)器,和當(dāng)觸發(fā)時所要執(zhí)行的動作。當(dāng) swatch 發(fā)現(xiàn)到與 swatchmessage 中定義的觸發(fā)器正則表達(dá)式相符時,它將執(zhí)行在 swatchrc 中定義的通知程序。Swatch 通過使用/usr/bin/tail -f 實時監(jiān)視日志文件。
在這里我們不想過多的將如何配置,配置 swatch 非常簡單,您可以參考 swatch 自帶的配置文件。針對每個服務(wù)例如:ftp,sendmail 等等,你必須為每個您所關(guān)心的服務(wù)配置一個 swatchmessage 文件。
Swatch 啟動時可以帶很多參數(shù),但使用通常如下格式啟動它就可以了:
/usr/local/bin/swatch -c /var/log/syslogmessage -t /var/log/syslog -r 06:00&
-c 參數(shù)用于指定配置文件,-t 參數(shù)指定實時監(jiān)視的日志文件,-r 指定重起的時間,"&" 使 swatch 在后臺運行。啟動后,swatch 產(chǎn)生子進(jìn)程,因此 swatch 是以兩個進(jìn)程運行的,在停止 swatch 時必須殺掉兩個進(jìn)程。
也可以通過 logrotate 配置在日志循環(huán)后重起 swatch,可以在 /etc/logrotate.d 建立一個您所要關(guān)心的日志的循環(huán)文件,其中最關(guān)鍵的是要加入下面這行:
/usr/local/bin/swatch -c /var/log/syslogmessage -t /var/log/syslog -r + 0
其他的地方可以仿造別的同目錄下的文件。
3.3 logcheck
審核和記錄系統(tǒng)的事件是非常重要的。特別是當(dāng)你的計算機(jī)連接到 Internet 上之后,系統(tǒng)管理員如果對"異常"的事件保持警覺,就能防止系統(tǒng)被入侵。在 Unix 系統(tǒng)中如果僅僅把系統(tǒng)事件作為日志記錄下來,而不去查看,還是無濟(jì)于事。logchek 可以自動地檢查日志文件,先把正常的日志信息剔除掉,把一些有問題的日志保留下來,然后把這些信息 email 給系統(tǒng)管理員。Logcheck 被設(shè)計成自動運行,定期檢查日志文件以發(fā)現(xiàn)違反安全規(guī)則以及異常的活動。logcheck 用 logtail 程序記住上次已經(jīng)讀過的日志文件的位置,然后從這個位置開始處理新的日志信息。
可以在下面的站點獲得 logcheck:
logcheck 主要由下面幾個主要的文件:
1.logcheck.sh
這個是一個可執(zhí)行的腳本文件,里面記錄 logcheck 檢查那些日志文件等 logcheck 運作所必須的信息。您可以把它加入 crontab 中定時運行。
2.logcheck.hacking
它和下面的三個文件一樣,是 logcheck 檢查的模式文件。他們四個文件按從上到下的順序執(zhí)行。這個文件表明了入侵活動的模式。
3.logcheck.violations
這個文件表示有問題,違背常理的活動的模式。優(yōu)先級小于上面的那個模式文件。
4.logcheck.violations.ignore
這個文件和上面的 logcheck.violations 是相對的,是您所不關(guān)心的問題的模式文件。
5.logcheck.ignore
這是檢查的最后一個模式文件。如果沒有和前三個模式文件匹配,也沒有匹配這個模式文件的話,則輸出到報告中。
6.logtail
這個文件記錄日志文件信息。
Logcheck首次運行時讀入相關(guān)的日志文件的所有內(nèi)容。Logtail 在日志文件的目錄下為每個關(guān)心的日志文件建立一個 logfile.offset 的偏移量文件,以便于下次檢查時從這個偏移量開始檢查。Logcheck 執(zhí)行時未被忽略的內(nèi)容通過郵件的形式發(fā)送給 logcheck.sh 中 SYSADMIN 指定的用戶。
Logcheck 的通知沒有那么實時,但是相對于 swatch 它更適合于分布式日志文件系統(tǒng)。因為它不必為每個日志文件建立一個進(jìn)程。在 TurboLinux 中就集成了 logcheck 工具。
四、SSH
傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序,如:ftp、pop 和 telnet 在本質(zhì)上都是不安全的,因為它們在網(wǎng)絡(luò)上用明文傳送口令和數(shù)據(jù),別有用心的人非常容易就可以截獲這些口令和數(shù)據(jù)。而且,這些服務(wù)程序的安全驗證方式也是有其弱點的,就是很容易受到"中間人"(man-in-the-middle)這種方式的攻擊。所謂"中間人"的攻擊方式,就是"中間人"冒充真正的服務(wù)器接收你的傳給服務(wù)器的數(shù)據(jù),然后再冒充你把數(shù)據(jù)傳給真正的服務(wù)器。
通過使用 SSH,你可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,這樣"中間人"這種攻擊方式就不可能實現(xiàn)了,而且也能夠防止 DNS 和 IP 欺騙。還有一個額外的好處就是傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣?。SSH有很多功能,它既可以代替 telnet,又可以為 ftp、pop、甚至 ppp 提供一個安全的"通道"。
最初 SSH 是由芬蘭的一家公司開發(fā)的。但是因為受版權(quán)和加密算法的限制,現(xiàn)在很多人都轉(zhuǎn)而使用 OpenSSH。OpenSSH 是 SSH 的替代軟件,而且是免費的,可以預(yù)計將來會有越來越多的人使用它而不是 SSH。
從客戶端來看,SSH 提供兩種級別的安全驗證。
第一種級別是基于口令的安全驗證,這種機(jī)制就相當(dāng)于普通的 telnet 等服務(wù)的口令認(rèn)證機(jī)制。
第二種級別是基于密匙的安全驗證。你必須為自己創(chuàng)建一對密匙,并把公用密匙放在需要訪問的服務(wù)器上。如果你要連接到 SSH 服務(wù)器上,客戶端軟件就會向服務(wù)器發(fā)出請求,請求用你的密匙進(jìn)行安全驗證。服務(wù)器收到請求之后,先在你在該服務(wù)器的家目錄下尋找你的公用密匙,然后把它和你發(fā)送過來的公用密匙進(jìn)行比較。如果兩個密匙一致,服務(wù)器就用公用密匙加密"質(zhì)詢"(challenge)并把它發(fā)送給客戶端軟件??蛻舳塑浖盏?質(zhì)詢"之后就可以用你的私人密匙解密再把它發(fā)送給服務(wù)器。
可以在下面的站點下載:
"/etc/ssh/ssh_config" 文件是 OpenSSH 客戶端的配置文件,允許你通過設(shè)置不同的選項來改變客戶端程序的運行方式。這個文件的每一行包含"關(guān)鍵詞-值"的匹配,其中"關(guān)鍵詞"是忽略大小寫的。用 man 命令查看幫助頁(ssh (1))可以得到詳細(xì)的說明。
"/etc/ssh/sshd_config" 是 OpenSSH 的服務(wù)器端配置文件,允許設(shè)置選項改變這個 daemon 的運行。這個文件的每一行包含"關(guān)鍵詞-值"的匹配,其中"關(guān)鍵詞"是忽略大小寫的。用 man 命令查看幫助頁(sshd (8))可以得到詳細(xì)的說明。
配置 OpenSSH 使其使用 TCP-Wrappers inetd 超級服務(wù)器,編輯 "inetd.conf" 文件(vi /etc/inetd.conf)并加入這一行:
ssh stream tcp nowait root /usr/sbin/tcpd sshd -i
注意:"-i"參數(shù)很重要,它說明 sshd 是被 inetd 運行的。
現(xiàn)在我們?yōu)楸镜胤?wù)器創(chuàng)建私有和公用密匙,執(zhí)行下面的命令:
[root@sound]# su username
[username@sound]$ ssh-keygen1
產(chǎn)生密鑰后把本機(jī)的公用密匙(identity.pub)拷貝到遠(yuǎn)程主機(jī)的"/home/username/.ssh"目錄下,例如,使用"authorized_keys"這個名字。
用加上"-p"參數(shù)的"ssh-keygen"命令,在任何時候都可以改變初始的密碼。
下面列出的是一些我們經(jīng)常要用到的命令,當(dāng)然還有很多其它的命令,更詳細(xì)的信息可以查看 man 幫助頁或其它文檔。
1.ssh
ssh(Secure Shell)是用來登錄遠(yuǎn)程計算機(jī)和在遠(yuǎn)程計算機(jī)上執(zhí)行命令的程序。它是用來替代 rlogin 和 rsh,以及在不安全的網(wǎng)絡(luò)環(huán)境下在兩臺計算機(jī)之間提供安全和加密的信息交流。
使用下面的命令可以從客戶端連接到遠(yuǎn)程主機(jī) server:
[root@sound /]# su admin
[admin@sound /]$ssh server
2.scp
可以用這個命令把文件從本地計算機(jī)拷貝到遠(yuǎn)程計算機(jī),或者反之,甚至可以在兩臺遠(yuǎn)程計算機(jī)之間用 "scp" 命令拷貝文件。
用下面的命令把文件從遠(yuǎn)程主機(jī)拷貝到本地主機(jī)上:
[root@sound /]# su admin
[admin@sound /]$ scp -p :/dir/for/file localdir/to/filelocation
用下面的命令把文件從本地主機(jī)拷貝到遠(yuǎn)程主機(jī)上:
[root@sound/]# su admin
[admin@sound /]$ scp -p localdir/to/filelocation :/dir/for/file
注意:"-p" 選項表示文件的改變和訪問時間屬性以及權(quán)限,在拷貝過程中被保留。通常是需要這樣的。
五、Tripwire
如果有人侵入了您的系統(tǒng),在您的系統(tǒng)中放置了木馬和后門,您怎么才能知道呢?tripwire 就是這樣一個對系統(tǒng)做完整性檢查的工具。它是目前最為著名的 Unix 下文件系統(tǒng)完整性檢查的軟件工具,這一軟件采用的技術(shù)核心就是對每個要監(jiān)控的文件產(chǎn)生一個數(shù)字簽名,保留下來。當(dāng)文件現(xiàn)在的數(shù)字簽名與保留的數(shù)字簽名不一致時,那么現(xiàn)在這個文件必定被改動過了。
當(dāng)Tripwire 運行在數(shù)據(jù)庫生成模式時,會根據(jù)管理員設(shè)置的一個配置文件對指定要監(jiān)控的文件進(jìn)行讀取,對每個文件生成相應(yīng)數(shù)字簽名,并將這些結(jié)果保存在自己的數(shù)據(jù)庫中,在缺省狀態(tài)下,MD5 和 SNCFRN(Xerox 的安全哈希函數(shù))加密手段被結(jié)合用來生成文件的數(shù)字簽名。除此以外,管理員還可使用 MD4,CRC32,SHA 等哈希函數(shù),但實際上,使用上述兩種哈希函數(shù)的可靠性已相當(dāng)高了,而且結(jié)合 MD5 和 sncfrn 兩種算法(尤其是 sncfrn)對系統(tǒng)資源的耗費已較大,所以在使用時可根據(jù)文件的重要性做取舍。當(dāng)懷疑系統(tǒng)被入侵時,可由 Tripwire 根據(jù)先前生成的,數(shù)據(jù)庫文件來做一次數(shù)字簽名的對照,如果文件被替換,則與 Tripwire 數(shù)據(jù)庫內(nèi)相應(yīng)數(shù)字簽名不匹配, 這時 Tripwire 會報告相應(yīng)文件被更動,管理員就明白系統(tǒng)不"干凈"了。
可以從下面站點獲得 tripwire:
"/usr/TSS/policy/twpol.txt" 文件是純文本的策略文件,設(shè)置 Tripwire 需要檢測哪些文件和目錄(也叫系統(tǒng)對象)。其中有一個規(guī)則設(shè)定如何檢測需要監(jiān)控的對象,還有一個特性(property)設(shè)置如何檢測。特性掩碼(property mask)設(shè)定進(jìn)行一致性檢驗的時候單獨文件的特性(property)。屬性(Attributes)幫助規(guī)定成組的策略如何運作。
您可以根據(jù)您的需要修改 twpol.txt 這個策略文件,然后當(dāng)?shù)谝淮螠?zhǔn)備使用策略文件的時候,用下面的安裝它:
[root@sound]# twadmin --create-polfile /usr/TSS/policy/twpol.txt
第一次創(chuàng)建基準(zhǔn)數(shù)據(jù)庫:用下面的命令
[root@sound]# tripwire { --init }
一致性檢查把當(dāng)前文件系統(tǒng)中的對象及其屬性和 Tripwire 數(shù)據(jù)庫中的進(jìn)行比較。一旦發(fā)現(xiàn)異常情況,就會在標(biāo)準(zhǔn)輸出上顯示出來,報表文件也會被保存下來,以后可以用 "twprint" 命令查看:
[root@sound]# tripwire { --check }
用下面的命令進(jìn)行交互式的檢查:
[root@sound]# tripwire --check --interactive
用下面的命令進(jìn)行一致性檢查并用email發(fā)送報表:
[root@sound]# tripwire --check --email-report
用下面的命令更新數(shù)據(jù)庫:
[root@sound]# tripwire --update -r /usr/TSS/report/sound.openarch.com-200001-021854.twr
"-r"參數(shù)讀取指定的報表文件(deep.openarch.com-200001-021854.twr)。因為當(dāng)前的配置文件的 REPORTFILE 變量使用$(DATE),所以"-r"這個參數(shù)是必須的。
用下面的命令更新策略文件:
[root@deep]# tripwire --update-policy /usr/TSS/policy/newtwpol.txt
在默認(rèn)情況下,策略更新模式使用"--secure-mode high"。如果文件系統(tǒng)在最近的一次數(shù)據(jù)庫更新之后發(fā)生了變化,而且這個變化會違反策略文件中定義的規(guī)則,那么在高安全級別的模式下運行你可能會遇到一些問題。例如這種情況:其他的管理員在策略更新的過程中,改變了一些文件。為了解決這個問題,確信在高安全級別的模式下所有的變化都是正常的之后,可以采用低級別的安全模式更新策略文件:
用下面的命令在低級別的安全模式下更新策略文件:
[root@sound]# tripwire --update-policy --secure-mode low /usr/TSS/policy/newtwpol.txt
如果想查找詳細(xì)的資料可以用man命令查幫助頁,讀取相關(guān)信息。
六、Portsentry
我們可以通過防火墻限制自己系統(tǒng)中什么端口開放,什么端口不開放。對于外部的人們來說,這些信息都是保密的。黑客為了得到您機(jī)器中開放的端口,往往會進(jìn)行各種方式的掃描,這樣的掃描軟件在互聯(lián)網(wǎng)上也隨處都是。一般的掃描活動都是進(jìn)行入侵的前奏,對安全是極大的危險。
Portsentry 就是一個反掃描工具。它可以實時發(fā)現(xiàn)并分析記錄對本機(jī)的掃描, 它主要做以下工作:
通過 syslog 做記錄
將掃描的主機(jī)加入 /etc/hosts.deny
馬上禁止所有通向掃描主機(jī)的網(wǎng)絡(luò)流量
過濾掉所有來自掃描主機(jī)的網(wǎng)絡(luò)流量
您可以從下面的網(wǎng)站獲得portsentry:
"/usr/psionic/portsentry/portsentry.conf"是 portsentry 的主配置文件。您可以在這個文件中設(shè)置您所要監(jiān)聽的端口,以及哪些 ip 地址被拒絕,哪些被忽略等等信息。如果您了解詳細(xì)的信息,可以查看 "README.install" 文件。
"/usr/psionic/portsentry/portsentry.ignore" 文件定義了在執(zhí)行端口掃描分析時必須要忽略的主機(jī),也就是說即使這些主機(jī)進(jìn)行了掃描活動,portsentry 也不會采取任何行動。
Portsentry 有以下6種啟動方式:
portsentry -tcp (basic port-bound TCP mode)
portsentry -udp (basic port-bound UDP mode)
portsentry -stcp (Stealth TCP scan detection)
portsentry -atcp (Advanced TCP stealth scan detection)
portsentry -sudp ("Stealth" UDP scan detection)
portsentry -audp (Advanced "Stealth" UDP scan detection)
建議您可以使用下面兩種方式啟動 portsentry:
portsentry -atcp (Advanced TCP stealth scan detection)
portsentry -sudp ("Stealth" UDP scan detection)
一種 tcp 啟動方式和一種 udp 啟動方式可以同時進(jìn)行。
您可以把下面的兩個命令加入 "/etc/rc.d/rc.local" 中,當(dāng)系統(tǒng)重起時自動啟動:
[root@sound /]# /usr/psionic/portsentry/portsentry -atcp
[root@sound /]# /usr/psionic/portsentry/portsentry -sudp
對于更詳細(xì)的信息您可以查閱 man 手冊和 portsentry 自帶的幫助文件。
七、Openssl
一些服務(wù)器端的軟件例如:IMAP & POP, Samba, OpenLDAP, FTP, Apache 等等在給用戶提供服務(wù)的時候要對用戶進(jìn)行認(rèn)證,只有在認(rèn)證通過后服務(wù)才會被許可。而 client/server 方式的服務(wù)客戶端和服務(wù)端之間通訊都是以明文方式進(jìn)行的,openssl 正是提供了對傳輸?shù)臄?shù)據(jù)的一種加密方式。Openssl 可以安裝在 Linux 服務(wù)器上,它需要一些第三方提供的應(yīng)用程序來為服務(wù)提供加密。
下面看一些使用 openssl 加密能為我們提供的好處:
1.數(shù)據(jù)的保密性
openssl 實際在真正的數(shù)據(jù)加密上使用的是對稱算法,一個密鑰既用來加密也用來解密。我們在公開的網(wǎng)絡(luò)介質(zhì)上傳輸?shù)脑俨皇敲魑?,即使有人能截獲這些數(shù)據(jù),沒有密鑰也是很難進(jìn)行解密的。
2.數(shù)據(jù)的完整性
openssl 對數(shù)據(jù)用 hash 算法一個消息文摘,然后用對方的公鑰對消息文載做數(shù)字簽名,消息文摘的加密使用的是非對稱算法。然后消息文摘和數(shù)據(jù)一起傳給接收方,接收方用自己的密鑰先對數(shù)字簽名進(jìn)行解密,這樣就保證了數(shù)據(jù)的完整性。
從下面的站點可以獲得 openssl:
編譯安裝以后還要執(zhí)行下面幾個命令:
[root@sound openssl-0.9.5a]# mv /etc/ssl/misc/* /usr/bin/
[root@sound openssl-0.9.5a]# install -m 644 libRSAglue.a /usr/lib/
[root@so. openssl-0.9.5a]# install -m 644 rsaref/rsaref.h /usr/include/openssl/
"/etc/ssl/openssl.cnf"是 openssl 的主配置文件,里面要改動的主要是[CA_default ] 和[ req_distinguished_name ] 兩個部分。
如果你想要使用 "openssl ca" 這個命令做 CA 證書時時,你需要建立一個 "sign.sh" 的腳本,這個腳本實際是存在的,在"/usr/bin/sign.sh", 您所要做的是在這個文件中加入一些東西。在 mod_ssl 的發(fā)行版中您也可以找到這個腳本。
下面我們舉個例子講述 openssl 的應(yīng)用,我們用自己的 CA 為自己的 apache web server 做一個證書來簽名我們自己的證書簽名請求(CSR)。
1.為 apache web server 建立一個有密碼保護(hù)的RSA私鑰
[root@sound ssl]# openssl genrsa -des3 -out server.key 1024
2.用上面的 RSA 私鑰產(chǎn)生一個證書簽名請求(CSR)
[root@sound ssl]# openssl req -new -key server.key -out server.CSr
3.為我們自己的 CA 創(chuàng)建一個 RSA 私鑰
[root@sound ssl]# openssl genrsa -des3 -out ca.key 1024
4.用 CA 的 RSA 密鑰做一個自簽名的 X509 格式的證書
[root@sound ssl]# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
5.將上面產(chǎn)生的私鑰和證書移動到合適的目錄下
[root@deep ssl]# mv server.key private/
[root@deep ssl]# mv ca.key private/
[root@deep ssl]# mv ca.crt certs/
6.最后用我們自己的 CA 對證書簽名
[root@sound ssl]# /usr/bin/sign.sh server.CSr
更詳細(xì)的信息請參考 man 幫助和程序自帶的幫助。
八.Linux FreeS/WAN VPN
對于客戶端與服務(wù)器之間的通訊用SSL進(jìn)行加密是一個很好的選擇,但是很多情況下需要建立一種企業(yè)級的通訊通道。在兩個網(wǎng)關(guān)之間的 Internet上點到點的傳遞極其私密的數(shù)據(jù),出于這種加密和認(rèn)證的需要,IPSEC 應(yīng)運而生。
IPSEC 是 Intenet 協(xié)議安全,它使用很強(qiáng)的密碼系統(tǒng)提供認(rèn)證和加密服務(wù)。IPSEC 在 IP 層進(jìn)行加密,所以它對鏈路層的依賴型不大。它可以工作在各種底層網(wǎng)絡(luò)上。IPSEC 可以為 IP 層以上的協(xié)議提供保護(hù)。對于用戶來說,這種保護(hù)看起來是透明的。
IPSEC 可以提供在兩個網(wǎng)關(guān)之間的不安全的互聯(lián)網(wǎng)上的安全通道的這種能力。在這種通道中傳送的數(shù)據(jù)都是要求保密性非常高的數(shù)據(jù),數(shù)據(jù)在發(fā)送者的網(wǎng)關(guān)處加密,在接收者的網(wǎng)關(guān)處解密。這就是 VPN(Virtual Private Network)。Freeswan 就是在 Linux 下實現(xiàn) IPSEC 的工具。
您可以到下面的站點下載 freeswan:
由于 freeswan 是以內(nèi)核補(bǔ)丁形式提供的,所以您必須先下載 Linux 內(nèi)核,再下載對應(yīng)于內(nèi)核的 freeswan。我們先要根據(jù)自己的系統(tǒng)情況修改 freeswan 的 Makefile 文件,然后用下面的命令進(jìn)行編譯,并且把 freeswan 加入到 Linux 內(nèi)核的源代碼中:
[root@sound freeswan-1.3]# make insert
[root@sound freeswan-1.3]# make programs
[root@sound freeswan-1.3]# make install
然后我們就需要編譯內(nèi)核,這里不想再介紹如何編譯內(nèi)核,只提示要改變的內(nèi)核選項,下面這些選項您都要確定選"Y":
IPSec options (FreeS/WAN)
IP Security Protocol (FreeS/WAN IPSEC) (CONFIG_IPSEC) [Y/n/?]
IPSEC: IP-in-IP encapsulation (CONFIG_IPSEC_IPIP) [Y/n/?]
IPSEC: PF_KEYv2 kernel/user interface (CONFIG_IPSEC_PFKEYv2) [Y/n/?]
IPSEC: Enable ICMP PMTU messages (CONFIG_IPSEC_ICMP) [Y/n/?]
IPSEC: Authentication Header (CONFIG_IPSEC_AH) [Y/n/?]
HMAC-MD5 authentication algorithm (CONFIG_IPSEC_AUTH_HMAC_MD5) [Y/n/?]
HMAC-SHA1 authentication algorithm (CONFIG_IPSEC_AUTH_HMAC_SHA1) [Y/n/?]
IPSEC: Encapsulating Security Payload (CONFIG_IPSEC_ESP) [Y/n/?]
3DES encryption algorithm (CONFIG_IPSEC_ENC_3DES) [Y/n/?]
IPSEC Debugging Option (DEBUG_IPSEC) [Y/n/?]
一些內(nèi)核選項會被 freeswan 自動打開,即使這些選項原來是關(guān)閉的。盡管這樣還是建議您不要關(guān)閉下面的選項:
Kernel/User netlink socket (CONFIG_NETLINK) [Y/n/?]
Netlink device emulation (CONFIG_NETLINK_DEV) [Y/n/?]
Freeswan 的配置文件 "/etc/ipsec.conf" 許可您設(shè)定您的 IPSEC 設(shè)置,連接類型以及控制信息等。IPSEC 目前支持兩種類型的連接:手工連接和自動連接。手工連接需要的密鑰保存在 "/etc/ipsec.conf" 文件中,這種連接沒有自動連接安全。對于一個商業(yè)應(yīng)用來說,使用手工(固定)密鑰是不安全和不可靠的。在自動密鑰連接模式下產(chǎn)生一個 256 位共享密鑰,將其復(fù)制到連接通道的各個節(jié)點上后,那些企圖截取數(shù)據(jù)包的網(wǎng)絡(luò)攻擊者將很難攻破這種安全連接。在自動密鑰連接模式下,一個密鑰的有效期是 8 個小時,這種配置有效地阻止了那些企圖用暴力法猜出密鑰的攻擊者。自動連接的密鑰由一個叫 Pluto 的密鑰協(xié)商守候進(jìn)程產(chǎn)生,缺省使用叫 IKE 的密鑰協(xié)商協(xié)議。這個協(xié)議根據(jù) "/etc/ipsec.secrets" 文件中的信息確定不同的系統(tǒng)。
我們下面舉一個例子論述配置和使用的整個過程。假如我們有下面的 VPN 通道:
SubnetDeep===Deep------Deepgate..………....Mailgate-------Mail===SubnetMail
Untrusted net
左邊子網(wǎng)= SubnetDeep (192.168.1.0/24)
左邊的主機(jī) = Deep (deep.openna.com)(202.164.186.1)
左邊的網(wǎng)關(guān) = Deepgate (205.151.222.250)
Internet = Untrusted net
右邊的網(wǎng)關(guān) = Mailgate (205.151.222.251)
右邊的主機(jī) = Mail (mail.openna.com)( 208.164.186.2)
右邊的子網(wǎng)= SubnetMail (192.168.1.0/24)
我們要編輯 ipsec.conf 文件來來滿足我們的需要。在這個文件中有兩大個段落。第一個 "config" 是關(guān)于 IPSEC 的一些普通配置信息的,后一個 "conn" 指定特定的 IPSEC 連接通道。具體的配置信息可以參看 man 幫助頁。
"ipsec.secrets" 包含 pluto 守候進(jìn)程認(rèn)證網(wǎng)關(guān)之間通訊的密鑰。有兩種類型的密鑰,一種是共享的密鑰,一種是RSA的私人密鑰。下面的命令產(chǎn)生 256 位的共享密鑰:
[root@deep /]# ipsec ranbits 256 > temp
現(xiàn)在這個共享密鑰在 temp 文件中,我們要把它復(fù)制到 "ipsec.secrets" 文件中。"ipsec.conf" 和 "ipsec.secrets" 都要拷貝到 VPN 通道另一端的網(wǎng)關(guān)上。"ipsec.conf" 文件中的 "config setup" 字段可能要根據(jù)接口的不同有所改變。
接下來我們要創(chuàng)建 RSA 的密鑰對了:
我們在兩個網(wǎng)關(guān)上都建立密鑰對:
[root@deep /]# ipsec rsasigkey --verbose 1024 > deep-keys
[root@mail /]# ipsec rsasigkey --verbose 1024 > mail-keys
然后我們將前面產(chǎn)生的 temp 文件中的共享密鑰放在每個網(wǎng)關(guān)的 "ipsec.conf" 文件中,在文件中的 "conn" 字段加入下面幾行:
authby=rsasig
leftrsasigkey=<Public key of deep>
rightrsasigkey=<Public key of mail>
然后在兩個網(wǎng)關(guān)上處理 deep-keys 和 mail-keys 這兩個 RSA 公鑰,我們把這個個文件中的 "#pubkey=" 部分拷貝到各自的 "ipsec.conf"中去,如下:
authby=rsasig
leftrsasigkey=0x010395daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6ecc08890d3
eb4b5470c0fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e4318b4c8d0ea25d33e4f
084186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f08502a141b611f
rightrsasigkey=0x01037631b81f00d5e6f888c542d44dbb784cd3646f084ed96f942d341c7c4686cbd405b805dc728f86
97475f11e8b1dd797550153a3f0d4ff0f2b274b70a2ebc88f073748d1c1c8821dc6be6a2f0064f3be7f8e4549f8ab9af649
44f829b014788dd202cf7d2e320cab666f5e7a197e64efe0bfee94e92ce4dad82d5230c57b89edf
最后把deep-keys和mail-keys這兩個文件中的剩余部分包括(包括私鑰)放進(jìn)"ipsec.secrets"中去。
然后重新啟動帶有IPSec支持的內(nèi)核的系統(tǒng)。系統(tǒng)重啟時會出現(xiàn)幾個錯誤,這主要是IPSec在缺省情況下使用了實際并不存在的eth999接口。建議你將ipsec程序的路徑加入到用戶環(huán)境變量中。
IPSec的網(wǎng)絡(luò)設(shè)置首先,需要允許網(wǎng)關(guān)服務(wù)器的TCP-IP轉(zhuǎn)發(fā)。在Red Hat Linux系統(tǒng)中的實現(xiàn)方法:
將 FORWARD_IPV4="false" 改為 FORWARD_IPV4="yes" 即可。
另一個方法是直接修改/proc文件系統(tǒng),執(zhí)行以下命令即可:
cat 1 > /proc/sys/net/ipv4/ip_forward
然后我們要重新啟動網(wǎng)絡(luò):
[root@deep /]# /etc/rc.d/init.d/network restart
這時pluto守候進(jìn)程要啟動,它嘗試去連接另一邊的網(wǎng)關(guān)上的pluto守候進(jìn)程,這樣一個連接就可以建立了。所以我們要在ipchains的配置文件中加入一些包過濾規(guī)則許可以下的協(xié)議通過網(wǎng)關(guān)通往另一邊的網(wǎng)關(guān):
UDP port 500 for IKE implemented by the Pluto daemon
Protocol 50 for ESP encryption and/or authentication
Protocol 51 for AH packet-level authentication
必須保證IP欺騙選項沒有被打開,可以將下面的命令添加到/etc/rc.d/rc.local文件中:
[root@deep /]# echo 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filter
[root@deep /]# echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
最后要注意的是, 任何使用了 IPSec 的內(nèi)部網(wǎng)絡(luò)的所有偽裝(masquerade),規(guī)則都必須在允許 IPSec 的規(guī)則之后進(jìn)行,否則主機(jī)將試圖偽裝 (masquerade) 數(shù)據(jù)包,而不是將它們傳遞給 IPSec。所以我們還要在兩邊網(wǎng)關(guān)的 ipchains 配置文件中加入下面的設(shè)定來保證能夠正常的轉(zhuǎn)發(fā) IPSEC 的數(shù)據(jù)包:
# Masquerade internal traffic.
# All internal traffic is masqueraded externally.
ipchains -A forward -i $EXTERNAL_INTERFACE -s $LOCALNET_1 -j MASQ
Where EXTERNAL_INTERFACE="eth0" # You external interface to the Internet.
Where LOCALNET_1=" 192.168.1.0/24" # whatever private range you use.
現(xiàn)在可以重啟機(jī)器了,我們所要做的設(shè)置都完成了,一個 VPN 已經(jīng)構(gòu)建好了。
詳細(xì)的信息請參閱 man 幫助和工具自帶的幫助文件。
小結(jié)
我們所討論的以上內(nèi)容都是為了更好的固化我們的 Linux 系統(tǒng),我們討論了 Linux 服務(wù)器的安裝和安全設(shè)置中要注意的問題,我們還談到了 Linux 的日志系統(tǒng),概要的舉出了一些安全工具。由于篇幅所限不可能講的非常詳細(xì)徹底,也有很多其他好的安全工具并沒有給大家列出。下面給出一個安全工具的列表供大家參考,詳細(xì)的說明可詳見說明文檔和 man文檔和 man 文檔。
工具名稱 | 工具作用 |
Sxid | 檢查系統(tǒng)中的 suid,sgid 以及沒有主人的文件 |
skey | 一次性口令工具 |
logrotate | 日志循環(huán)工具 |
logcheck | 日志管理工具 |
swatch | 日志管理工具,比 logcheck 實時 |
Ssh(openssh) | 提供安全的連接認(rèn)證 |
openssl | 提供加密的數(shù)據(jù)傳送和認(rèn)證 |
Portsentry | 反掃描工具,監(jiān)視自己的udp和tcp端口 |
tripwire | 提供系統(tǒng)完整性檢查 |
gnupg | 對單個文件進(jìn)行加密以及創(chuàng)建數(shù)字簽名 |
hostsentry | 基于主機(jī)的入侵檢測,將連接記入日志 |
ipchains | Linux發(fā)行版自帶的包過濾形防火墻 |
CFS 和 TCFS | 密碼文件系統(tǒng)和透明的密碼文件系統(tǒng)實現(xiàn)目錄下所有文件加密,基于 NFS |
Anti-sniff | 反嗅探工具,檢查網(wǎng)絡(luò)中是否有嗅探器 |
Freeswan | 在 Linux 實現(xiàn) VPN 的工具 |
Syslog-ng | 替代 syslog 的日志文件系統(tǒng) |
Scandns | 進(jìn)行 dns 檢查追蹤的工具 |
Whisker | Cgi 掃描器 |
Snoopy | 通過跟蹤 execve 系統(tǒng)調(diào)用記錄執(zhí)行的命令 |
Linux kernel patch | 內(nèi)核的安全補(bǔ)丁,防止緩沖溢出等 |
krnsniff | 一個基于內(nèi)核的監(jiān)聽模塊 |
iptable | 用來替代ipchains的包過濾防火墻 |
Imsafe | 通過跟蹤系統(tǒng)調(diào)用來檢測緩沖溢出等問題 |
Iplog | 對來往的包進(jìn)行日志記錄 |
Solaris designer | 內(nèi)核補(bǔ)丁,防止緩沖溢出等 |
Stackguard | 作為補(bǔ)丁修補(bǔ)gcc,防止緩沖溢出 |
DTK | Honey port欺騙式防御 |
Antiroute | 阻止和記錄基于路由的跟蹤 |
安全工具介紹
希望您能經(jīng)常關(guān)心最新的安全漏洞和安全新聞,沒有任何系統(tǒng)是完全安全的。這篇文章的目的不過是使大家對安全有一個明確的認(rèn)識,使安全真正能夠得到您的重視,做到深入人心。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!