天天看點

iptables filter表案例定義一個變量——iptables指令(定義變量時盡量使用絕對路徑,避免環境變量的影響)清空原有規則上面三行是定義其預設政策-m是指定檢測狀态,--state指定資料包狀态(配合-m使用),該指令行的目的是使資料處理(通信上面三行指令是指定放行的包的類型Generated by NetworkManager

0.15 iptables filter表小案例

iptables擴充選項(了解)

其實比對擴充中,還有需要加-m引用子產品的顯示擴充,預設是隐含擴充,不要使用-m。

狀态檢測的包過濾:

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

-m multiport 指定多端口号

--sport

--dport

--ports

-m iprange 指定IP段

--src-range ip-ip

--dst-range ip-ip

-m connlimit 連接配接限定

--comlimit-above # 限定大連接配接個數

-m limit 現在連接配接速率,也就是限定比對資料包的個數

--limit 指定速率

--limit-burst # 峰值速率,最大限定

-m string 按字元串限定

--algo bm|kmp 指定算法bm或kmp

--string "STRING" 指定字元串本身

規則:放行指定端口

使用腳本設定規則:

建立腳本:

[root@adai003 ~]# vi /usr/local/sbin/iptables.sh

#! /bin/bash

ipt="/usr/sbin/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

)更順暢

$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@adai003 ~]# sh /usr/local/sbin/iptables.sh

注意: 腳本中指定的IP如果和主機IP不同時不要在遠端端口直接運作該腳本!

icmp協定示例

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

說明: 該規則的含義是:隻允許本機通路外網,不允許外網通路本機!

10.16-10.18 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@adai003 ~]# ifconfig ens37 192.168.100.1/24

注: 該方法隻是臨時設定IP,重新開機後會丢失。

方法2: 複制ens33的配置檔案,然後在配置問價年内進行設定!

需求:

需求1: 可以讓B機器連接配接外網

步驟一:A機器打開路由轉發

[root@adai003 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

該指令是更改核心設定,打開路由轉發功能,預設值是0.

步驟二:在A機器的nat表中增加一條規則

[root@adai003 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 

[root@adai003 ~]# 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)

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

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@adai003 ~]# route add default gw 192.168.100.1 

mark

步驟四:配置DNS(編輯DNS配置檔案)

[root@adai003 ~]# vim /etc/resolv.conf

nameserver 119.29.29.29

然後使用ping指令檢測,網絡通暢!

注: 此時B機器可以連通外網,但是外網機器無法通路B機器,A機器的作用就類似于一個路由器!

需求2: C機器隻能和A通信,讓C機器可以直接連通B機器的22端口(端口映射)

步驟二:在A機器的nat表中增加2條規則(執行該步驟前先清除nat表原有規則)

規則1:

[root@adai003 ~]# iptables -t nat -A PREROUTING -d 192.168.8.125 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

規則2:

[root@adai003 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.8.125

Finish!

應用2

iptables限制syn(同步)速度

原理: 每5s内tcp三次握手大于20次的屬于不正常通路。

[root@adai002 ~]# 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@adai002 ~]# 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@adai002 ~]# 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):

上圖是系統對資料包進行判定轉發的過程,在這裡,系統會根據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位址轉換。

10.19 iptables規則備份和恢複

備份(另存為)

指令:iptables-save

[root@adai003 ~]# iptables-save > /tmp/ipt.txt

恢複

[root@adai003 ~]# iptables-restore < /tmp/ipt.txt

本文轉自 芬野 51CTO部落格,原文連結:http://blog.51cto.com/yuanhaohao/2046215,如需轉載請自行聯系原作者

繼續閱讀