TCP/IP詳解 第七章 防火牆和網絡地址轉換(2) iptables防火牆

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包過濾過程

Iptables規則的執行順序默認爲從上往下依次執行,遇到匹配的規則就不在繼續向下檢查,如果遇到不匹配的規則則會繼續向下執行
重點:匹配上了拒絕(DROP)規則也是匹配,因此不在繼續向下進行。

 

1.4 iptablestables和鏈chains

1.4.1思維導圖關係圖

1.4.2  iptables包處理簡化流程圖

    

1.4.3 iptablesfilter表介紹

 

 filter表:和主機自身有關,負責防火牆(過濾本機流入,流出的數據包)。是iptables默認使用的表。這個表定義了三個鏈(chains),說明如下:

man  iptables 可以查看官方解釋

對於filter表的控制使我們實現本機防火牆的重要手段

1.4.4 iptablesnat表的介紹

nat表:英文全拼(Network Address Translation),是網絡地址轉換的意思,即負責來源於目的ipport的轉換。一般用於局域網多人共享上網或者內網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

我的主機ip192.168.21.254 虛擬的ip192.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功能

首先開啓內部服務器Cnginx 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

 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章