歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Linux 平台的安全性

  Linux 平台的安全性 Linux 內核 2.4 版本中集成了 NetFilter 框架,該框架是 Linux 平台新的網絡安全功能框架,實現了多種網絡安全功能:數據包過濾、狀態保持、 NAT ,以及抗攻擊等等。我們熟知的 Iptables ,僅僅是 NetFilter 框架在用戶空間的配置工具,負責從用戶命令行界面接收命令,然後轉化成內核認識的結構體,調用相應的內核操作函數,將規則插入到內核中去。 Iptables 的使用方法請在 Linux 命令行界面中鍵入" man iptables ",查看手冊頁的情況。 要使用 Iptables ,必須在編譯 Linux 內核的時候(內核的版本必須大於 2.4 )選擇與 NetFilter 相關的內核模塊,否則即使安裝了Iptables,也不能使用。別著急,看到 NetFilter和Iptables ,不要認為他們是兩個東西,它們一個是內核空間的實現模塊,稱作 NetFilter ,一個是用戶空間的控制命令解析器,稱作 Iptables 。兩者結合才能完成整體的工作。我們按以下的敘述順序說明 Iptables 和 NetFilter 的使用方法,以及如何使用它們增強主機的安全性。 將分如下章節討論 1. 內核 NetFilter 選項編譯過程 2. Iptables 工具的安裝和編譯 3. NetFilter 框架和 Iptables 使用方式概述 4. 使用 Iptables 增強主機安全性 How-To 好了,開始我們的 Iptables 之旅吧!注意本手冊說明的過程都是在 RedHat7.2 內核版本 2.4.7 ,啟動程序為 LILO , Shell 為 bash 上進行操作的。在別的版本的內核或者操作環境請具體參考系統手冊頁 man 信息。 2.1. 內核 NetFilter 選項編譯過程 2.1.1. 內核代碼的位置 安裝了 Linux 以後,內核部分的代碼在系統目錄 /usr/src/Linux-2.4/ 中。當然如果下載了新的內核代碼包,例如名為 linux-kernel-2.4.X.tag.gz (X表示次要版本號),可以在任何一個目錄下解開該代碼包,但是一般的規律是將代碼包解壓到 /usr/src/ 目錄下,使用的命令序列如下: [test /root/]# pwd/root[test /root/]# mv linux-kernel-2.4.7.tag.gz /usr/src/[test /root/]# cd /usr/src/[test /usr/src/]# tar zxvf linux-kernel-2.4.7.tar.gz[test /usr/src/]# cd linux-kernel-2.4.7 好了,進入到了新的內核代碼目錄,我們現在開始對目錄進行裁減和編譯。注意:如果沒有支持 2.4 版本的內核,可以從 http://www.kernel.org 的網站上獲得關於 Linux 內核的最新下載信息。 2.1.2. 內核代碼選項介紹 進入內核源代碼所在的目錄以後,在該目錄下使用如下命令進入內核配置界面: make menUConfig 該命令會進入到一個 ASCI 的簡單菜單界面,讓用戶對需要的內核選項進行選取,然後自動保存成一個內核配置文件。進入配置界面後如下圖: 選中" Networking options ",進入下一配置界面 本界面是專門配置 Linux 主機網絡特性的配置選項 本界面的內容包含了專門配置 Netfilter 選項 裡面羅列的選項一般都需要使用 Space 鍵選中。注意在高亮光標停留在某個選項上時,使用 Space 鍵可以將該選項加入內核中。但是一個選項和內核有三種關系: 模塊化方式加入。(在選項前顯示【M】) 直接編譯到內核中。(在選項前顯示【*】) 不加入內核(選項前顯示為空【】) 這兩種方式都沒有問題,一般推薦使用直接編譯到內核中。 Space 鍵可以在"模塊方式"、"直接編譯方式"、"忽略模塊"這三種方式之間進行切換。好了,選擇完你需要的選項以後,直接使用 Tab 鍵將高亮光標移動到 " Exit " 上,然後一路退出,到下一個界面。保存剛才對內核選項的配置,然後回車退出。 2.1.3. 內核代碼的編譯和安裝 編譯內核分為以下幾步: 1. 首先使用命令 make dep 命令編譯內核模塊之間的依賴關系。 2. 然後使用命令 make bzImage 命令編譯壓縮的內核。


