iptables初探

iptables


  • 簡述

  • 基礎知識

  • 命令使用


簡述

iptables是什么?netfilter又是什么?

iptables是位于用戶控件的一個防火墻規則控制管理工具。netfilter是位于內核中的真正的防火墻,由五個鉤子函數(hooks)而組成。

iptables的作用是什么?

用來添加,刪除,管理netfilter規則。

netfilter的作用是什么?

起到過濾封包,轉換與映射IP地址和端口,拆分和修改封包內容,追蹤封包等功能,這些構成了四個功能表。

基礎知識

組成部分

iptables:規則控制管理工具。
netfilter:位于內核空間的過濾器,實際上生效的部分。
    四表:大致根據功能可以分為四個,也就是在內部維護了四個表。
    五鏈:netfilter一共會在五個地方設置hooks,鉤子函數,也就是說在五個地方會有關卡來過濾,依據不同的表,需要用到的鏈也是不同的。

五鏈(five hooks)

PREROUTING:進入路由前。
POSTROUTING:出路由前。
INPUT:進度內存空間前。
OUTPUT:出內存空間前。
FORWARD:轉發鏈。

根據進入到出去的順序為:
    PREROUTING -> INPUT -> OUTOUT -> POSTROUTING      進入本機用戶空間處理。
    PREROUTING ->      FORWARD    -> POSTROUTING      進入本機后直接轉發處理。

hooks

四表

根據優先級從低到高為:
    filter:過濾。
                INPUT OUTPUT FORWARD  
    nat:網絡地址轉換。
                PREROUTING POSTROUTING OUTPUT 
    mangle:報文拆分已經重裝,修改報文內容。
                INPUT OUTPUT PREROUTING POSTROUTING FOEWARD
    raw:關閉NAT上啟動的連接追蹤機制。
                PREROUTING OUTPUT

協議類型

tcp:傳輸控制協議,可建立的是可靠的連接。
udp:用戶數據包協議,建立的為不可靠的連接。
icmp:網絡控制報文協議,iptables中主要用來控制ping報文。

常用的端口

ftp: tcp/20,21
ssh: tcp/22
telnet: tcp/23
smtp:tcp/25
http: tcp/80,8080
dns: tcp,udp/53
portmapper: tcp,udp/111
samba: udp/137,138  tcp/139,445,901
https: tcp/443
nfs: tcp,udp/2049  
mysql: tcp/3306
php-fpm: tcp/9000

命令使用

格式:

iptables [-t tables] -A|I|R [chain [num]] -[par] [value] -p [protocol [value]] -m [option [value]] -j [active [value]]

保存與重載:

Cnetos6:
iptables-save > /PATH/TO/FILE
iptables-restore < /PATH/TP/FILE

Centos7:引入了新的iptables管理工具,firewall。
firewalld-cmd
firewalld-config            *具體的使用方法可自行查閱官方文檔。

常用參數:

iptables [-t table] {-A|-D} chain rule-specification                -A:添加
iptables [-t table] -I chain [rulenum] rule-specification           -I:插入
iptables [-t table] -R chain rulenum rule-specification             -R:替換
iptables [-t table] -D chain rulenum                                    -D:刪除
iptables [-t table] -S [chain [rulenum]]                                -S:保存
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]       -F:清空規則 -L:列出規則 -Z:清零所有計數器
iptables [-t table] -N chain                                            -N:創建一個新的用戶自定義鏈         
iptables [-t table] -X [chain]                                      -X:刪除用戶自定義鏈
iptables [-t table] -P chain target                                 -P:為一個鏈設定默認的策略,ACCEPT DROP REJECT
iptables [-t table] -E old-chain-name new-chain-name                    -E:重命名一個自定義鏈

通用匹配(-par [value])

-i [intface]    :指定作用的網卡。
-s [source-ip]:指定源地址。
-d [destination-ip]:指定目標地址。 
-f:匹配包分片后的除了第一個包外的其他包。

隱式擴展參數(-p protocol parm):

-tcp --dport|sport port
     --tcp-flags LIST1 LIST2  表示在list1的標記列表中,list所指定的值為1即被標識的包。
        例: -p tcp --tcp-flags ACK,SYN,FIN ACK  :匹配ACK被設置,但是SYN和FIN沒有被標識的包。

udp --dport|sport port
        例: -p udp --dport 80  :標識匹配目標地址的80端口,所對應的如果為sport就為源地址的80端口。

