【Linux主機+架站+維護教學+遠端協助】專案 網路開展事業或在網路賺錢第一步: 【架設24小時賺錢網站主機】比網頁設計更優先! 你還在租用虛擬主機嗎? (租用不如自有主機!自己當家作主才是:王道!) 因租用會:限制空間大小、流量、PHP.ini修改、特定語法使用... 綁手綁腳,你還能有多出眾的作為? 替你架設Linux主機伺服器+影片教你維護 (還有遠端技術協助)讓你自己當家作主! 為協助學員快速架站(隨心所欲展開網路事業)總教頭特別規劃: 替你架設Linux主機專案 並教如何成為網管高手! 聰明的網站經營者都選擇架設Linux主機伺服器做為網站運作平台,因功能完整又強大,免費架站程式超多! 參加了本專案,您無須再自我摸索曠日廢時→快速打通任都二脈 還有配套『加盟專案』,你可以現學現做,自然的實現:『事少、錢多、離家近!』的成功境界。

Linux安全.防火牆

Linux主機防火牆規則(Linux主機伺服器架設技術)

Linux 安裝完畢,便已內建基本的防火牆規則,它是採 IPTABLES 來進行封包過濾的動作。
預設的規則列主要在防止外面主機連線至主機,被阻擋的服務有 FTP, SSH, Samba網芳等。

Linux主機防火牆基本原理:

設定檔

設定規則列位置及套用方式是 Linux 專用的方法,與其他 Debian OS 不同。

    * 使用工具: iptables
    * 規則列位置: /etc/rc.local
    * 修改後套用
      root@dns:~# service rc.local start
    * 註: rc.local 原本設計是為開機後要手動執行特定工作的設定區,Linux 把它借來放置防火牆規則列

Linux主機防火牆基本觀念:

    * IPTABLES = "/sbin/iptables"
      這一行是指:設定 IPTABLES 這個變數,以後只要看到 $IPTABLES 這個字串,就代表 /sbin/iptables 這個指令

    * $IPTABLES -F
      這一行是指:把之前所有已設過的規則清空(flush)

Linux主機防火牆封包進出主機方向:

在 /etc/rc.local 內之「設定 filter table 的預設政策」會看到三行設定值,如下:

###—————————————————–###
# 設定 filter table 的預設政策
###—————————————————–###
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

筆者將其簡化說明如下:

    * INPUT   –> 外面要進入主機的網路封包,主要用於規範外面如何連線至主機上的各種服務,與 NAT 內網無關
    * OUTPUT  –> 從主機出去的網路封包。
    * FORWARD –> 從 B 網卡轉至 A 網卡,規範於有 NAT 主機或透通式防火牆用途時,內轉外網路封包之控管。
    * 依上例,預設所有的封包皆開放,不阻擋


INPUT規則列的寫法

規則列的寫法,是把預設政策擺在最下面一行,例外規則擺上面,如下所例

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 22 -j DROP

上面的規則列可以用下面這張圖來表達,預設 22 埠是不被連線的,但有四個綠點例外。
Iptables sample.png

進階處理
取消某個通訊埠的阻擋

只要把所有該 port (–dport)的規則列前面加上 # 變成註解,或直接刪除即可,以 FTP 示例如下:

# 只有本主機所屬網段才能連到這台主機的 FTP SERVER port 21
# $IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 21 -j ACCEPT
# $IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 21 -j ACCEPT
# $IPTABLES -A INPUT -p tcp –dport 21 -j DROP

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 22 -j DROP

新增例外連線範圍

若要新增例外連線點,一定要加在相同埠值區塊最後一行之前(建議第一行),假設我們要加中華電信某個網段 59.127.0.0/16 至 Port 22 的例外點上,做法如下:

    * 編輯 /etc/rc.local (紅字為新增部分)
      root@dns:~# vi /etc/rc.local

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 59.127.0.0/16 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 22 -j DROP

    * 套用新規則
      root@dns:~# service rc.local start

新增某個通訊埠連線限制
以 TCP 1723 為例

假設主機有架 VPN 服務,經由「netstat -nlp」查詢後得知其使用的埠值為 TCP 1723。因此,為避免不具善意的網客隨便亂測密碼,我們可以在 /etc/rc.loal加上其連線限制。

