linux之Iptables 主機防火牆規則(一)


Iptables  主機防火牆規則

1.概述  內外網防火牆  軟硬件分類

Firewall:防火牆,工作在主機或網絡的邊緣。進出本主機或網絡段的數據報文,根據規則做匹配,根據匹配的結果做處理。一種隔離技術,實現內網以及外網傳輸控制,最大限度阻止黑客破壞企業網絡,加強企業網絡安全。基於本機內核中的TCP/IP協議棧內核

 

防火牆根據作用對象分類

主機型防火牆單台主機上設置防火牆,保護主機數據安全控制的是網絡用戶 服務器數據的訪問

網絡型防火牆:管理整個企業的網絡安全,內部主機也要設置防火牆   內網外網溝通是一定經過防火牆

 

 

 

 

防火牆根據軟硬件分類

硬件防火牆:通過硬件的方式實現防火牆

軟件防火牆:通過軟件的形式實現防火牆

 

 

 

2.分為兩部分iptables Netfilter  四表五鏈  匹配規則

iptables分為兩部分為iptables/netfilter

 

1.iptables是屬於應用程序,完成規則設置命令行工具,是一個防火牆的設置命令,/sbin/iptables,用於管理防火牆規則。

2.Netfilter:位於內核中包過濾功能體系,是實現防火牆的功能模塊。

3.iptables 工作在網絡層,通過規則對數據“包”進行過濾

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意:

CentOS 7前,默認啟動的防火牆是iptablesCentOS 7之默認啟動的是firewalld

firewalliptables的外殼,是基於iptables工作

1.)iptables規則鏈  規則定義:設置條件,進行數據包的匹配,依據匹配進行處理

規則的集合體   --規則鏈

對數據包進行過濾或處理。--規則的作用

容納各種防火牆的規則--作用

處理數據包不同時機--鏈的分類依據:

 

默認的5種規則鏈分類依據按照時機來划分的)對數據包處理的不同時間

1、在進行路由選擇前處理數據包--PREROUTING     路由選擇前執行的規則 判別路由之前(NAT)

2、處理入站數據包--INPUT            處理發給本機的數據包

3:處理出站數據包  --OUTPUT   本機發出去的數據包

4、處理轉發數據包--FORWORD        本機相當於轉發路由,

5、在進行路由選擇后處理數據包--POSTROUTING    路由判斷選擇之后,處理數據包

 

2.)規則表:容納各種規則鏈  

(表是鏈的分類) 根據鏈對數據不同的操作,分為表

4個功能表:

filter對數據包進行過濾確認是否放行該數據包。

natnetwork address translation  網絡地址轉換(修改數據包中的源、目標IP地址或端口。)

Mangle拆解報文,做出修改,封裝報文,主要為數據包設置標記

raw關閉nat表上啟用的連接追蹤機制,確定是否對該數據包進行狀態跟蹤

 

各個鏈的包含的功能、實現的位置:數據包  從左往右    一個表一個表流動

 

 

 

 

 

 

 

3.)總結:iptables 四表五鏈 規則匹配 編寫順序

1.四表:Raw(跟蹤)、mangle標記)、nat(修改)、fliter(過濾)

2.五鏈:PREROUTINGINPUTOUTPUTFORWORDPOSTROUTING

 

3.規則鏈之間的順序

流入:PREROUTING---> INPUT

流出:OUTPUT ---> POSTROUTING

轉發:PREROUTING ---> FORWARD ---> POSTROUTING

優先級次序:Raw(跟蹤)>mangle(標記)>nat(修改)>fliter(過濾)

 

4.規則匹配:

按順序從上往下依次檢查匹配即停止

找不到匹配規則,按照該鏈的默認策略處理。

 

5.鏈上規則編寫次序注意事項:

1.規則編寫的時候,同類(同一應用)規則,匹配范圍小的放在上面。

2.不同類規則,訪問頻率的放最上面

3.設置默認策略

4.盡量將可以由一條規則描述多個規則合並一條規則

 

4.)iptables命令的使用  啟動安裝  

rpm -qa | grep iptables檢查是否安裝:

yum -y  install  iptables  iptables-services      --安裝軟件安裝:

 

 

 

 

firewall轉為iptables:

systemctl  unmask  iptables---解覆蓋,即顯現iptables

systemctl  mask  firewalld ---覆蓋firewalld

 

systemctl  stop  firewalld

