国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

linux 網橋的配置與實現

2024-06-28 13:22:10
字體:
來源:轉載
供稿:網友
linux 網橋的配置與實現

==================================================================================from: http://www.ibm.com/developerworks/cn/linux/kernel/l-netbr/index.htmlALinux網橋的實現分析與使用文檔選項未顯示需要 javaScript的文檔選項打印本頁將此頁作為電子郵件發送級別: 初級祝順民([email=getmoon@163.com?subject=ALinux%E7%BD%91%E6%A1%A5%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%88%86%E6%9E%90%E4%B8%8E%E4%BD%BF%E7%94%A8&cc=]getmoon@163.com[/email])xml error:Please enter a value for the author element's jobtitle attribute, or the company-name element, or both.2004 年3 月09 日本文分析了linux2.4.x內核的網橋的實現方法,并且描述了如何使用2.4中的網橋。網橋,類似于中繼器,連接局域網中兩個或者多個網段。它與中繼器的不同之處就在于它能夠解析它收發的數據,讀取目標地址信息(MAC),并決定是否向所連接網絡的其他網段轉發數據包。為了能夠決策向那個網段發送數據包,網橋學習接收到數據包的源MAC地址,在本地建立一個以MAC和端口為記錄項的信息數據庫。 一、Linux內核網橋的實現分析 Linux 內核分別在2.2 和 2.4內核中實現了網橋。但是2.2 內核和 2.4內核的實現有很大的區別,2.4中的實現幾乎是全部重寫了所有的實現代碼。本文以2.4.0內核版本為例進行分析。 在分析具體的實現之前,先描述幾個概念,有助于對網橋的功能及實現有更深的理解。

    • 沖突域 一個沖突域由所有能夠看到同一個沖突或者被該沖突涉及到的設備組成。以太網使用C S M A / C D(Carrier SenseMultiple access with CollisionDetection,帶有沖突監測的載波偵聽多址訪問)技術來保證同一時刻,只有一個節點能夠在沖突域內傳送數據。網橋或者交換機,構成了一個沖突域的邊界。缺省情況下,網橋中的每個端口實際上就是一個沖突域的結束點。
    • 廣播域 一個廣播域由所有能夠看到一個廣播數據包的設備組成。一個路由器,構成一個廣播域的邊界。網橋能夠延伸到的最大范圍就是一個廣播域。缺省的情況下,一個網橋或交換機的所有端口在同一個廣播域中。VLAN技術可以把交換機或者網橋的不同端口分割成不同的廣播域。一般情況下, 一個廣播域代表一個邏輯網段。
    • 網橋中的CAM表 網橋和交換機一樣,為了能夠實現對數據包的轉發,網橋保存著許多(MAC,端口)項。所有的這些項組成一個表,叫做CAM表。每個項有超時機制,如果一定時間內未接收到以這個MAC為源MAC地址的數據包,這個項就會被刪除。 圖1:一個交換網絡的邏輯圖 在Linux內核網橋的實現中,一個邏輯網段用net_bridge結構體表示。一個邏輯網段需要保留的信息有:
    • 本邏輯網段中所有的端口(port_list) 每個端口用net_bridge_port結構體來表示,從net_bridge_port結構體中可以看出,它主要有:
    • 邏輯網段中的下一個端口(next)
    • 本端口所屬的邏輯網段(br)
    • 本端口所指向的物理網卡(dev)
    • 本端口在網橋中的編號(port_no)
    • 用于生成樹管理的信息
    • 一個邏輯網段中可以具有很多個端口,所有的端口都掛在以port_list為鏈表頭的鏈表上。本網段中CAM表(hash[BR_HASH_SIZE]) CAM表中的每個項用net_bridge_fdb_entry結構體代表,每項中有:
    • 用于CAM表連接的鏈表指針(next_hash,pPRev_hash)
    • 此項當前的引用計數(use_count)
    • MAC地址(addr)
    • 此項所對應的端口(dst)
    • 處理MAC超時(ageing_timer)
    • 是否是本機的MAC地址(is_local)
    • 是否是靜態MAC地址(is_static)
    • 一個邏輯網段中的所有表項形成一個CAM表,他們之間的組織關系是一個HASH鏈表。HASH鏈的個數為BR_HASH_SIZE(256)。本邏輯網段用于和外部通信的虛擬網絡設備(dev) Linux網橋可以在網橋上為每個邏輯網段配置一個IP,用于和外部通信。實際上這個IP不是配置在一個特定的物理網卡上面, 而是建立一個虛擬的網卡,虛擬網卡可以附在每個同一邏輯網段的物理網卡上,讓這個網卡可以象所有的物理網卡一樣工作。從而使網橋可以和外部通信。
    • 本邏輯網段虛擬網卡的統計數據(statistics) 按照Linux網卡驅動的接口,一個網卡的統計信息是由每個網卡的私有數據處理的。一般的寫法是用dev->priv來指向每個網卡的統計數據。網卡的get_stats方法就是用來讀取統計數據。
    • 用戶一個網段的生成樹(STP)信息 以上對幾個結構體的描述和分析可以通過下圖來表示: 圖2:Linux網橋數據結構描述圖 描述了網橋的數據結構后,就可以開始數據包處理流程的分析。 網橋處理包遵循著以下幾條原則:
    • 在一個接口上接收到的包不會再在那個接口上發送這個數據包。
    • 每個接收到的數據包都要學習其源MAC地址。
    • 如果數據包是多播包或廣播包,則要在同一個網段中除了接收端口外的其他所有端口發送這個數據包,如果上層協議棧對多播包感興趣,則需要把數據包提交給上層協議棧。
    • 如果數據包的目的MAC地址不能在CAM表中找到,則要在同一個網段中除了接收端口外的其他所有端口發送這個數據包。
    • 如果能夠在CAM表中查詢到目的MAC地址,則在特定的端口上發送這個數據包,如果發送端口和接收端口是同一端口,則不發送。 在網絡軟中斷處理函數net_rx_action中,嵌入了handle_bridge用于把數據包skb送入網橋模塊處理。 #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) if (skb->dev->br_port != NULL && br_handle_frame_hook != NULL) { handle_bridge(skb, pt_prev); dev_put(rx_dev); continue; }#endif br_handle_frame_hook是網橋處理接收到數據包的中入口,網橋初始化(br_init)的時候,把br_handle_frame_hook賦值為br_handle_frame。skb->dev->br_port用于判斷接收到這個數據包的接口是否是網橋中的一個端口,如果是,skb->dev->br_port不為NULL,那么數據包應該由網橋處理。反之,數據包由上層協議棧處理。網橋中虛擬網卡對應的數據包就是在這個判斷點時不再進入網橋。(實際上虛擬網卡并不會自己主動接收數據包,而是在網橋處理中把數據包向本地上層協議棧提交,并且修改了skb->dev,使得數據包不會多次進入橋處理代碼)。 前面提到,網橋處理接收包的入口是br_handle_frame(net/bridge/br_input.c)函數。 br_handle_frame函數首先從skb中獲得這個包屬于的邏輯網段。然后調用__br_handle_frame進行轉發處理。br_handle_frame函數里有一個值得了解的地方,里面有一個加讀鎖。因為在轉發中需要讀CAM表,所以必須加讀鎖,避免在這個過程中另外的內核控制路徑(如多處理機上另外一個CPU上的系統調用)修改CAM表。 對輸入包的轉發決策都是在__br_handle_frame函數中。這個函數的處理可以分為以下幾個部分:
    • 如果網橋的虛擬網卡處于混雜模式,那么每個接收到的數據包都需要克隆一份送到AF_PACKET協議處理體(網絡軟中斷函數net_rx_action中ptype_all鏈的處理)。 if (br->dev.flags & IFF_PROMISC) { struct sk_buff *skb2; skb2 = skb_clone(skb, GFP_ATOMIC); if (skb2) { passedup = 1; br_pass_frame_up(br, skb2); } }
    • 如果源MAC地址是多播或者是廣播地址,那么這個包格式是錯誤的,簡單的丟棄。 if (skb->mac.ethernet->h_source[0] & 1) goto freeandout;
    • 如果是一個多播包,則需要向本機的上層協議棧傳送這個數據包(如果在之前沒有向上提交的話,即passedup為0。如果為1,則前面已經發送了,現在就不需要提交了,在后面中的處理都是一樣的)。 if (!passedup && (dest[0] & 1) && (br->dev.flags & IFF_ALLMULTI || br->dev.mc_list != NULL)) { struct sk_buff *skb2; skb2 = skb_clone(skb, GFP_ATOMIC); if (skb2) { passedup = 1; br_pass_frame_up(br, skb2); } }
    • 如果啟動了生成樹協議,一個生成樹包需要由生成樹協議處理模塊單獨處理。如果不支持,則這個包的目的MAC肯定在CAM中查詢不到,所以是向所有的端口發送(除接收口)。這樣才不會影響整個網絡的生成樹協議運行。 if (br->stp_enabled && !memcmp(dest, bridge_ula, 5) && !(dest[5] & 0xF0)) goto handle_special_frame;
    • 如果接收端口不是處于LEARNING或者FORWARDING,那么就學習這個包的源MAC地址,或者更新CAM表中相應項的定時器。 if (p->state == BR_STATE_LEARNING || p->state == BR_STATE_FORWARDING) br_fdb_insert(br, p, skb->mac.ethernet->h_source, 0);
    • 如果是一個多播包或廣播包,則調用br_flood函數向每個口發送(除接收口)這個數據包。如果之前沒有提交上層協議,則需要克隆一個包提交上層協議。 if (dest[0] & 1) { br_flood(br, skb, 1); if (!passedup) br_pass_frame_up(br, skb); else kfree_skb(skb); return; }
    • 用接收到數據包的目的MAC地址查詢CAM表。 dst = br_fdb_get(br, dest);
    • 查詢CAM表后,如果能夠找到表項,并且目的MAC是到本機的虛擬網卡的,那么就需要把這個包提交給上層協議。網橋就是通過這個地方的處理和外部通信,實現遠程管理的目的。 if (dst != NULL && dst->is_local) { if (!passedup) br_pass_frame_up(br, skb); else kfree_skb(skb); br_fdb_put(dst); return; }
    • 如果查詢CAM表有結果,并且目的MAC不是到本地的,那么就通過調用br_forward發送到特定的端口。 if (dst != NULL) { br_forward(dst->dst, skb); br_fdb_put(dst); return; }
    • 如果在CAM表中查詢不到數據包的目的MAC地址,那么就需要向別的每個端口發送這個數據包。調用br_flood來進行這個處理。 br_flood(br, skb, 0); return; 在br_forward和br_flood函數中都必須判斷源接口和目的接口是否是同一個,如果是同一端口,就不發送這個數據包。數據包的最后發送都是通過統一的發送接口dev_queue_xmit函數來完成的。 以下就是數據包的處理流程: 圖3:數據包處理流程圖 前面多次提到網橋的虛擬網卡,實際上在網橋中,這個網卡存在著一個net_device結構(在net_bridge里),但是不存在著實際的物理設備,而是附在網橋中每個物理網卡上面。這個虛擬網卡的支持函數在(br_device.c)。因為是虛擬的網卡,所以沒有物理中斷產生,每個需要發送到這個設備的數據包都是靠判斷數據包的目的MAC地址來決定是否需要提交到本地上層協議棧(在__br_handle_frame判斷)。 如果數據包需要向上層協議提交,都調用br_pass_frame_up函數來處理。在這個函數中,首先把skb->dev設置成br->dev。然后再模擬在中斷中處理數據包一樣,進行相應的處理,然后調用netif_rx放入接收隊列。這里有一個要十分注意的地方,這個數據包的skb->dev已經變成br->dev。所以在網絡接收軟中斷處理函數net_rx_action中不會再次進入handle_bridge了。 static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb){ br->statistics.rx_packets++; br->statistics.rx_bytes += skb->len; skb->dev = &br->dev; skb->pkt_type = PACKET_HOST; skb_pull(skb, skb->mac.raw - skb->data); skb->protocol = eth_type_trans(skb, &br->dev); netif_rx(skb);} 回頁首二、配置內核 2.4 Linux 網橋 要配置網橋,首先需要網橋的配置工具bridge-utils。這個配置程序的源代碼可以在 http://bridge.sourceforge.net/bridge-utils/下載。編譯成功之后,就可以生成網橋配置的主要工具brctl。 下面,我們將用brctl對以下網絡拓撲配置網橋,使Linux能夠對數據包進行交換。 上圖中,有五臺主機。其中中間那臺主機裝有linux,安裝了網橋模塊,而且有四塊物理網卡,分別連接同一網段的其他主機。我們希望其成為一個網橋,為其他四臺主機(IP分別為192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5)之間轉發數據包。同時,為了方便管理,希望網橋能夠有一個IP(192.168.1.1),那樣管理員就可以在192.168.1.0/24網段內的主機上telnet到網橋,對其進行配置,實現遠程管理。 前一節中提到,網橋在同一個邏輯網段轉發數據包。針對上面的拓撲,這個邏輯網段就是192.168.1.0/24網段。我們為這個邏輯網段一個名稱,br_192。首先需要配置這樣一個邏輯網段。 # brctl addbr br_192 (建立一個邏輯網段,名稱為br_192) 實際上,我們可以把邏輯網段192.168.1.0/24看作使一個VLAN ,而br_192則是這個VLAN的名稱。 建立一個邏輯網段之后,我們還需要為這個網段分配特定的端口。在Linux中,一個端口實際上就是一個物理網卡。而每個物理網卡的名稱則分別為eth0,eth1,eth2,eth3。我們需要把每個網卡一一和br_192這個網段聯系起來,作為br_192中的一個端口。 # brctl addif br_192 eth0 (讓eth0成為br_192的一個端口)# brctl addif br_192 eth1 (讓eth1成為br_192的一個端口)# brctl addif br_192 eth0 (讓eth2成為br_192的一個端口)# brctl addif br_192 eth3 (讓eth3成為br_192的一個端口) 網橋的每個物理網卡作為一個端口,運行于混雜模式,而且是在鏈路層工作,所以就不需要IP了。 # ifconfig eth0 0.0.0.0# ifconfig eth1 0.0.0.0# ifconfig eth2 0.0.0.0# ifconfig eth3 0.0.0.0 然后給br_192的虛擬網卡配置IP:192.168.1.1。那樣就能遠程管理網橋。 # ifconfig br_192 192.168.1.1 給br_192配置了IP之后,網橋就能夠工作了。192.168.1.0/24網段內的主機都可以telnet到網橋上對其進行配置。 以上配置的是一個邏輯網段,實際上Linux網橋也能配置成多個邏輯網段(相當于交換機中劃分多個VLAN)。具體的方法可以參考bridge-util中的HOWTO。 回頁首三、總結 本文分析了Linux網橋的實現,并且舉例說明如何配置網橋。 通過學習網橋的實現,就能夠了解網絡中二層交換的原理。 網橋和交換機的功能非常相似,所以在分析網橋的時候,絕大多數情況下可以用交換機的處理方法來分析網橋的動作。 關于作者祝順民,網名:getmoon。目前從事防火墻開發,致力于網絡的研究和開發,分析linux內核。經常出沒于 www.linuxforum.net的內核板塊。希望于愛好者們共同探討。email: [email=getmoon@163.com?cc=]getmoon@163.com[/email] ================================================linux協議棧之網橋實現(從網橋配置說起(二))------------------------------------------本文系本站原創,歡迎轉載!轉載請注明出處:http://ericxiao.cublog.cn/------------------------------------------關于網橋:網橋是一個二層設備,在深入之前可以把它當成一個二層的交換機。它在二層協議上轉發數據。網橋為了轉發數據,維持了一個端口與MAC的對應表,通常通為CAM表。根據這張表可以把數據送往相應的端口進行發送.網橋的轉發過程為:1:接收到一個包。判斷自己的CAM表中是否含包它此包的源地址.如果沒有,則把源地址與端口更新至于CAM表.2:判斷包是否是送給本機,如果是,則送往本機上層協議棧處理。如果不是,則查尋CAM表。找到相應的出口。3:如果找到出口,則將此包送至出口。如果不存在,將會在各端口發送。4:如果CAM表中對應表項在規定時間之內沒有得到更新,則刪除此項。網橋的配置:Brctl是一個比較好的配置網橋的工具。它的源代碼和配置方法極其簡單。我們將從網橋的配置流程說起,看linux內核是怎樣一步步管理的。首先,創建一個網橋: brctl addbr br0 (建立一個br0的網橋)然后,將接口添加進網橋:brctl addifbr0 eth0 (將eth0和eth1添加進網橋br0) brctl addif bro eth1OK,網橋現在就配置好了。這臺linux的主機可以當作交換機使用了,從eth0的包都可以轉發到eth1。現在,我們看下代碼中如何進行處理首先 brctl addbr 。查看brctl的代碼發現它調用了:ioctl(br_socket_fd, SIOCBRADDBR, brname);然后 brctl addif 在brctl的代碼中調用了:ioctl(br_socket_fd, SIOCBRADDIF, &ifr);呵呵。Brctl的代碼很簡單吧,只是調用了用戶空間的配置工具ioctl.Linux網橋分析:好了,現在就可以進入內核分析網橋模式了:static int __init br_init(void) (net/brige/br.c){ //分配slab緩沖區 br_fdb_init();//網橋的netfiter處理,將在以后的章節中分析#ifdef CONFIG_BRIDGE_NETFILTER if (br_netfilter_init()) return 1;#endif //用戶空間ioctl調用的函數 brioctl_set(br_ioctl_deviceless_stub); //接收到數據包的處理,也就是我們在上面netif_receive_skb函數中看到的br_handle_frame_hook br_handle_frame_hook = br_handle_frame;#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) br_fdb_get_hook = br_fdb_get; br_fdb_put_hook = br_fdb_put;#endif //在netdev_chain通知鏈表上注冊。關于通知鏈表,在前面已經介紹過,這里不再討論了 register_netdevice_notifier(&br_device_notifier); return 0;}==================================================================================from: http://www.linux-cn.com/html/linux/system/20070505/27862.html使用Linux創建網橋式防火墻來源:Linux-cn.com 作者:Webmaster 時間:2007-05-05 點擊: [收藏] [投稿]作者:Henry Stilmack原文出處:http://www2.linuxjournal.com/articles/misc/0041.html翻譯:ideal  聯合天文學中心在夏威夷島的Manua Kea的14,000英尺高的山頂上擁有兩個天文望遠鏡,還在Hilo市有自己的辦公室及其他設施,該組織是是通過夏威夷大學連接到Internet上的,夏威夷大學在自己的B類IP地址范圍內給天文中心分配了三個子網。以前天文中心的網絡安全性是由出口路由器的 ACL(訪問控制列表)連同Soloris或Linux系統的主機訪問控制(tcpwrappers)來實現的。最近天文中心的一個主要英國資助基金會在一次審核后強烈推薦安裝防火墻來增強網絡的安全性。在對幾種商業和免費的防火墻產品進行調研以后,發現它們都需要對內部網絡的三個不同子網地址都重新進行分配,分配為192.168的內部地址。內部網絡的在三個子網上共有超過200個節點,某些嵌入式微處理器系統甚至需要重新燒制EEPROM以實現IP變換,這是一個非常麻煩和龐雜的任務。因此就開始尋找透明防火墻解決方案,實現即能保持原有的地址分配,又能實現對內部網絡的防護。  Linux 2.2以上版本都支持以太網橋接方式。一個網橋的一個接口接收到數據報以后,通過檢查目的MAC地址以后被轉發到另外一個接口上,而不去檢查源或目的IP地址。一個名為AC2I的法國公司發布了一個內核補丁實現在網橋化的接口上使用ipchains進行數據報過濾。這種解決方案能實現透明的防火墻,同時保證對內部網絡提供上層的保護和訪問控制。下面我們就討論如何架設一個網橋式防火墻。1.硬件配置  為了實現高效的防火墻和網絡檢測,系統CPU必須足夠的強大和快速。該系統架設在一臺擁有256M內存和500MHz的賽揚CPU系統之上。測試顯示橋能滿足一個10M以太網的速度要求,而不會出現丟包現象。系統需要三塊網卡,其中兩塊網卡支持網橋的實現,另外一塊用來實現對防火墻的管理。  磁盤容量并不是很重要,但是所有的log信息應該被保存下來。若希望維護某些本地logging(用于某些配置和檢測工具),則需要確保擁有足夠的免費空間-防火墻和入侵檢測記錄往往非常龐大。2.安裝Linux  下面的討論都基于Linux2.2.16(redhat7.0)版本內核,若使用2.4內核,iptables將會替代ipchains實現內核防火墻。  首先進行標準的Linux安裝,但是基本上不要選擇任何應用軟件包,甚至包括xinet/inetd,因為在該系統上不需要運行任何服務。不要安裝編譯 /開發工具,因為若系統被攻破則入侵者就不那么容易編譯任何程序。但是需要安裝Perl(某些報告工具是需要的)和OpenSSH(用于遠程管理)。確保安裝ipchains軟件包-這對于就防火墻設置是必須的。一個web瀏覽器也許會很有用處。若你僅僅接收來自內部網絡的時間更新那么安裝NTP則不會有多大壞處。你可以選擇安裝某些X11應用,tcpwrapper及某些網絡監控包 (whois,finger,tcpdump,traceroute,nc等等)。創建一個非root賬號,使用該賬號登錄系統。  安裝時,僅僅配置一個主以太接口-該接口將是被保護網絡的一個節點-為其配置一個固定的網絡地址,此時應該將其連接到一個空的HUB上,在進行安全設置以后再將其連接到網絡中。當系統安裝完畢并重新啟動時,在lilo引導系統時鍵入linux single以單用戶模式引導進入系統,編輯/etc /hosts.allow來只允許管理機通過SSH來連接進入系統,然后重新啟動按照正常模式引導進入系統。然后再將主以太接口連接到內部網絡中。3.創建支持網橋方式的內核  按照基本的內核編譯步驟進行,只不過需要關閉大多數的選項開關,而僅僅打開一些必須的內核編譯開關。  進入到/usr/src目錄下,拷貝內核源代碼到一個新創建的linux-fw目錄下: # cd /usr/src;mkdir linux-fw;cp -r linux-2.2.16 ./linux-fw # rm linux;ln -s ./linux-fw linux   對linux源代碼打linux_brfw2補丁,該補丁為ipchains添加了一個名為bridgein的缺省規則鏈。該鏈將被用來存放網橋式防火墻規則,但是該規則鏈中的規則只能使用ACCEPT或DENY目標,使用REJECT及MASQ是沒有意義的。可以從 http://ac2i.tzo.com/bridge_filter/處得到該補丁。 # patch -p0|linux host|| eth2=->+----------+>ifconfig eth0 down>ifconfig eth1 down>brctl addbr br0>brctl addif br0 eth0>brctl addif br0 eth1>ifconfig eth0 0.0.0.0>ifconfig eth1 0.0.0.0>ifconfig br0 192.168.10.1then, the virtual interface 'br0' can be used for dhcpd to serve ip address on multi-interface.==================================================================================from: http://ansondrew.bokee.com/6414248.html淺析linux網橋設置MAC地址時的行為關鍵詞: linux 網橋 MAC 先說現象brctl addbr br0ifconfig br0br0 MAC is 00:00:00:00:00:00brctl addif br0 eth1(eth1 is xx:xx:xx:xx:xx:33)ifconfig br0br0 MAC is xx:xx:xx:xx:xx:33same as eth1, auto changebrctl addif br0 eth2(eth2 is xx:xx:xx:xx:xx:30)ifconfig br0br0 MAC is xx:xx:xx:xx:xx:30same as eth2, For eth2 less than eth1, auto changeifconfig eth2 hw ether xx:xx:xx:xx:xx:50ifconfig br0br0 MAC is xx:xx:xx:xx:xx:33same as eth1, auto changeifconfig br0 hw ether xx:xx:xx:xx:xx:99ifconfig br0br0 MAC is xx:xx:xx:xx:xx:33same as eth1, NOT changeifconfig br0 hw ether xx:xx:xx:xx:xx:33;same as eth1ifconfig eth2 hw ether xx:xx:xx:xx:xx:20;less than eth1ifconfig br0br0 MAC is xx:xx:xx:xx:xx:33same as eth1, `ifconfig br0 hw` NOT effectiveifconfig eth1 hw ether xx:xx:xx:xx:xx:50;upper op,we set br0 = eth1's MAC,now we change eth1 MACifconfig br0br0 MAC is xx:xx:xx:xx:xx:20same as eth2, auto change結論:br0如果沒有指定hw MAC, br0的MAC地址會根據bridge中port的變化,自動選擇port中最小的一個MAC地址作為br0的MAC地址。br0只能指定port中有的interface的MAC作為br0的MAC地址。源代碼分析:source code dir is: linux-2.4.x/net/bridge- br_device.c br_dev_setup() 注冊了一些函數,其中dev->set_mac_address = br_set_mac_address;//這個就是ifconfig br0 hw ether調用的函數了 static intbr_set_mac_address(struct net_device *dev, void *addr) { struct net_bridge *br = dev->priv; struct sockaddr *sa = (struct sockaddr *) addr; 。。。。。 //here ! copy MAC addr to br->preferred_id.addr memcpy(br->preferred_id.addr, sa->sa_data, ETH_ALEN); br_stp_recalculate_bridge_id(br); 。。。。。 }- br_stp_if.c static unsigned char br_mac_zero[6] = {0,0,0,0,0,0}; /* called under bridge lock */ void br_stp_recalculate_bridge_id(struct net_bridge *br) { unsigned char *addr; struct net_bridge_port *p; //初始br0的MAC為00:00:00:00:00:00 addr = br_mac_zero; p = br->port_list; while (p != NULL) { /* match against preferred address first */ if (memcmp(p->dev->dev_addr, br->preferred_id.addr, ETH_ALEN) == 0) { addr = p->dev->dev_addr; //匹配port的MAC地址與首選MAC是否相符 break; } if (addr == br_mac_zero || memcmp(p->dev->dev_addr, addr, ETH_ALEN) dev->dev_addr; p = p->next; } //如果沒有Port的話,就為0; //如果沒有設置首選MAC,就等于最小的那一個。 //如果設置了首選MAC,則首選MAC必須同其中一個port的MAC匹配,才等于首選MAC if (memcmp(br->bridge_id.addr, addr, ETH_ALEN)) br_stp_change_bridge_id(br, addr); }- 什么時候會執行br_stp_recalculate_bridge_id呢 - in br_device.c 中 br_set_mac_address() - in br_if.c 中 br_del_if() & br_add_if() - in br_notify.c 中 br_devic_event()的 NETDEV_CHANGEADDR 事件,該事件是任意port有修改addr就會觸發的 看過代碼就很容易理解bridge在處理自身MAC地址時的行為了==================================================================================from: http://hi.baidu.com/pengge168/blog/item/6e6f91fc98718afbfd037f27.html在linux下配置網橋透明模式防火墻一、透明模式防火墻與透明代理的概念 一般而言,防火墻的兩個網絡接口應分屬兩個不同的網絡,根據系統管理員定義的訪問規則在兩個接口之間轉發數據包,或者拒絕、丟棄數據包。實際上,防火墻不單單是訪問控制的功能,而且還充當了路由器的角色。當然,這并非有什么不妥當的地方,但是當你企圖把你配置好的防火墻放入運行網絡,來保護現有系統安全的時候,你不得不重新考慮和更改你的網絡架構。另外一個可能的麻煩是,當防火墻發生意外時,如果沒有防火墻的硬件備份的話,那么你將面臨巨大的心理壓力,因為防火墻的故障,整個網絡癱瘓了。假如你把防火墻配置成透明模式(可稱為偽網橋),就無需更改網絡架構,即使是防火墻不能工作了,要做的僅僅是拔出網線,把網線直接插在路由器的內部接口就可以讓網絡正常工作,然后你就有時間慢慢恢復發生故障的防火墻。 在防火墻廠商推薦產品的過程中,很多廠商往往會介紹自己的產品實現了透明模式和透明代理。那么究竟什么是透明模式和透明代理呢?他們之間又有何關系呢?下面我們將做具體分析。 透明模式,顧名思義,首要的特點就是對用戶是透明的(Transparent),即用戶意識不到防火墻的存在。要想實現透明模式,防火墻必須在沒有IP地址的情況下工作,不需要對其設置IP地址,用戶也不知道防火墻的IP地址。 防火墻作為實際存在的物理設備,其本身也起到路由的作用,所以在為用戶安裝防火墻時,就需要考慮如何改動其原有的網絡拓撲結構或修改連接防火墻的路由表,以適應用戶的實際需要,這樣就增加了工作的復雜程度和難度。但如果防火墻采用了透明模式,即采用無IP方式運行,用戶將不必重新設定和修改路由,防火墻就可以直接安裝和放置到網絡中使用,如交換機一樣不需要設置IP地址。 透明模式的防火墻就好象是一臺網橋(非透明的防火墻好象一臺路由器),網絡設備(包括主機、路由器、工作站等)和所有計算機的設置(包括IP地址和網關)無須改變,同時解析所有通過它的數據包,既增加了網絡的安全性,又降低了用戶管理的復雜程度。而與透明模式在稱呼上相似的透明代理,和傳統代理一樣,可以比包過濾更深層次地檢查數據信息,比如FTP包的port命令等。同時它也是一個非常快的代理,從物理上分離了連接,這可以提供更復雜的協議需要,例如帶動態端口分配的H.323,或者一個帶有不同命令端口和數據端口的連接。這樣的通信是包過濾所無法完成的。 防火墻使用透明代理技術,這些代理服務對用戶也是透明的,用戶意識不到防火墻的存在,便可完成內外網絡的通訊。當內部用戶需要使用透明代理訪問外部資源時,用戶不需要進行設置,代理服務器會建立透明的通道,讓用戶直接與外界通信,這樣極大地方便了用戶的使用。一般使用代理服務器時,每個用戶需要在客戶端程序中指明要使用代理,自行設置Proxy參數(如在瀏覽器中有專門的設置來指明HTTP或FTP等的代理)。而透明代理服務,用戶不需要任何設置就可以使用代理服務器,簡化了網絡的設置過程。透明代理的原理如下:假設A為內部網絡客戶機,B為外部網絡服務器,C為防火墻。 當A對B有連接請求時,TCP連接請求被防火墻截取并加以監控。截取后當發現連接需要使用代理服務器時,A和C之間首先建立連接,然后防火墻建立相應的代理服務通道與目標B建立連接,由此通過代理服務器建立A 和目標地址B的數據傳輸途徑。從用戶的角度看,A和B的連接是直接的,而實際上A 是通過代理服務器C和B建立連接的。反之,當B對A有連接請求時原理相同。由于這些連接過程是自動的,不需要客戶端手工配置代理服務器,甚至用戶根本不知道代理服務器的存在,因而對用戶來說是透明的。 代理服務器可以做到內外地址的轉換,屏蔽內部網的細節,使非法分子無法探知內部結構。代理服務器提供特殊的篩選命令,可以禁止用戶使用容易造成攻擊的不安全的命令,從根本上抵御攻擊。 防火墻使用透明代理技術,還可以使防火墻的服務端口無法探測到,也就無法對防火墻進行攻擊,大大提高了防火墻的安全性與抗攻擊性。透明代理避免了設置或使用中可能出現的錯誤,降低了防火墻使用時固有的安全風險和出錯概率,方便用戶使用。 因此,透明代理與透明模式都可以簡化防火墻的設置,提高系統安全性。但兩者之間也有本質的區別:工作于透明模式的防火墻使用了透明代理的技術,但透明代理并不是透明模式的全部,防火墻在非透明模式中也可以使用透明代理。二、環境搭建2.1.1硬件配置 為了實現高效的防火墻和網絡檢測,系統CPU必須足夠的強大和快速。系統需要三塊網卡,其中兩塊網卡支持網橋的實現,另外一塊用來實現對防火墻的管理。(至少2塊網卡,可以把管理IP配置在橋接設備上)。磁盤容量并不是很重要,但是所有的log信息應該被保存下來。若希望維護某些本地 logging(用于某些配置和檢測工具),則需要確保擁有足夠的免費空間-防火墻和入侵檢測記錄往往非常龐大。2.1.2安裝Linux 當系統安裝完畢并重新啟動時,編輯/etc/hosts.allow來只允許管理機通過SSH來連接進入系統,然后重新啟動按照正常模式引導進入系統。然后再將主以太接口連接到內部網絡中。2.1.3創建支持網橋方式的內核 按照基本的內核編譯步驟進行,只不過需要關閉大多數的選項開關,而僅僅打開一些必須的內核編譯開關。下載最新的內核,2.4可能需要下載在網橋模式下的時候讓內核能正常支持netfilter的補丁bridge-nf,這個很重要,不打這個patch , iptables 將無法對通過你網橋包做過濾,2.6就已經自帶了,地址:http://ebtables.sourceforge.net/download.html,bridge- nf只支持最新版本的原始內核,所以如果你不是對內核很熟悉,請不要試圖在老版本內核上安裝這個patch,因為你可能根本找不到適合你內核版本的補丁,也不要試圖在發行版自帶的內核上打這個patch,因為幾乎所有Linux發行版都打了很多發行商認為對用戶有益的patch,所以你可能根本沒辦法把 bridgenf成功打到這些內核的源碼中。# cd /usr/src/linux-2.4.21# patch –p1用戶模式1:進入特權模式 enablerouter > enablerouter #2:進入全局配置模式 configure terminalrouter > enablerouter #configure terminalrouter (conf)#3:交換機命名 hostname routera 以routerA為例router > enablerouter #configure terminalrouter(conf)#hostname routerAroutera (conf)#4:配置使能口令 enable passWord cisco 以cisco為例router > enablerouter #configure terminalrouter(conf)#hostname routerArouterA (conf)# enable password cisco5:配置使能密碼 enable secret ciscolab 以cicsolab為例router > enablerouter #configure terminalrouter(conf)#hostname routerArouterA (conf)# enable secret ciscolab6:進入路由器某一端口 interface fastehernet 0/17 以17端口為例router > enablerouter #configure terminalrouter(conf)#hostname routerArouterA (conf)# interface fastehernet 0/17routerA (conf-if)#進入路由器的某一子端口 interface fastethernet 0/17.1 以17端口的1子端口為例router > enablerouter #configure terminalrouter(conf)#hostname routerArouterA (conf)# interface fastehernet 0/17.17:設置端口ip地址信息router > enablerouter #configure terminalrouter(conf)#hostname routerArouterA(conf)# interface fastehernet 0/17 以17端口為例routerA (conf-if)#ip address 192.168.1.1 255.255.255.0 配置交換機端口ip和子網掩碼routerA (conf-if)#no shut 是配置處于運行中routerA (conf-if)#exit8:查看命令 showrouter > enablerouter # show version 察看系統中的所有版本信息show interface vlan 1 查看交換機有關ip 協議的配置信息show running-configure 查看交換機當前起作用的配置信息show interface fastethernet 0/1 察看交換機1接口具體配置和統計信息show mac-address-table 查看mac地址表show mac-address-table aging-time 查看mac地址表自動老化時間show controllers serial + 編號 查看串口類型show ip router 查看路由器的路由表9:cdp相關命令router > enablerouter # show cdp 查看設備的cdp全局配置信息show cdp interface fastethernet 0/17 查看17端口的cdp配置信息show cdp traffic 查看有關cdp包的統計信息show cdp nerghbors 列出與設備相連的cisco設備10:csico2600的密碼恢復重新啟動路由器,在啟動過程中按下win+break鍵,使路由器進入rom monitor在提示符下輸入命令修改配置寄存器的值,然后重新啟動路由器remmon1>confreg 0x2142remmon2>reset重新啟動路由器后進入setup模式,選擇“no”,退回到exec模式,此時路由器原有的配置仍然保存在startup-config中,為使路由器恢復密碼后配置不變把startup-config中配置保存到running-config中,然后重新設置enable密碼,并把配置寄存器改回0x2102:router>enablerouter#copy startup-config running-configrouter#configure terminalrouter(conf)#enable password ciscorouter(conf)#config-register 0x2102保存當前配置到startup-config , 重新啟動路由器。router #copy running-config startup-configrouter #reload-------------------------路由器命令大全(二)11:路由器telnet遠程登錄設置:router>enrouter #configure terminalrouter (conf)#hostname routerArouterA (conf)#enable password cisco 以cisco為特權模式密碼routerA (conf)#interface fastethernet 0/1 以17端口為telnet遠程登錄端口routerA (conf-if)#ip address 192.168.1.1 255.255.255.0routerA (conf-if)#no shutrouterA (conf-if)#exitrouterA (conf)line vty 0 4 設置0-4 個用戶可以telnet遠程登陸routerA (conf-line)#loginrouterA (conf-line)#password edge 以edge為遠程登錄的用戶密碼主機設置:ip 192.168.1.2 主機的ip必須和交換機端口的地址在同一網絡段netmask 255.255.255.0gate-way 192.168.1.1 網關地址是交換機端口地址運行:telnet 192.168.1.1進入telnet遠程登錄界面password : edgeroutera>enpassword: ciscoroutera#12:配置路由器的標識 banner $……………$在全局配置的模式下利用“banner”命令可以配置路由器的提示信息,所有連接到路由器的終端都會收到。router>enrouter #configure terminalrouter (conf)#hostname routerArouterA(conf)#banner motd $This is aptech company’ router ! Please don’t change the configuration without permission!$13:配置接口標識 description ………接口標識用于區分路由器的各個接口。router>enrouter #configure terminalrouter (conf)#hostname routerArouterA(conf)#interface fastethernet 0/1 以0/1 接口為例routerA(conf-if)# description this is a fast Ethernet port used to connecting the company’s intranet!14:配置超時超時適用于設置在多長時間沒有對console進行配置,自動返回exec會話時間。默認為10分鐘。router>enrouter #configure terminalrouter (conf)#hostname routerArouterA(conf)#line console 0routerA(conf-if)#exec-timeout 0 0 第一個“0”代表分鐘,第二個“0”代表秒15:配置串口參數兩臺路由器通過串口連接需要一個做為DTE,一個做為DCE。DCE設備要向DTE設備提供時鐘頻率和帶寬。DCE配置:router>enrouter #configure terminalrouter (conf)#hostname routerArouterA(conf)#interface serial 0/0routerA(conf_if)#clock rate 64000 提供時鐘頻率為64000routerA(conf_if)#bandwidth 64 提供帶寬為64DTE配置:路由器串口配置ip地址router>enrouter #configure terminalrouter (conf)#hostname routerBrouterB(conf)#interface serial 0/0routerB(conf_if)#ip address 192.168.1.1 255.255.255.0]--------------------------------路由器命令大全(3)16:靜態路由的配置配置路由器A的主機名和接口參數router>enablerouter#configure terminalrouter(conf)#hostname routerArouterA(conf)#interface fastethernet 0/1 路由器A的1端口為兩路由器的連接端口routerA(conf-if)#ip address 192.168.2.1 255.255.255.0routerA(conf-if)#no shutdownrouterA(conf-if)#exitrouterA(conf)# interface fastethernet 0/0 路由器A的0端口為與主機的連接端口routerA(conf-if)#ip address 192.168.1.2 255.255.255.0routerA(conf-if)#no shutdown主機A的ip地址為 192.168.1.1255.255.255.0192.168.1.2配置路由器B的主機名和接口參數router>enablerouter#configure terminalrouter(conf)#hostname routerBrouterB(conf)#interface fastethernet 0/0 路由器B的0端口為兩路由器的連接端口routerB(conf-if)#ip address 192.168.2.2 255.255.255.0routerB(conf-if)#no shutdownrouterB (conf-if)#exitrouterB(conf)# interface fastethernet 0/1 路由器B的1端口為與主機的連接端口routerB(conf-if)#ip address 192.168.3.1 255.255.255.0主機B的ip地址為 192.168.3.2255.255.255.0192.168.3.1配置路由器A的靜態路由表routerA(conf)#ip router 192.168.3.0 255.255.255.0 192.168.2.2配置路由器B的靜態路由表routerA(conf)#ip router 192.168.1.0 255.255.255.0 192.168.2.1在routerA和routerB上配置默認路由routerA(conf)#ip route 0.0.0.0 0.0.0.0 192.168.2.2routerA(conf)#ip classlessrouterB(conf)#ip route 0.0.0.0 0.0.0.0 192.168.2.1routerB(conf)#ip classless在routerA和routerB上配置動態路由(RIP)routerA(conf)#router riprouterA(conf)#network 192.168.1.0routerA(conf)#network 192.168.2.0routerB(conf)# router riprouterB(conf)#network 192.168.2.0routerB(conf)#network 192.168.3.0==================================================================================Linux網橋接器的運作添加記錄:類別: 網絡配置 發布日期: 2007.01.15本文從系統管理員的角度討論安全問題.系統管理員是管理系統的人:啟動系統,停止系統運行,安裝新軟件,增加新用戶,刪除老用戶,以及完成保持系統發展和運行的日常事務工作.1.安全管理安全管理主要分為四個方面:(1)防止未授權存取:這是計算機安全最重要的問題:未被使用系統的人進入系統.用戶意識,良好的口令管理(由系統管理員和用戶雙方配合),登錄活動記錄和報告,用戶和網絡活動的周期檢查,這些都是防止未授權存取的關鍵.(2)防止泄密:這也是計算機安全的一個重要問題.防止已授權或未授權的用戶相互存取相互的重要信息.文件系統查帳,su登錄和報告,用戶意識,加密都是防止泄密的關鍵.(3)防止用戶拒絕系統的管理:這一方面的安全應由操作系統來完成.一個系統不應被一個有意試圖使用過多資源的用戶損害.不幸的是,UNIX不能很好地限制用戶對資源的使用,一個用戶能夠使用文件系統的整個磁盤空間,而UNIX基本不能阻止用戶這樣做.系統管理員最好用PS命令,記帳程序df和du周期地檢查系統.查出過多占用CUP的進程和大量占用磁盤的文件.(4)防止丟失系統的完整性:這一安全方面與一個好系統管理員的實際工作(例如:周期地備份文件系統,系統崩潰后運行fsck檢查,修復文件系統,當有新用戶時,檢測該用戶是否可能使系統崩潰的軟件)和保持一個可靠的操作系統有關(即用戶不能經常性地使系統崩潰).本文其余部分主要涉及前兩個問題,第三個問題在一節討論.2.超級用戶一些系統管理命令只能由超級用戶運行.超級用戶擁有其他用戶所沒有的特權,超級用戶不管文件存取許可方式如何,都可以讀,寫任何文件,運行任何程序.系統管理員通常使用命令: /bin/su 或以 root 進入系統從而成為超級用戶.在后面文章中以#表示應敲入必須由超級用戶運行的命令,用$表示應敲入由所有其他用戶運行的命令.3.文件系統安全(1)UNIX文件系統概述UNIX文件系統是UNIX系統的心臟部分,提供了層次結構的目錄和文件.文件系統將磁盤空間劃分為每1024個字節一組,稱為塊(block)(也有用512字節為一塊的,如:SCO XENIX).編號從0到整個磁盤的最大塊數.全部塊可劃分為四個部分,塊0稱為引導塊,文件系統不用該塊;塊1稱為專用塊,專用塊含有許多信息,其中有磁盤大小和全部塊的其它兩部分的大小.從塊2開始是i節點表,i節點表中含有i節點,表的塊數是可變的,后面將做討論.i節點表之后是空閑存儲塊(數據存儲塊),可用于存放文件內容.文件的邏輯結構和物理結構是十分不同的,邏輯結構是用戶敲入cat命令后所看到的文件,用戶可得到表示文件內容的字符流.物理結構是文件實際上如何存放在磁盤上的存儲格式.用戶認為自己的文件是邊疆的字符流,但實際上文件可能并不是以邊疆的方式存放在磁盤上的,長于一塊的文件通常將分散地存放在盤上.然而當用戶存取文件時,UNIX文件系統將以正確的順序取各塊,給用戶提供文件的邏輯結構.當然,在UNIX系統的某處一定會有一個表,告訴文件系統如何將物理結構轉換為邏輯結構.這就涉及到i節點了.i節點是一個64字節長的表,含有有關一個文件的信息,其中有文件大小,文件所有者,文件存取許可方式,以及文件為普通文件,目錄文件還是特別文件等.在i節點中最重要的一項是磁盤地址表.該表中有13個塊號.前10個塊號是文件前10塊的存放地址.這10個塊號能給出一個至多10塊長的文件的邏輯結構,文件將以塊號在磁盤地址表中出現的順序依次取相應的塊.當文件長于10塊時又怎樣呢?磁盤地址表中的第十一項給出一個塊號,這個塊號指出的塊中含有256個塊號,至此,這種方法滿足了至多長于266塊的文件(272,384字節).如果文件大于266塊,磁盤地址表的第十二項給出一個塊號,這個塊號指出的塊中含有256個塊號,這256個塊號的每一個塊號又指出一塊,塊中含256個塊號,這些塊號才用于取文件的內容.磁盤地址中和第十三項索引尋址方式與第十二項類似,只是多一級間接索引.這樣,在UNIX系統中,文件的最大長度是16,842,762塊,即17,246,988,288字節,有幸是是UNIX系統對文件的最大長度(一般為1到2M字節)加了更實際的限制,使用戶不會無意中建立一個用完整個磁盤窨所有塊的文件.文件系統將文件名轉換為i節點的方法實際上相當簡單.一個目錄實際上是一個含有目錄表的文件:對于目錄中的每個文件,在目錄表中有一個入口項,入口項中含有文件名和與文件相應的i節點號.當用戶敲入cat xxx時,文件系統就在當前目錄表中查找名為xxx的入口項,得到與文件xxx相應的i節點號,然后開始取含有文件xxx的內容的塊.(2)設備文件UNIX系統與邊在本系統上的各種設備之間的通訊,通過特別文件來實現,就程序而言,磁盤是文件,MODEM是文件,甚至內存也是文件.所有連接到系統上的設備都在/dev目錄中有一個文件與其對應.當在這些文件上執行I/O操作時,由UNIX系統將I/O操作轉換成實際設備的動作.例如,文件/dev/mem是系統的內存,如果cat這個文件,實際上是在終端顯示系統的內存.為了安全起見,這個文件對普通用戶是不可讀的.因為在任一給定時間,內存區可能含有用戶登錄口令或運行程序的口令,某部分文件的編輯緩沖區,緩沖區可能含有用ed -x命令解密后的文本,以及用戶不愿讓其他人存取的種種信息.在/dev中的文件通常稱為設備文件,用ls /dev命令可以看看系統中的一些設備:acuo 呼叫自動撥號器console 系統控制臺dsknn 塊方式操作磁盤分區kmem 核心內存mem 內存lp 打印機mto 塊方式操作磁帶rdsknn 流方式操作的磁盤分區rmto 流方式操作的磁帶swap 交換區syscon 系統終端ttynn 終端口x25 網絡端口等等(3)/etc/mknod命令用于建立設備文件.只有root能使用這個命令建立設備文件.其參數是文件名,字母c或b分別代表字符特別文件或塊特別文件,主設備號,次設備號.塊特別文件是像磁帶,磁盤這樣一些以塊為單位存取數據的設備.字符特別文件是如像終端,打印機,MODEM,或者其它任何與系統通訊時,一次傳輸一個字符的設備,包括模仿對磁盤進行字符方式存取的磁盤驅動器.主設備號指定了系統子程序(設備驅動程序),當在設備上執行I/O時,系統將調用這個驅動程序.調用設備驅動程序時,次設備號將傳遞給該驅動程序(次設備規定具體的磁盤驅動器,帶驅動器,信號線編號,或磁盤分區).每種類型的設備一般都有自己的設備驅動程序.文件系統將主設備號和次設備號存放在i節點中的磁盤地址表內,所以沒有磁盤空間分配給設備文件(除i節點本身占用的磁盤區外).當程序試圖在設備文件上執行I/O操作時,系統識別出該文件是一個特別文件,并調用由主設備號指定的設備驅動程序,次設備號作為調用設備驅動程序的參數.(4)安全考慮將設備處理成文件,使得UNIX程序獨立于設備,即程序不必一定要了解正使用的設備的任何特性,存取設備也不需要記錄長度,塊大小,傳輸速度,網絡協議等這樣一些信息,所有煩人的細節由設備驅動程序去關心考慮,要存取設備,程序只須打開設備文件,然后作為普通的UNIX文件來使用.從安全的觀點來看這樣處理很好,因為任何設備上進行的I/O操作只經過了少量的渠道(即設備文件).用戶不能直接地存取設備.所以如果正確地設置了磁盤分區的存取許可,用戶就只能通過UNIX文件系統存取磁盤.文件系統有內部安全機制(文件許可).不幸的是,如果磁盤分區設備得不正確,任何用戶都能夠寫一個程序讀磁盤分區中的每個文件,作法很簡單:讀一i節點,然后以磁盤地址表中塊號出現的順序,依次讀這些塊號指出的存有文件內容的塊.故除了root以外,決不要使盤分區對任何人可寫.因為所有者,文件存取許可方式這樣一些信息存放于i節點中,任何人只要具有已安裝分區的寫許可,就能設置任何文件的SUID許可,而不管文件的所有者是誰,也不必用chmod()命令,還可避過系統建立的安全檢查.以上所述對內存文件mem,kmem和對換文件swap也是一樣的.這些文件含有用戶信息,一個的程序可以將用戶信息提取出來.要避免磁盤分區(以及其它設備)可讀可寫,應當在建立設備文件前先用umask命令設置文件建立屏蔽值.一般情況下,UNIX系統上的終端口對任何人都是可寫的,從而使用戶可以用write命令發送信息.雖然write命令易引起安全方面的問題,但大多數用戶覺得用write得到其他用戶的信息很方便,所以系統將終端設備的存取許可設置成對所有用戶可寫./dev目錄應當是755存取許可方式,且屬root所有.不允許除root外的任何用戶讀或寫盤分區的原則有一例外,即一些程序(通常是數據庫系統)要求對磁盤分區直接存取,解決這個問題的經驗的盤分區應當由這種程序專用(不安裝文件系統),而且應當告知使用這種程序的用戶,文件安全保護將由程序自己而不是UNIX文件系統完成.(5)find命令find命令用于搜索目錄樹,并對目錄樹上的所有文件執行某種操作,參數是目錄名表(指出從哪些起點開始搜索),還可給出一個或多個選項,規定對每個文件執行什么操作.find . -print 將列出當前工作目錄下的目錄樹的每一個文件.find / -user bob -print 將列出在系統中可找到的屬于bob用戶的所有文件.find /usr/bob -perm 666 -print 將列出/usr/bob目錄樹下所有存取許可為666的文件.若將666改為-666則將列出所有具有包含了666在內的存取許可方式的文件(如777).find /usr/bob -type b -print 將列出/usr/bob目錄樹下所有塊特別文件(c為字符特別文件).find / -user root -perm -4000 -exec ls -l {} ; 是一個較復雜一點的命令,-exec COMMAND ;允許對所找到的每個文件運行指定的命令COMMAND.若COMMAND中含有{},則{}將由find所找到的文件名替換.COMMAND必須以;結束.以上舉例介紹find的用法,各選項可組合使用以達到更強的功能.(6)secure程序系統管理員應當做一個程序以定期檢查系統中的各個系統文件,包括檢查設備文件和SUID,SGID程序,尤其要注意檢查SUID,SGID程序,檢查/etc/passwd和/etc/group文件,尋找久未登錄的戶頭和校驗各重要文件是否被修改.(源程序清單將在今后發表)(7)ncheck命令用于檢查文件系統,只用一個磁盤分區名作為參數,將列出i節點號及相應的文件名.i節點相同的文件為建鏈文件.注意:所列出的清單文件名與mount命令的第一個域相同的文件名前部分將不會列出來.因為是做文件系統內部的檢查,ncheck并不知道文件系統安裝點以上部分的目錄.也可用此命令來搜索文件系統中所有的SUID和SGID程序和設備文件,使用-s選項來完成此項功能.(8)安裝和拆卸文件系統UNIX文件系統是可安裝的,這意味著每個文件系統可以連接到整個目錄樹的任意節點上(根目錄總是被安裝上的).安裝文件系統的目錄稱為安裝點./etc/mount命令用于安裝文件系統,用這條命令可將文件系統安裝在現有目錄結構的任意處.安裝文件系統時,安裝點的文件和目錄都是不可存取的,因此未安裝文件系統時,不要將文件存入安裝點目錄.文件系統安裝后,安裝點的存取許可方式和所有者將改變為所安裝的文件根目錄的許可方式和所有者.安裝文件系統時要小心:安裝點的屬性會改變!還要注意新建的文件,除非新文件系統是由標準文件建立的,系統標準文件會設置適當的存取許可方式,否則新文件系統的存取許可將是777!可用-r選項將文件系統安裝成只讀文件系統.需要寫保護的帶驅動器和磁盤應當以這種方式來安裝.不帶任何參數的/etc/mount可獲得系統中所安裝的文件系統的有關信息.包括:文件系統被安裝的安裝點目錄,對應/dev中的哪個設備,只讀或可讀寫,安裝時間和日期等.從安全的觀點來講,可安裝系統的危險來自用戶可能請求系統管理員為其安裝用戶自己的文件系統.如果安裝了用戶的文件系統,則應在允許用戶存取文件系統前,先掃描用戶的文件系統,搜索SUID/SGID程序和設備文件.在除了root外任何人不能執行的目錄中安裝文件系統,用find命令或secure列出可疑文件,刪除不屬用戶所有的文件的SUID/SGID許可.用戶的文件系統用完后,可用umount命令卸下文件系統.并將安裝點目錄的所有者改回root,存取許可改為755.(9)系統目錄和文件UNIX系統中有許多文件不允許用戶寫,如:/bin,/usr/bin,/usr/lbin,/etc/passwd,/usr/lib/crontab,/unix,/etc/rc,/etc/inittab這樣一些文件和目錄(大多數的系統目錄),可寫的目錄允許移動文件,會引起安全問題.系統管理員應經常檢查系統文件和目錄的許可權限和所有者.可做一個程序根據系統提供的規則文件(在/etc/permlist文件中)所描述的文件所有者和許可權規則檢查各文件.(源程序清單將在今后發表)注意:如果系統的安全管理不好,或系統是新安裝的,其安全程序不夠高,可以用make方式在安全強的系統上運行上述程序,將許可規則文件拷貝到新系統來,再以設置方式在新系統上運行上述程序,就可提高本系統的安全程序.但要記住,兩個系統必須運行相同的UNIX系統版本.4.作為root運行的程序在UNIX系統中,有些程序由系統作為root進程運行.這些程序并不總是具有SUID許可,因為其不少程序僅由root運行,系統管理員需要清楚這些程序做什么,以及這些程序還將運行其它什么程序.(1)啟動系統當某些UNIX系統(如SCO UNIX/XENIX)啟動時,是以被稱為單用戶的方式運行,在這種方式中普通用戶不能登錄,唯有的進程是init,swapper,以及一些由系統管理員從控制臺運行的進程.UNIX系統的單用戶方式啟動,使系統管理員能在允許普通用戶登錄以前,先檢查系統操作,確保系統一切正常,當系統處于單用戶方式時,控制臺作為超級用戶,命令揭示是==================================================================================Linux網橋接器的運作1. 設定l 取得 ``橋接器配置''ftp://shadow.cabi.net/pub/Linux/BRCFG.tgzl 取得和閱讀 ``Multiple ethernet'' HOWTOftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/Multiple-Ethernetl 配置lilo啟動參數使多個乙太網路設備在你的機器運作照著加入這行到你的 /etc/lilo.conf, 和重新執行 lilo:append = "ether=0,0,eth1"如果你在你的橋接器上有三張界面卡,使用這些行取代上面append = "ether=0,0,eth1 ether=0,0,eth2"靠加入更多的乙太陳述可以找到更多的界面. 預設上一個傳統的 Linux 核心只偵測一張獨一的乙太網路卡, 和當一個被找到偵測就會停止. 上面所附加的陳述告訴核心在第一個被找到之後繼續偵測去找到更多乙太網路設備。另一個方法,可以使用啟動變數來取代:linux ether=0,0,eth1或者, 有三個界面,使用:linux ether=0,0,eth1 ether=0,0,eth2l 重新編譯那核心啟動BRIDGING功能l 一個橋接器應沒有一個的 IP 地址. 它可以有一個,但是一個平常的橋接器不需要一個 IP 地址. 從你的橋接器上移除 IP 地址,到 /etc/sysconfig/network-scripts/ (對於一個 RedHat系統) 和拷貝 i
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通山县| 平阴县| 沂水县| 仪陇县| 阳朔县| 宝坻区| 乡城县| 定日县| 靖边县| 义乌市| 瑞丽市| 盐山县| 中山市| 安乡县| 哈尔滨市| 昌图县| 横山县| 铅山县| 贵溪市| 墨竹工卡县| 社会| 潮州市| 遂宁市| 南涧| 揭东县| 衡东县| 德格县| 镇平县| 雷山县| 东城区| 故城县| 开远市| 台北县| 梁平县| 临沭县| 兴文县| 桂阳县| 河北省| 迁西县| 高淳县| 图片|