icmp --icmp-type 0|8
    0:響應報文  8:請求報文
        例: -p icmp --icmp-type 0 :匹配icmp響應報文,詳細的icmp code對照表會在最后附加。

顯示擴展參數(-m parm):

mutilport --dports|sports|ports  port1,port2...
            例: -m mutilport --dports 22,80 :匹配目標地址端口22和80,可以指定一起指定多個端口,對應的sports源地址端口。

iprange [!] --src-range|--dst-range  ipsfrom-toip 
            例: -m iprange --dst-range 192.168.1.1-192.168.1.10 :匹配目標地址為192.168.1.1-192.168.1.10范圍內的主機。
                -m iptange ! --src-range 192.168.1.100 :匹配源地址不是192.168.1.100的所有主機。

string --algo bm|kmp [!] --string 'parrern'   
        --algo bm|kmp 指定字符串查找算法。
            例: -m string --algo bm --string 'chrome' :匹配所有報文中出現了chrome字符的報文。
                -m string --algo kmp --sring 'ie8' :匹配所有報文中除了ie8字符外的所有報文。

limit --limit rate[/second|/minute|/hour|/day] 
      --limit-burst num
            例: -m limit --limite 30/minute :報文傳輸速率為每分鐘最多30封報文,即2秒一封最大速率
                -m limit --limit-burst 100 :令牌桶允許存放100個令牌,如果存放的令牌超過100則開始丟棄令牌。

connlimit --connlimit-above num
          --conlimit-upto num
            例: -m connlimit --connlimit-above 30 :允許并發連接數量要小于30.
                 -m connlimit --connlimit-upto 10 : 允許并發連接數量大于10.

recent  --name #設定列表名稱,默認DEFAULT。
        --rsource:源地址,此為默認。
        --rdest:目的地址
        --seconds:指定時間內
        --hitcount:命中次數
        --set:將地址添加進列表,并更新信息,包含地址加入的時間戳。
        --rcheck:檢查地址是否在列表,以第一個匹配開始計算時間。
        --update:和rcheck類似,以最后一個匹配計算時間。
        --remove:在列表里刪除相應地址,后跟列表名稱及地址。
            例: -m recent --name web --set 
                -m recent --name web --update --seconds 300 -hitconut 10 -j DROP

mac [!] --mac-source address 
            例: -m mac --mac-source 00:00:00:00:00:00 :匹配mac地址為00:00:00:00:00:00的報文。

time --datastart yyyy-mm-dd --datastop yyyy-mm-dd
     --timestart hh:mm[:ss] --timestop hh:mm[:ss]
     [!] --monthdays day1,day2...
     [!] --weekdays day1,day2...
            例: -m time --datastart 2016-05-30 --datastop 2016-06-01 :匹配兩個日期段內的報文。
               -m time --timestart 10:00:00 --tiomestop 18:30:00 :匹配兩個時間段內的報文。
               -m time ! --monthdays 1-20 :匹配月除了1-20號外的所有天數。
               -m time --monthdays 25- :匹配25號之后的所有天數。
               -m time --weekdays 1-3 :匹配周的周一周二周三。
               -m time ! --weekdays 3,5 :匹配除了周三與周五的所有天。

state [!] --state INVALID|ESTABLISHED|NEW|RELATED
      INVALID:無法識別的連接。
      ESTABLISHED:建立新連接后,在此連接失效前的所有連接。
      NEW:新連接。
      RELATED:相關的連接,建立連接后產生的新連接等,如ftp協議第一次連接21命令通道后產生的20端口的數據通道連接。
            例:  -m state --state NEW,WSTABLISHED :新連接與ESTABLISHED連接。
                 -m state ! --state RELATED :除了無法識別的連接外的所有連接。

動作(-j active):

DROP:丟棄。
REJECT:允許。
ACCEPT:拒絕。  

RETURN::結束在目前規則鏈中的過濾程序,返回主規則鏈繼續過濾。
LOG:記錄日志
    --log-level NUM :日志等級。
    --log-prefix STRING :日志前綴。
MASQUEARDE:不設置地址轉換,而采用地址隱藏的策略來使的iptables自動取得轉換地址。
MARK:防火墻標記,用來批量標識地址和端口。
    --mark VALUE[/mask]

SNAT:源地址轉換。
    --to-source IPADDR[:PORT]
DNAT:目標地址轉換。
    --to-destination IPADDR[:PORT]

保存和導入

iptables-save [file] :保存規則到文件。
iptables-restore [file] :從文件導入規則。

