iptables filter表

iptables filter表小案例

iptables擴展選項

其實匹配擴展中,還有須要加-m引用模塊的顯示擴展,默認是隱含擴展,不要使用-m。算法

狀態檢測的包過濾:vim

  • -m state --state {NEW,ESTATBLISHED,INVALID,RELATED} 指定檢測那種狀態bash

  • -m multiport 指定多端口號
    --sport
    --dport
    --ports網絡

  • -m iprange 指定IP段
    --src-range ip-ip
    --dst-range ip-iptcp

  • -m connlimit 鏈接限定
    --comlimit-above # 限定大鏈接個數spa

  • -m limit 如今鏈接速率,也就是限定匹配數據包的個數
    --limit 指定速率
    --limit-burst # 峯值速率,最大限定命令行

  • -m string 按字符串限定
    --algo bm|kmp 指定算法bm或kmp
    --string "STRING" 指定字符串自己code

規則:放行指定端口

使用腳本設定規則:server

建立腳本:
[root@3 ~]# vi /usr/local/sbin/iptables.sh

#! /bin/bash
ipt="/usr/sbin/iptables"
# 定義一個變量——iptables命令(定義變量時儘可能使用絕對路徑,避免環境變量的影響)
$ipt -F
# 清空原有規則
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
# 上面三行是定義其默認策略
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# -m是指定檢測狀態,--state指定數據包狀態(配合-m使用),該命令行的目的是使數據處理(通訊
)更順暢
$ipt -A INPUT -s 192.168.8.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
# 上面三行命令是指定放行的包的類型  
 icmp示例
 iptables -I INPUT -p icmp --icmp-type 8 -j DROP

執行該腳本中的規則:
[root@3 ~]# sh /usr/local/sbin/iptables.sh

注意: 腳本中指定的IP若是和主機IP不一樣時不要在遠程端口直接運行該腳本!ip

icmp協議示例

[root@3 ~]#iptables -I INPUT -p icmp --icmp-type 8 -j DROP

說明: 該規則的含義是:只容許本機訪問外網,不容許外網訪問本機!

iptables nat表應用

應用1

環境:
A機器兩塊網卡ens33(192.168.8.125)、ens37(192.168.100.1),ens33能夠上外網,ens37僅僅是內部網絡,B機器只有ens37(192.168.100.100),和A機器ens37能夠通訊互聯。

準備工做:

  • 準備兩臺虛擬機
  • A機器添加一塊網卡ens37,ens37的網絡鏈接方式選擇‘LAN區段模式’(內網交換機鏈接,該模式下Windows沒法與該客戶端鏈接),開機後並設定IP爲192.168.100.1
  • B機器關閉原有網卡鏈接,新增網卡ens37,開機後設定IP爲192.168.100.100(網絡鏈接模式選擇LAN區段,並和A機器中的ens37網卡選擇相同區段)

設置ens37的IP:

  • 方法1:
    直接在命令行使用ifconfig命令
[root@3 ~]# ifconfig ens37 192.168.100.1/24

注: 該方法只是臨時設定IP,重啓後會丟失。

  • 方法2: 複製ens33的配置文件,而後在配置問價年內進行設置!