假設允許的網段為

   1. 校內: 163.26.182.0/24
   2. 校外某點: 220.130.230.76

    * 編輯 /etc/rc.local,在 IPv4 的設定區(就是 /sbin/ip6tables -F 之上),依 port 值排序,大約在網芳區塊後面加上。
      root@dns:~# vi /etc/rc.local(紅字為新增部分)

 ……

$IPTABLES -A INPUT -p tcp –dport 139 -j DROP
$IPTABLES -A INPUT -p tcp –dport 445 -j DROP
$IPTABLES -A INPUT -p udp –dport 137 -j DROP
$IPTABLES -A INPUT -p udp –dport 138 -j DROP

$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 –dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 1723 -j DROP

/sbin/ip6tables -F
/sbin/ip6tables -A INPUT -p tcp –dport 21 -j DROP
/sbin/ip6tables -A INPUT -p tcp –dport 22 -j DROP
/sbin/ip6tables -A INPUT -p tcp –dport 23 -j DROP
 ……

    * 套用新規則列
      root@dns:~# service rc.local start

以 ICMP 為例

預設不讓外面網路任意點可以 PING 本主機,造就本主機不存在的假象,但選定數點開放偵測。假設允許的網段為

   1. 教網中心:163.26.200.0/24
   2. 校內: 163.26.182.0/24
   3. 校外某點: 220.130.230.76

    * 編輯 /etc/rc.local,在 IPv4 的設定區,Port 21 規則列上方。
      root@dns:~# vi /etc/rc.local(紅字為新增部分)

 ……

$IPTABLES -A INPUT -p icmp -s 163.26.182.0/24 -j ACCEPT
$IPTABLES -A INPUT -p icmp -s 163.26.200.0/24 -j ACCEPT
$IPTABLES -A INPUT -p icmp -j DROP

# 只有本主機所屬網段才能連到這台主機的 FTP server port 21
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 21 -j DROP
 ……

    * 套用新規則列
      root@dns:~# service rc.local start

防止 DoS 攻擊

筆者朋友主機最近遭到 DoS 攻擊,我本來以 iptables -m limit 來處理,但發現它會不分來源一律阻擋,這樣無辜的 IP Address 也受到限制,非常不公平,思考並搜尋了一個晚上,後來決定以限制單一 IP 同時連線數(connlimit),來處理此類攻擊,它會把單一 IP 來源同時要求服務(–syn)的連線數,限制在一定的數量以內,正常用人工手動點網頁,就算該網頁有 FrameSet ,應也不致於大過 12(自已用手拼命點得到的結論)才對。因此在設定此限制時,以每一個 IP 同時連線數不得超過 15 為參數,並進行後續的觀察。在設定後,經過一段時間的觀察,CPU 再也不會一直維持在 90-100% 高檔了,大約只會偶而跳至 60-70% ,一般皆在 10 % 以內。重點是它只 tcp-reset 有問題的來源,無辜的人仍可享受應有的速度。

設定方式:

    * 請確認 syslog 有下列參數
          o Linux 在 /etc/syslog.conf
          o Ubuntu 在 /etc/rsyslog.d/50-default.conf

# iptables 的記錄可以寫入 /var/log/kern.log
kern.*                          -/var/log/kern.log

    * 先把可能攻擊的 ip 寫入 /var/log/kern.log ,再把它的封包無聲的丟掉;以同時 15 個連線為限。

$IPTABLES -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 15 -j LOG –log-level 4
$IPTABLES -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 15 -j REJECT –reject-with tcp-reset

    * 分析攻擊可能來源
          o 螢幕觀看(以 tab 鍵分隔欄位)
            root@dns:~# cat /var/log/kern.log |awk '{print $1 " " $2 " " $9}'
          o 轉至純文字,以供下載至試算表統計
            root@dns:~# cat /var/log/kern.log |awk '{print $1 " " $2 " " $9}' > /root/dosatt.txt
            呈現的結果部分截取如下:

May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66

    * 鎖了吧,可疑者!
      若某個 IP 來源您不認識,但每天常常超過,人工點網頁的極限(同時超過 15 個連線數),可以再加以下規則,把它鎖了吧!

$IPTABLES -A INPUT -i eth0 -p tcp -s 60.250.xxx.xx –dport 80 -j DROP

在Linux主機上架設加密的網頁通道(HTTPS加密網頁)

