1、iptables
1.1 iptables簡介
Netfilter/Iptables(以下簡稱Iptables)是unix/linux系統自帶的一款免費的基於包過濾的防火牆工具,它的功能十分強大,使用非常靈活,可以對流入,流出及流經服務器(路由器)的數據包進行精細的控制。
一般認爲Iptables工作在OSI七層的二、三、四層。
大家可以man iptables 查看相關官網介紹
1.2 iptables名詞解釋
iptables是表(tables)的容器
表(tables)是鏈(chains)的容器
鏈(chains)是規則(Policy)的容器
基本關係可以這樣描述
1.3 iptables包過濾過程
1.4 iptables表tables和鏈chains
1.4.1思維導圖關係圖
1.4.2 iptables包處理簡化流程圖
1.4.3 iptables的filter表介紹
filter表:和主機自身有關,負責防火牆(過濾本機流入,流出的數據包)。是iptables默認使用的表。這個表定義了三個鏈(chains),說明如下:
man iptables 可以查看官方解釋
對於filter表的控制使我們實現本機防火牆的重要手段
1.4.4 iptables的nat表的介紹
nat表:英文全拼(Network Address Translation),是網絡地址轉換的意思,即負責來源於目的ip和port的轉換。一般用於局域網多人共享上網或者內網IP映射外網IP及不同端口轉換服務等功能,nat表的功能很重要。這個表定義了三個鏈(chains)
man iptables
實驗一 怎麼禁止ssh無法連接上虛擬機
第一種指定規則方式
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
iptables -D INPUT -p tcp --dport 22 -j DROP
第二種指定行號
iptables -D INPUT 1
iptables -D INPUT2
第三種 直接清空方式
想要禁止ssh連接上主機
-I 在第一行插入命令
-A 在後面追加命令
第一種方式 先清空然添加命令
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j DROP //此實驗證明了iptables規則從上向下執行
第二種方式 先清空然後直接添加一條命令
iptables -A INPUT -p tcp --dport 22 -j DROP
實驗二 禁止某一IP訪問你的主機
iptables -A INPUT -s 192.168.21.254 -j DROP
此時我的xshell就無法連接我的虛擬機了
刪除iptables規則
iptables -n -L --line-numbers
iptables -D INPUT 1
實驗三 禁止除了本機以外的任何主機連接我的虛擬機
iptables -A INPUT ! -s 192.168.21.254 -j DROP
我的主機ip是192.168.21.254 虛擬的ip是192.168.21.253 輸入這條命令以後只有我的主機才能連接我的虛擬機,別人的電腦都無法連接我的虛擬機
刪除iptables規則
iptables -F
iptables -X
實驗四 filter表示進入主機的處理
iptables 圖 網址
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-6.html
運行tcp_test/tcp_sever tcp_test/tcp_client 127.0.0.1 發現根本沒有建立連接
運行udp_test/udp_sever udp_test/udp_server 127.0.0.1 發現server只能收到數據,但是客戶端無法收到server發回來的數據,防火牆起作用了
實驗五 nat表實際使用
第一步
配置linux網關B vi /etc/sysctl.conf net.ipv4.ip_forwarding = 1 //開啓linux FORWARD功能
首先開啓內部服務器C的nginx http服務
/usr/local/nginx/sbin/nginx //這個服務器,我嘗試了好多次才配置成
netstat -ln | grep 80
啓動以後,用B服務器 wget 172.16.1.17 發現可以下載頁面,但是用筆記本(192.168.21.254)沒辦法登錄
第二步
怎麼用內部服務器C ping通 筆記本
現在內部服務器C ping 筆記本無法ping通 ping 192.168.21.254 無法ping通
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth1 -j SNAT --to-source 192.168.21.253
配置完以後內部服務器C ping 筆記本 ping 192.168.21.254 ping通
1.4.5 iptables 詳細使用過程,請參考朱雙印防火牆
pdf下載地址如下:
朱雙印博客:http://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/iptables/
2、介紹一個小工具TC
實驗七
有一個機器做服務器 利用scp命令傳輸文件,看網速
scp 文件名 [email protected]:/home/rising/cfttest 有TC限制和無TC限制網速差別很大
TC命令控制發送不控制收數據,下面的命令是在主機是192.168.21.196上配置的,需要對比沒有TC和有TC下的scp速度
使用 tc 對整段 IP 進行速度控制
tc qdisc del dev eth0 root 2> /dev/null > /dev/null //清楚tc規則
1.)定義最頂層(根)隊列規則,並指定 r2q 類別編號
tc qdisc add dev eth0 root handle 1: htb r2q 1
2.) 定義第一層的 1:1 類別 (速度)
tc class add dev eth0 parent 1: classid 1:1 htb rate 500kbit ceil 1000mbit
.
rate: 是一個類保證得到的帶寬值.如果有不只一個類,請保證所有子類總和是小於或等於父類.
prio:用來指示借用帶寬時的競爭力,prio越小,優先級越高,競爭力越強.
ceil: ceil是一個類最大能得到的帶寬值.
3.)設定過濾器,其實就是將ip對應上規則
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.21.0/24 flowid 1:1
就可以限制192.168.21.0 到255 的帶寬爲500k了,實際下載速度爲110k左右.
這種情況下,這個網段所有機器共享這110k的網速.
3、參考材料
百度講的比較細的網址http://wenku.baidu.com/view/f02078db50e2524de5187e45.html
linux 下使用 tc 模擬網絡延遲和丟包 http://my.oschina.net/shou1156226/blog/514929
下面這個實例基本都能運行
linux下使用 TC 對服務器進行流量控制 2012-09-19 16:48:55
http://blog.chinaunix.net/uid-25885064-id-3353088.html