常用命令組合示例:

iptables [-t filter] -L -n  :顯示指定的表規則狀況,默認為filter表。

iptables -A INTPUT -d 192.168.1.1 -p tcp --dport 80 -j ACCEPT  放開80端口的請求。
iptables -A OUTPUT -s 192.168.1.1 -p tcp --sport 80 -j ACCEPT  放開80端口的響應。

iptables -t mangle -A PREROUTING -d 192.168.1.1 -p tcp -m mutilport --dports 22,80 -j MARK --mark 100  將22和80端口設置為一個防火墻標記100。

iptables -t NAT -A POSTROUTING -s 192.168.1.0 -p tcp -j SNAT --to-source 172.16.0.1   所有內網網段192.168.1.0的ip都將被映射為172.16.0.1這個ip
iptables -t NAT -A PREROUTING -d 172.16.0.1 -p tcp -m mutilport --dports 22,80 -j DNAT --to-destination 192.168.1.1  所有目標ip 172.16.0.1的22,80請求都被轉到192.168.1.1的相應端口上。

iptables -A INPUT -d 192.168.1.1 -p icmp --icmp-type 0 -j ACCEPT  允許icmp的響應報文。
iptables -A OUTPUT -s 192.168.1.1 -p icmp --icmp-type 8 -j ACCEPT  允許icmp的請求報文。

iptables -A FORWARD  -d 192.168.1.3 -p tcp --dport 80 -j ACCEPT  允許目標地址為192.168.1.3的請求轉發。

原創文章,作者:Net18_肖肖,如若轉載,請注明出處:http://www.www58058.com/17185

(0)
Net18_肖肖Net18_肖肖
上一篇 2016-05-31 19:48
下一篇 2016-05-31

相關推薦

  • 使用NFS和Samba文件服務搭建博客站點

    使用NFS和Samba文件服務搭建博客站點 實驗目的:分別使用NFS和Smaba文件服務實現wordpress 實驗要求: (1) server導出/data/application/web,在目錄中提供wordpress; (2) client掛載nfs server導出的文件系統至/var/www/html;(3) 客戶端1(lamp),部署w…

    2017-04-30
  • 馬哥教育網絡19期+第十一周課程練習

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 SSL協議基礎:     SSL協議位于TCP/IP協議與各種應用層協議之間,本身又分為兩層:     (1)、SSL記錄協議:建立在可靠傳輸層協議(TCP)之上,為上層協議提供數據封裝、壓縮、加密等基本功能。  &nbs…

    Linux干貨 2016-08-15
  • 路徑操作&StringIO/BytesIO

    Edit 路徑操作&StringIO/BytesIO 路徑操作 路徑操作模塊: 3.4版本以前os.path模塊 In [1]: from os import path In [2]: p = path.join(‘/etc’,’sysconfig’,’network’)#將字符…

    Linux干貨 2017-10-30
  • redis 主從復制實戰

    1.準備好4臺機器 192.168.42.150 redis-node1 #主 192.168.42.151 redis-node2 #從 192.168.42.152 redis-node3 #從 192.168.42.153 redis-node4 #從 將主機解析寫入hosts文件,分發至每臺機器 2.安裝redis,配置好基本配置 (1) 4臺機器,…

    Linux干貨 2017-07-18
  • python 多版本管理(pyenv)

    01 – Python 簡介和安裝 01 – Python 簡介和安裝 1. Python 簡介 2. 安裝 pyenv 3. pyenv 使用 4. pyenv-virtualenv 5. 安裝 IPython 和 Jupyter 01 – Python 簡介和安裝 1. Python 簡介 編程風格 面向過程:以指令為…

    Linux干貨 2016-07-10
  • 初學Linux之標準 I/O 和管道

    前面我們已經了解了文件系統的部分內容,我們可以通過 ls 命令讓當前目錄下的內容都顯示在屏幕上,也可以使用 pwd 命令,顯示當前的所在的目錄路徑。但是我們輸入的是命令,本身并沒有輸入“顯示”這類命令和要求,但是系統就自動的在屏幕上輸出我們命令指定的信息。由此可以想象到,系統自身有默認的一種輸出方式,同時,有輸出就有輸入,當輸入的和系統無關,系統也會自動提示錯誤,以上就是我們接下來要了解的基礎內容——標準 I/O。具體的涉及內容包括:三種 I/O 設備,把 I/O 重定向入文件,tr 命令的使用,使用管道鏈接命令。

    2017-12-02
欧美性久久久久