在Linux上面的防火墻,最最常用的是ipchains,而且通常情況下是作為網關的附加部分安裝的。Ipchains的規則是很復雜的,靈活性也很強,可以配制成各種五花八門的樣子。這些都需要和你自己的實際情況相結合。這里,我們只介紹一種基于網關的簡單配置。
安裝IPCHAINS一般都不用你操心,因為幾乎所有的Linux發行包都把該軟件作為必須安裝的卻省配置。另一個原因是ipchains是跟內核
(kernel)有很大的關系,因此最好在安裝系統的時候選上相關選項(如果有)。在標題里面我們還提到了iptables,這個工具在表面上等同于
ipchains,只不過是用于2.4內核的(2.4內核在這方面的代碼幾乎是重新寫過的,功能有了長足的提高)。關于iptables工具的配置我們在
后面介紹。你只需要記住2.2核心下使用ipchains,2.4核心下使用iptables即可。
首先,你的服務器需要兩塊網卡(或更多),這種機器叫做“多宿主主機”,是專門的用于做網關或路由器的。這里插一句:一般情況下,作為普通服
務器的主機即使負載再重就需要一塊網卡就夠了,只有做網關或路由器的時候才需要多宿主主機。這并不象一般人認為得那樣增加一塊網卡可以增加一份帶寬,事實
上,一塊網卡就可以提供足夠的帶寬。并且,還有人錯誤的把兩塊網卡接在同一個交換機上分配兩個地址,這更是錯誤的,因為這樣產生了額外的循環路由,會產生
大量的內部警告錯誤,某些系統就會報警。
1、制作一個雙界面(雙宿主)的主機。
通常,現在的發行包的安裝程序都可以識別兩塊網卡,這樣就省事了。但是也有不少發行包只識別第一塊網卡(也許是出于前面說的原因),或者你要在一臺在用的機器上加一塊網卡(因為你不愿意重裝系統),那么就按照下面的辦法處理。
1.1、我們就說PCI網卡。安裝前首先看看網卡芯片,記住芯片的型號(希望你自己攢過機器)。
1.2、安裝MAN手冊(用發行包)
1.3、在/usr/doc/HOWTO/english/txt/Ethernet-HOWTO文件(如果是壓縮的就釋放)中搜索你的網卡型號,找到對應的驅動模塊名稱。
1.4、如果模塊沒有,還需要重新編譯核心。在menuconfig網絡設備一欄選中你的型號然后標記為*或M,編譯完核心后別忘了編譯模塊:make modules;make modules_install。(不會的話再仔細溫習一下前面編譯內核的部分)
1.5、用depmod –a命令建立/etc/modules.conf(如果已經有就不用了),也有的發行包叫做conf.modules
1.6、編輯該文件加上一行:alias eth1
XXXX,其中XXXX是你剛才查到的模塊名稱。一般該模塊文件位于:/lib/modules/內核版本號/net…中的XXXX.o文件。這個文件是
你編譯內核模塊的時候產生的,你在內核配置的時候,凡是標記為M的都會被編譯成.o文件放在這里。同樣的,你選擇的網卡驅動也是會編譯成模塊在這里的。
1.7、運行modprobe eth1使模塊有效。
1.8、修改/etc/sysconfig/network文件中需要修改的部分。
1.9、建立或修改/etc/sysconfig/network-script/ifcfg-eth1文件(照抄那個eth0的即可),設定地址是你的真實情況,比如設為eth1要接的網段。這兩個文件(eth0/eth1是啟動的時候的腳本參數文件)
1.10、重新啟動一下網絡:/etc/rc.d/init.d/network restart
1.11、用ifconfig看看是否eth0/eth1都啟動了。
1.12、大功告成
2、調整和編譯核心:如果作為網關,有些核心選項需要配置。注意:這里的內核編譯選項僅僅適合于2.2.X版本,2.4版本完全不同。
2.1、在/usr/src/linux中運行make menuconfig配置核心下列選項:
Networking options中
[*] Network firewalls
[*] IP: advanced router
[*] IP: firewalling
[*] IP: firewall packet netlink device
[*] IP: transparent proxy support
[*] IP: masquerading
[*] IP: ICMP masquerading
[*] IP: masquerading special modules support
<M> IP: ipautofw masq support (EXPERIMENTAL)
<M> IP: ipportfw masq support (EXPERIMENTAL)
<M> IP: ip fwmark masq-forwarding support (EXPERIMENTAL)
[*] IP: masquerading virtual server support (EXPERIMENTAL)
(12) IP masquerading VS table size (the Nth power of 2)
具體選項不同版本的內核不盡相同,你看著差不多就可以了。編譯成模塊或編進核心[*]可以自由選擇。
2.2、按照前面說的編譯內核,重新啟動后就具有網關功能了。啟動后驗證一下文件:/proc/sys/net/ipv4/ip_forward內容是否為1。(別告訴我不知道怎么看8-))
3、設置ipchains
本來這項工作是非常復雜的,但是我們這里講的簡單,讓網關通了就行。
3.1、先看一下目前我們目前的假想環境:你的機器有兩塊網卡,一塊連接在內網交換機配內部網絡地址,另一塊在外網交換機配公網地址。在這個
機器ping 內網和外網的機器應該都能通。并且在內網的機器ping
該機器的外網地址也通,在外網的機器ping該機器內網的地址也同樣通。這說明轉發功能是有效的。
3.2、再試驗一下:在內部網絡把網關設為你的機器的內網地址,然后ping 外網的任一臺機器(不是這臺機器的外網地址),結果是不通。原因是ICMP包發出去后外網的機器不知道怎么回答,那里沒有合適的路由,因為這個包的回應地址是內網。
3.3、現在設置ipchains:(ipchains軟件適用2.2.X的內核,在2.4.X的內核中不適用。2.4.X的內核推薦使用iptables,關于該軟件的用法在下面介紹)
ipchains –A forward –s 192.168.1.0/24 –j MASQ
黑體部分是內網地址。這句話的意思是,把所有內網發送的包都偽裝成外部網的地址(那個機器的外網地址),這樣,外部其他機器回應的時候就會發
送到這臺機器,經過轉發就回來內網了。好了,一個簡單的網關做好了。如果你需要實現防火墻(包過濾功能),則需要配置更加復雜的過濾規則,這些規則應該同
時作用于input/output/forward鏈。
3.4、自動啟動:設定了復雜的鏈,需要保存。在/etc/rc.d中建立一個文件:rc.ipfwadm把你的鏈腳本加進去就可以了。最后給這個文件+x屬性(chmod +x rc.ipfwadm)。
4.在2.4.X內核中使用iptables建立Linux防火墻(網關)。
4.1 說明和下載
前面已經提到過2.4
內核中要使用iptables來做類似于ipchains在2.2內核中實現的事情。事實上,在2.4內核中的iptables包含了兩個完全不同的部
分:包過濾和地址轉換。這兩個功能在邏輯上是分開的,考慮到操作習慣上的問題才集成在一個配置程序(iptables)上。如果你安裝了帶有2.4內核的
發行包,那么一般都帶有iptables,并且在內核配置上也配置好了。如果要編譯新的內核或者原來的內核沒有支持iptables,需要選上相關的選
項。使用make menuconfig 配置內核的時候操作:進入:Networking Options至少選擇上:
[*] Network packet filtering (replaces ipchains)
[*] Network packet filtering debugging (NEW)
進入:IP: Netfilter Configuration --->
[*] Connection tracking (required for masq/NAT) (NEW)
<M> FTP protocol support (NEW)
<M> IRC protocol support (NEW)
等等……
把下面的選項全部標記<*>
逐級返回上面菜單后保存配置,然后按照編譯內核的那一套程序進行即可(參見前面的內容)。這里需要說明的是,內核支持了iptables功
能,還需要有外部程序才行。如果你是直接安裝的帶有2.4內核的發行包,應該已經帶有iptables實用程序了。但是如果你是從2.2核心的發行包直接
升級到2.4內核,盡管按照上面的做法配置的核心,但是還不能使用iptables。還必須下載和編譯iptables外部程序才能使用iptables
功能。下載的地址是:http://www.netfilter.org
,下載的文件是iptables-1.2.6a.tar.bz2或更新的版本。
4.2 安裝:
這個.bz2文件比較奇怪吧?把文件復制到/usr/local/src中,然后用下列命令釋放編譯和安裝: bzip2 -dc iptables-1.1.2.tar.bz2 |tar vxf - (最后那個‘- ’別忘了)
你的系統可能沒有bzip2工具,如果沒有,你就去下一個:
進入新生成的目錄 :cd iptables-1.2.6a 編譯和安裝:make ; make install
4.3 配置
如果你需要配置一個簡單的網關,你僅僅需要配置一個轉發加地址轉換功能即可,我提供的參考腳本如下:
#begin
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F INPUT
iptables -F FORWARD
iptables –F OUTPUT
iptables -F POSTROUTING -t nat
iptables -t nat -F
iptables -P FORWARD DROP
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24
-j SNAT --to 211.99.223.2
#end
其中3行modprobe是當你在內核中把iptables相關功能編譯成模塊(選成)的時候才用到的(也可能不止3行)。其中插入模塊
(modprobe)的幾行比較重要,有時候當你作完NAT后,發現FTP不好用了,就要手工插入ip_nat_ftp模塊(語法是:modprobe
ip_nat_ftp)。黑體的地址部分可能是需要根據你網絡的實際情況來決定的。最后一句話的意思是把凡是源地址是192.168.1.x的包做地址轉
換,轉換為網關外側地址211.99.223.2。好了,你已經建立起一個基本的網關了。其實iptables的功能及其強大,配置也非常靈活。其中的防
火墻功能通過-t filter參數實現,地址轉換功能通過-t nat實現(就像上面一樣)。防火墻功能(packet
filter)主要是3個鏈:INPUT,FORWARD,OUTPUT,地址轉換功(nat)主要是3個鏈:PREROUTING,
POSTROUTING,OUTPUT。觀察當前的狀態可以使用下面的命令:iptables –L –t filter 或 iptables –L
–t nat。
原文轉自:http://www.anti-gravitydesign.com