配置基於ADSL的防火牆(轉)
我的目的是做一臺ADSL撥號閘道器,這個閘道器上由MPD作為VPN閘道器的守護程式,使用PPTP協議作為傳輸協議, 由於這臺機器上有samba伺服器,所以我無法開放我的所有埠,我必須封鎖所有不需要的埠。正因為這樣花了很長時間研究PPTP協議到底需要透過防火牆上的那些埠和那些協議。配置的目的已經告訴大家了,下面是配置的過程。
首先從ppp撥ADSL說起,如果您對於使用ppp連線PPPoE(也就是ADSL使用的連線方式)已經非常熟悉了,那就可以跳過這一段直接看後面的。
使用ppp連線PPPoE是非常簡單的,FreeBSD在安裝好之後你會在/etc/ppp/目錄下看到一個叫做ppp.conf的檔案,你把這個檔案修改成下面的樣子就可以連線PPPoE了,檔案內容如下:
default: set log Phase Chat LCP IPCP CCP tun command ident user-ppp VERSION (built COMPILATIONDATE)# Ensure that "device" references the correct serial port # for your modem. (cuaa0 = COM1, cuaa1 = COM2) # set device PPPoE:rl0 set speed sync set mru 1492 set mtu 1492 set ctsrts off set timeout 60 # 3 minute idle timer (the default) enable dns # request DNS info (for resolv.conf)papchap: # # edit the next three lines and replace the items in caps with # the values which have been assigned by your ISP. #set authname #username# set authkey #password# set timeout 60 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 add default HISADDR # Add a (sticky) default route
第一部分是設定日誌的方式和一些預設資訊set device PPPoE:後面需要改成你的網路卡的驅動,我的是Realtek的8139,所以就是rl0了,下面是設定最大傳送/接受單元,PPPoE預設是1492,然後timeout是在你是用auto方式的時候設定的超時時間,超過這個時間將會斷線。enable dns是開啟從ISP服務端接收分配的DNS,後面papchap部分是設定你的PPPoE帳號資訊,最後兩句是設定路由資訊的,請務必新增。
注意標籤後面的語句要有縮排,至少縮排一個空格,在帖子裡可能看不到,大家要注意!
修改過配置檔案之後你就可以用ppp -ddial papchap來試驗一下,如果連線上了網路就沒問題了,在rc.conf檔案中新增下面兩句就可以在開機的時候啟動ppp撥號:
ppp_enable="YES" ppp_mode=ddial ppp_nat="YES" ppp_profile="papchap"
其中ppp_mode=後面是ppp的方式,可選的有auto ddial background等等,具體的資訊可以從man ppp中獲得。以上就是PPP撥PPPoE的配置,可以看到非常的簡單。
下面一部分是啟動IPFW的防火牆,這個需要修改預設得核心設定,同時使用MPD也需要對核心進行修改,所就在這裡同時都修改了。我使用的是升級版本的IPFW,也就是被稱作IPFW2的防火牆,在FreeBSD4.x上使用這個防火牆需要重新編譯IPFW,這需要你事先安裝了FreeBSD4.6以上的原始碼在你的硬碟上,然後執行下列步驟升級你的IPFW:
cd /usr/src/sbin/ipfw make -DIPFW2 make install cd /usr/src/lib/libalias make -DIPFW2 make install
或者在你/etc/make.conf裡面新增
IPFW2=TRUE
然後mak world來升級你的防火牆
升級IPFW完畢之後,接下來就是修改核心了,重新編譯核心需要經過如下步驟,首先進入/sys/i386/conf/目錄,裡面有兩個檔案,一個是GENERIC,另一個是LINT,具體的說明資訊我就不贅述了,我只講一下我修改核心的過程。
首先 cp GENERIC mykern編輯mykern增加如下的部分:
options NETGRAPH options NETGRAPH_PPPOE options NETGRAPH_SOCKET options NETGRAPH_ETHER options IPFW2 options IPDIVERT options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=100 options IPSTEALTH options ACCEPT_FILTER_DATA options ACCEPT_FILTER_HTTP
退出編輯器
config mykern cd ../../compile/mykern make depend make make install
然後重新啟動機器核心的更新就已經完成了。
這樣IPFW2的安裝就已經完成了,我們先不開啟防火牆,我們先配置mpd來建立PPTP的伺服器。關於MPD的安裝其實非常簡單,你可以自己手動編譯,但我還是推薦大家用ports來安裝,因為我實在是想不出什麼理由來不用ports安裝:)如果你安裝了ports到你的硬碟上,你透過下列步驟就可以完成mpd的安裝了
cd /usr/ports/net/mpd make install make clean
安裝完畢之後,ports會自動建立/usr/local/etc/mpd目錄並把配置檔案的樣本存放在這個目錄裡面,可以透過修改已有的配置檔案樣本來完成對mpd的配置,以mpd.conf.sample為例,首先cp mpd.conf.sample mpd.conf然後修改下面的部分pptp:
new -i ng0 pptp pptp set iface disable on-demand set iface enable proxy-arp set iface idle 1800 set bundle enable multilink set link yes acfcomp protocomp set link no pap chap set link enable chap set link keep-alive 10 60 set link mtu 1460 set ipcp yes vjcomp set ipcp ranges 192.168.1.1/32 192.168.1.50/32 set ipcp dns 192.168.1.3 set ipcp nbns 192.168.1.4 # # The five lines below enable Microsoft Point-to-Point encryption # (MPPE) using the ng_mppc(8) netgraph node type. # set bundle enable compression set ccp yes mppc set ccp yes mpp-e40 set ccp yes mpp-e128 set ccp yes mpp-stateless
這個是sample裡面的預設配置,下面對於需要修改的部分做出說明實際上我們需要修改只有三行,就是下面三行
set ipcp ranges 192.168.1.1/32 192.168.1.50/32 set ipcp dns 192.168.1.3 set ipcp nbns 192.168.1.4
第一行是設定你的本地VPN閘道器的地址,如果你是像我一樣用NAT來區分內外網的話這個應該是閘道器的內網地址,後面的是對方撥入以後將會在內網獲得的地址,這個地址倒是沒有什麼特殊要求,就是首先這個地址需要和內網處於一個網段,否則訪問不了,第二後面可以設定一個掩碼,來控制這個地址可能的範圍,如果這個地址被佔用了,將會分配一個再限定範圍內的地址給客戶端,這個範圍由"/"後面的掩碼來控制。
第二行是指定你內網使用的DNS伺服器的地址,注意這個將會在使用者連入的時候同內網地址一起被分配給使用者第三行和第二行類似,是指定Netbios伺服器的地址,如果內網沒有WINS伺服器這行可以不寫。最後我還增加了一行命令,再不增加這個命令的時候mpd看起來也是正常運轉的,但是我不太放心還是加了這行加密指令set bundle enable encryption下面我們還需要稍微修改一下mpd.links.sample pptp:
set link type pptp set pptp self 1.2.3.4 set pptp enable incoming set pptp disable originate
上面的部分裡面需要修改一下set pptp self 1.2.3.4這一行,這行是指定mpd的pptp伺服器繫結在那個地址上面,如果是我們現在使用ppp撥叫ADSL的情況,會遇到網路介面改變,ip地址改變的情況,就不能定義這一句,所以針對我們的情況,我們要去掉這句,其他的我們就不用改了當然我們還要修改一下mpd.secret檔案這個檔案定義了撥入使用者的使用者名稱和密碼使用者名稱寫在前面,密碼寫在後面用引號引起來,就像下面這樣
fred "fred-pw"
當然還可以指定這個使用者必須從那個地址或者網段來撥入,就像下面的例子:
joe "foobar" 192.168.1.1 bob "x34"foon" 192.168.1.10/24
之後我們還可以新增一句來預設讓mpd執行pptp的這組設定,需要修改配置檔案的這個部分:
default: load pptp
sample檔案裡面還有配置多使用者登陸的情況下的樣本,我就不用在寫了,配置是一樣的改完這些之後只要執行mpd -b就可以啟動了由於考慮到安全原因我沒有書寫啟動指令碼在開機的時候啟動mpd,因為對於防火牆來說在沒有用的時候多開一個埠就多一份危險,但是也許很多人需要在開機的時候自動執行mpd,下面我還是提供一個啟動指令碼給大家,可以放在/usr/local/etc/rc.d/目錄下面記住要加上執行許可權。
#!/bin/shPREFIX=/usr/localcase "$1" in start) if [ -x ${PREFIX}/sbin/mpd -a -f ${PREFIX}/etc/mpd/mpd.conf ]; then ${PREFIX}/sbin/mpd -b echo -n ` mpd ` fi ;; stop) killall mpd && echo -n ` mpd ` ;; *) echo "Usage: `basename $0` {start|stop}" >&2 ;; esacexit 0 ;
下面我們要開啟防火牆來測試一下了,我們開啟防火牆還需要修改一下rc.conf檔案我們需要新增下列配置
firewall_enable="YES" firewall_type="/etc/ipfw.conf" gateway_enable="YES" natd_enable="YES" natd_interface="rl0" natd_flags="-f /etc/natd.conf"
其中兩個需要說明,firewall_type=後面我這裡是指定了一個檔案來做定製配置,ipfw還有其他幾種預設的方式可選,例如open,client,close等等。我們用不到就不說了無論如何一定要有以下這句,否則你的閘道器無法正常運轉gateway_enable="YES"
大家注意到我的轉發介面設定的是rl0也就是我的網路卡,這在使用ppp的時候是沒有問題的,但是如果用mpd作PPPoE撥號時候無論如何不行,必須設定成mpd的建立的ng0裝置上。
我開始的想法如果無法把pptp的監聽設定在外網介面上的情況下就把埠用natd從外網轉進來,誰知道pptp還需要埠以外的部分進行連線,所以現在natd基本上是沒有什麼作用的。
下面我就給大家我的/etc/ipfw.conf裡面關於如何讓pptp連線透過的語句
add 40009 allow tcp from me 1723 to any add 40010 allow tcp from any to me 1723 add 40011 allow gre from me to any add 40012 allow gre from any to me
只有新增了這四句才可以使得客戶端連線上閘道器,但是如果只有這四個,客戶端連上了是什麼也幹不了的,所以還要為客戶端設定下面兩個規則才行
add 40007 allow ip from any to 192.168.1.30 keep-state setup add 40008 allow ip from 192.168.1.30 to any keep-state setup
注意我得配置中192.168.1.30是我分配給客戶端得內網地址,如果你的地址定義跟我不同你需要修改這個地址
由於安全原因,我不能把我完整的配置檔案都放出來給大家了,關於其他的規則,請大家參考iceblood寫的透過FreeBSD共享ADSL上網等文章得防火牆設定或者檢視man 8 ipfw來定製自己的規則。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-944428/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用隨身碟的小型ADSL防火牆(轉)防火牆
- 基於iptables防火牆堵漏防火牆
- 防火牆基礎Firewalld命令配置防火牆
- 防火牆配置防火牆
- 用FWTK配置Linux防火牆(轉)Linux防火牆
- 基於Linux系統的包過濾防火牆(3)(轉)Linux防火牆
- 基於Linux系統的包過濾防火牆(1)(轉)Linux防火牆
- 基於Linux系統的包過濾防火牆(2)(轉)Linux防火牆
- 配置防火牆示例防火牆
- 全面分析防火牆及防火牆的滲透(轉)防火牆
- 使用netfilter/iptables配置防火牆(轉)Filter防火牆
- 搭建基於netfilter/iptables的防火牆實驗環境(轉)Filter防火牆
- CiscoPIX防火牆配置指南防火牆
- linux 防火牆配置Linux防火牆
- Linux 配置防火牆Linux防火牆
- Linux配置防火牆Linux防火牆
- slackware-10.1 下 adsl 撥號上網的 iptables 防火牆設定(轉)防火牆
- FreeBSD ipfw 防火牆基礎指南(轉)防火牆
- 防火牆在RAC上的配置防火牆
- 天網防火牆的配置方法防火牆
- 關於各類防火牆的介紹(2)(轉)防火牆
- 關於各類防火牆的介紹(1)(轉)防火牆
- Linux防火牆配置初級入門(轉)Linux防火牆
- 關於諾頓防火牆防火牆
- Firewalld防火牆基礎防火牆
- 防火牆入侵於檢測——————3、思科 PIX 防火牆和 ASA 防火牆產品線防火牆
- Linux 防火牆配置使用Linux防火牆
- iptables 配置LINUX防火牆Linux防火牆
- 網路防火牆的配置與管理防火牆
- linux中的firewalld防火牆配置Linux防火牆
- Linux防火牆基礎Linux防火牆
- Mac有防火牆嗎?關於Mac防火牆常見的問題解答Mac防火牆
- 選用單防火牆DMZ還是雙防火牆DMZ(轉)防火牆
- 配置ubuntu支援ADSL(轉)Ubuntu
- Centos6防火牆基本配置CentOS防火牆
- 在 Ubuntu 中用 UFW 配置防火牆Ubuntu防火牆
- waf 應用防火牆部署配置防火牆
- RedHat Linux下防火牆配置入門必學(轉)RedhatLinux防火牆