天天看點

FreeBSD從零開始---安裝後配置(三)

IPFW和IPF

一、IPFW

IPFW意思可以了解為ip防火牆,主要作用是攔截設定規則外的ip包。你可以把這個了解為linux下的iptables,但是,ipfw要比iptables簡單易用。

freebsd系統預設是不安裝ipfw或者ipf的,你需要在核心配置檔案中啟用并重新編譯核心。是以,你需要先運作sysinstall-->Distribution->src->選擇base,sys,然後安裝系統核心源碼。

然後進行下列步驟

#cd /usr/src/sys/amd64/conf

#cp GENERIC IPFW

#vi IPFW

在最下面加入以下内容

options IPFIREWALL

options IPFIREWALL_VERBOSE

options IPFIREWALL_VERBOSE_LIMIT=10

<b>options IPFIREWALL_DEFAULT_TO_ACCEPT</b>

粗體字十分重要,如果你不加上的話,IPFW将預設關閉所有連結,相當于實體隔離了,你将無法遠端登入維護。

然後編譯核心。注,你必須安裝源碼中的base,否則你将無法編譯任何東西

#cd /usr/src

#make buildkernel KERNCONF=IPFW

#make installkernel KERNCONF=IPFW

然後進入/etc

#vi rc.conf

加入以下内容

firewall_enable="YES"

firewall_type="open"

#open或規則檔案絕對路徑

之後等待編譯并安裝完成。IPFW就啟用了,然後重新開機就可以開始配置IPFW的規則了。你過去的kernel将放在/boot/kernel.old,如果你編譯後有任何啟動方面的問題,可以在剛開始啟動的選擇菜單選擇Load Prompt選項,然後打boot kernel.old啟動你原來沒有問題的核心。

相比于iptables那種-m -d的選項方式的指令行,IPFW的配置更接近于人類的語言。其實目前有很多防火牆或者流控系統都是是基于FreeBSD的IPFW或IPF的,隻是做了一個網頁的界面,便于不太熟悉指令行操作的人使用,比如panabit或者m0n0wall。不過我覺得,其實指令行更靈活和友善簡單。

ipfw分内規則和外規則兩種,設定規則時,你需要給定規則編号,10000以内為内規則,以上是外規則。當然你也可以給10000以内的,隻要你自己看得懂就行,一條規則ID可以配置設定多個規則使用。關于規則ID,如果你學習過路由交換和cisco的acl,應該是比較容易了解的。實際上Cisco的IOS就是基于BSD系統做嵌入式開發的。如果實在沒有概念,你可以把規則ID了解為key,規則内容就是key對應的value。

ipfw基本文法如下

<b>ipfw 操作(添加|删除) 規則編号 動作(允許|拒絕) 位址(All) from 位址(IP|ANY) to 位址(IP|ANY) 端口号</b>

示例如下

<b>#ipfw add 10001 deny all from any to 192.168.1.10 22</b>

<b>注意,請不要将這行代碼放入你的伺服器裡,否則你将無法通路。</b>

<b></b>

按照人類語言的描述就是,<b>ipfw 添加 10001 拒絕 所有 從 任意位址 到 192.168.1.10的22端口</b>。如果你需要去掉這條規則,就把add換成delete,ipfw的使用方法寫出來有好幾頁,可以去檢視FreeBSD的中文手冊,BSD這點非常好,手冊非常詳細。

你也可以用ipfw做nat轉發,示例如下

#ipfw nat 1 config redirect_addr 10.0.0.1 10.0.0.66

#ipfw nat 2 config redirect_port tcp 192.168.0.1:80 500

#ipfw nat 3 config redirect_proto udp 192.168.1.43 192.168.1.1

這樣來說,ipfw可以完成的事情非常多,并不比iptables差,并且由于tcp/ip協定是在bsd上先實作的,是以,效率更高。而且文法更簡單明了。也同樣可以對二層位址(MAC)進行通路控制。

使用ipfw list檢視目前規則

二、IPF

IPFW和IPF是兩個完全不同的東西,但是功能和性能很接近,沒有誰好誰壞,看使用習慣了,但是同樣都需要重新編譯核心才可以生效。前面幾步跟IPFW一樣。

#cp GENERIC IPF

#vi IPF

插入以下内容

options                                 IPFILTER

options                                 IPFILTER_LOG

編輯/etc/rc.conf

#vi /etc/rc.conf

加入

ipfilter_enable="YES"

#打開ipfilter

ipfilter_rules="/etc/ipf.rules"

#ipfilter規則檔案絕對路徑

gateway_enable="YES"

#作為網關使用

ipnat_enable="YES"

#nat轉發打開

ipnat_rules="/etc/ipnat.rules"

#nat 規則檔案絕對路徑

然後重新編譯,安裝核心,重新開機。

典型指令如下

#ipf -l pass in quick on lo0 all

#ipf -l block in quick on em0 from any to 192.168.0.0/16

解釋一下:

ipf 允許 進入 在 lo0(環回位址) 全部

ipf 鎖定 進入 在em0 從 任意 到 192.168.0.0/16(B類)

非常簡單

ipnat是ipf下可以做nat轉發的工具,我一般會把nat規則寫入到一個檔案裡,這樣啟動的時候會自動加載很多規則,不用一個一個去執行。

典型檔案内容如下

map bce1 192.168.10.0/25 -&gt; 211.103.xxx.xx1/32

#将bce1位址192.168.10.0/25(VLSM)轉發到211.103.xxx.xx1/32(固定位址)

map bce1 192.168.20.111/32 -&gt; 211.103.xxx.xx2/32

#将bce1位址192.168.20.111/32(固定位址)轉發到211.103.xxx.xx2/32(固定位址)

rdr bce1 192.168.10.2/32 port 80 -&gt;    211.103.xxx.xx2/32 port 8100 tcp

#端口轉發(rdr) bce1 位址192.168.10.2/32(固定位址)的80端口 轉發到 211.103.xxx.xx2/32的8100端口。

ipfw和ipf大緻就是這樣,還有一個過濾工具叫pf,全稱為packet filter,那個不是很熟,就不寫了。有任何疑問可以參看BSD的手冊,解說非常詳細。

增加<b>fsck_y</b>提供的核心選項

options             ACCEPT_FILTER_DATA

options             ACCEPT_FILTER_HTTP

options             ACCEPT_FILTER_DNS

繼續閱讀