systemctl  disable  firewalld

 

systemctl  restart  iptables

systemctl  enable  iptables

 

iptables -v -L -n --line-numbers       --查看默認filter表上 所有鏈的信息 

1.)iptables格式規則:

Iptbales   [-t表名]   選項   [鏈名]  [條件]   [-j控制類型]

在什么表的 什么鏈  的哪個地方(選項)   添加一條防火牆規則(條件)  滿足條件后執行 J

注意!

1.不指定表名時,默認指定filter

2.不指定鏈名時,默認指定表內的所有鏈

3.除非設置鏈默認策略否則必須指定匹配條

4.選項、鏈名、控制類型使用大寫字母 其余均為小寫

2.)  4個功能表:過濾,地址轉換,標記,跟蹤

filter對數據包進行過濾,確認是否放行該數據包。

nat(network address translation)  網絡地址轉換(修改數據包中的源、目標IP地址或端口。)

Mangle拆解報文,做出修改,封裝報文,主要為數據包設置標記

raw關閉nat表上啟用的連接追蹤機制,確定是否對該數據包進行狀態跟蹤

3.)  5種規則鏈 (默認)   分類依據 對數據包處理的不同時間

1、在進行路由選擇前處理數據包--PREROUTING     路由選擇前執行的規則 判別路由之前(NAT)

2、處理入站數據包--INPUT            處理發給本機的數據包

3:處理出站數據包  --OUTPUT   本機發出去的數據包

4、處理轉發數據包--FORWORD        本機相當於轉發路由,

5、在進行路由選擇后處理數據包--POSTROUTING    路由判斷選擇之后,處理數據包

 

 

5.)查看表 規則       -L  -n  -v  --line-numbers  

查看規則

-L:列出指定鏈上的所有規則,后面緊查看的鏈

-n:數字格式顯示地址和端口號(不反解)

-v:  顯示詳細信息         -vv:更加詳細信息

--line-numbers          行號

 

iptables -v -L -n --line-numbers       --查看默認filter表上 所有鏈的信息

iptables -t nat -n -L PREROUTING         --查看 nat表上的 PREROUTING鏈信

 

 

 

 

因為沒有配置,所有為空

 

 

 

 

列表中的內容chain

police ACCEPT默認允許的意思

target控制類型

port端口類型

source源地址

destination目的地址

6.)鏈管理 設置遠程登錄  -F清除規則 -Z 重新計數-P鏈默認規則

-F 清除所有規則   

-P(大寫)為指定的鏈設置  默認規則,

-Z     棧內流量數據重新計數

 

iptables -t filter -P INPUT DROP         -- -P設置默認類型為DROP直接丟棄

iptables  -L -n  -v --line-numbers       --查看所有防火牆

iptables  -P  INPUT   ACCEPT        --設置可以遠程登錄

 

 

 

 

 

這樣可以遠程登錄

 

 

 

 

 

7..)鏈規則管理 -A末尾追加 -I 開頭插入 -D刪除 -R替換

-A 在鏈的末尾追加一條規則

-I  在鏈的開頭或指定行插入一條規則

(在鏈名后面(例如INPUT)可以添入數字代表把寫入的規則插入第幾行。省略默認為第一行)

-D 刪除指定鏈上的指定規則

-R 修改或替換指定鏈上的指定規則

1.在末尾增加一條規則  -A

iptables -A INPUT -s 192.168.10.100 -d 192.168.10.200 -j ACCEPT

末尾增加規則   收到來自10.100的數據包  發到10.200  做ACCEPT接受的動作

 

 

 

 

在增加一個  不接受DROP

iptables -A INPUT -s 192.168.10.111 -d 192.168.10.200 -j DROP

 

 

 

 

 

2.刪除一條 規則  -D

iptables -D INPUT 2      刪除INPUT的第二條規則

 

 

 

 

 

 

3.更改一條規則

iptables -R INPUT 1 -s 192.168.10.0/24 -d 192.168.10.200 -j ACCEPT

   更改什么鏈第幾條          

 

 

 

 

例如下列例子:

iptables -t filter -P FORWARD DROP(要把轉發關掉保證安全)

iptables -t filter -n -L --line-numbers(查看filter表的相關規則內容)

iptables -L FORWARD -n -v(查看指定規則鏈的內容)

iptables -P OUTPUT ACCEPT(一般默認出站不過濾)

