1. 程式人生 > >iptables 的mangle表

iptables 的mangle表

 mangle表的主要功能是根據規則修改資料包的一些標誌位,以便其他規則或程式可以利用這種標誌對資料包進行過濾或策略路由。

 內網的客戶機通過Linux主機連入Internet,而Linux主機與Internet連線時有兩條線路,它們的閘道器如圖所示。現要求對內網進行策略路由,所有通過TCP協議訪問80埠的資料包都從ChinaNet線路出去,而所有訪問UDP協議53號埠的資料包都從Cernet線路出去。


這是一個策略路由的問題,為了達到目的,在對資料包進行路由前,要先根據資料包的協議和目的埠給資料包做上一種標誌,然後再指定相應規則,根據資料包的標誌進行策略路由。為了給特定的資料包做上標誌,需要使用mangle表,mangle表共有5條鏈,由於需要在路由選擇前做標誌,因此應該使用PREROUTING鏈,下面是具體的命令。



 
  1. iptables -t mangle -A PREROUTING -i eth0 -p tcp 
    --dport 80 -j MARK --set-      mark 1  
  2. iptables -t mangle -A PREROUTING -i eth0 -p udp 
    --dprot 53 -j MARK --set-      mark 2 

以上命令在mangle表的PREROUTING鏈中新增規則,為來自eth0介面的資料包做標誌,其匹配規則分別是TCP協議、目的埠號是80和UDP協議、目的埠號是53,標誌的值分別是1和2。資料包經過PREROUTING鏈後,將要進入路由選擇模組,為了對其進行策略路由,執行以下兩條命令,新增相應的規則。


 
  1. ip rule add from all fwmark 1 table 10  
  2. ip rule add from all fwmark 2 table 20 

以上兩條命令表示所有標誌是1的資料包使用路由表10進行路由,而所有標誌是2的資料包使用路由表20進行路由。路由表10和20分別使用了ChinaNet和Cernet線路上的閘道器作為預設閘道器,具體設定命令如下所示。


 
  1. ip route add default via 10.10.1.1 dev eth1 table 10  
  2. ip route add default via 10.10.2.1 dev eth2 table 20 

以上兩條命令在路由表10和20上分別指定了10.10.1.1和10.10.2.1作為預設閘道器,它們分別位於ChinaNet和Cernet線路上。於是,使用路由表10的資料包將通過ChinaNet線路出去,而使用路由表20的資料包將通過Cernet線路出去。


(2)

iptables閘道器伺服器三塊網絡卡:eth0(網通ip:10.0.0.1)、eth1(電信ip:20.0.0.1);eth2:閘道器192.168.10.1。

要求:公司內網要求192.168.10.1---100以內的ip使用 10.0.0.1 閘道器上網(網通),其他IP使用 20.0.0.1 (電信)上網

iptables閘道器伺服器配置如下:



1
2
3
4
5
6
7
ip route add  default  gw  20.0 . 0.1 ip route add table  10  via  10.0 . 0.1  dev eth0 #eth0 是 10.0 . 0.1 所在的網絡卡, 10  是路由表的編號 ip rule add fwmark  10   table  10 #fwmark  10  是標記,table  10  是路由表 10 。 標記了  10  的資料使用table10 路由表 iptables -A PREROUTING -t mangle -i eth2 -s  192.168 . 10.1  192.168 . 10.100  -j MARK -- set -mark  10 #使用iptables給相應的資料打上標記

mangle應用順序要高於nat、filter哈。

案例2、

iptables閘道器伺服器三塊網絡卡:eth0(網通ip:10.0.0.1)、eth1(電信ip:20.0.0.1);eth2:閘道器192.168.10.1。

要求:公司內網要求員工訪問外面的網站服務;使用 10.0.0.1 閘道器上網(網通),其他IP使用 20.0.0.1 (電信)上網


1
2
3
4
iptables -t mangle -A PREROUTING -i eth2 -p tcp --dport  80  -j MARK -- set -mark  20 ip route add  default  gw  20.0 . 0.1 ip route add table  20  via  10.0 . 0.1  dev eth0 ip rule add fwmark  20  table  20