1. 程式人生 > >五分鐘徹底學會iptables防火墻--技術流ken

五分鐘徹底學會iptables防火墻--技術流ken

-o 啟動 dnat 標誌位 簡單 linux 7 iptable filter 擴展名

iptables簡介

IPTABLES 是與最新的 3.5 版本 Linux內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。

iptables 組件是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要下載該工具並安裝使用它。

--摘自360百科

之前已經寫過一篇關於iptables的博客《iptables實戰案例詳解-技術流ken》,例子雖然非常好,但是總結的還不是很到位。

本篇博客將詳細講解iptables的使用規則。希望每個人認真讀完本篇博客都可以讓iptables成為工作中的強盾。

四表五鏈

學習iptables提及最多的無非就是四表五鏈,也許之前你對此早有耳聞,但是沒有真正的研究過。下面這些總結將讓你簡單的記住什麽是四表五鏈。

四表

  • filter表 過濾數據包(默認表,最常用)
  • Nat表 用於網絡地址轉換(IP、端口)
  • Mangle表 修改數據包的服務類型、TTL、並且可以配置路由實現QOS
  • Raw表 決定數據包是否被狀態跟蹤機制處理

五鏈

  • INPUT鏈 進來的數據包應用此規則鏈
  • OUTPUT鏈 外出的數據包應用此規則鏈
  • FORWARD鏈 轉發數據包時應用此規則鏈
  • PREROUTING鏈 對數據包作路由選擇前應用此鏈(所有的數據包進來的時侯都先由這個鏈處理)
  • POSTROUTING鏈
    對數據包作路由選擇後應用此鏈(所有的數據包出來的時侯都先由這個鏈處理)

每個表中含有如下鏈

技術分享圖片

iptables使用詳解

技術分享圖片

iptables的使用格式如上圖所示

table

-t後面跟上你要操作的表

如果不使用-t默認操作的是filter表

-t:指定表名(默認是對filter表進行操作)
有如下四種:
-t filter
-t nat
-t mangle
-t raw

command

即需要執行的命令常用命令操作有-A,-I, -D,-F,-L

-A:追加新規則
-D:刪除指定的規則
-I:首部或者指定的位置插入新規則
-F:清空規則
-Z:清空計數器
-P:修改默認規則
-N:自定義一條鏈
-X:刪除自定義的鏈
-E:修改自定義鏈的名字
-L;列舉出iptables中所配置的規則
-n:如果不用n選項,那麽系統會將協議反解為協議名稱,這個過程很慢,該選擇的作用是就用來實現禁止反解為名稱
--line:在行首顯示規則編號
-v:顯示詳細信息(通常用來看計數器)

註意:
規則中的表名、鏈名要區分大小寫

chain

即鏈,需要指出對哪個表中的哪個鏈進行操作

表名為小寫,鏈名為大寫,嚴格區分大小寫

有如下五種:
INPUT
OUTPUT
FORWARD
PREROUTING
POTROUTING

parameter

即參數,分為通用匹配和擴展匹配

擴展匹配又分為隱式匹配和顯示匹配

通用匹配
擴展匹配
  隱式擴展
  顯式擴展

target

即目標動作

ACCEPT:  請求被運行,數據包可以通過
DROP:    認定是一個非法請求,將數包悄悄的丟棄
REJECT:  認定是一個非法請求,禁止數據包同行的(帶有通知機制)
LOG:     將這次客戶端的請求記錄到日誌中
MARK:    標記一個連接
SNAT:     把數據包中的源地址部分替換為指定的IP
DNAT:     修改數據包中的目的IP

iptables簡單常用的操作

1. 設置默認規則

[root@ken ~]# iptables -P INPUT DROP    #設置INPUT鏈默認規則設置為DROP
[root@ken ~]# iptables -P INPUT ACCEPT  #設置INPUT鏈默認規則設置為ACCEPT 
[root@ken ~]# iptables -P OUTPUT DROP   #設置OUTPUT鏈默認規則設置為DROP,如果OUTPUT鏈開啟DROP,相應組合後可防範反彈式木馬 
[root@ken ~]# iptables -P OUTPUT ACCEPT #設置OUTPUT鏈默認規則設置為ACCEPT 

2.清空規則

[root@ken ~]# iptables -t filter -F    #清空filter表規則 
[root@ken ~]# iptables -t nat -F       #清空nat表規則 
[root@ken ~]# iptables -t mangle -F    #清空mangle表規則 
[root@ken ~]# iptables -t raw -F       #清空raw表規則 

3. 查看規則鏈

[root@ken ~]# iptables -L -n --line -v 

iptables通用匹配

