linux iptables規則介紹

今天又學習了一下iptables,作一點總結來方便之後查閱。html

Netfilter(網絡過濾器)是Linux操做系統核心層內部的一個數據包處理模塊,主要負責數據包的攔截和轉發,而iptables是NetFilter的一種應用化,爲了方便定義規則和配置。linux

iptables工做在linux的內核空間,它經過內核空間的接口與用戶空間通訊,控制數據包在內核空間上的接口(就是常常說到的port)之間轉發。bash

這是一條典型的iptables的配置語句,我從這裏開始發散思惟:服務器

 iptables -t nat -A PREROUTING -d 172.30.1.8 -p tcp --dport 80 -j DNAT --to-destination 192.168.9.25

 這條語句的功能是:在PREROUTING鏈的nat表上添加一條規則未來自172.30.1.8的80端口的請求轉發到192.168.9.25。網絡

語句指定了七個部分:鏈,表,源,目的,協議,端口和動做,我就從之七個方面分別記錄。tcp

一、鏈(chain)post

iptables共有五個規則鏈:   學習

        1.INPUT (數據包流入內核空間)      
        2.OUTPUT(數據包流出內核空間)
        3.FORWARD (數據包在port之間的轉發)
    4.PREROUTING (目的地址轉換)
        5.POSTROUTING(源地址轉換)
其中PREROUTING和POSTROUTING分別對應着目的地址轉換(DNAT)和源地址轉換(SNAT),個人理解是,網卡是一個物理設備,在系統以外的層次,數據包的流入流出都須要經過網卡,路由是發生在內核空間,在數據包經過網卡而未到達內核中的這一段時間,由POSTROUTING來定義。而在數據包經過了內核而未到達網卡的這一段時間,由PREROUTING來定義。簡單來講,數據包上記錄着數據的源地址和目的地址,PREROUTING鏈記錄了數據包的目的地址的修改,而POSTROUTING鏈記錄了數據包原地址的修改,數據包在內核會先通過路由表的路由,路由以後在通過iptables的處理,處理後新的數據包再進行轉發。由於,我認爲從某種意義上來講,iptables的PREROUTING和POSTROUTING也能夠簡單的當作修改數據包的源地址和目的地址。
每一條規則在鏈中的匹配原則是從上到下
鏈的選項:
  -P chain :設置鏈的默認策略
     -A chain :在鏈的最後新增一個規則
   -F  chain:清除鏈的全部規則
   -N chain: 支持用戶新建一個鏈
     -X chain: 用於刪除用戶自定義的空鏈,刪除鏈以前須要將鏈清空
     -E chain newchain: 用來給用戶自定義的鏈重命名
     -I chain num: 將當前規則插入爲指定鏈的第幾條
     -R chain num:修改指定鏈的第幾條規則
     -D chain num:刪除指定鏈的第幾條規則
示例:
 清空或刪除規則:( 必須同時指定表和鏈
iptables -F PREROUTING -t nat
iptables -D POSTROUTING 1 -t nat
    
二、表(table)
  表有什麼存在的意義?  難道僅僅是方便管理和查看?目前經常使用的表有三個,filter用來定義容許或不容許,nat用來定義地址轉換,mangle用來修改報文原數據。
    -t table: 匹配表,不指定則默認適用於全部表
 
三、源
  -s address:指定源地址
四、目的
 -d address:指定目的地址
 
五、協議
  -p proto:匹配協議
  匹配的協議有三種,tcp、udp和icmp。其中icmp是ping的協議,iptables容許ping的語句:
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT

六、端口ui

--sport num: 指定源端口spa

--dport num: 指定目的端口

--dport XX-XX:指定多個端口,不能指定多個非連續端口

-m  --dports 21,23,80:表示啓用多端口擴展,能夠指定多個非連續端口

開放服務器的3306和90端口:

iptables -A INPUT  -p tcp -m multiport  --dport 3306,90 -j ACCEPT
iptables -A OUTPUT  -p tcp -m multiport  --sport 3306,90 -j ACCEPT

 七、動做

-j ACTION: 對數據包的處理

常見的ACTION:

   DROP:丟棄
     REJECT:拒絕
     ACCEPT:接受
     custom_chain:轉向一個自定義的鏈
     DNAT:目的地址轉換
     SNAT:源地址轉換
     MASQUERADE:源地址假裝,改寫數據包來源 IP 爲防火牆 NIC IP
     REDIRECT:重定向,主要用於實現端口重定向
     MARK:打防火牆標記
     RETURN:返回
     LOG:記錄數據包信息
 
  示例:
將90端口重定向到80端口:
iptables -I PREROUTING 1  -t nat -p tcp --dport 90 -j REDIRECT --to-ports 80

將經過端口79-80的數據包改寫源 IP:

iptables -A POSTROUTING -t nat -p tcp  -j MASQUERADE --to-ports 79-81

 將的80端口重定向到百度:

iptables -A PREROUTING -t nat -p tcp -d 119.29.23.152 --dport 80 -j DNAT --to-destination 14.215.177.38:80
iptables -A postrouting -t nat -p tcp -d 14.215.177.38 --dport 80 -j SNAT --to-source 119.29.23.152 
echo 1 > /proc/sys/net/ipv4/ip_forward   #開啓服務器的轉發功能

 還有一些其餘的匹配選項:

    -i eth0:從eth0網卡流入的數據包
    -o eth0:從eth0網卡流出的數據包

簡單的iptables規則基本介紹完了,下面是查看命令:

iptables -L  -n     #以數字的方式顯示ip,它會將ip直接顯示出來,若是不加-n,則會將ip反向解析成主機名
iptables -L  -v     #顯示詳細信息
iptables -L  -vv
iptables -L  -vvv  #越多越詳細
iptables -L  -x     #在計數器上顯示精確值,不作單位換算
iptables -L  --line-numbers    #顯示規則的行號
iptables -L  -t nat     #顯示nat表全部的信息

另外,咱們在終端編輯的iptables規則只是臨時生效,要想在服務器重啓後還能生效,須要將規則保存在配置文件/etc/sysconfig/iptables中,而且etc/sysconfig/iptables中的規則都是永久生效的。執行service iptables save命令,會使當前定義的規則保存到/etc/sysconfig/iptables中。若想將當前規則備份起來,備份iptabales規則命令是iptables-save > /etc/sysconfig/iptables.bak。若想要使用本身寫的iptables配置文件或者手動加載備份的iptables配置文件,使用iptables-restore < /etc/sysconfig/iptables.bak命令。

 

纔開始寫博客,文采很差思惟凌亂格局糾結分類糟糕,若有錯誤的地方,或者有什麼提升的地方,歡迎批評指正。另外,如今的我確定對技術瞭解不深,從此有什麼完善的地方,我會對博客進行補充的。

 

    
  
     參考網址:http://blog.rekfan.com/articles/237.html
       http://blog.chinaunix.net/uid-22780578-id-3346350.html
相關文章
相關標籤/搜索