3. 最後連續使用 make modules 和 make modules_install 命令將模塊化的選項編譯到內核中。 4. 好了,已經編譯完成了內核,現在新內核的名字叫做 bzImage ,路徑位置在(假設源代碼在 /usr/src/Linux-2.4中 )/usr/src/Linux-2.4/arch/i386/boot/ 下,名稱為 bzImage 。 5. 現在我們要使用這個新的內核啟動系統。將 bzImage 拷貝到 /boot/ 目錄下,然後起個新的你喜歡的名字,我們假設為 bzImage.nf 。 2.1.4. 系統使用新編譯的內核重新啟動 1. 修改 /etc/lilo.conf (假設你用 LILO 啟動系統),添加下列行: image=/boot/bzImage.nf label=linux-nf read-only root=/dev/hda5 (換成你系統的根所在的硬件路徑) 2. 編輯完成以後,在 shell 中敲入命令 lilo ,安裝新的內核到啟動映像中。 3. 重新啟動系統(使用命令 reboot ,或者 halt -r ) 4. 在系統啟動以後,你會看到 LILO 提出的提示符,此時按 TAB 鍵,然後會出現可以使用的啟動內核,應該有 linux-nf ,它對應的內核就是 /boot/bzImage.nf 。直接敲入 linux-nf ,然後回車,系統就會使用 bzImage.nf 啟動。 2.2. Iptables 工具的安裝和編譯 Iptables 是 Linux Netfilter 框架的用戶端程序,負責接收用戶的命令,並且將用戶命令添加到內核中。 Iptables 一般是一個 *.tar.gz 的軟件包,下載以後使用如下命令序列將其展開: [test /root]# pwd/root[test /root]# tar zxvf iptables-2.6.tar.gz[test /root]# cd iptables-2.6[test /root]# make[test /root]# make install 好了,現在可以直接在命令行方式下使用該命令了。該命令的語法後面介紹。 2.3. NetFilter 框架和 Iptables 使用方法概述 Linux 根據數據包在內核中的不同處理,將整個 IP 包在內核中的生存周期劃分為三個: PREROUTING 、FORWARD、POSTROUTING 。其他還有兩個 LOCAL INPUT 和 LOCAL_OUTPUT (一般簡寫成 INPUT 和 OUTPUT ),分別對應送入本機上層協議棧的數據包和本機發送出的數據包。如果想要保護本機的安全性,那麼只需關注 INPUT 和 OUTPUT 方向的數據包就可以了。其他幾個不需要關心。 這五個方向對應著內核中五條不同的規則鏈和三個不同的規則表。 Linux 中規則鏈被組織在三個不同的規則表中: Filter 、NAT、Mangle 。其中 Filter 針對過濾系統, NAT 針對地址轉換系統, Mangle 針對策略路由和特殊應用。規則鏈分配如下: Filter:INPUT、FORWARD、OUTPUT NAT:PREROUTING、POSTROUTING Mangle:PREROUTING、POSTROUTING 針對主機的安全性主要集中在 Filter 表中的 INPUT 和 OUTPUT 規則鏈,這兩個關鍵字在添加規則的時候會使用到。 在內核編譯了 NetFilter 系統以後,系統會自動建立這五個規則鏈和三個規則表。 我們在使用的時候主要要使用到的規則表是 Filter 表,規則鏈是 INPUT 和 OUTPUT 鏈。添加的主要規則都集中在這兩個鏈上。用圖示表示如下: 2.4. 使用 Iptables 增強主機的安全性 How-To 1. 取消不必要的服務監聽端口 使用 Linux 下的 Setup 命令,進入 ASCI 圖形界面,限制主機提供的常用服務,例如 FTP、Daytime、Echo、Telnet、WEB、syslog remote 等等一系列不需要的服務。 然後使用下列命令序列重啟 Xinetd : [test /root]# cd /etc/init.d[test /root]# ./xinted restart 使用 netstat -na 命令觀察系統中是否有不期望的端口正在監聽。如果自己需要什麼服務,利用 Setup 工具打開服務,並且重啟 Xinetd 就可以了。 如果沒有不期望的端口被打開,可以進入下一步。 2. 修改 INPUT 和 OUTPUT 規則鏈的默認策略 使用下列命令序列: [test /root]# iptables -P INPUT DROP[test /root]# iptables -P OUTPUT DROP 這樣以來,任何未經同意的數據包都會被系統拒絕。 添加如下命令控制訪問主機: iptables -A INPUT -p PROTO -state ESTABLISHED ,RELATED -j ACCEPT

