歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix教程 >> 利用 FreeBSD 組建安全的網關

利用 FreeBSD 組建安全的網關

日期:2017/2/27 17:44:01   编辑:Unix教程
FreeBSD網關
  FreeBSD在網絡服務器的領域裡占有一席之地,不管是在高端應用,還是小型企業裡,使用FreeBSD做服務器都是不錯的選擇,但是如何才能建立一個安全的網絡呢?
  
  首先我們來做一個這樣的假設,某公司有兩台服務器,需要建立一個以FreeBSD為平台的網關,並且還能提供電子郵件、DNS、WEB等服務,看起來好象這是一個很簡單的事情,然而要建立一個安全性高的卻不簡單,在此我將為大家介紹如何去做,首先我憑著自己對FreeBSD的熟練程度,做了以下設計:
  
   Internet
   ____|____
   | |
   | Gateway |
   ---------
   |
   ____________|______________
   ___|____ ____|____
   | | | |
   | LAN | | WWW |
   ---------- ----------
  
  以上是我為該公司設計的網絡結構圖,首先我們來分析一下這個圖,由於Gateway是一個與Internet直接連接的服務器,糟受的攻擊自然也是最多的,所以也是最危險了。而且由於該服務器擔任著公司的網關,該服務器只要一出問題,也將影響到全公司。為了穩定性、安全性,我考慮該服務器要跑的服務越少越好。服務越少,那麼漏洞出現的可能性也越少。而WWW服務器由於放在了Gateway裡面,受Gateway的保護,所以一般來說遭受的攻擊比較少,所以一般可以滿足足夠多的服務,但是這些服務怎麼樣才能讓Internet上的人訪問呢?這就會在下面我們詳細介紹了。
  
  首先我們來安裝Gateway,Gateway要使用的Internet的IP為x.x.x.x網卡為xl0,內部IP為192.168.0.1網卡為xl1,由於Gateway起到網關的作用,所以為了安全性,在該服務器上做安全是非常重要的,FreeBSD有自帶了一個ipfirewall防火牆,既然有,我們當然要利用上了,首先編譯內核:
  
  cd /sys/i386/conf
  cp GENERIC ./kernel_IPFW
  
  用編輯器打開kernel_IPFW這個文本文件,在該文件裡加入以下內容:
  
  optionsIPFIREWALL //通知操作系統的內核檢查每個IP數據包,將它們與規則集進行比較
  optionsIPDIVERT //啟用由ipfw divert使用的轉向IP套接字。這一選項需要與natd聯合使用。
  optionsIPFIREWALL_VERBOSE //向系統的注冊程序發送注冊信息包。
  optionsIPFIREWALL_VERBOSE_LIMIT=100 //限制一台機器注冊的次數。
  optionsIPSTEALTH //啟動支持秘密轉發的代碼,這一選項在使防火牆不被traceroute和類似工具發現時很有用。
  optionsACCEPT_FILTER_DATA
  optionsACCEPT_FILTER_HTTP //接受過濾器中的靜態連接
  optionsICMP_BANDLIM //ICMP_BANDLIM根據帶寬限制產生icmp錯誤。一般情況下我們需要這個選項,它有助於你的系統免受D.O.S.攻擊。
  
  把以上參數加入以後保存kernel_IPFW文件。
  
  make depend
  cd ../../compile/kernel_IPFW
  make
  make install
  
  (注意!!!!!請不要使用遠程方式來設置服務器!為什麼?等下你就能知道了。)
  
  以上完成以後,你就可以重新啟動系統使用新的內核了。
  
  使用新內核以後,如果該系統本來是連在網絡上的,那麼這時他的網絡部分已經完全喪失,這表示系統新的內核已經起作用了,防火牆也起作用了,但由於FreeBSD的防火牆默認情況下是不允許任何機器訪問,所以該機器的任何網絡功能都暫時喪失。不過不要著急,接著往下看,你就會覺得非常有意思了。
  
  既然該服務器擔當是的網關,那麼讓網關啟動起來是必須的。我們現在再:
  
  cd /etc
  
  用編譯器編譯rc.conf
  
  加入如下參數:
  
  gateway_enable="YES" //啟動網關
  ##########IP-firewall#################
  firewall_enable="YES" //激活firewall防火牆
  firewall_script="/etc/rc.firewall" //firewall防火牆的默認腳本
  firewall_type="/etc/ipfw.conf" //firewall自定義腳本
  firewall_quiet="NO" //起用腳本時,是否顯示規則信息。現在為“NO”假如你的防火牆腳本已經定型,那麼就可以把這裡設置成“YES”了。
  firewall_logging_enable="YES" //啟用firewall的log記錄。
  ##########NATD#######################
  natd_interface="xl0" //NATD服務啟用在哪塊網卡。
  natd_enable="YES" //激活NATD服務
  natd_flags="-config /etc/natd.conf" //NATD服務參數設置文件。
  
  設置完成後我們再編譯/etc/syslog.conf文件。
  
  加入以下行:
  
  !ipfw
  *.* /var/log/ipfw.log
  
  好了rc.conf文件設置完畢,然後就是其他文件了。
  
  新建/etc/ipfw.conf 文件,在文件裡寫入以下內容:
  
  add 00400 divert natd ip from any to any via xl0 //natd服務啟動設置
  add 00001 deny log ip from any to any ipopt rr
  add 00002 deny log ip from any to any ipopt ts
  add 00003 deny log ip from any to any ipopt ssrr
  add 00004 deny log ip from any to any ipopt lsrr
  add 00005 deny tcp from any to any in tcpflags syn,fin //這5行是過濾各種掃描包
  #######tcp#########
  add 10000 allow tcp from xx.xx.xx.xx to x.x.x.x 22 in //向Internet的xx.xx.xx.xx這個IP開放SSH服務。也就是只信任這個IP的SSH登陸。
  add 10001 allow tcp from any to x.x.x.x 80 in //向整個Internet開放HTTP服務。
  add 10002 allow tcp from any to x.x.x.x 25 in //向整個Internet開放smtp服務。
  add 10003 allow tcp from any to x.x.x.x 110 in //向整個Internet開放pop3服務。
  add 19997 check-state
  add 19998 allow tcp from any to any out keep-state setup
  add 19999 allow tcp from any to any out //這三個組合起來是允許內部網絡訪問出去,如果想服務器自己不和Internet進行tcp連接出去,可以把19997和19998去掉。(不影響Internet對服務器的訪問)
  ######udp##########
  add 20001 allow udp from any 53 to me in recv xl0 //允許其他DNS服務器的信息進入該服務器,因為自己要進行DNS解析嘛~
  add 20002 allow udp from any to x.x.x.x 53 in recv xl0 //向整個Internet開放DNS服務。
  add 29999 allow udp from any to any out //允許自己的UDP包往外發送。
  ######icmp#########
  add 30000 allow icmp from any to any icmptypes 3
  add 30001 allow icmp from any to any icmptypes 4
  add 30002 allow icmp from any to any icmptypes 8 out
  add 30003 allow icmp from any to any icmptypes 0 in
  add 30004 allow icmp from any to any icmptypes 11 in //允許自己ping別人的服務器。也允許內部網絡用router命令進行路由跟蹤。
  #######lan##########
  add 40000 allow all from 192.168.0.0/16 to any
  add 40001 allow all from any to 192.168.0.0/16 //允許內部網絡訪問Internet。
  
  好了,還有natd沒設置了,我們再次添加/etc/natd.conf這個文件,其內容如下:
  
  log yes //啟動natd的log記錄。
  redirect_port tcp 192.168.0.2:25 x.x.x.x:25 //把對服務器IP為x.x.x.x的smtp訪問轉到192.168.0.2的25上去。
  redirect_port tcp 192.168.0.2:80 x.x.x.x:80 //把對服務器IP為x.x.x.x的http訪問轉到192.168.0.2的80上去。
  redirect_port tcp 192.168.0.2:110 x.x.x.x:110 //把對服務器IP為x.x.x.x的pop3訪問轉到192.168.0.2的110上去。
  
  好了,natd也設置完了~重新啟動一下系統讓防火牆和natd生效,現在就是該裝的服務沒裝了,雖然防火牆已經讓這些服務通行。
  
  我們現在在Gateway上安裝DNS服務,我現在選擇的是bind 9.2.0,安裝過程不是我們的重點,所以這裡就不詳細介紹了,我這裡只對bind的安全設置做一個說明,假設bind的工作目錄是/etc/namedb現在我們對bind設置一下,因為bind的大多數版本都存在問題,這個版本雖然目前沒有,但還是提防為好,我在這裡建議使用chroot技術來增強bind的安全,假設我們把chroot目錄設在/chroot,我們做以下事情:
  
  pw useradd bind -g 53 -u 53 -d /nologin -s /nologin
  mkdir /chroot
  mkdir /chroot/etc
  mkdir /chroot/var
  mkdir /chroot/var/run
  cp -rp /etc/namedb /chroot/etc/namedb //建立bind的工作環境和目錄。
  
  然後再運行
  
  $PATH/sbin/named -t /chroot -u bind
  
  這樣做了後運行ps -ax |grep named會發現bind是以bind這個權限很底的身份運行,我們到/chroot/var/run目錄下看,會發現有named.pid這個文件,表示bind已經很成功的被chroot在/chroot這個目錄裡了,就算被“黑客”利用bind入侵了,由於權限很底,而且被限制在/chroot這個目錄裡,並且裡面沒有任何的shell,不給“黑客”任何的破壞條件。所以說bind這時已經相當安全了。
  
  到此整個Gateway服務器就已經完全設置完畢。
  
  現在就是內部服務器了,而內部服務器受到Gateway以及防火牆的保護,所以在安裝上沒有多大的問題,只要注意一下郵件服務軟件以及HTTP服務
Copyright © Linux教程網 All Rights Reserved