-s:指定源ip
-d:指定目標ip
-i:指定進入數據包所經過網卡名稱
-o:指定發出數據包所經過網卡名稱

1. 指定僅能10.220.5.138可以ping(訪問)本機

root@ken ~]# iptables -A INPUT -s 10.220.5.138 -j ACCEPT

2.允許所有進入10.220.5.138的流量

[root@ken ~]# iptables -A INPUT -d 10.220.5.138 -j ACCEPT

3.允許從eth0進入的流量

[root@ken ~]# iptables -A INPUT -i eth0 -j ACCEPT

iptables擴展匹配之隱式匹配

隱式匹配使用-p後面加上協議名稱

-p tcp/udp/icmp

1.對於icmp協議的隱式匹配

格式:

-p icmp --icmp-type

ping數據包協議是icmp協議

type

0:應答包

8:請求包

1.可以從10.220.5.1 ping 其他主機,禁止其他主機ping 10.220.5.1

[root@ken ~]# iptables -I INPUT -p icmp --icmp-type 0 -d 10.220.5.1 -j ACCEPT
[root@ken ~]# iptables -I INPUT -p icmp --icmp-type 8 -s 10.220.5.1 -j ACCEPT

2.對於tcp協議的隱式擴展

-p tcp 選項

選項:

--sport:源端口

--dport:目標端口

--tcp-flags list1 list2:根據tcp包中的標誌位進行匹配

--syn:syn為1,ack,fin都為0,即三次握手的第一次

1.讓所有主機可以訪問10.220.5.1上的網站,但是禁止10.220.5.191訪問網站

[root@ken ~]# iptables -A INPUT -p tcp --dport 80 -d 10.220.5.1 -j ACCEPT
[root@ken ~]# iptables -I INPUT -p tcp --dport 80 -s 10.220.5.191 -j DROP

2.只允許從10.220.5.182發送連接httpd請求

[root@ken ~]# iptables -I INPUT -p tcp -s 10.220.5.182 --tcp-flags syn,ack,fin syn -j ACCEPT

3. 對於udp協議的隱式擴展

-p udp --sport|--dport

用的不多。略

iptables擴展匹配之顯示匹配

註意:用顯式擴展的時候,必須指定擴展功能所依賴模塊的名稱

指定: -m 擴展名稱 --options-xxx

顯示擴展1state

作用:根據nv_conntrack的記錄來對連接進行規則匹配,是根據連接記錄中的狀態信息做匹配

狀態:

NEW:表示新的連接請求(syn=1 ack=0 fin=0

三次握手的第一次

ping請求的第一包

udp通信的第一個包

ESTABLISHED:連接建立完成狀態下所傳遞的數據包(syn=0 ack=1 fin=0

INVALID:非法連接

RELATED:相關聯的連接

1.讓所有人都可以訪問web站點

[root@ken ~]# iptables -A INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT
[root@ken ~]# iptables -A OUTPUT -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT

顯示擴展2multiport

作用:對連續或者離散的端口做匹配

選型:

--sports port[,port|,port:port]...

--dports port[,port|,port:port]...

--ports port[,port|,port:port]...

例子:

--sport 80,22,3306 逗號表示離散

--sport 80:1024 冒號表示連續

--sport 80,22,23:1024 離散和連續的可以寫在一起

1.允許讓10.220.5.182訪問本機的80 22 443 3389 3306端口

[root@ken ~]# iptables -I INPUT -p tcp -s 10.220.5.182 -m multiport --dports 80,22,443,3389,3306 -j ACCEPT

顯示擴展3iprange

作用:用於對ip地址的範圍做匹配

選項

--src-range

--dst-range

1. 10.220.5.1~10.220.5.100無法訪問web

[root@ken ~]# iptables -I INPUT -p tcp --dport 80 -m iprange --src-range 10.220.5.1-10.220.5.100 -j DROP

顯示擴展4limit

作用:限速

--limit rate[/second|/minute|/hour|/day]:指示每分鐘/限制最大連接數為

--limit-burst number:指示當總連接數超過xx時,啟動 litmit/minute 限制

1.實現每分鐘可以發送10個ping包,峰值是7

[root@ken ~]# iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 7 -j ACCEPT 

2.防暴力破解。限制登錄22端口的請求的頻率(限制1小時只能嘗試登錄ssh5次)

[root@ken ~]# iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/hour --limit-burst 5 -j ACCEPT 

顯示擴展5connlimit

作用:限制一個客戶端可以同時與當前主機建立幾個鏈接

[!] --connlimit-above n

1. 限制每個IP可以同時登錄5ssh

[root@ken ~]# iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j DROP 
[root@ken ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

五分鐘徹底學會iptables防火墻--技術流ken