Linux系統中的防火墻iptables

iptables/netfilter——Linux系統下的防火墻

基本原理

防火墻主要功能

工作于主機或者網絡邊緣,對進出本主機或本網絡的報文進行匹配檢測,對匹配到規則的報文進行于規則相對應的處理。

防火墻主要分類

  • 按功能分類

主機防火墻
網絡防火墻

  • 按構成分類

軟件防火墻
硬件防火墻

Linux防火墻軟件iptables/netfilter(以后簡稱iptables)

內置五條鏈

PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING

構成五大功能(五個表)

filter:過濾,防火墻;
nat:network address translation;用于修改源IP或目標IP,也可以改端口;
mangle:拆解報文,做出修改,并重新封裝起來;
raw:關閉nat表上啟用的連接追蹤機制;
security:未廣泛使用

各功能鏈結構

raw:PREROUTING, OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING
filter:INPUT,FORWARD,OUTPUT

包過濾流程圖

Linux系統中的防火墻iptables

配置思路

iptables內容

主要包含兩個方面

  1. 匹配條件
    基本匹配條件:內建
    擴展匹配條件:由擴展模塊定義
  2. 處理動作
    基本處理動作:內建
    擴展處理動作:由擴展模塊定義
    自定義處理機制:自定義鏈

iptables配置原則

  1. 要實現哪種功能:判斷添加到哪個表上
  2. 報文流經的路徑:判斷添加到哪個鏈上

鏈配置原則

  1. 同類規則(訪問同一應用),匹配范圍小的放上面
  2. 不同類的規則(訪問不同應用),匹配到報文頻率較大的放在上面
  3. 將那些可由一條規則描述的多個規則合并起來
  4. 設置默認策略

iptables配置指令——filter

鏈管理

-N 自定義一條新鏈

iptables [-t table] -N chain

-X 刪除自定義的規則鏈(僅能刪除引用計數為0自定義鏈)

iptables [-t table] -X  [chain]

-P 設置默認策略

iptables [-t table] -P chain target

-E 重命名自定義鏈(不能重命名引用計數不為0的鏈)

iptables [-t table] -E old-chain-name new-chain-name

規則管理

-A 在尾部追加新規則

iptables [-t table] -A chain rule-specification

-I 插入新規則到指定位置(不指定為插入到第一條)

iptables [-t table] -I chain [rulenum] rule-specification

-D 刪除指定規則

iptables [-t table] -D chain rulenum 指定序號刪除
iptables [-t table] -D chain rule-specification 指定規則刪除

-R 替換指定規則

iptables [-t table] -R chain rulenum rule-specification

-F 清空指定規則鏈(默認清空所有)

iptables [-t table] -F [chain [rulenum]] [options...]

-Z 歸零規則鏈
iptables的每條規則都有兩個計數器:

  1. 匹配到的報文的個數;
  2. 匹配到的所有報文的大小之和;
iptables [-t table] -Z [chain [rulenum]] [options...]

-L 查看iptables規則

  • -n:numberic,以數字格式顯示地址和端口號;
  • -v:verbose,詳細信息;-vv, -vvv
  • -x:exactly,顯示計數器結果的精確值;
iptables [-t table] -L [chain [rulenum]] [options...]

rule-specification

包含兩方面內容

  • 匹配條件
  • 處理動作

匹配條件

  • 基本匹配條件
[!] -s, --source  address[/mask][,...]:檢查報文中的源IP地址是否符合此處指定的地址或范圍;
[!] -d, --destination address[/mask][,...]:檢查報文中的目標IP地址是否符合此處指定的地址或范圍;所有地址:0.0.0.0/0
[!] -p, --protocol  //protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or  "all" {tcp|udp|icmp}
[!] -i, --in-interface name:數據報文流入的接口;只能應用于數據報文流入的環節,只能應用于PREROUTING,INPUT和FORWARD鏈;
[!] -o, --out-interface name:數據報文流出的接口;只能應用于數據報文流出的環節,只能應用于FORWARD、OUTPUT和POSTROUTING鏈;
  • 拓展匹配條件

    • 隱式拓展條件
      不需要手動加載擴展模塊;因為它們是對協議的擴展,所以,但凡使用-p指明了協議,就表示已經指明了要擴展的模塊
tcp:
    [!] --source-port, --sport port[:port]:匹配報文的源端口;可以是端口范圍;
    [!] --destination-port,--dport port[:port]:匹配報文的目標端口;可以是端口范圍;
    [!] --tcp-flags  mask  comp mask is the flags which we should examine,  written as a comma-separated list,例如 SYN,ACK,FIN,RST
    comp is a comma-separated list  of  flags  which must be set,例如SYN
    例如:“--tcp-flags  SYN,ACK,FIN,RST  SYN”表示,要檢查的標志位為SYN,ACK,FIN,RST四個,其中SYN必須為1,余下的必須為0;
    [!] --syn:用于匹配第一次握手,相當于”--tcp-flags  SYN,ACK,FIN,RST  SYN“;                                

    udp 
    [!] --source-port, --sport port[:port]:匹配報文的源端口;可以是端口范圍;
    [!] --destination-port,--dport port[:port]:匹配報文的目標端口;可以是端口范圍;

    icmp 
    [!] --icmp-type {type[/code]|typename}
                echo-request:8
                echo-reply:0
    • 顯式拓展條件
      必須使用-m選項指明要調用的擴展模塊的擴展機制

