Linux 2.4 核心中的iptables 新增功能指南(轉)
Linux 2.4 核心中的iptables 新增功能指南(轉)[@more@]原文章釋出於 2000.6.6 by Jephe Wu[本站會員]一 本文目的 本文主要是探討 Linux 2.4 核心中的iptables 的各種新增功能和使用方法,如何有效地使用這些新增的功能設定企業的防火牆規則,舉例說明了新增功能在企業中的應用。 二 操作環境 Redhat Linux 7.1自帶的模組化核心,專線連線網際網路,兩塊網路卡的防火牆,內部網段為 10.0.0.0/255.255.255.0, 防火牆外部網路卡介面地址為1.2.3.4。 三 iptables與ipchains的不同之處 1. 內建規則的重新定義,簡單化規則管理 Linux 核心中內建的INPUT,OUTPUT,FORWARD規則在新的iptables中,任何一個包僅僅只在這三個規則中的任何一個上應用,或者被INPUT規則擊中,或者被FORWARD規則或者OUTPUT規則擊中,不象在ipchains中任何一個包如果是穿過這臺防火牆總要同時擊中三個規則。 為了說明這種改變,看下圖。 (圖一) Incoming / Outgoing-->[Routing ]--->|FORWARD|------->[Decision] \_____/ ^| |v _______ / / Linux防火牆 |OUTPUT||INPUT| \____/\___/ ^| |----> Local Process ----a. 首先,當一個包進來的時候,也就是從乙太網卡進入防火牆,核心首先根據路由表決定包的目標。 b. 如果目標主機就是本機,則如上圖直接進入INPUT鏈,再由本地正在等待該包的程式接收,結束。 c. 否則,如果從乙太網卡進來的包目標不是本機,再看是否核心允許轉發包(可用echo 1> /proc/sys/net/ipv4/ip_forward 開啟轉發功能)如果不允許轉發,則包被DROP掉,如果允許轉發,則送出本機,結束。這當中決不經過INPUT或者OUTPUT鏈,因為路由後的目標不是本機,只被轉發規則應用 d. 最後,該linux防火牆主機本身能夠產生包,這種包只經過OUTPUT鏈出去。 注意: echo 1 > /proc/sys/net/ipv4/ip_forward 和 FORWARD 鏈的區別 前者的意思是是否開啟核心的轉發功能,後者是轉發鏈規則 只有核心開啟轉發功能,一個包才可能被送到轉發鏈上去逐項檢查規則。 如果一臺防火牆沒有開啟前者的IP轉發功能,則根防火牆相連的兩邊的網路是完全隔離的,如果是一端連到internet上,則只能透過代理防問internet,不可能透過IP偽裝的方式防問 這樣,任何一個包只可能應用INPUT/OUTPUT/FORWARD中的一個規則,這種巨大的改進同時也簡單化了防火牆規則管理。 2. iptables 是有狀態的(stateful)。 有狀態的意思是指如果一個包是對從防火牆原先發出去的包的回覆,則自動不用檢查任何規則就立即允許回覆包進入並返回給請求者,這樣我們不用設定許多規則定義就可實現應有的功能,在新的核心中使用這種有狀態的能力是強烈地被推薦的,那麼如何開啟並使用這種功能呢? 見下圖。 (圖二) 我們假定某公司有如下圖所示的典型的internet連線方案: _______10.0.0.2 | ||PC | (10.0.0.1)eth1| |eth0(1.2.3.4) B|___|_ ___________________|防火牆 |---------Internet(LAN: 10.0.0.0/24) | A ||_______|可使用下面的規則集使用iptables的有狀態的能力並開啟IP偽裝功能。 1 modprobe ip_tables 2 echo 1 > /proc/sys/net/ipv4/ip_forward 3 iptables -F INPUT 4 iptables -F FORWARD 5 iptables -F POSTROUTING -t nat 6 iptables -P FORWARD DROP 7 iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT 8 iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -jACCEPT 9 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE 10 iptables -A INPUT -p tcp -i eth0 --syn --dport 80 -j ACCEPT 11 iptables -A INPUT -p tcp -i eth0 --syn -j DROP 注: 1. 當使用redhat 的模組化核心時,裝入ip_tables模組後,以後的命令將根據需要自行裝入需要的模組。 另外注意,如果你裝入了ipchains或者ipfwadm模組,則不能再裝入iptables模組,可用rmmod命令移走它 們再裝入iptables模組。在redhat下,可用ntsysv移走ipchains和iptables標記重啟後執行上面的命令。 或者放入/etc/rc.d/rc.local中自動執行。 2. 第二行開啟IP轉發功能。 3. 第三四五行清除INPUT,FORWARD和POSTROUTING鍵規則 4. 第六行設定預設轉發策略是DROP,當一個包被轉發轉則應用但不能應用到任何一條轉發規則上則應用預設 規則。 5. 第七行轉發本網段的機器到任何地方去的包。 6. 第八行利用了有狀態的能力,只要是對先前從防火牆外部介面出去的請求包的回覆,允許。 ESTABLISHED是指TCP連線,RELATED是指象主動FTP,ICMP ping請求等,當回覆包到達時,實際上是檢查文 件 /proc/net/ip_conntrack看是否在裡面,如果在表中,則不檢查任何鏈,包允許透過。 7. 第九行開啟IP偽裝能力,從eth0出去的包被重寫源地址後偽裝出去,是源地址SNAT的特例。這裡要注意的是 -o eth0, 而不是 -i eth0,在iptables中,從一個介面出去的包用 -o,進來的包用 -i 8. 第十行說明如果這臺防火牆也是WEB伺服器,則允許外部的新建立的請求且目標埠為80的包可以進入 9. 第十一行對不是目標埠是80的所求TCP新的連線請求包,拒絕進入。 注: NAT 與 FORWARD 鏈的關係 a. 不管執行任何NAT,對包過濾規則看到的源和目的地址是真實的源和目的地址,儘管在執行IP偽裝(DNAT)時 會對包進行地址重寫,這一點你可以從檔案/proc/net/ip_conntrack中看到。 b. 如果我們沒有利用iptables的有狀態的能力,象上面的情況,要是允許網段10.0.0.0/24中的機器可以IP偽裝的話,我們不得不加上一條轉發規則 iptables -AFORWARD -d 10.0.0.0/24 -j ACCEPT,否則對偽裝包的回覆不會透過轉發鏈回覆給內部機器,因為回覆包需要透過轉發鏈。 注: 如何證明僅僅一個規則鏈被應用了? 在以前的ipchains中一個包要經過input,forward,output鏈才能從防火牆送出到internet,現在使用iptables,僅僅一個鏈被應用,你可以加入下面的規則測試 iptables -A INPUT -s 10.0.0.2/24 -j DROP 上面的這行在iptables中僅僅是指任何本網段的機器當目標就是防火牆時被拒絕,但絕不影響NAT和轉發包, 這在以前的ipchains中是不可能的。 3. 透明代理和埠轉發功能的輕鬆實現 a. 埠轉發 在linux 2.4核心中,NAT分為 SNAT(源NAT)和DNAT(目的NAT)。我們可以利用SNAT和DNAT輕鬆地實現透明代理,重定向和埠轉發功能。 假定某公司的網路結構如下圖: 10.0.0.2 | ||PC | (10.0.0.1)eth1| |eth0(1.2.3.4), eth0:0(1.2.3.5)B|___|_ ___________________|防火牆 |---------Internet(LAN: | 10.0.0.0/24) | A || |_______|| _____ | || C | Linux POP3 server|_____| IP: 10.0.0.3 gw: 10.0.0.1當一個包被路由,轉發後送出之前進行源地址改寫,源地址改為1.2.3.5(防火牆上的別名IP) iptables -t nat -A POSTROUTING -s 10.0.0.3 -o eth0 -j SNAT --to 1.2.3.5 IP偽裝是SNAT的特例,當需要偽裝時,其實不需要外界主動對源地址進行請求。而上面的例子是 指區域網內部有一臺Linux POP3伺服器,IP為10.0.0.3, 閘道器為10.0.0.1,且在防火牆外部網路卡上繫結 一個IP別名1.2.3.5,作為該POP3伺服器對外界聯絡的出去的源IP地址。對外部使用者來說(公司員工在外出差),這個IP 1.2.3.5就是POP3伺服器的IP地址,當向這個IP請求時我們用DNAT送到10.0.0.3上從而實現埠轉發的功能。 iptables -t nat -A PREROUTING -i eth0 -d 1.2.3.5 -j DNAT --to 10.0.0.3 則這兩行規則即可實現埠轉發的功能。 b. 透明代理(重定向) 最常見的透明代理的使用是結合開放源代理軟體Squid,實現區域網內使用者在不用設定任何瀏覽器代理 的條件下透明地使用代理上網。 如果我們的Squid的HTTP埠執行在 3333,則使用下面的規則: iptables -t nat -A PREROUTING -i eth1 -p tcp -s 10.0.0.0/24 --dport 80 -jDNAT --to 10.0.0.1:3333 而且還必須設定Squid 2.3 或者2.4 版本中的squid.conf如下: http_port 3333 httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on 這樣,區域網內的使用者即使不設定任何代理,也同樣是利用了Squid的代理上網。 四 常見問題解答 a. 在執行中的防火牆規則如何儲存下來,供redhat的ntsysv中的iptables服務使用? 使用 iptables-save和iptables-restore儲存為檔案/etc/sysconfig/iptables,再用ntsysv 啟動iptables服務使用 b. 我能同時使用ipchains和iptables嗎? 不行。在使用iptalbes之前,你必須停止ipchains及任何記憶體中的與ipchains相關的模塊,用/sbin/lsmod 檢查所有ipchains模組,用/sbin/rmmod逐一刪除,最後再執行iptables規則。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940615/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iptables新增模組(for kernel 2.6)(轉)
- Linux 2.4的精彩世界(4)(轉)Linux
- Linux 2.4的精彩世界(3)(轉)Linux
- Linux 2.4的精彩世界(2)(轉)Linux
- Linux IPTABLES埠轉發Linux
- Linux IPTables:如何新增防火牆規則Linux防火牆
- 重大升級!英特爾 CPU 內購功能 (SDSI)已新增至 Linux 5.18 核心中Linux
- Iptables 指南 1.1.19
- Linux 2.4 - 世紀末的聖誕禮物 (轉)Linux
- 升級到Linux 2.4核心(轉)Linux
- iptables 功能詳解
- netfilter/iptables模組功能中文介紹(轉)Filter
- SYN Cookie原理及在Linux核心中的實現(轉)CookieLinux
- 使用iptables建置Linux 防火牆(2)(轉)Linux防火牆
- 使用iptables建置Linux 防火牆(3)(轉)Linux防火牆
- Linux核心中斷Linux
- Linux 核心中 Kconfig 檔案的作用和新增 menuconfig 項的方法Linux
- Linux防火牆之IPtables概念與用法(轉)Linux防火牆
- 核心中的排程與同步(轉)
- Linux 2.4中netfilter框架實現(轉)LinuxFilter框架
- Linux2.6.14.3核心中宏定義 #define DEFINE(轉)Linux
- Linux iptables實現nat轉發操作步驟Linux
- 說說我心中的Linux系統Linux
- iptables 入門(轉)
- IPTables配置Script(轉)
- Linux 2.4 NAT HOWTO 簡體中文版(轉)Linux
- linux之iptables使用Linux
- linux防火牆iptablesLinux防火牆
- LInux iptables學習Linux
- 把Iptables移植到嵌入式Linux系統(轉)Linux
- 轉:11g對LOB型別的新增功能型別
- Linux的銅牆鐵壁iptablesLinux
- iptables+tc配置(轉)
- iptables中文手冊(轉)
- iptables中文man文件(轉)
- Gentoo Linux ALSA 指南(轉)Linux
- Linux多個埠組合,iptables使用multiport 新增多個不連續埠Linux
- Linux核心中讀寫檔案Linux