本條命令的含義是凡是屬於已經建立連接的數據包,或者關聯性連接的數據包都允許通過。注意將命令行中的 "PROTO" 換成真正的協議名稱 tcp、 udp、 或者 icmp iptables -A INPUT -s A.B.C.D/32 -p PROTO -dport PORT -j ACCEPT 這條命令的含義是允許從 IP 地址為 A.B.C.D 主機來的,協議為 PROTO 的 IP 包,訪問本主機的 PORT 端口的數據包允許通過。例如可以將 PORT 換成 80 ,表示 WEB 服務,換成 22 ,表示 SSH 服務等等。注意將 PROTO 換成 tcp 或者 udp 。 好了,只有經過上述命令添加的 IP 地址的主機,才能訪問該主機。 為了防止IP地址冒充,我們可以將 IP 地址和 MAC 地址進行綁定,使用如下命令: arp -s A.B.C.D aa:bb:cc:dd:ee:ff 表示 A.B.C.DIP 地址對應的 MAC 地址是 aa:bb:cc:dd:ee:ff 。 上述命令完成以後,主機的安全訪問就在 NetFilter 的控制之下了。 例如,允許 10.0.0.41 的主機訪問該服務器的 SSH 服務,使用如下命令: iptables -A INPUT -s 10.0.0.41/32 -p tcp -dport 22 -j ACCEPT 允許 10.0.0.0/24 網段訪問 news 服務: iptables -A INPUT -s 10.0.0.0/24 -p tcp -dport 532 -j ACCEPT 同時綁定內部主機的 MAC 地址和 IP 地址的對應關系。 最後可以使用下列命令觀察一下是否所有需要的規則都被完全的加入了內核中: iptables -L 全文出處:enet 玉傑 2004-07-20



好了,只有經過上述命令添加的 IP 地址的主機,才能訪問該主機。 為了防止IP地址冒充,我們可以將 IP 地址和 MAC 地址進行綁定,使用如下命令: arp -s A.B.C.D aa:bb:cc:dd:ee:ff 表示 A.B.C.DIP 地址對應的 MAC 地址是 aa:bb:cc:dd:ee:ff 。 上述命令完成以後,主機的安全訪問就在 NetFilter 的控制之下了。 例如,允許 10.0.0.41 的主機訪問該服務器的 SSH 服務,使用如下命令: iptables -A INPUT -s 10.0.0.41/32 -p tcp -dport 22 -j ACCEPT 允許 10.0.0.0/24 網段訪問 news 服務: iptables -A INPUT -s 10.0.0.0/24 -p tcp -dport 532 -j ACCEPT 同時綁定內部主機的 MAC 地址和 IP 地址的對應關系。 最後可以使用下列命令觀察一下是否所有需要的規則都被完全的加入了內核中: iptables -L 全文出處:enet 玉傑 2004-07-20



Copyright © Linux教程網 All Rights Reserved