在Linux主機上架設加密的網頁通道,適用較機密(要認證)的網頁。
一般而言,網路上所有的傳輸皆是公開的,若有人,肯花心思取得您的所有網路封包,那麼您在網路所輸入的帳號密碼將無所遁形。
因此,網頁資料庫或 webmail 等網頁應用程式,最好是在加密的通道上進行,就算是有心人取得您的網路封包,也只是一堆亂碼。

安裝步驟

 以下動作,皆是以 root 身份執行
建立 /etc/apache2/apache.pem 檔

    * openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
          o Country Name (2 letter code) [AU]: TW
          o State or Province Name (full name) [Some-State]:Taiwan
          o Locality Name (eg,city) []: Tainan (依您的地區而定)
          o Organization Name (eg,company) [Internet Widgits Pty Ltd]: Da Cheng Elementary School
          o Organizational Unit Name (eg,section) []: Infomation & Education
          o Common Name (eg,YOUR name) []: your host name
            注意:這裡最好填入主機名稱,例如「dns」,「mail」…etc
          o Email Address []: admin@dc1es.tnc.edu.tw
          o 經此動作,會產生 /etc/apache2/apache.pem

Apache2 上啟用 SSL 模組暨其虛擬站台
加入 SSL 模組

    * a2enmod ssl

設定 SSL 虛擬站台(VirtualHost)

    * cd /etc/apache2/sites-available/
    * cp default ssl
    * vi ssl (紅字為修改區)

NameVirtualHost *:443

<VirutalHost *:443>


DocumentRoot /var/www/
SSLEngine On
SSLCertificateFile /etc/apache2/apache.pem

    * a2ensite ssl

修改 /etc/apache2/ports.conf

    * vi /etc/apache2/ports.conf
    * OB2D t系列作法,新增 Listen 443

Listen 80

Listen 443

    * OB2D e 及 sqz 作法,新增 NameVirtualHost *:443

NameVirtualHost *:80

NameVirtualHost *:443

    * /etc/init.d/apache2 restart

最後測試:

    * 測試 https://你的網址名稱

本文引用來至:http://myip.tw/itsmw/index.php/Ob2d_https

Linux主機伺服器為何需要防火牆?

Linux主機伺服器防火牆防火牆最重要的任務:
1.規劃出切割被信任(如子網域)與不被信任(如 Internet)的網段
2.規劃出可提供 Internet 的服務與必須受保護的服務
3.分析出可接受與不可接受的封包狀態

畢竟網路的世界是很複雜的,而 Linux 主機也不是一個簡單的東西。
說不定哪一天你在進行某個軟體的測試時,主機突然間就啟動了一個網路服務, 如果你沒有管制該服務的使用範圍,那麼該服務就等於對所有 Internet 開放,那就麻煩了!
因為該服務可能可以允許任何人登入你的系統,那不是挺危險?

所以囉,防火牆能作什麼呢?防火牆最大的功能就是幫助你『限制某些服務的存取來源』!
舉例來說:
(1)你可以限制檔案傳輸服務 (FTP) 只在子網域內的主機才能夠使用,而不對整個 Internet 開放。
(2)你可以限制整部 Linux 主機僅可以接受客戶端的 WWW 要求,其他的服務都關閉。
(3)你還可以限制整部主機僅能主動對外連線,對我們主機主動連線的封包狀態 (TCP 封包的 SYN flag) 就予以抵擋等等。
這些就是Linux主機最主要的防火牆功能!

網路防火牆的特色

網路防火牆有以下主要特色:

1.即插即用:
現有的網路安全方案頗多,但它們在實施時常需要變動網路中的主機、協定堆疊及伺服程式等。
而防火牆只須擺在網路對外的連接點即可,隨插即用,不會牽涉到網路的其他部分,所以最省事、經濟實惠、效果最明顯。



2.網路安全的集中管理:
所有流進、流出的網路交通皆須通過防火牆,安全控制、監督、事件稽核及統計等皆在防火牆上進行,而非分散於一群主機,故可於此進行最完整的流量控制統計,也可偵測記錄不正常的存取嘗試,以事先杜絕可能的入侵。
3.可進行簡單的服務:
簡單的、安全性較不講究的網路應用服務如匿名(anonymous)FTP、全球資訊網(WWW)等服務,可安裝於防火牆內,而不須擺在內部主機,減低由外而內的風險。

 

