(我是sivid, 我是忘記密碼的sivid)
摩托學園的各位前輩們實在是幫助我很多
上次我問了問題有人回應後我就此沒反應了
這不是我不想回應, 真的是當時我回文章都寫不進看板
這這先說聲抱歉啦
為了表示歉意,把我在bbs.sayya.org向kenduest桑詢問後得來的結果, 再加上自己的心得, 整理一下po 在這
請各位笑納, 有錯誤的地方也請不吝指正
再說明一次我的要求:
我要控制我的總流量進出都是分別到550MB/day, 到了就立刻斷線, 不過telnet和SSH還是要繼續保持暢通(不然到底是當機還是斷線自己都不知道
)
還有, 我們網管說對某個網域是不計算流量的, 因此那個網域也不會被計算到流量裡面
以下是我的步驟: (全程都是root身分, 反正電腦搞壞了可以重灌XDD)
*************先準備好 ipfilter ***********
照http://www.netfilter.org/documentation/HOWTO//netfilter-extensions-HOWTO.html#toc2的方法,打指令
cvs -d :pserver:cvs@pserver.netfilter.org:/cvspublic login
cvs -d :pserver:cvs@pserver.netfilter.org:/cvspublic co netfilter/userspace netfilter/patch-o-matic
(這裡有一點很重要, 要用我這方法的話請先把debian的ipfilter package殺掉, 兩著混合會有奇怪的結果
)
(可以看到我沒有用到debian本身的ipfilter package, 我並不清楚debian的package進度如何, 不過比起直接從cvs抓程式碼來說當然是慢上許多啦)
*******再來照正常的步驟把kernel弄好**********
/usr/src/底下rm -r linux-2.4.20;rm linux (以保證這次是個全新的開始)
tar jxvf linux-2.4.20.tar.bz2;ln -s linux-2.4.20 linux
zcat patch-2.4.21-rc2.gz | patch -p0 (因為我要patch, 所以patch-2.4.20-rc2.gz先放到/usr/src/)
到/usr/src/linux/下指令make dep
到/var/lib/cvs/CVSROOT/netfilter/patch-o-matic/執行./runme extra
這裡的東西盡量少選, 基本上用不到就少碰, 因為很容易就有bug (cvs嘛)
到/usr/src/linux/下指令make menuconfig,該選的選一選
** 記得netfilter的部分要選到阿, 剛剛./runme extra有選的現在也要決定是要編到kernel裡面還是弄成module **
make dep;make clean;make bzImage;make modules;make modules_install
到/var/lib/cvs/CVSROOT/netfilter/userspace/下指令make all install
reboot (gogogo! 期待期待)
登入後成為root,執行iptables -L ,有東西跑出來了!
yayayay成功~~~
試著加rules看看吧
不過有一點奇怪
我下指令iptables -A OUTPUT -m quota --quota 576716800 -j ACCEPT
然後iptables -L看到的quota bytes數目不一定會一樣
就是說可能 quota: 608171776 bytes 或者 608173706 bytes這樣
這我也不知道該怎麼辦
不過反正差這麼一點點, 就別在意了吧
*************接下來是我用的iptables指令*****************
iptables -A INPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -p tcp --sport 23 -j ACCEPT
iptables -A INPUT -p tcp --dport 23 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 23 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
以上是保持telnet和SSH的暢通
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
以上是給dns用的 老實說我沒測過到底可不可行
iptables -A INPUT -s 140.120.0.0/16 -j ACCEPT
iptables -A OUTPUT -s 140.120.0.0/16 -j ACCEPT
以上是只要從140.120.*.*來的就給過
iptables -A INPUT -s ! 140.120.0.0/16 -m quota --quota [number-of-bytes]
iptables -A OUTPUT -s ! 140.120.0.0/16 -m quota --quota [number-of-bytes] -j ACCEPT
以上是只計算*不是*從140.120.*.*來的流量
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
以上是只要quota數到零了, 就不給過
打完了, 把它存起來
iptables-save 和 iptables-restore用一用吧
每天都要重新計算流量, 所以把一些指令放到crontab裡面給電腦跑
執行指令crontab -e
這是我root的crontab
01 0 * * * /usr/local/sbin/iptables -D INPUT 9
01 0 * * * /usr/local/sbin/iptables -D INPUT 8
01 0 * * * /usr/local/sbin/iptables -D OUTPUT 9
01 0 * * * /usr/local/sbin/iptables -D OUTPUT 8
02 0 * * * /usr/local/sbin/iptables -A INPUT -m quota --quota 576716800 -j ACCEPT
02 0 * * * /usr/local/sbin/iptables -A OUTPUT -m quota --quota 576716800 -j ACCEPT
03 0 * * * /usr/local/sbin/iptables -A INPUT -j DROP
03 0 * * * /usr/local/sbin/iptables -A OUTPUT -j DROP
以上的指令很多都是憑記憶打的, 很有可能有錯
就請發現到錯誤的人幫忙指出囉