需求:

  • 需求1: 可讓B機器鏈接外網

    • 步驟一:A機器打開路由轉發
    [root@3 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
    該命令是更改內核設置,打開路由轉發功能,默認值是0.
    • 步驟二:在A機器的nat表中增長一條規則
    [root@3 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 
    [root@3 ~]# iptables -t nat -nvL
    Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 MASQUERADE  all  --  *      ens33   192.168.100.0/24     0.0.0.0/0

    說明: -o 選項後面跟設備名稱,表示出口網卡,MASQUERADE是假裝、冒充的意思。

    • 步驟三:爲B設置網關爲A機器ens37的IP:
    [root@3 ~]# route add default gw 192.168.100.1

    mark

    • 步驟四:配置DNS(編輯DNS配置文件)
    [root@3 ~]# vim /etc/resolv.conf
    # Generated by NetworkManager
    nameserver 119.29.29.29

    而後使用ping命令檢測,網絡通暢!
    注: 此時B機器能夠連通外網,可是外網機器沒法訪問B機器,A機器的做用就相似於一個路由器!

  • 需求2: C機器只能和A通訊,讓C機器能夠直接連通B機器的22端口(端口映射)

    • 步驟一:A機器打開路由轉發
    [root@3 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
    該命令是更改內核設置,打開路由轉發功能,默認值是0.
    • 步驟二:在A機器的nat表中增長2條規則(執行該步驟前先清除nat表原有規則)
    規則1:
    [root@3 ~]# iptables -t nat -A PREROUTING -d 192.168.8.125 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
    
    規則2:
    [root@3 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.8.125
    • 步驟三:爲B設置網關爲A機器ens37的IP:
    [root@3 ~]# route add default gw 192.168.100.1

    END

應用2

iptables限制syn(同步)速度

原理: 每5s內tcp三次握手大於20次的屬於不正常訪問。

[root@3 ~]# iptables -A INPUT -s ! 192.168.0.0/255.255.255.0 -d 192.168.8.125 -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name httpuser --rsource  

[root@3 ~]# iptables -A INPUT -m recent --update --seconds 5 --hitcount 20 --name httpuser --rsource -j DROP

說明: 其中192.168.0.0/255.255.255.0 爲不受限制的網段,192.168.8.125爲本機IP。
該iptables策略,可有效預防syn攻擊,也能夠有效防止機器人發垃圾帖。

應用3

iptables針對一個網段設置規則:

[root@3 ~]# iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROP

iptables中DNAT、SNAT和MASQUERADE

  • DNAT(Destination Network Address Translation,目的地址轉換) 一般被叫作目的映射。
  • SNAT(Source Network Address Translation,源地址轉換)一般被叫作源映射。

iptables中DNAT和SNAT工做原理:
在任何一個IP數據包中,都會有Source IP Address與Destination IP Address這兩個字段,數據包所通過的路由器也是根據這兩個字段是斷定數據包是由什麼地方發過來的,它要將數據包發到什麼地方去。而iptables的DNAT與SNAT就是根據這個原理,對Source IP Address與Destination IP Address進行修改。

數據包在iptables中要通過的鏈(chain):

mark
上圖是系統對數據包進行斷定轉發的過程,在這裏,系統會根據IP數據包中的destination ip address中的IP地址對數據包進行分發。若是destination ip adress是本機地址,數據將會被轉交給INPUT鏈。若是不是本機地址,則交給FORWARD鏈檢測。

這也就是說,咱們要作的DNAT要在進入斷定轉發轉發過程以前進行,也就是在PREROUTING鏈中作,好比咱們要把訪問202.103.96.112的訪問轉發到192.168.0.112上:「iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112」,這調規則的做用其實就是將已經達到這臺Linux網關(防火牆)上的數據包上的destination ip address從202.103.96.112修改成192.168.0.112而後交給系統路由進行轉發。
同理,SNAT要在數據包流出這臺機器以前的最後一個鏈也就是POSTROUTING鏈來進行操做:「iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 58.20.51.66」,這個語句就是告訴系統把即將要流出本機的數據的source ip address修改爲爲58.20.51.66。這樣,數據包在達到目的機器之後,目的機器會將包返回到58.20.51.66也就是本機。若是不作這個操做,那麼你的數據包在傳遞的過程當中,reply的包確定會丟失。

  • MASQUERADE(假裝)

假如當前系統用的是ADSL/3G/4G動態撥號方式,那麼每次撥號,出口IP都會改變,SNAT就會有侷限性。 「iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE」 重點在MASQUERADE這個設定值就是將動態IP假裝成爲(-o)的那塊裝置上的IP,無論如今eth0的出口得到了怎樣的動態IP,MASQUERADE會自動讀取eth0設定的IP地址而後作SNAT出去,這樣就實現了很好的動態SNAT地址轉換。

相關文章
相關標籤/搜索