網路防火牆雖然具備以上優點,但在也並非無所不能:
1.防火牆基本上只管制封包的流向,而無法偵測出外界假造的封包。
2.防火牆無法確保連線的可信度,一旦連線涉及外界的公眾網路,即有可能被竊聽或劫奪。
3.防火牆的主要功能在控制不同網路間的傳輸動作,但並不能避免同一個網路上互相攻擊的動作,這是防火牆先天的限制。
根據經驗,許多入侵或犯罪行為都是所謂的內賊或熟知內部網路佈局的人做的。
4.將所有內、外網路的安全控制全置於防火牆中,使得該點有可能會成為網路交通的瓶頸,也容易成為駭客攻擊的對象。

網路防火牆雖然看似具有奇效,但它也並非是解決所有安全問題的萬靈丹,所以我們只能將它視為安全體系當中的重要一環,而非全部。

網路防火牆的進階功能

隨著安全的需求愈來愈增加,目前的防火牆產品也紛紛提供了一些進階的功能,列舉如下:

◎.整合網路通信協定:
傳統TCP/IP是組不甚安全的協定,應用在網際網路上產生許多安全上的漏洞,但是由於它十分普及,因此有些解決方案是對於內部區域網路的所有主機皆採非TCP/IP的網路協定,而對於必須由TCP/IP服務的主機,可於其中安裝額外的軟體,以令其TCP/IP封包也改採區域網路協定封裝,如此,在內部網路將見不到TCP/IP封包,內部網路的通信皆採特定的區域網路協定,而對外則使用TCP/IP,故安全性較高。
◎.內部轉換:
包括IP轉換與DNS轉換,其目的是保護組織內部的資訊,使其不讓外界知悉。

1.IP轉換:防火牆的內部通常具備一個IP位址的對映機制。
將IP作轉換有兩個好處:
其一是隱藏內部網路真正的IP,使駭客無法直接攻擊內部網路。
另一好處是可以讓內部使用者使用保留的IP,這對許多IP不足的企業是很有幫助的。
2.雙重DNS:
通常的作法是是架設兩個領域名稱伺服器(DomainNameServer),一個負責對外,另一個負責對內,如此外部網路無法獲知企業內部網路的資訊,但不影響內部網路對外界資訊的獲得。
◎.強化的身分識別機制:
一般UNIX主機是一個使用者密碼作為身分識別的機制,但是這種機制會造成密碼在網路上以明碼傳遞,有可能被欄截而得知,並不夠安全。
因此防火牆必須具備至少一種以上的強化身分驗證機制,如讓密碼不要直接在網路上傳遞、或使密碼隨著時間而改變。
防火牆也可以與其他有名的身分識別產品整合。
◎.警告功能(Alarm):
系統被侵入常常是出人意料之外的時機,因此若防火牆軟體能提供通知遠方系統管理者的功能,當嚴重的網路安全事件發生時,可以從電子郵件、甚至以以撥呼叫器等方式來立即通知系統管理者,如此可以爭取時效,立即採取行動。
◎.管理工具:
設計圖形化的管理介面,讓系統管理者易於進行設定、管理及維護。
另外,採用集中式的管理工具,使管理者可以同時管理多個防火牆及伺服器,也是目前防火牆發展的趨勢。
◎.強化作業系統:作業系統多少都有一些安全上的漏洞,使得防火牆軟體容易由作業系統被侵入入。
因此,必須加強防火牆作業系統的安全性,甚至將防火牆直接架在作業系統上,以防範某些網路通信協定或其他原因所造成的安全缺陷。
◎.資料加解密:虛擬私有網路(VirtualPrivateNetwork,簡稱VPN)在目前逐漸受到需求與重視,但它必須對所有網路傳輸內容加密以建立一個虛擬通道,讓不同網路上的使用者可以安全且不受拘束的互相存取,感覺上像在同一個組織內部的網路之中。
所以要達到此功能,防火牆必須能快速、正確地對資料封包加解密,並試圖發展互通的加解密標準。
◎.與防毒軟體的整合:與防毒軟體互相搭配,甚至直接整合,以同時具備防火牆與防毒的功能。
◎.JAVA與ActiveX:JAVA與ActiveX在網路上帶來了一些網路安全的潛在性危機,例如用JAVA寫成的Applet雖然豐富了網頁,但使用者只要連上網頁,等於是把Applet程式抓回自己的機器來執行,有時會存取到機器上不該存取的部分,而造成一些訊息的流出,因此在其中隱藏了許多不可預知的危機。
所以,防火牆必須針對此方面作一些特殊的設計,以過濾這些類型的資訊。
◎.阻絕系統服務型(denial-of-service)攻擊:
有些使用者會對Web站台發出大量的請求,防礙了其他人對此站的連接。防火牆對這類阻絕系統服務的侵入,也必須有解決的對策。

