Linux主機伺服器架設技術(防火牆管制連線)
Linux主機伺服器架設技術(防火牆管制連線)
本文主要是沿續「橋接式防火牆」及「NAT主機」兩文,說明其後續的資安控管作法。由於這兩者皆是使用 OB2D 架設,並利用 iptables 來做為封包過濾的機制,因此,他們內部網路的終端設備控管方式是一樣的。
其實大部分的管制措施都只管到「君子」而已,對技術高超的「小人」無效。下面有一篇可以讓網管們知己知彼的好文「如何突破區域網路對上網的限制」,大家先看一下: http://forum.slime.com.tw/thread165780.html
看完只有一個感想,如果我的技術連「加密跳板(FLAT)」都防得了,那不就可以開公司賣那種一台數百萬的 IPS(入侵防禦系統)了嗎?第二個感想,難怪那些數百萬的 IPS 設定畫面超級複雜。
通訊埠管制
「通訊埠是否要管制?」這個問題,見人見智,其實沒有標準答案。,因為各網站皆已建置妥硬體防火牆,所以網站內是否還要管制通訊埠便是個難題。以下筆者列示一下各自的優缺點,以筆者的價值觀暨 NGN 專案建議架設 NAT 主機考量下,筆者比較建議網站採用預設不管制的作法。
* 預設管制,只開放部分
o 做法:可參考 http://myip.tw/b2ddoc/LinuxBase/m7_security.html 有關 NAT 通訊埠過濾等相關部分文件
o 優點:若內部機器中毒,無法對外掃描入侵,網路隔離效果較好。
o 缺點:必須充分考慮各種預設狀況,若少開一兩組通訊埠,造成設備無法連線,也是一種困擾。
* 預設不管
o 做法:NAT主機部分,只要做到啟動封包轉送,其餘通訊埠的管理,保留其預設的設定。
o 優點:簡單好設,相容性高
o 缺點:無法完全隔離內外網段
連線狀況檢視
流量檢視
BandWidthd 是一套簡易的流量監控軟體,只要啟動後,它會產生日、週、月的 TOP 20 IP 流量表,並製成網頁,我們只要建立起網頁連結,並設妥連線限制,便可安心的提供給網管人員之重要參考。值得注意的是,它必須架在流量的咽喉點(如 NAT 或橋接式防火牆)上,當所有內網的網路封包皆經由它進出,所抓的流量才是確實有用的資料。
* 安裝 bandwidthd
root@nat:~# apt-get install bandwidthd
Interface to listen on: eth1 (BridgeMode 也一樣)
Subnets to log details about: 192.168.110.0/24 (BridgeMode 改成實體 IP,例: 163.26.182.0/24)
Recover old data from logs on restart? <是>
* 註解
o 註1: Interface –> 虛擬 IP 的網卡, 例: eth1
o 註2: Subnets –> 要監聽的網段, 依虛擬 IP 所設定的網段為準,例: 192.168.110.0/24
* 建立 /etc/bandwidthd/bandwidthd.conf,以下為參考檔,請實況修改內容
####################################################
# Bandwidthd.conf
#
# Commented out options are here to provide documentation and represent defaults
# 監控網段,必須使用 CIDR 格式的遮罩寫法
subnet 192.168.110.0/24
# 監控網卡:NAT 填虛擬 IP 卡; BridgeMode 填 br0
dev “eth1”
###################################################
# Options that don’t usually get changed
# An interval is 2.5 minutes, this is how many intervals to skip before doing a graphing run
#skip_intervals 0
# Graph cutoff is how many k must be transfered by an ip before we bother to graph it
#graph_cutoff 1024
#Put interface in promiscuous mode to score to traffic that may not be routing through the host machine.
# 靜聽模式,因實際流量一定會經過網卡,所以設成 false
#promiscuous true
promiscuous false
#Log data to cdf file htdocs/log.cdf
#output_cdf false
output_cdf true
#Set the cdf log output directory
#log_dir “/var/lib/bandwidthd”
#Read back the cdf file on startup
#recover_cdf false
recover_cdf true
#Libpcap format filter string used to control what bandwidthd see’s
#Please always include “ip” in the string to avoid strange problems
#filter “ip”
#Draw Graphs – 設成 true 後,會動用某程度的 RAM 及 CPU 使用率
graph true
#流量圖幾秒更新一次(default 150, use 0 to disable).
#meta_refresh 150
meta_refresh 150
#放置流量圖之實體位置
htdocs_dir “/var/lib/bandwidthd/htdocs”
* 建立 http://nat.your.domain/bandw 網頁
o 建立 /etc/apache2/conf.d/bandw.conf
root@dns:~# vi /etc/apache2/conf.d/bandw.conf (內容如下所示)
Alias /bandw /var/lib/bandwidthd/htdocs
<Directory /var/lib/bandwidthd/htdocs>
Options FollowSymLinks
Order deny,allow
Deny from all
# 在此加上允許瀏覽的網址
Allow from 127.0.0.1 163.26.182.0/24
</Directory>
* 重新啟動 Apache2
root@dns:~# service apache2 restart
* 測試連線注意:剛裝好的流量監控,必須耐心等待其產生報表及圖檔,最好是等一小時以上再檢視
* 連線示例
Bandwidthd Sample.png
動態連線狀況
* 用 TCPTRACK 觀看目前內網對外動態連線狀態
o 先確定是否已安裝
root@nat:~# dpkg -l |grep tcptrack
若跳出一行空白列,就是沒安裝,此時才需依下面步驟安裝。
o 安裝
root@nat:~# apt-get install tcptrack
o 假設 192.168.1.0/24 是設定在 eth1 網卡上,可用下列指令檢視動態連線狀況
root@nat:~# tcptrack -i eth1
* 使用 IPTRAF 工具
o iptraf 是可以在文字介面運作的圖形化網路狀況檢視器,功能遠比 tcptrack 強大許多
o 安裝root@dns:~# apt-get install iptraf
o 使用方法暫時沒空介紹
內部網路連線管理
若學校的 NAT 主機架設實體與虛擬皆接回主線路,那麼校內網路設備(含 NGN 無線 AP 上網),其虛擬 IPv4 封包都一定會經過此主機才上得了網路。因此,我們就可以處理以下幾件事情:
1. 監控內網的流量
2. 利用鎖 MAC 位址技術,對問題的設備進行斷線處理,令其無法上網攻擊別人。
流量管制
開學以來,一直有兩個 user 在剛下班時間或半夜大量下載東西,導致全校網路變得很慢,造成其他 user 的不便。因此計畫對學校的網路架設 QoS 機制。計畫分成兩部分處理,實體 IP 部分採用 OB2D增設一台 Bridge Mode FireWall+TC(htp演算法)+IPTABLES,原本的 NAT 就在其上直接設定 TC+IPTABLES。
而且基於對同事間的尊重(其實是自己懶),只會針對某幾台流量特大的 MAC 做限制,不防礙其他善良老百姓。因此研究了一下單一IP 限制上傳與下載的流量的方法,目前找到較合理的方式是使用 tc 指令,下列是參考文件…。但是管制一兩天後發現,該 user 不知使用什麼工具,在大多數時間的平穩後,仍會有短暫暴量(27mbit/s),這樣仍會干擾學校網路運作。因此,不得已只好採用 iptables 的每秒封包限制措施,才成功壓下去,不知有無其他網管已採用而知道原因,若有再來信與筆者分享一下,感謝了。
IPTABLES+TC(HTB)
* 參考一:
http://www.austin.oyhome.com/main.php?action=view&auto_seq=12&fmain=indite_mac
* 參考二,這一篇講得很淺顯易懂,值得推薦!
http://www.pczone.com.tw/vbb3/thread/29/116666/
* 參考三:
http://clplayer.pixnet.net/blog/post/537244
* 由於 tc 指令是由 iproute 套件所提供,所以要先確認 iproute 套件是否已安裝
root@dns:~# dpkg -l |grep iproute
若出現下列訊息,代表套件已被安裝。
ii iproute 20100519-3 networking and traffic control tools
* 若沒安裝,安裝指令如下
root@dns:~# apt-get update
root@dns:~# apt-get install iproute
* 使用本站提供的 fwtc.sh 協助流量管制
o 功能:適用於 nat 及 bridge mode 下,針對某段IP或特定 MAC 進行流量管制
o 原理:使用 tc 指令來管制流量可分成 cbq 及 htb 兩種方法,筆者所採用的是 htb 過濾法,它在塔配 iptables 的 set-mark 後,可簡化 tc 參數。加上 iptables 精準的抓取能力,例如某台 mac;某種協定(L4 or L7)等,形成強大的過濾力。
* 先切換成 root 身份
root@dns:~# sudo -i
* 下載
root@dns:~# wget http://myip.tw/download/yhtools.tar.gz
root@dns:~# tar xzvf yhtools.tar.gz
root@dns:~# cd ./yhtools
* 設定參數
編輯 yhtools 資料夾內的「 fwtc.sh 」,修改下列參數(請依提示填入正確參數)
root@dns:~/yhtools# vi fwtc.sh
#———————– 共用參數設定區————————————
#上傳限制網卡;實體 IP 或 Bridge 對外(連接路由端)
DEV_UP=”eth0″
#下載限制網卡;虛擬 IP 或 Bridge Mode 的內網(連集線器端至全部內網)
DEV_DW=”eth1″
#防火牆種類,限填:”nat” 或 “bridge”; 註:bridge 指的是透通式防火牆,IN/OUT 皆實體 IP
FWTYPE=”nat”
#管制類型:限填:”ipr”, “mac”,分別指的是「IP範圍」或「網卡MAC位址」
TCTYPE=”ipr”
#對外上傳實際最大頻寬,單位為 mbit 或 kbit
UPMAX=”100mbit”
#對外下載實際最大頻寬,單位為 mbit 或 kbit
DWMAX=”100mbit”
#每台 Client 流量限制,注意此處的計量單位是 kbytes/秒
##上傳保證頻寬(不可以太大),最好直接由「最大頻寬 / Client數」
UpRate=”100kbps”
##上傳最大頻寬
UpCeil=”400kbps”
##下載保證頻寬(不可以太大),最好直接由「最大頻寬 / Client數」
DwRate=”200kbps”
##下載最大頻寬
DwCeil=”800kbps”
#———————————————————————–
#————————- 選用 IP 範圍(ipr)設定區—————————–
#控制網段,請填 IPv4 網段前三碼再加「.」,例 “192.168.1.”
NETC=”192.168.110.”
#起始 IP
IPS=”2″
#結束 IP
IPE=”254″
#———————————————————————–
#———————— 選用 mac 管控(mac)設定區—————————–
#每個 mac address: (1).獨立一列,(2).大寫;下列內容為書寫範例
MACL=”
00:50:7F:AB:XX:XX
D0:27:88:23:XX:XX
00:22:15:C4:XX:XX
00:26:18:87:XX:XX
”
#———————————————————————–
* 啟動/關閉/狀態顯示
啟動:root@dns:~/yhtools# ./fwtc.sh start
中止:root@dns:~/yhtools# ./fwtc.sh stop
顯示狀態:root@dns:~/yhtools# ./fwtc.sh show
註:程式無法盡如人意,部分功能可能不符合您的需求,請自行修改套用。
純IPTABLES
* 使用 iptables 的每秒封包數限制
iptables -A FORWARD -m mac –mac-source 48:5B:39:XX:XX:XX -m limit –limit 60/s –limit-burst 65 -j ACCEPT
iptables -A FORWARD -m mac –mac-source 48:5B:39:XX:XX:XX -j DROP
註1:實際上 IPTABLES -m limit 大多用於阻擋 DDoS 攻擊用,做為流量管制需填思,因為這會造成被控方封包 lost 率升高。
註2:若平均封包大小在 1500 bytes 左右,每秒 60 封包,就已接近 10mbit/s
註3:經一天的實證下來,有的 user 還是能短暫的(Burst)突破到 15mbit/s 左右,不過這樣也可接受,因為已不再影響全校網路了。
鎖某些特定網站
* 首先找出該網站之 IP Address,以奇摩為例
root@dns:~# nslookup tw.yahoo.com –>得到 119.160.246.241 這組 IP
* 修改 /etc/rc.local ,在以下位置加上紅字部分的規則列
###—————————————————–###
# 啟動內部對外轉址
###—————————————————–###
$IPTABLES -t nat -A POSTROUTING -o $FW_IFACE -j SNAT –to-source $FW_IP
###—————————————————–###
# 啟動外部對內部轉址
###—————————————————–###
# 凡對 $FW_IP:8080 連線者, 則轉址至 192.168.1.3:80
#$IPTABLES -t nat -A PREROUTING -p tcp -d $FW_IP –dport 8080 -j DNAT –to 192.168.110.3:80
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -d 119.160.246.241 –dport 80 -j DROP
# 以下封掉內部主機連到外部主機的 port 6677, 請自行針對不同服務 port 號做修改
鎖 MAC 做法
* 用 nmap 找出連線設備所使用的 IP 及 MAC 位址
o 假設發現 192.168.110.13 不斷對外掃描,懷疑其可能中毒,不讓其上網的最佳方法是鎖網卡 MAC 位址,這樣一來使用者如果換了 IP Address 也無法上網。
o 使用 nmap 來找 192.168.110.13 的 MAC 位址
root@nat:~# nmap -sP 192.168.110.13
o 使用 nmap 找整個內網所有正在線上的設備
root@nat:~# nmap -sP 192.168.110.0/24
o 其他 nmap 的其他用法,請參考本站另一篇文章「Linux 基本工具指令」
* 修改 /etc/rc.local 鎖其 MAC 位址
o 註:NAT 主機一定要加在啟動外部對內部轉址後面(紅字部分)。
###—————————————————–###
# 啟動內部對外轉址
###—————————————————–###
$IPTABLES -t nat -A POSTROUTING -o $FW_IFACE -j SNAT –to-source $FW_IP
###—————————————————–###
# 啟動外部對內部轉址
###—————————————————–###
# 凡對 $FW_IP:8080 連線者, 則轉址至 192.168.1.3:80
#$IPTABLES -t nat -A PREROUTING -p tcp -d $FW_IP –dport 8080 -j DNAT –to 192.168.110.3:80
### 啟動 mac 鎖定功能,把下列清單中的電腦皆鎖起來
$IPTABLES -A FORWARD -p tcp -m mac –mac-source ##:##:##:51:3C:3A -j DROP
L7 Filter
使用 L7-Filter
七層過濾的意思是,可以直接對封包內容進行過濾。若不加裝 L7Filter 功能,IPTABLES 只能判讀到 L4 的層級,也就是只能管制通訊埠。可是往往一些有資安疑慮的 P2P 或傳訊軟體也很聰明,在大多數埠被封鎖後,改用常用埠來溝通,比如 port 80, 21, 143…等,造成網路安全的危害,因此有必要幫咽喉點上的 firewall 加強封包的過濾能力。
使用 userspace l7-filter 配合 iptables 來過濾封包內容的做法如下:
* 安裝
root@fw:~# apt-get install l7-filter-userspace l7-protocols
* 載入kernel模組:nf_conntrack_netlink
root@fw:~# modprobe nf_conntrack_netlink
* 可用樣版檔放置地
o l7-filter 的樣板檔由 l7-protocols 套用維護,安裝後會放置在 /etc/l7-protocols/protocols 內
o 裡面有百來個 *.pat 樣板檔,例 xunlie.pat, bittorrent.pat, edonkey.pat 等
* 建立 /etc/l7-filter.conf 設定檔,加入要攔阻的通訊協定,不必再加副檔名「.pat」
xunlei 9
bittorrent 10
edonkey 11
* 在背景啟動 l7-filter
root@fw:~# l7-filter -f /etc/l7-filter.conf &
* 再加入 iptables 規則列至 /etc/rc.local 至「拒絕外部 IP 連至內部 port 號」之上
###——————————————————–###
# L7-filter,註: -j QUEUE 是指 FORWARD 封包送至 userspace 去處理
###——————————————————–###
$IPTABLES -A FORWARD -j QUEUE
$IPTABLES -t mangle -A POSTROUTING -m mark –mark 9 -j DROP
$IPTABLES -t mangle -A POSTROUTING -m mark –mark 10 -j DROP
$IPTABLES -t mangle -A POSTROUTING -m mark –mark 11 -j DROP
###—————————————————–###
# 拒絕外部 IP 連至內部 port 號
###—————————————————–###
……
註:請注意 l7-filter.conf 內的編號與 mark 的編號必須一致
自訂簡易過濾樣板
* 自訂的樣板,以阻擋 facebook 的遊戲(但仍可上 www.facebook.com)為例
o 介紹 Pattern 寫法之官方網站
http://l7-filter.sourceforge.net/Pattern-HOWTO
o 自訂樣板第一步要使用 wireshark 等軟體來分析封包
o 再來建立樣板檔,每個樣板檔內容,基本上只要兩行,第一行是樣板名稱,第二行供過濾判斷的正規表達式規則
o 由於我們的目標只是 facebook 遊戲網站 apps.facebook.com,因此只要針對關鍵字設樣板即可。
建立 /etc/l7-protocols/protocols/facebook.pat 內容如下
facebook
apps.facebook.com
* 啟用此樣板的做法就如同上面所述一樣,不再重覆。
關閉 l7-filter
* 首先要修改 /etc/rc.local 把剛加的那幾行加 # 註解
###——————————————————–###
# L7-filter,註: -j QUEUE: 把 FORWARD 封包送至 userspace 去處理
###——————————————————–###
#$IPTABLES -A FORWARD -j QUEUE
#$IPTABLES -t mangle -A POSTROUTING -m mark –mark 9 -j DROP
#$IPTABLES -t mangle -A POSTROUTING -m mark –mark 10 -j DROP
#$IPTABLES -t mangle -A POSTROUTING -m mark –mark 11 -j DROP
* 套用新規則
root@fw:~# service rc.local start
* 關閉 l7-filter 背景服務
o 查出 PID
root@fw:~# ps aux |grep l7-filter
root 16524 0.0 0.4 20140 1884 pts/1 Sl 16:18 0:00 l7-filter -f /etc/l7-filter.conf
* KILL PID
root@fw:~# kill -9 16524