iptables -D INPUT 1(刪除INPUT鏈的第一條規則)

 

一般情況下 設置默認規則INPUT和FORWARD要設置成DROPOUTPUT一般設置為ACCEPT

8.)數據包的常見控制類型

ACCEPT:允許通過

DROP直接丟棄, 給出任何回應

REJECT:拒絕通過 必要時會給出提示

REDIRECT端口 重定向

LOG記錄日志信息 然后傳給下條規則 繼續匹配

DNAT目標地址轉換

SNAT源地址轉換

MASQUERADE地址偽裝

 

例如:

iptables -t filter -I INPUT -d 192.168.22.13 -p icmp -j DROP

設置規則 來自filter表的 input鏈  到目的地址22.13  -p端口協議為icmp  DROP不通過

 

iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT

設置規則 來自filter表的 input鏈 端口為22的  則通過

 

 

 

 

iptables -A INPUT -p tcp --sport 22 -j ACCEPT

設置規則 filter表的 input鏈插入一個規則  端口協議為tcp  來源地址端口為22的包 通過

9.)匹配條件  ! -s d p i o 取非  ping

-s  IP|NETADDR 數據包的來源地址ip或網段  檢查報文中源IP是否屬於此處指定的地址范圍

-d  IP|NETADDR  到目標ip或網段         檢查報文中目標IP是否屬於此處指定的地址范圍

-p  {tcp|udp|icmp}支持三種協議      檢查報文中的協議,IP首部中protocols所標識的協議

-i  {eth0/eth1/ens33} 從那個網卡進來    僅用於PREROUTING,INTPUT,FORWARD鏈

-o {eth0/eth1/ens33} 從那個網卡出去 僅用於FORWARD,OUTPUT,POSTROUTING鏈

 

例如:

1.使客戶能連接22端口   input連接22     output回復

iptables -I INPUT -s 192.168.10.1 -d 192.168.10.200 -p tcp --dport 22 -j ACCEPT

I插入filter表的input鏈 來自10.1 到10.200 的ip  協議為tcp   目的端口為22  則通過

iptables -I OUTPUT -s 192.168.10.200 -d 192.168.10.1 -p tcp --dport 22 -j ACCEPT

-I插入 filter表的output鏈 來自10.200 到10.1 的ip  協議為tcp  目的端口為22  則通過

 

 

 

 

 

2. 10.100  和10.150  可ping

iptables -A INPUT -s 192.168.10.100 -d 192.168.10.150 -p icmp -j ACCEPT

input表 最后插入規則  來源10.100 目的10.150  協議為icmp  通過     

iptables -A OUTPUT -s 192.168.10.150 -d 192.168.10.100 -p icmp -j ACCEPT

input表 最后插入規則  來源10.150 目的10.100  協議為icmp  通過     

 

 

 

 

 

3.  -R 修改第一個

iptables -R INPUT 1 -s 192.168.10.1 -d 192.168.10.200 -p tcp --dport 22 -i ens33 -j ACCEPT     

R修改filter表的input鏈 來自10.1 到10.200 的ip  協議為tcp   目的端口為22 從ens33進來的  則通過

iptables -R OUTPUT 1 -s 192.168.10.200 -d 192.168.10.1 -p tcp --dport 22 -o ens33 -j ACCEPT  

R修改 filter表的output鏈 來自10.200 到10.1 的ip  協議為tcp  目的端口為22  從ens33進來的  則通過

 

 

 

 

 

4. 可以 ping    

iptables -A INPUT -p icmp -s 192.168.10.0/24 -d 192.168.10.20 -j ACCEPT

input鏈最后加入  來源10.0/24網段  目的ip 10.20   icmp的協議 即可ping 通   進

iptables -A OUTPUT -p icmp -s 192.168.10.20 -d 192.168.10.0/24 -j ACCEPT

output鏈最后加入  來源10.20  目的ip10.0/24  icmp協議     可通     

iptables -L     -查看

 

 

 

 

 

iptables -A INPUT -p icmp -s 192.168.10.20 -j ACCEPT

(允許192.168.10.20主機能Ping本機)

iptables -I INPUT -p tcp -d 192.168.22.13  -j ACCEPT

(允許所有主機能基於TCP訪問192.168.22.13)

10.針對網卡接口流入限制匹配 網卡-i ens33 進入  -o出去

