SELinux(Security-Enhanced Linux) 是美國國家安全局(NAS)對于強制訪問控制的實現(xiàn),是 Linux® 上最杰出的新安全子系統(tǒng)。NSA是在Linux社區(qū)的幫助下開發(fā)了一種訪問控制體系,在這種訪問控制體系的限制下,進程只能訪問那些在他的任務中所需要文件。SELinux 默認安裝在 Fedora 和 Red Hat Enterprise Linux 上,也可以作為其他發(fā)行版上容易安裝的包得到。本文是一篇翻譯稿件,主要介紹了怎樣通過SELinux從而加強網(wǎng)絡安全,原文地址如下:http://securityblog.org/brindle/2007/05/28/secure-networking-with-selinux/
在過去的一年中付出了相當多的努力后使得SELinux對網(wǎng)絡支持得更好,感謝偉大的SELinux社區(qū),隨著支持的進一步發(fā)展,它變得對人們越來越有用,人們愿意嘗試使用它并提出反饋意見,最終將變得更加有用,受眾也更加廣泛,因為在SELinux中網(wǎng)絡支持還在不斷發(fā)展(已經(jīng)有一部分其它想法正在討論中,可能今后會被包括進來),我將保持本文的更新,請隨時關注。
在SELinux中的網(wǎng)絡支持包括很多事情,過去SELinux通過對象類的方式實現(xiàn)細粒度的網(wǎng)絡訪問控制,這些對象類是網(wǎng)絡接口,網(wǎng)絡地址和一些套接字對象類(如tcp_socket,udp_socket,rawip_socket等)。
SELinux策略直接標記出了不同種類的網(wǎng)絡對象包括接口(使用netifcon),互聯(lián)網(wǎng)節(jié)點(使用nodecon)和端口(使用portcon),策略的語法結(jié)構(gòu)看起來象下面這樣:
netifcon eth0 system_u:object_r:external_netif_t system_u:object_r: external_packet_t nodecon 192.168.1.1 255.255.255.255 system_u:object_r:external_node_t; portcon tcp 21 system_u:object_r:ftp_port_t ; 這些被標記了的對象使用正常的SELinux規(guī)則就可以訪問了: allow ftpd_t external_netif_t : netif {tcp_send tcp_recv }; allow ftpd_t external_node_t : node { tcp_send tcp_recv }; allow ftpd_t ftp_port_t : tcp_socket { send_msg recv_msg name_bind }; |
策略和規(guī)則結(jié)合起來實際上指定了ftpd_t綁定到端口21,在端口21上發(fā)送和接收tcp消息,在eth0(它的ip地址是192.168.1.1)網(wǎng)卡接口上發(fā)送和接收tcp消息,這些規(guī)則工作得很好,唯一的問題是它們不能在一條規(guī)則中進行描述,因此它們不是連接在一起的。這就意味著如果有另外一套規(guī)則指出ftpd_t只能在內(nèi)部接口上發(fā)送和接收dns(名稱解析服務)數(shù)據(jù)包,依靠上面的規(guī)則他們也能在外部接口上發(fā)送和接收dns數(shù)據(jù)包,注意這些訪問控制也可以用在我稍后要介紹的在SELinux中通過echo 1 > /selinux/compat_net使用的compat_net選項上。這些對象的標簽最后都將增加到libsemanage中,使用semanage命令可以改變它們,但這個命令不能修改策略。
在2006年頂級SELinux開發(fā)者研討會期間,我們討論了如何使網(wǎng)絡標記變得更容易、更多地支持典型的網(wǎng)絡約束和大部分重要的精密地綁定接口、地址和端口的方法,幸運地是在Linux中netfilter已經(jīng)支持這些內(nèi)容以及一些額外的好處,例如網(wǎng)絡連接跟蹤可以更精確地限制諸如使用動態(tài)端口的ftp這些事情。
可能會想到向iptables中增加一條域分類符來控制更容易一些,因此可能會寫一條規(guī)則和SELinux域一樣定義端口、網(wǎng)絡地址、網(wǎng)絡接口實現(xiàn)僅允許ftp數(shù)據(jù)包到達ftpd_t。這可能會用到分布式SELinux策略,但是,可以從SELinux安全服務器移動一部分策略到iptables策略和子系統(tǒng)中去,但我們并不歡迎這樣做,因為我們喜歡單一的,集中的,可分析的SELinux策略,實際上讓我們使用netfilter和iptables來標記數(shù)據(jù)包,然后用SELinux規(guī)則描述同意或拒絕訪問,讓我們看看這都是如何使用的:
iptables -A INPUT -t mangle -p tcp --dport 21 -j SECMARK --selctx system_u:object_r:ftp_packet_t
這條語句標記了經(jīng)過端口21的數(shù)據(jù)包為ftp_ packet_t,SELinux規(guī)則只是簡單地允許ftpd_t發(fā)送和接收這種類型的數(shù)據(jù)包:
allow ftpd_t ftp_packet_t : packet { send recv };
但是這相對于傳統(tǒng)的網(wǎng)絡控制而言并沒有做出更新穎的事情來,讓我們再來看看更有趣的內(nèi)容:
iptables -A INPUT -t mangle -p tcp --dport 21 -i eth0 -s 192.168.0.1/24 -j SECMARK –selctx system_u:object_r:ftp_packet_t
這條語句標記了在eth0上,來自192.168.0.1/24,端口21的數(shù)據(jù)包為ftp_packet_t,因此這就體現(xiàn)了netfilter支持集中處理的好處,另一個iptables規(guī)則如下:
iptables -A INPUT -t mangle -m state --state RELATED,ESTABLISHED -j CONNSECMARK –restore
它將為與此相關的數(shù)據(jù)包進行拷貝,因此當ftp客戶端嘗試通過相關端口(傳輸時端口是動態(tài)指定的)傳輸一個文件時將接收到相同的標簽,它將運用netfilter的連接跟蹤特性來允許ftp僅僅接收與其連接有關的數(shù)據(jù)包,但這并不需要新增加策略規(guī)則或?qū)Σ呗赃M行修改,因為我們正在對標簽進行修改。
這將轉(zhuǎn)變netfilter已經(jīng)存在的功能,使其能夠更精確地指定哪個域能訪問哪個數(shù)據(jù)包,因此它允許你相對于進程而不是機器控制防火墻的功能,如果你在同一臺機器上運行有一些不同安全屬性的服務那它就有用了,例如:允許你有一個內(nèi)部的Apache實例訪問公司的機密數(shù)據(jù),而另外一個外部的Apache實例提供靜態(tài)的web內(nèi)容到internet上。
大多數(shù)人都在思考在SELinux中為什么不僅僅是提供對網(wǎng)絡的支持,而是要在防火墻規(guī)則條目中進行網(wǎng)絡訪問控制,下面的SELinux網(wǎng)絡支持就是標記網(wǎng)絡通訊。
共6頁: 1 [2] [3] [4] [5] [6] 下一頁 | ||||||||
|