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
下一篇 2017-06-13

相關推薦

  • Linux nginx 服務

                           Linux nginx 服務 Nginx服務簡介:      NGINX :是一個自由、開源、高性能、輕量級的HT…

    系統運維 2016-11-18
  • 文本三劍客之sed用法總結

    描述:    sed是Stream EDitor(行編輯器)的簡寫,是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你…

    Linux干貨 2016-08-10
  • 馬哥教育網絡班20期+第五周博客作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; ]# grep  "^[[:space:]]\+" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; ]#…

    Linux干貨 2016-07-12
  • Linux磁盤管理實操

    Linux磁盤管理實操 1、創建一個10G分區,并格式為ext4文件系統。 先使用fdisk工具創建一個10G的新分區。使用fdisk打開要創建磁盤分區的物理設備fdisk /dev/sdb,然后使用n指令創建新的分區,分區類型選此處選擇為主分區,第一個柱面使用默認的1,最后的柱面,使用+10G這種表示方式,表示創建的分區大小為10G。 創建后可以使用p指令…

    系統運維 2016-12-13
  • HAProxy七種調度方法的簡單示意圖

    看了三個月,中間因出差和其他事沒有看估計也有十幾天,剛把35天的視頻看完。很多內容都記不住,待第一次看完后再回頭看吧。 現在想,對內容進行簡單的畫圖,把基本的體現出來,對記憶和回顧應該有幫助。

    Linux干貨 2016-07-26
  • Python內置數據結構——集合set

    集合 定義 set翻譯為集合 collection翻譯為集合類型,是一個較大的概念 set是一個可變的、無序的、不重復的元素組成的集合 set的元素要求必須可以hash,目前已學的不可hash的類型只有list、set 元素不可以索引 set可以迭代 set的初始化 set_1 =set() #表示定義一個空集合set_1 set_1 =set(iterab…

    Linux干貨 2017-10-03
欧美性久久久久