經營網站最怕的就是:被駭客入侵(植入:釣魚網頁)

剛剛看到一篇文章:網路釣魚 Google公佈識別法
能識別網路釣魚的手法是上網者必須具備的自保之道
但是經營網站者更應注意到,如何防止網站被駭客入侵(植入:釣魚網頁)?
你有顧問可以技術諮詢嗎?網站發生問題又有誰能幫你及時處理?
購置:「架設Linux主機+架站+維護教學課程+遠端協助」專案,你就可以免費獲得協助!
以下是詳細的內容介紹:
http://por.tw/linux/new-E_learning/index.php

——————————————————————-
以下是該篇新聞的引用全文:

網路釣魚 Google公佈識別法
編譯中心綜合1日電 世界新聞網 北美華文新聞、華商資訊
June 02, 2011 06:02 AM | 2787 次 | 0 0 評論 | 3 3 推薦 | 電郵給朋友 | 列印
Google公司1日宣佈遭受疑似來自中國的駭客攻擊,圖為Google在加州山景的總部。(美聯社)

Google公司1日宣佈遭受疑似來自中國的駭客攻擊,圖為Google在加州山景的總部。(美聯社)
slideshow
Google公司(Google)1日宣佈,該公司成為一波似乎來自中國濟南的網路釣魚(phishing)行動的攻擊目的,Google公司也公佈了網路釣魚者使用的假Gmail登入網頁的形象。

這個攻擊的做法是對受害者發出假的電郵,往往發出電郵的帳戶似乎屬於受害者的同事、家人或朋友,這些電郵中有假的連結(link),通至假的Gmail網站,該形象逼真的假網站即搜集受害者的電郵使用者名稱和密碼。

駭客然後使用這些登入資料,把受害者收到的所有電郵轉寄給一個第三者,有時也搜集被害者聯絡人的資訊,用來做其他的釣魚詐騙。

這個詐欺是由部落格Contagio發現的,該部落格在2月詳細分析了此詐騙行動,並登出假電郵和假登入網頁的形象。

Contagio 指出了真假Gmail登入網頁的細微差異,內含連結的目的和小處設計的對照。但由於假網頁非常逼真,Google公司不指望使用者辨別差異,該公司建議使用者用其雙因素認系統(two-factor authentication system),這個系統會送一個密碼到使用者的電話,供其用來登入,如果使用者設定了這個保護措施,而在登入時未被要求密碼,這個網頁就可能是假的。

Google公司也建議使用者注意可疑的轉寄設定,這可能代表駭客正在覆制其電郵,此外,也要注意網頁上方的一個紅色警示標誌,這代表Google公司已偵測到「可疑的活動」,可能是駭客已經侵入該帳戶。

Read more: 世界新聞網-北美華文新聞、華商資訊 – 網路釣魚 Google公佈識別法

網路防火牆的基本功能

一般來說,網路防火牆的應具備下列三種重要的基本功能:

1.存取管控(AccessControl):
指依據系統管理者所設定的存取控制規則,決定網路交通的許可或拒絕。
存取管控的條件包括資料封包的來源位址、目標位址、連接的網路服務協定種類以及使用者的身分等。
防火牆對於所有的網路流通會依規則判斷,只有可信任的來源位址可以連到被允許的目標位址,且只能以特定的使用者身分使用特定的網路服務。
存取管控甚至可以做到控制網路服務的某些特定指令是否允許其執行,例如FTP可以限制只能下載檔案,不能上傳或刪除。

2.身分識別(Authentication):
即驗證身分,作為服務授權的參考。
防火牆必須有效地識別網路使用者及主機的身分,以控管使用權限、確認責任歸屬。

3.安全稽核:
防火牆應能詳細記錄網路流通的狀況,並記錄安全相關事件,以供系統管理者分析之用。
一般安全稽核的內容包括:網路服務的連通或拒絕、身分辨識、網路通信發生的時間及持續的時間、資料傳輸位元數、執行時發生的異常狀態、系統組態的修改、某些協定的特殊指令、系統核心接收到的特殊封包等等。

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