Linux 中的iptables 規則策略


Linux 的防火牆

 

防火牆的分類:

 

防火牆的分類

作用

優勢

劣勢

硬件防火牆

對數據的傳輸做限制,消除安全隱患。數據過濾

性能高

成本高

軟件防火牆

通過策略規范數據訪問連接,提高安全。數據過濾

防火牆是開源的,費用低。

性能不如硬件防火牆,

 

數據過濾:

數據過濾: 通過防火牆的策略對數據進行規范,如下圖:防火牆允許1 2客戶機訪問服務器,3不能訪問服務器,這一過程叫數據過濾

 

數據過濾:

出方向:服務器允許那些數據可以發送出去

入方向:那些數據可以進入服務器

穿    1.0網段進入網卡1通過網卡2轉發出去訪問2.0網段,中間服務充當路由器轉發的功能。

 

 

 

 

 

 

數據封裝:

網絡為了保證數據的正確傳輸,任何數據在外傳輸都會進行封裝。數據到達目的主機,會進行解封裝,

 

Osi七層模型

 

 

 

 

 

端口號是依賴單個IP地址存在的,如果有一個ip只能啟65535端口,兩個ip65535*2端口。    端口號:0-65535   

源端口號一般情況 >1024

數據封裝的過程:

應用層:游覽器產生一個http請求 確保數據能到達目的地---傳輸層

傳輸層:進行封裝、添加TCP/UDP報頭 TCP/UDP報頭:源端口號,目的端口號)

(傳輸層根據應用層協議確定添加的報頭) 到達網絡層

網絡層:對傳輸層的添加IP報頭(源ip,目的ip)    (只知道大致的地址)

數據鏈路層:對網絡層的數據添加MAC幀頭(源mac地址、目的mac地址)  (mac唯一確定具體的地址)

 

 

 

解封裝的過程:

源主機給目的主機發送數據

目的數據收到源主機的的數據進行解封裝

解封MAC幀頭,確認MAC的目的地址是不是目的主機的MAC

是接續解封裝

否丟棄數據包

解封IP 報頭,確認IP報頭的目的ip是目的主機的IP地址

是繼續解封裝

否丟棄數據包

解封TCP/IP 檢測目的端口號由目的主機對應的端口號的進程去響應解決請求

沒有對應的目的端口會丟棄數據包

 

 

解封裝后收到請求后,目的主機會響應源主機的請求。響應請求的過程也是數據封裝

 

 

 

 

 

 

 

linux防火牆    四表五鏈

內核模塊:netfilter

實現數據過濾:

入方向

出方向

轉發

 

Linux防火牆有鈎子函數

Input 截獲進入服務器的數據

Forward 截獲由服務器轉發的數據

Output 截獲由服務器發出的數據

Prerouting 截獲路由前的操作

Postrouting 截獲路由之后的操作

 

根據鈎子函數創建防火牆規則

 

Linux 存儲防火牆規則在鏈

 

五個鈎子函數對應的五個鏈(chain):用來存儲防火牆規則

INPUT

FORWARD

OUTPUT

PREROUTING

POSTROUTING

 

 

4張表

Filter 實現數據過濾

Nat 實現網絡地址轉換

Mangle 為數據打標記(一般通過數字標識)

Raw 數據跟蹤

 

五條鏈根據防火牆實現的規則不同,被分配在四張表里面

Filter 實現數據過濾

INPUT FORWARD OUTPUT 根據需求寫對應的鏈

Nat 實現網絡地址轉換

OUTPUT PREROUTING POSTROUTING      實現IP報頭源ip和目的ip的轉換

Mangle 為數據打標記(一般通過數字標識)

INPUT FORWARD OUTPUT PREROUTING POSTROUTING 都可以打標簽

Raw 數據跟蹤

OUTPUT (對發出去的數據跟蹤)   prerouting(路由之前的數據跟蹤)

 

 

防火牆命令: iptables     firewalld 7.0版本之后)

 

 

防火牆規則匹配的順序

默認自上而下匹配,當匹配到最先匹配的規則。后面的防火牆規則不執行。

在設置防火牆規則要將經常匹配的規則寫在上面。

防火牆順序不規范會拖慢服務器的訪問速度

防火情有默認規則,手寫的規則匹配不到數據,會匹配默認規則

 

 

 

 

 

 

 

 

 

iptables 的使用方法:

Iptables  子命令  鏈名   規則

 

 

Iptables  查看

Iptables  -L  查看防火牆規則  默認查看filter表的規則

