當(dāng)前位置:首頁 >  站長 >  網(wǎng)站運(yùn)營 >  正文

Linux系統(tǒng)安全工具介紹

 2007-03-31 22:58  來源:   我來投稿 撤稿糾錯

  域名預(yù)訂/競價,好“米”不錯過

下面介紹一些可以用于 Linux 的安全工具,這些工具對于固化您的服務(wù)器將起到一定的作用,可以解決各方面的問題。我們的重點只是想讓您了解這些工具,對安裝配置以及使用不會給出很詳細(xì)的介紹。一些安全問題例如 suid 是什么,緩沖溢出是什么等概念性的東西也不屬于本文討論的范圍。

介紹這些工具的目的只是給您一個提示的方向,并不是讓您拘泥于這些工具。畢竟安全是一個過程,不是一個產(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)中隨便一個嗅探器就可以截取您的密碼。現(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 中,每天定期運(yùn)行。這在很多 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 運(yùn)行 logrotate。

3.2 swatch

swatch 是一個實時的日志監(jiān)控工具。您可以設(shè)置您所感興趣的事件,它可以在事件發(fā)生的時候告訴您。Swatch 有兩種運(yùn)行方式:一種可以在檢查日志完畢退出,另一種可以連續(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 在后臺運(yùn)行。啟動后,swatch 產(chǎn)生子進(jìn)程,因此 swatch 是以兩個進(jìn)程運(yù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è)計成自動運(yùn)行,定期檢查日志文件以發(fā)現(xiàn)違反安全規(guī)則以及異常的活動。logcheck 用 logtail 程序記住上次已經(jīng)讀過的日志文件的位置,然后從這個位置開始處理新的日志信息。

可以在下面的站點獲得 logcheck:

logcheck 主要由下面幾個主要的文件:

1.logcheck.sh
這個是一個可執(zhí)行的腳本文件,里面記錄 logcheck 檢查那些日志文件等 logcheck 運(yùn)作所必須的信息。您可以把它加入 crontab 中定時運(yùn)行。

2.logcheck.hacking
它和下面的三個文件一樣,是 logcheck 檢查的模式文件。他們四個文件按從上到下的順序執(zhí)行。這個文件表明了入侵活動的模式。

3.logcheck.violations
這個文件表示有問題,違背常理的活動的模式。優(yōu)先級小于上面的那個模式文件。

4.logcheck.violations.ignore
這個文件和上面的 logcheck.violations 是相對的,是您所不關(guān)心的問題的模式文件。

5.logcheck.ignore
這是檢查的最后一個模式文件。如果沒有和前三個模式文件匹配,也沒有匹配這個模式文件的話,則輸出到報告中。

6.logtail
這個文件記錄日志文件信息。

Logcheck首次運(yùn)行時讀入相關(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è)置不同的選項來改變客戶端程序的運(yùn)行方式。這個文件的每一行包含"關(guān)鍵詞-值"的匹配,其中"關(guān)鍵詞"是忽略大小寫的。用 man 命令查看幫助頁(ssh (1))可以得到詳細(xì)的說明。

"/etc/ssh/sshd_config" 是 OpenSSH 的服務(wù)器端配置文件,允許設(shè)置選項改變這個 daemon 的運(yùn)行。這個文件的每一行包含"關(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 運(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"這個名字。

用加上"-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 運(yùn)行在數(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ī)定成組的策略如何運(yùn)作。

您可以根據(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ī)則,那么在高安全級別的模式下運(yùn)行你可能會遇到一些問題。例如這種情況:其他的管理員在策略更新的過程中,改變了一些文件。為了解決這個問題,確信在高安全級別的模式下所有的變化都是正常的之后,可以采用低級別的安全模式更新策略文件:

用下面的命令在低級別的安全模式下更新策略文件:

[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)運(yùn)而生。

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ī)遇!

相關(guān)文章

  • 確保Linux安全的十招

    Linux不論在功能上、價格上或性能上都有很多優(yōu)點,然而,作為開放式操作系統(tǒng),它不可避免地存在一些安全隱患。關(guān)于如何解決這些隱患,為應(yīng)用提供一個安全的操作平臺,本文會告訴你一些最基本、最常用,同時也是最有效的招數(shù)。Linux是一種類Unix的操作系統(tǒng)。從理論上講

    標(biāo)簽:
    linux安全
  • Linux安全配置步驟簡述

    今天剛整理出來的Linux系統(tǒng)的安全配置,可能有點老了,做參考還是不錯的。一、磁盤分區(qū)1、如果是新安裝系統(tǒng),對磁盤分區(qū)應(yīng)考慮安全性:1)根目錄(/)、用戶目錄(/home)、臨時目錄(/tmp)和/var目錄應(yīng)分開到不同的磁盤分區(qū);2)以上各目錄所在分區(qū)的磁盤空間大

    標(biāo)簽:
    linux安全
  • Linux網(wǎng)絡(luò)安全之經(jīng)驗談

    關(guān)于分區(qū)一個潛在的黑客如果要攻擊你的Linux服務(wù)器,他首先就會嘗試緩沖區(qū)溢出。在過去的幾年中,以緩沖區(qū)溢出為類型的安全漏洞是最為常見的一種形式了。更為嚴(yán)重的是,緩沖區(qū)溢出漏洞占了遠(yuǎn)程網(wǎng)絡(luò)攻擊的絕大多數(shù),這種攻擊可以輕易使得一個匿名的Internet用戶有機(jī)會

    標(biāo)簽:
    linux安全
  • 高級Linux安全管理技巧

    由于Linux操作系統(tǒng)是一個開放源代碼的免費操作系統(tǒng),因此受到越來越多用戶的歡迎。隨著Linux操作系統(tǒng)在我國的不斷普及,有關(guān)的政府部門更是將基于Linux開發(fā)具有自主版權(quán)的操作系統(tǒng)提高到保衛(wèi)國家信息安全的高度來看待,因此我們不難預(yù)測今后Linux操作系統(tǒng)

    標(biāo)簽:
    linux安全
  • 關(guān)于Linux網(wǎng)絡(luò)安全的內(nèi)在限制

    關(guān)于Linux網(wǎng)絡(luò)安全的內(nèi)在限制(1)Linux為美國以外的其它國家提供了自主發(fā)展操作系統(tǒng)的一條捷徑。主要是因為Linux操作系統(tǒng)本身的源代碼是公開的,操作系統(tǒng)開發(fā)方可以對源代碼自由修改并且從新編譯成二進(jìn)制機(jī)器碼,也就是說用戶可以對系統(tǒng)及網(wǎng)絡(luò)安全的源代碼根據(jù)

    標(biāo)簽:
    linux安全

熱門排行

信息推薦