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