1、multiport

This  module  matches  a  set  of  source  or  destination  ports. Up  to 15 ports can be specified.  A port range (port:port) counts as two ports.  It can only be used in conjunction with one of the following protocols: tcp,  udp, udplite, dccp and sctp.

以離散或連續的 方式定義多端口匹配條件,最多15個;

[!] --source-ports,--sports port[,port|,port:port]...:指定多個源端口;
[!] --destination-ports,--dports port[,port|,port:port]...:指定多個目標端口;

# iptables -I INPUT  -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT

2、iprange

以連續地址塊的方式來指明多IP地址匹配條件;
[!] --src-range from[-to]
[!] --dst-range from[-to]
# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT

3、time

This  matches  if the packet arrival time/date is within a given range.

--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
[!] --weekdays day[,day...]
[!] --monthdays day[,day...]
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--kerneltz:使用內核配置的時區而非默認的UTC;

4、string

This modules matches a given string by using some pattern matching strategy. 

--algo {bm|kmp}
[!] --string pattern
[!] --hex-string pattern

--from offset
--to offset

~]# iptables -I OUTPUT -m string --algo bm --string "say" -j REJECT

5、connlimit

Allows  you  to  restrict  the  number  of parallel connections to a server per client IP address (or client address block).

--connlimit-upto n
--connlimit-above n

~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT

6、limit

This  module  matches  at  a limited rate using a token bucket filter. 

--limit rate[/second|/minute|/hour|/day]
--limit-burst number

~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT

限制本機某tcp服務接收新請求的速率:--syn, -m limit

7、state

The "state" extension is a subset of the "conntrack" module.  "state" allows access to the connection tracking state for this packet.

[!] --state state
    INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.

    NEW: 新連接請求;
    ESTABLISHED:已建立的連接;
    INVALID:無法識別的連接;
    RELATED:相關聯的連接,當前連接是一個新請求,但附屬于某個已存在的連接;
    UNTRACKED:未追蹤的連接;                                
        state擴展:
        內核模塊裝載:
            nf_conntrack
            nf_conntrack_ipv4                                
        手動裝載:
            nf_conntrack_ftp                                    
        追蹤到的連接:
            /proc/net/nf_conntrack                        
        調整可記錄的連接數量最大值:
            /proc/sys/net/nf_conntrack_max                        
        超時時長:
            /proc/sys/net/netfilter/*timeout*

處理動作

-j:
    ACCEPT/DROP  接受/丟棄
    REJECT:--reject-with 返回錯誤
    LOG:--log-level, --log-prefix 記錄日志
    自定義鏈 轉入使用自定義鏈
            RETURN 返回上一層鏈

iptables保存和還原

iptables-save 保存iptables配置
iptables-restore 還原iptables配置(會清空原有配置)

iptables配置指令——nat

NAT: Network Address Translation 地址轉換

  • 請求報文:由管理員定義
  • 響應報文:由NAT的conntrack機制自動實現

請求報文中的地址變動

  • 修改源地址:SNAT,MASQUERADE
  • 修改目標地址:DNAT
  • 修改端口地址:REDIRECT

NAT定義在nat表:PREROUTING,INPUT,OUTPUT,POSTROUTING

  • SNAT:POSTROUTING
  • DNAT:PREROUTING

target:

  • SNAT

    --to-source [ipaddr[-ipaddr]]
  • DNAT

    --to-destination [ipaddr[-ipaddr]][:port[-port]]
  • MASQUERADE
  • REDIRECT

    --to-ports port[-port]

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

(0)
easyTangeasyTang
上一篇 2017-06-13 14:28
下一篇 2017-06-13 15:50

相關推薦

  • Tomcat集群之會話保持

    一:環境介紹:      OS:CentOS7.3      Ngninx:1.10.2     Tomcat:7     注:便于實驗,此處關閉全部服務器的防火墻,selinux(iptables -F  于  setenforce 0)…

    2017-05-25
  • vim編輯器

    vim編輯器: 文本編輯器:文本,純文本,ASCII text;Unicode; 文本編輯種類:                 行編輯器:sed                全屏編輯器:…

    2017-04-17
  • RPM及YUM工具介紹及使用(下)

    YUM工具 YUM工作原理 YUM工具的出現就是為了解決rpm工具不能夠自動解決軟件包之間的依賴關系這一難題的。它的工作原理大致如下:YUM透過分析RPM的標頭資料,根據各軟件的相關性找出軟件所依賴的軟件列表,然后去下載速度最快的yum倉庫中下載所有相關RPM軟件包,然后完成相應軟件的安裝。同時yum工具和rpm工具一樣,也可以提供對軟件包的查詢,安裝、升級…

    Linux干貨 2016-12-26
  • WORD文檔格式要求與linux學習規劃

    WORD文檔格式要求 一、封面               1、活動名稱(隸書,小初號字,加粗)               2、主辦單位、策劃日期(宋體、3號字) 二、目錄    &nbs…

    Linux干貨 2016-12-12
  • 網絡配置——IP劃分網絡基礎

    Linux網絡屬性配置: 計算機網絡: TCP/IP:協議棧         ISO,OSI:協議棧學習 MAC:Media Access Control          48bits: &nbsp…

    Linux干貨 2016-09-07
  • 98-mysql數據備份

    一. 數據備份基礎知識

    2016-11-20
欧美性久久久久