[root@44 ~]# iptables -L

Chain INPUT (policy ACCEPT)    ACCEPT 默認規則允許

 

Iptables  -t   表名    查看指定的表規則信息

 

[root@44 ~]# iptables -t nat -L

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination         

 

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

 

Chain POSTROUTING (policy ACCEPT)

 

 

Iptables -nL   規則用的服務顯示成端口號

 

Iptables --line-numbers    顯示防火牆規則帶有行號

 

Iptables  -v     顯示規則的計數器,數據包個數,大小。只要規則匹配到數據>0 如果一直為0考慮檢測防火牆規則是否寫錯

 

 

Iptables 的刪除

Iptables -F   清空防火牆規則,默認清除filter

Iptables  -t  表名  -F     清除指定表名的防火牆

Iptables -D 鏈 【序號】 刪除指定的iptables

 

iptables 的添加

Iptables   -A  鏈    在鏈追加規則

Iptables   -I    插入規則,默認插入到最上         iptables -I chain 【序列】   指定位置插入

 

 

防火牆的規則組成:

匹配的數據條件

操作行為

 

操作行為:

-j < 操作行為>     只針對數據過濾的表  filter

ACCEPT 允許

DROP 丟棄 客戶端請求進不到服務器

REJECT  拒絕 客戶端進入服務器,服務器不響應

 

匹配數據的條件:

IP 、目的IP、 源端口 、目的端口 、 協議    (五元組)

{-s }     { -d }   {   -p 協議{tcp|udp|icmp} --sport --dport  }

-s IP地址 : 可匹配ip地址、ip的網段

-s  192.168.20.1    配置源ip -s  192.168.20.1 匹配源ip不是    

-s  192.16.20.0/24

-p tcp --dport 22  匹配數據包目的端口號22 -p tcp --dport 22:100  表示連續的范圍

-s 1.1.1.1  -d 2.2.2.2 -p --dport 80    1.1.1.1 訪問2.2.2.2 80端口

-d 2.2.2.2 -p tcp --dport 80 匹配所有的客戶端訪問2.2.2.280 端口的請求

 

 

-i 匹配網卡名 從網卡進來的數據

-o 匹配網卡名 從網卡發出的數據

 

-P I許改鏈的默認狀態

 

-p icmp  --icmp-type 8     ping請求

--icmp-type 0 ping回應

 

 

 

 

事例: 拒絕ssh

測試45 訪問192.168.20.139是可以ssh

[root@45 ~]# ssh 192.168.20.139

root@192.168.20.139's password:

在進入的數據中設置拒絕源地址是192.168.20.140通過ssh22端口訪問192.168.20.139

[root@44 ~]# iptables -A INPUT -s 192.168.20.140 -d 192.168.20.139 -p tcp --dport 22 -j REJECT

[root@45 ~]# ssh 192.168.20.139

ssh: connect to host 192.168.20.139 port 22: Connection refused

 

拒絕http

通過45訪問44httpdweb

[root@45 ~]# curl 192.168.20.139

web iptable

拒絕所有訪問44httpdweb服務

[root@44 ~]# iptables -A INPUT -d 192.168.20.139 -p tcp --dport 80 -j REJECT

[root@46 ~]# curl 192.168.20.139

curl: (7) Failed connect to 192.168.20.139:80; Connection refused

 

查看iptables的配置