-i ens33:流入ens33網卡的數據流  -o ens33:流出ens33網卡的數據流

例如:

iptables -A INPUT -d 192.168.10.0/24 -i ens33 -j ACCEPT  

在最后插入  ens33進來的 目標網段使10.0網段的  通過

(所有22網段主機數據流入本機ens33網卡數據流允許)

iptables -A OUTPUT -s 192.168.10.0/24 -o ens33 -j ACCEPT

(響應22網段主機數據流出本機ens33網卡數據流允許)

11.)擴展匹配    

iptables支持的擴展模塊

Centos7/usr/lib64/xtables/模塊xxx.so

centos-6 :/lib64/xtable/xxx.so

顯示擴展

必須指明擴展模塊

獲取擴展幫助文檔的方式:①centos-6   man iptables

           ②Centos-7   man iptables-extensions

1.例如 --d /s port PORT目標端口 源端口

--dport PORT  目標端口,可以單個端口,可以是連續的端口(不能離散)

--sport PORT   源端口,

例如:

iptables -I OUTPUT -s 192.168.10.20 -d 192.168.10.0/24 -p tcp --sport 22 -j ACCEPT   

output鏈第一條前增加 當數據包來源ip10.20  目的10.0網段  協議為tcp 端口22  則通過

iptables -I INPUT -s 192.168.10.0/24 -d 192.168.10.20 -p tcp --dport 22 -j ACCEPT    

input鏈第一條前增加 當數據包來源ip10.0網段  目的10.20  協議為tcp 端口22  則通過

iptables -L         查看            22端口為ssh協議

 

 

 

 

 

2.三次握手--tcp-flags LIST1 LIST2

--tcp-flags LIST1 LIST2(較少使用):SYN 連接請求 ACK 應答  RST 重置  PSH數據傳輸       

例如:

iptables -I INPUT -i eth0 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP

--syn:檢查TCP握手的第一次(其中只有SYN是1)

filter表 input鏈中 在第一行插入  如果有數據包從 eth0 接口來 協議為tcp 啟動隱式模塊

檢查tcp三次握手的這些標志SYN,RST,ACK 如果只要SYN=1 其他為0  則不通過

 

3.Ping   -p icmp --icmp-type 0/8

-p icmp --icmp-type  0/8

0:ping響應

8:請求應答, Ping請求

例如:

iptables -A INPUT -s 192.168.10.0/24 -p icmp --icmp-type 8 -j ACCEPT     請求

input鏈最后加入 來源網段10.0   ping請求 為8  則通過

iptables -A OUTPUT -s 192.168.10.10 -d 192.168.10.0/24 -p icmp --icmp-type 0 -j ACCEPT  

input鏈最后加入 來源10.10   目的網段10.0      ping請求 為0  則通過         回應

 

 

 

 

12.)顯示擴展  隱式擴展 -m(注意:如指明了協議可以省略-m)

1.)multiport  端口擴展:-m multiport --sports   s源端口   d目的端口

使用離散方式指明多個端口(最多15個)

多端口匹配: -m multiport --sports  端口列表

-m multiport --dports 目的 端口列表

例如:

iptables -I INPUT -s 192.168.10.0/24 -d 192.168.10.50 -m multiport -p tcp --dport 22,23,80 -j ACCEPT

Input鏈  源網段10.0  目的網段10.50  tcp協議  訪問 目的端口22.23.80  則通過      進

iptables -I OUTPUT -s 192.168.10.50 -d 192.168.10.0/24 -m multiport -p tcp --sport 22,23,80 -j ACCEPT

Output鏈  源網段10.50 目的網段10.0  tcp協議  訪問源端口22.23.80  則通過     

 

 

 

 

 

2.)iprange  連續ip擴展:指明連續的IP地址  -m iprange --src-range

-m iprange --src-range  指明連續的  IP地址范圍

-m iprange --dst-range  指明連續的  目的IP地址范圍

例如:

iptables -I INPUT -d 192.168.30.10 -p tcp -m multiport --dport 22:25,80,514 -m iprange --src-range 192.168.30.11-192.168.30.30 -j ACCEPT

Input鏈  目的地址30.10 協議為tcp   源端口為22.25.80.514    來源地址范圍30.11-30滿足則通過

iptables -I OUTPUT -s 192.168.30.10 -p tcp -m multiport --sport 22:25,80,514 -m iprange --dst-range 192.168.30.11-192.168.30.30 -j ACCEPT

