歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> FreeBSD配置基於ADSL的VPN網關+防火牆

FreeBSD配置基於ADSL的VPN網關+防火牆

日期:2017/3/6 15:50:49   编辑:關於Unix
首先從ppp撥ADSL說起,如果您對於使用ppp連接PPPoE(也就是ADSL使用的連接方式)已經非常熟悉了,那就可以跳過這一段直接看後面的。 使用ppp連接PPPoE是非常簡單的,FreeBSD在安裝好之後你會在/etc/ppp/目錄下看到一個叫做ppp.conf的文件,你把這個文件修改
  首先從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 clearcase/" target="_blank" >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\"foo\n" 192.168.1.10/24
  之後我們還可以添加一句來默認讓mpd執行pptp的這組設置,需要修改配置文件的這個部分:
  default:
  load pptp
  sample文件裡面還有配置多用戶登陸的情況下的樣本,我就不用在寫了,配置是一樣的改完這些之後只要運行mpd -b就可以啟動了由於考慮到安全原因我沒有書寫啟動腳本在開機的時候啟動mpd,因為對於防火牆來說在沒有用的時候多開一個端口就多一份危險,但是也許很多人需要在開機的時候自動運行mpd,下面我還是提供一個啟動腳本給大家,可以放在/usr/local/etc/rc.d/目錄下面記住要加上執行權限。
  #!/bin/sh
  
  PREFIX=/usr/local
  
  case "$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
  ;;
  esac
  
  exit 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是我分配給客戶端得內網地址,如果你的地址定義不同你需要修改這個地址

Copyright © Linux教程網 All Rights Reserved