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