[root@44 ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination         

1    REJECT     tcp  --  192.168.20.140       192.168.20.139       tcp dpt:22 reject-with icmp-port-unreachable

2    REJECT     tcp  --  0.0.0.0/0            192.168.20.139       tcp dpt:80 reject

 

拒絕任何ipping 44

[root@45 ~]# ping -c1 192.168.20.139

PING 192.168.20.139 (192.168.20.139) 56(84) bytes of data.

64 bytes from 192.168.20.139: icmp_seq=1 ttl=64 time=0.968 ms

 

[root@44 ~]# iptables -A INPUT -d 192.168.20.139 -p icmp -j REJECT

 

[root@45 ~]# ping -c1 192.168.20.139

PING 192.168.20.139 (192.168.20.139) 56(84) bytes of data.

From 192.168.20.139 icmp_seq=1 Destination Port Unreachable

 

 

 

保存iptables規則

[root@44 ~]# iptables-save > 1.txt

恢復規則

[root@44 ~]# iptables-restore < 1.txt

 

 

修改規則:

Iptables -R 鏈  修改信息

 

 

-m 補充模塊

Iptables  -m  模塊名   -- help 查模塊的幫助信息

Multiport  模塊:   支持多個端口,多個端口用,隔開

EG:

[root@44 ~]# iptables -A INPUT -s 192.168.20.140 -p tcp -m multiport --dport 22,80 -j REJECT

 

Iprange 模塊 :    支持多個IP地址

[root@44 ~]# iptables -A INPUT -m iprange --src-range 192.168.20.140 192.168.20.141  -p tcp -j REJECT

 

 

 

 

Iptables 實現數據過濾:

基本條件: (五元組)

ip、目的ip 、源地址、目的地址  、 協議

連接狀態進行的數據過濾:

-m  state-state <狀態>

 

狀態值: NEW   首次訪問

ESTABLISHED    完成    服務的后續訪問、服務器的響應

RELATED   相關聯

 

 

 

 

 

 

Iptables---NAT表的使用

Nat  -----網絡地址轉換

主要實現更換換源IP 與目的IP

 

主要在PREROUTING路由前 和 POSTROUTING 路后 寫規則

路由前:主機收到一個數據在主機對數據操作路由之前發生的事情

路由后:主機收到一個數據對數據進行了路由的查找之后的操作

 

-j <操作>

-j  SNAT 轉換數據的源IP地址

-j  MASQUERADE 轉換數據里面的源IP地址

 

-j  DNAT 轉換數據里的目的IP地址

 

NAT轉化的原理:

源主機訪問目的主機

snat可以讓本地ip地址偽裝成其他機器的ip地址,或者是公網IP,

源主機會封裝自己數據請求{ip 、目的ip 、請求}

數據請求到達NAT上,NAT會查路由確認能不能連接到目的主機IP

    (1) 如果查看路由表不能,會返回目的ip不可達

    (2) 如果查看自己的路由表能,會把源ip轉換成目的ip網段的ip(同時NAT會記錄這條NAT轉換的數據){轉換的網絡:1單獨公網ip 2.NAT設備上現有的IP }          

 通過轉換后的源IP數據請求會把數據請求發送到目的IP

目的IP對源IP發出的請求做出響應

 

 

 

 

 

-s  SNAT  <公網IP>    手動指定單獨的公網ip

-s  MASQUERADE      會自動把源ip轉換成NAT上自身的公網ip

 

 

-s  DNAT   目的ip轉換     路由前

dnat是用來做目的網絡地址轉換的,就是重寫包的目的IP地址。

發布服務:把服務從私有地址發布到公網上

  1. web的私有ip換為固定的公網ip
  2. 互聯網用戶會發送請求到NAT
  3. NAT接受請求會把目的ip 轉化為web的私有ip
  4. NAT查看路由,把請求發送到轉換后的目的IP

 

 

 

 

 

 

實現:

 

[root@44 ~]# iptables -t nat -A POSTROUTING -s 192.168.20.141 -d 192.168.20.139 -p tcp --dport 80 -j SNAT --to-source 192.168.20.139:8888

 

 

 

Iptables ----mangle表實現數據標記

 

數據打標記的目的:為了把想要的數據區分,分類標記出來。

Mangle 一般在路由前PREROUTING打標記。

 

操作命令事例:

把相同的數據打成一個標記,對同一標記的數據做相同的處理

將對目的主機執行icmp的數據打標記為88

[root@44 ~]# iptables -t mangle -A PREROUTING -d 192.168.20.139 -p icmp -j MARK --set-mark 88

打標記對數據區分分類,並不改動數據本身

[root@45 ~]# ping 192.168.20.139

PING 192.168.20.139 (192.168.20.139) 56(84) bytes of data.

64 bytes from 192.168.20.139: icmp_seq=1 ttl=64 time=2.03 ms

64 bytes from 192.168.20.139: icmp_seq=2 ttl=64 time=0.418 ms

64 bytes from 192.168.20.139: icmp_seq=3 ttl=64 time=0.545 ms

把標記名為88的蘇數據丟棄

[root@44 ~]# iptables -A INPUT -m mark --mark 88 -j DROP

[root@45 ~]# ping 192.168.20.139

PING 192.168.20.139 (192.168.20.139) 56(84) bytes of data.

 

 

 

 

Iptables----forward鏈實現數據過濾

 

[root@44 juben]# yum install iptables-services.x86_64

導出防火牆規則,做保存

[root@44 juben]# iptables-save > /etc/sysconfig/iptables


免責聲明!

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



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