Output鏈  目的地址30.10 協議為tcp   目標端口為22.25.80.514    目的地址范圍30.11-30滿足則通過

 

 

 

 

iptables -I INPUT -d 192.168.10.10 -p tcp -m multiport --dport 22:25,80,514 -m iprange --src-range 192.168.10.11-192.168.10.254 -j ACCEPT

iptables -I OUTPUT -d 192.168.10.10 -p tcp -m multiport --sport 22:25,80,514 -m iprange --dst-range 192.168.10.11-192.168.10.254 -j ACCEPT

3.)time     日期時間擴展:根據時間進行匹配  -m time --timestart

--datestart    日期開始

--datestop    日期結束

--timestart時間開始 時分

--timestop時間結束 時分

iptables -I INPUT -s 192.168.10.100 -d 192.168.10.200 -m time --timestart 15:30 --timestop 15:50 -m multiport -p tcp --dport 22,23,80 -j ACCEP      

來源於10.100  目的ip10.200 數據包在15.30-50發過來  協議tcp 目的端口22.23.80 則通過

iptables -I OUTPUT -s 192.168.10.200 -d 192.168.10.100 -m time --timestart 15:30 --timestop 15:50 -m multiport -p tcp --sport 22,23,80 -j ACCEPT

來源於10.200  目的ip10.100 數據包在15.30-50發過來  協議tcp  源端口22.23.80  則通過

iptables -L -n -v

 

 

 

 

4.)string    字符串模塊擴展:只能對明文編碼協議生效  根據7層字符進行匹配

--algo {bm|kmp}:指定字符串匹配的算法

[!] --string 參數

[!] --hex-string 參數

例如:

iptables -I INPUT -d 192.168.10.20 -m multiport -m string --algo kmp --string "kkk" -p tcp --dport 80 -j ACCEPT

Input鏈  目的ip10.20 啟動multiport模塊 目的端口80 啟動匹配字符串模塊  匹配kkk通過

iptables -I OUTPUT -d 192.168.10.20 -m multiport -m string --algo kmp --string "kkk" -p tcp --sport 80 -j ACCEPT

Input鏈 目的ip 10.20 啟動multiport模塊  源端口80 啟動匹配字符串模塊  匹配kkk通過

Iptables -L -v -n         --查看信息

 

 

 

 

 

 

5.)connlimit 限制請求數量擴展:限制單個IP並發請求數量進行匹配過濾

--connlimit-upto 請求數小於等於閾值時執行操作(centos-6不支持)

--connlimit-above: 請求數大於3時執行操作

例如:

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT

(限制ssh並發連接最多3個)

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-upto 3 -j ACCEPT

(限制ssh並發連接最多3個)

 

 

 

 

6.)limit     速率模塊擴展:對響應  速率 進行過濾匹配

--limit-burst:空閑峰值數量

--limit #/minute:單位時間的速率

例如:

iptables -I INPUT -d 192.168.10.20 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT

input鏈 目的ip10.20  ping模塊 8進  啟動limit 速率模塊 空閑峰值為5  一分鍾30的頻率 允許通過

iptables -I OUTPUT -s 192.168.10.20 -p icmp --icmp-type 0 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT

Output鏈 源ip10.20  ping模塊 0出  啟動limit 速率模塊 空閑峰值為5  一分鍾30的頻率 允許通過

 

 

 

 

7.)state     連接狀態擴展:檢查連接的狀態-m state --state ESTABLISHED,RELATED

所有的可追蹤的連接狀態:

NEW:與任何連接 無關的(新來的)

ESTABLISHD:響應請求  或已建立連接的

RELATED:與已有連接 有相關性的

INVALID:不被允許的類型

UNTRACKED:沒有被跟蹤的(不常用的)

例如:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

 

 

 

13.) iptables規則保存  和重載

iptables的配置文件:/etc/sysconfig/iptables-config

1.保存在某個文本中,在需要的時候進行重載規則

iptables-save > /root/iptabls-rule      將規則保存至/root/iptabls-rule

cat  /root/iptabls-rule

iptables -F

iptables -L

iptables-restore < /root/iptabls-rule    重新加載

 

 

 

 

 

 

 

2.永久修改和保存    

service iptables save(centos-6)  (相當於iptables-save > /etc/sysconfig/iptables)

 

service iptables save

service iptables restart  生效

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM