当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > iptables 限制流量

Unix/Linux
linux查看内存的大小
在linux下写的代码,用的是utf-8,结果拿到XP下运行的时候,所有的中文都成乱码
linux su和sudo命令的区别
linux cron 下的定时执行工具使用技巧
linux 查找进程及终止进程操作的相关命令
redhat linux 安装 gcc编译器
Linux Mplayer播放各种格式的电影
一起回顾一下linux常用命令
Linux 网站项目发布要做哪些配置
linux SSH配合SecureCRT的密匙完美使用方法
GD 编译出错解决方法
Facebook Open Platform编译FAQ
Linux 系统硬盘 优化
linux 挂载详解
linux crontab定时命令
Linux 系统中确保访问三级域名畅通的方法
Linux 特权帐号VS普通帐号
确保Linux系统安全的前提条件 漏洞防护
Linux 监视系统资源使用率
Red Hat Linux上使用BIND建立DNS服务器

Unix/Linux 中的 iptables 限制流量


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 113 ::
收藏到网摘: n/a

首先我們先新增兩條rule iptables -A FORWARD -s 192.168.0.1 -j ACCEPT iptables -A FORWARD -d 192.168.0.1 -j ACCEPT
我們內部有一個Nat的環境使用的IP範圍是192.168.0.0/24 要監控192.168.0.1這個ip的流量 首先我們先新增兩條rule iptables -A FORWARD -s 192.168.0.1 -j ACCEPT iptables -A FORWARD -d 192.168.0.1 -j ACCEPT 我們使用iptables -L FORWARD -nvx看看我們剛剛建的這兩個rule Chain FORWARD (policy ACCEPT 3109 packets, 1529728 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 192.168.0.1 0.0.0 0 0 ACCEPT all -- * * 0.0.0.0/0 192.168.0.1 ^^^^^^ 這個就是我們要監控的主角了 第一個rule表示不管連到哪邊只要來源是192.168.0.1的封包都會經過這條規則 同時bytes也會根據封包的資料量作累加的動作 第二個rule則是不管來源是哪裡只要目的地是192.168.0.1就列入紀錄 所以拉第一條規則就192.168.0.1這個ip的上傳資料量 第二條就是下載的資料量了 我們用個簡單的文字處理規則取出上下傳的資料量 iptables -L FORWARD -nvx|grep "192.168.0.1 *0.0.0.0/0 *$"|awk {'print '}---->上傳 iptables -L FORWARD -nvx|grep "0.0.0.0/0 *192.168.0.1 *$"|awk {'print '}---->下載 然後寫個script擺在cron裡面定期的去檢查就ok拉....當使用量破表時嘿嘿就把這兩個rule設為drop那192.168.0.1這個ip就在也出不去了 [實作] 以下是我寫的兩支script 將checkquota.sh丟到crontab裡面每隔一段時間跑一次作檢查動作 #################checkquota.sh#################### #!/bin/bash HostRange=$(cat /etc/NetUsage.conf|grep "^[^ *#]"|awk {'print '}) InQuota=$(cat /etc/NetUsage.conf|grep "^[^ *#]"|awk {'print '}) OutQuota=$(cat /etc/NetUsage.conf|grep "^[^ *#]"|awk {'print '}) TrafficIn=`iptables -L FORWARD -nxv|grep "0.0.0.0/0 *$HostRange *$"|awk {'print $2'}` TrafficOut=`iptables -L FORWARD -nvx|grep "$HostRange *0.0.0.0/0 *$"|awk {'print $2'}` echo "In:$TrafficIn/$InQuota" echo "Out:$TrafficOut/$OutQuota" if [ $TrafficIn -gt $InQuota ] ; then iptables -D FORWARD -d $HostRange -j ACCEPT iptables -A FORWARD -d $HostRange -j DROP fi if [ $TrafficOut -gt $OutQuota ] ; then iptables -D FORWARD -s $HostRange -j ACCEPT iptables -A FORWARD -s $HostRange -j DROP fi ############################################### 將zerocount.sh也擺到cron裡面每隔一段時間就將count歸0 ###################zerocount.sh#################### #!/bin/bash HostRange=$(cat /etc/NetUsage.conf|grep "^[^ *#]"|awk {'print '}) InQuota=$(cat /etc/NetUsage.conf|grep "^[^ *#]"|awk {'print '}) OutQuota=$(cat /etc/NetUsage.conf|grep "^[^ *#]"|awk {'print '}) iptables -F iptables -X iptables -A FORWARD -s $HostRange -j ACCEPT iptables -A FORWARD -d $HostRange -j ACCEPT 最後再編輯一個檔案/etc/NetUsage.conf 裡面的內容就像這樣 ip位址 下傳限制 上傳限制 例如 192.168.0.1 1024000 2048000 表示192.168.0.1這個ip下傳限制1024000bytes 上傳2048000bytes 也可以針對某個網段作限制 192.168.0.0/24 這樣表示192.168.0.0~192.168.0.255都列入限制(注意這裡是指全部加起來的流量喔) 這個script只有簡單的針對單一範圍作設限