【教學】以 舊電腦安裝Linux 成為功能強大的防火牆兼頻寬管理器

顯示結果從第 1 筆 到 8 筆,共計 8 筆
  1. #1
    會員
    註冊日期
    2001-06-07
    所在地區
    ADSL 4M/1M
    討論區文章
    123

    【教學】以 舊電腦安裝Linux 成為功能強大的防火牆兼頻寬管理器

    IP分享器是不錯的玩意,但區網中只要遇到一個下載狂,再大的頻寬也一樣被撐爆,其他人只得忍受如龜爬的上網速度,我想,用IP分享器Shere頻寬的人一定有這樣的切身之痛,只要你有一台舊電腦插上兩片網卡,再參考下面的防火牆設定檔,嘿嘿,管他養動物還是玩BT,其他人再也不用乾跳腳了,以下是我的網路環境
    ADSL 1.5M/384 固定IP,分享給10個用戶
    防火牆主機 P2-350 128mb ram,scsi 18g硬碟,兩片螃蟹卡,RED HAT 9.0完全安裝

    防火牆內部網卡IP 192.168.0.1 故區網中的電腦請將IP設為192.168.0.2~254,閘道器192.168.0.1

    有關Linux 的安裝問題,請參考相關網站,如鳥哥的私房菜或小紅帽論壇,您最好具備一些網路的基本知識,不然可能又是另一場惡夢

    基本上只要將下面的script檔,設定成開機自動執行,你的舊電腦便成為一台具有頻寬控管功能的IP分享器
    ****浮動IP的的設定有點不同,請待下回分解


    firewall script檔(以下僅有初步的防火牆功能,但應已足夠使用)
    #!/bin/bash
    #===================================================
    #開啟IP轉送
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
    #定義變數IPT
    IPT=/sbin/iptables
    #----------------------------------
    # 請把下行的 x.x.x.x 改成對外的 IP
    #目前為固定IP,,故將變數REALIP填入對外網卡eth0的IP
    REALIP="x.x.x.x"

    ###-----------------------------------------------------###
    # 清除先前的設定
    ###-----------------------------------------------------###
    echo "Flush fiter table ......"
    echo

    # Flush filter
    $IPT -F
    $IPT -X

    echo "Flush mangle table ......"
    echo
    # Flush mangle
    $IPT -F -t mangle
    $IPT -t mangle -X


    echo "Flush nat table ......"
    echo
    # Flush nat
    $IPT -F -t nat
    $IPT -t nat -X


    #先載入FTP相關的模組

    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    #----------------------------------
    # 設定 filter 內的 chain 之 Policy
    $IPT -t filter -P INPUT DROP
    $IPT -t filter -P OUTPUT ACCEPT
    $IPT -t filter -P FORWARD ACCEPT
    #-------------------------------------------
    # 設定 nat 這個 table 的 chain 之 Policy
    $IPT -t nat -P PREROUTING ACCEPT
    $IPT -t nat -P OUTPUT ACCEPT
    $IPT -t nat -P POSTROUTING ACCEPT
    #----------------------------------------------

    #--------------------------------------------------------------------------
    #開放連外的IP列表,,新開用戶後請至檔案尾端設定頻寬
    #--------------------------------------------------------------------------
    $IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.100 --to-source $REALIP
    $IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.30 --to-source $REALIP
    $IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.121 --to-source $REALIP
    $IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.122 --to-source $REALIP
    $IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.123 --to-source $REALIP
    #開幾個IP就將上面的描述複製,再修改一下IP即可,未在列表內的IP無法上網
    #---------------------------------------------------------
    # 定義處理 ICMP 封包的 chain: 'icmp_chain'
    # 其中 type 0 代表 echo-reply (ping 對方時的回應),
    # type 8 為 echo-request (其他機器 ping 我們).
    $IPT -t filter -F
    $IPT -t filter -X
    $IPT -t filter -N icmp_chain
    $IPT -t filter -A icmp_chain -p icmp --icmp-type 0 -j ACCEPT
    $IPT -t filter -A icmp_chain -p icmp --icmp-type 3 -j ACCEPT
    $IPT -t filter -A icmp_chain -p icmp --icmp-type 5 -j ACCEPT
    $IPT -t filter -A icmp_chain -p icmp --icmp-type 8 -j ACCEPT
    $IPT -t filter -A icmp_chain -p icmp --icmp-type 11 -j ACCEPT
    $IPT -t filter -A icmp_chain -p icmp -j DROP
    #==================================================================
    #==================================================================
    # PREROUTING (table:nat)
    # 1.即使是從內部 NAT 出去的連線, 它傳送回來的封包的目的位址也絕對不會是內部IP!
    # 2.而 NAT 出去的連線所傳回的封包之目的位址在經過 PREROUTING 階段後
    # 才會被轉換成內部 IP
    $IPT -t nat -A PREROUTING -i eth0 -d 192.168.0.0/24 -j DROP
    $IPT -t nat -A PREROUTING -i eth0 -d 127.0.0.0/8 -j DROP
    # 3.從外界進來,但宣稱是來自內部網路的封包(來搗蛋的),一律擋掉。
    $IPT -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -j DROP
    $IPT -t nat -A PREROUTING -i eth0 -s 127.0.0.0/8 -j DROP
    #====================================================================
    # INPUT (table:filter)
    # A.信任內部網路(192.168.0.0/24)及 lo 介面(127.0.0.0/8)
    # 接受任何來自於這兩個介面的封包.
    #--------------------------------------------------------------------
    $IPT -t filter -A INPUT -p all -s 192.168.0.0/24 -j ACCEPT
    $IPT -t filter -A INPUT -p all -s 127.0.0.0/8 -j ACCEPT
    #--------------------------------------------------------------------
    # 從此處起, 開始處理來自 internet 的封包
    #--------------------------------------------------------------------
    # B.接受任何屬於已建立的連線之封包.
    $IPT -t filter -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
    #------------------------------------------------------------------------
    # C.來自 internet, 屬於 ICMP 的封包, 交由 icmp_chain 處理
    $IPT -t filter -A INPUT -i eth0 -p icmp -j icmp_chain
    #------------------------------------------------------------------------
    # D.只提供給外界 Mail (smtp) 及 Web (www) 連線(TCP),
    # 以及 DNS 查詢(UDP), 其他一律不提供.
    #$IPT -t filter -A INPUT -p tcp --dport 10000 -m state --state NEW --syn -j ACCEPT
    #$IPT -t filter -A INPUT -p tcp --dport www -m state --state NEW --syn -j ACCEPT
    #$IPT -t filter -A INPUT -p udp --dport domain -j ACCEPT
    #=================================================================
    #虛擬伺服器 virturl server
    #=================================================================
    # E-donkey,E-mule to 192.168.0.122
    $IPT -t nat -A PREROUTING -p tcp -d $REALIP --dport 4661 -j DNAT --to 192.168.0.122:4661
    $IPT -t nat -A PREROUTING -p udp -d $REALIP --dport 4672 -j DNAT --to 192.168.0.122:4672

    #------------------------------------------------------------------------
    #kuro to 192.168.0.121
    $IPT -t nat -A PREROUTING -p tcp -d $REALIP --dport 6699 -j DNAT --to 192.168.0.121:6699

    #edonkey to 192.168.0.100
    $IPT -t nat -A PREROUTING -p tcp -d $REALIP --dport 14661 -j DNAT --to 192.168.0.100:14661
    $IPT -t nat -A PREROUTING -p udp -d $REALIP --dport 14672 -j DNAT --to 192.168.0.100:14672

    #edonkey to 192.168.0.100
    $IPT -t nat -A PREROUTING -p tcp -d $REALIP --dport 20001 -j DNAT --to 192.168.0.100:20001
    $IPT -t nat -A PREROUTING -p udp -d $REALIP --dport 24672 -j DNAT --to 192.168.0.100:24672

    #--------------------------------------------------------------------
    # E. 由於 INPUT chain 的 Policy 設為 DROP,
    # 未被先前 rule 處理的封包至此將被 DROP 掉.
    #

    #開始定義頻寬
    #========================================================================
    # 定義流量管制上傳的封包將之Mark起來,所有用戶都要設,否則上傳管制會失敗
    # 向核心解釋封包樣別:

    $IPT -I PREROUTING -t mangle -s 192.168.0.100 -j MARK --set-mark 1
    $IPT -I PREROUTING -t mangle -s 192.168.0.250 -j MARK --set-mark 2
    $IPT -I PREROUTING -t mangle -s 192.168.0.251 -j MARK --set-mark 3
    $IPT -I PREROUTING -t mangle -s 192.168.0.252 -j MARK --set-mark 4
    $IPT -I PREROUTING -t mangle -s 192.168.0.30 -j MARK --set-mark 5

    #bounded 敘述拿掉那麼該類別就能夠借取其它類別的頻寬來用。
    # eth0 為上傳
    # eth1 為下傳
    #先清除eth0 eth1 的規則
    tc qdisc del dev eth0 root
    tc qdisc del dev eth1 root
    #tc filter del
    #tc filter del dev eth1

    #--------------------------------------------------------------------
    # 上傳部份:eth0
    #上傳需配合IPTABLES指令,如增加用戶,請一併增加該IP的封包mark
    #
    #--------------------------------------------------------------------



    # 宣告上傳佇列戒律
    /sbin/tc qdisc add dev eth0 root handle 10: cbq bandwidth 100Mbit avpkt 1000

    # 宣告頂層的類別:10:0
    /sbin/tc class add dev eth0 parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 40Kbit prio 8 maxburst 20 avpkt 1000 bounded
    #/sbin/tc class add dev eth0 parent 10:0 classid 10:2 cbq bandwidth 100Mbit rate 384Kbit allot 1514 weight 40Kbit prio 8 maxburst 20 avpkt 1000


    # 宣告客戶類別,及其頻寬大小
    /sbin/tc class add dev eth0 parent 10:1 classid 10:100 cbq bandwidth 384Kbit rate 256Kbit allot 1514 weight 26Kbit prio 5 maxburst 20 avpkt 1000 bounded
    /sbin/tc class add dev eth0 parent 10:1 classid 10:110 cbq bandwidth 180Kbit rate 150Kbit allot 1514 weight 15Kbit prio 5 maxburst 20 avpkt 1000 bounded
    /sbin/tc class add dev eth0 parent 10:1 classid 10:120 cbq bandwidth 200Kbit rate 128Kbit allot 1514 weight 13Kbit prio 5 maxburst 20 avpkt 1000 bounded
    /sbin/tc class add dev eth0 parent 10:1 classid 10:130 cbq bandwidth 200Kbit rate 128Kbit allot 1514 weight 13Kbit prio 5 maxburst 20 avpkt 1000 bounded


    #--------------------------------------------------------------------

    # 宣告管理佇列
    /sbin/tc qdisc add dev eth0 parent 10:100 sfq quantum 1514b perturb 15
    /sbin/tc qdisc add dev eth0 parent 10:110 sfq quantum 1514b perturb 15
    /sbin/tc qdisc add dev eth0 parent 10:120 sfq quantum 1514b perturb 15
    /sbin/tc qdisc add dev eth0 parent 10:130 sfq quantum 1514b perturb 15
    /sbin/tc qdisc add dev eth0 parent 10:140 sfq quantum 1514b perturb 15

    #-----------------------------------------------------------------------

    # 核心解釋什麼樣的封包屬於什麼樣別
    #prio為封包之優先順序 1為最大,100為最小
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 1 fw classid 10:100
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 2 fw classid 10:110
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 3 fw classid 10:120
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 4 fw classid 10:130
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 5 fw classid 10:140


    #--------------------------------------------------------------------
    # 下載部份:eth1
    #--------------------------------------------------------------------

    # bounded 敘述拿掉那麼該類別就能夠借取其它類別的頻寬來用。
    #下例為下傳:宣告佇列戒律
    /sbin/tc qdisc add dev eth1 root handle 20: cbq bandwidth 100Mbit avpkt 1000

    #宣告頂層的類別為: 20:0
    /sbin/tc class add dev eth1 parent 20:0 classid 20:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 150Kbit prio 8 maxburst 20 avpkt 1000 bounded
    #/sbin/tc class add dev eth1 parent 20:0 classid 20:2 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 100Kbit prio 8 maxburst 20 avpkt 1000 bounded
    # 宣告客戶類別,及其頻寬大小





    # 下傳頻寬 最後面加bounded 則不可借頻寬
    /sbin/tc class add dev eth1 parent 20:1 classid 20:100 cbq bandwidth 2048Kbit rate 1024Kbit allot 1514 weight 102Kbit prio 6 maxburst 20 avpkt 1000
    /sbin/tc class add dev eth1 parent 20:1 classid 20:110 cbq bandwidth 1536Kbit rate 800Kbit allot 1514 weight 80Kbit prio 6 maxburst 20 avpkt 1000 bounded
    /sbin/tc class add dev eth1 parent 20:1 classid 20:120 cbq bandwidth 1536Kbit rate 800Kbit allot 1514 weight 90Kbit prio 6 maxburst 20 avpkt 1000 bounded
    /sbin/tc class add dev eth1 parent 20:1 classid 20:130 cbq bandwidth 1536Kbit rate 800Kbit allot 1514 weight 90Kbit prio 6 maxburst 20 avpkt 1000 bounded
    /sbin/tc class add dev eth1 parent 20:1 classid 20:140 cbq bandwidth 1536Kbit rate 800Kbit allot 1514 weight 90Kbit prio 6 maxburst 20 avpkt 1000 bounded




    # 宣告管理佇列
    /sbin/tc qdisc add dev eth1 parent 20:100 sfq quantum 1514b perturb 15
    /sbin/tc qdisc add dev eth1 parent 20:110 sfq quantum 1514b perturb 15
    /sbin/tc qdisc add dev eth1 parent 20:120 sfq quantum 1514b perturb 15
    /sbin/tc qdisc add dev eth1 parent 20:130 sfq quantum 1514b perturb 15
    /sbin/tc qdisc add dev eth1 parent 20:140 sfq quantum 1514b perturb 15



    # 向核心解釋封包樣別
    /sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.100 flowid 20:100
    /sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.250 flowid 20:110
    /sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.251 flowid 20:120
    /sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.252 flowid 20:130
    /sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.30 flowid 20:140



  2. #2
    校長兼撞鐘 阿 土 的大頭照
    註冊日期
    2000-10-09
    所在地區
    SEEDNET 8M
    討論區文章
    11,817
    Good , 其實不想買分享器又有舊電腦的人士可以嘗試來玩 Linux

    不過上面教學對一般初學者恐怕還有些困難 , 有基礎者應該很好上手

  3. #3
    拉登長官 dou0228 的大頭照
    註冊日期
    2002-08-26
    所在地區
    2M/256K
    討論區文章
    1,073
    我覺得你與其寫這種東西..
    不如花時間改成Web 界面..

    這些指令, 說老實話, 網路上文件多到數不完..
    單就指令來說, 從完全不知道 到瞭解的時間太長..

    而且這樣的安裝方式, 你必須先有 "能裝好 Linux 的基礎"..
    說實在..

    就像土大講的, It's difficult
    O/S: XPro SP2;Gentoo 05-r1;F-BSD 5.4/N-BSD 2.0.2
    替代役第一梯次, 矯正役笨蛋
    Bug !?
    Red Hat 技術支援的改變引起眾怒_原文出處
    echo $(echo 4jp022f@n5549i5o9or | tr 0-9a-z 0-3d-l6-9m-w4-5) | tr i .
    就讓 LP 去耍, 我們好在旁邊笑
    QoS 沒中文資料!?

  4. #4
    會員
    註冊日期
    2001-06-18
    所在地區
    2WAN 4M/1M
    討論區文章
    506
    自從有硬體防火牆及QoS後就沒再碰linux,我的linux版本一直還在6.2,7.0,剛剛看了一下上頭script檔
    還要回憶一下,想一想真的要適合有linux基礎的玩才適合阿,用硬體還是比較適合像我這種已經把linux忘光光的人囉!!

  5. #5
    會員
    註冊日期
    2002-10-08
    討論區文章
    156
    謝謝很實用



  6. #6
    會員
    註冊日期
    2000-12-29
    討論區文章
    384
    這很不錯啊...
    iptables 還能搞優先權喔

  7. #7
    拉登長官 dou0228 的大頭照
    註冊日期
    2002-08-26
    所在地區
    2M/256K
    討論區文章
    1,073
    最初由 mingsheu 發表
    這很不錯啊...
    iptables 還能搞優先權喔
    哪時候 iptables 可以搞優先權了阿?
    那明明是 tc 的功能..
    O/S: XPro SP2;Gentoo 05-r1;F-BSD 5.4/N-BSD 2.0.2
    替代役第一梯次, 矯正役笨蛋
    Bug !?
    Red Hat 技術支援的改變引起眾怒_原文出處
    echo $(echo 4jp022f@n5549i5o9or | tr 0-9a-z 0-3d-l6-9m-w4-5) | tr i .
    就讓 LP 去耍, 我們好在旁邊笑
    QoS 沒中文資料!?

  8. #8
    會員
    註冊日期
    2000-12-29
    討論區文章
    384
    最初由 dou0228 發表
    哪時候 iptables 可以搞優先權了阿?
    那明明是 tc 的功能..

    小弟是看到這個啦,不過是真的沒有看清楚
    總之先 Copy 下來放著....IPTABLES 的功能太多了...... 有天要用時再研究.....
    -------------------------------------------------------------------
    # 核心解釋什麼樣的封包屬於什麼樣別
    #prio為封包之優先順序 1為最大,100為最小
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 1 fw classid 10:100
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 2 fw classid 10:110
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 3 fw classid 10:120
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 4 fw classid 10:130
    /sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 5 fw classid 10:140
    --------------------------------------------------------------------

類似的主題

  1. CDBurnerXP 4.2.6.1748 免安裝繁體中文版~免費且功能強大的燒錄軟體
    作者:cv3zxx 所在討論版:-- 軟 體 分 享 版
    回覆: 0
    最後發表: 2009-12-24, 09:20 AM
  2. 請推薦具有防火牆功能的頻寬管理器...學校要用的!!
    作者:shawnchu 所在討論版:-- 網 路 硬 體 版
    回覆: 11
    最後發表: 2004-07-09, 01:04 PM
  3. 【教學】功能強大的WebMail -- OpenWebMail 1.6
    作者:ADJ 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 8
    最後發表: 2003-04-25, 09:55 AM
  4. [軟體]防火牆哪一套功能強大~佔用資源最少
    作者:ROACH 所在討論版:-- 防 駭 / 防 毒 版
    回覆: 3
    最後發表: 2001-02-02, 04:25 PM

 

此網頁沒有從搜尋引擎而來的訪客

發表文章規則

  • 不可以發表新主題
  • 不可以回覆文章
  • 不可以上傳附加檔案
  • 不可以編輯自己的文章
  •