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,如需轉載請自行聯系原作者