日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux系统的iptables防火墙、SNAT、DNAT原理与设置规则

發布時間:2024/2/28 linux 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统的iptables防火墙、SNAT、DNAT原理与设置规则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux的iptables防火墻、SNAT、DNAT

  • 一、iptables概述
    • 1.netfilter/iptables關系
    • 2.四表五鏈
      • 四表
      • 五鏈
      • 規則表之間的優先順序
      • 規則鏈之間的匹配順序
  • 二、iptables的安裝
    • iptables防火墻的配置方法
      • iptables命令行配置方法
      • 注意事項
      • 常用的控制類型
      • 常用的管理選項
  • 三、iptables的使用方法
    • 1.添加新的規則
    • 2.查看規則列表
    • 3.設置默認策略
    • 4.刪除規則
    • 5.清空規則
  • 四、規則的匹配
    • 1.通用匹配
    • 2.隱含匹配
    • 3.顯式匹配
  • 五、SNAT原理與應用
    • 1.SNAT 應用環境
    • 2.SNAT原理
    • 3.SNAT轉換前提條件
    • 4.打開SNAT
      • 臨時打開
      • 永久打開
    • 5.SNAT轉換
      • 固定的公網IP地址
      • 非固定的公網IP地址(共享動態IP地址)
  • 六、DNAT原理與應用
    • 1.DNAT 應用環境
    • 2.DNAT原理
    • 3.DNAT轉換前提條件
    • 4.打開DNAT
    • 5.DNAT轉換
      • 發布內網的Web服務
      • 發布時修改目標端口
  • 七、防火墻規則的備份和還原
    • 1.導出(備份)所有表的規則
    • 2.導入(還原)規則
    • 3.將iptables規則文件保存在 /etc/sysconfig/iptables 中,iptables服務啟動時會自動還原規則

一、iptables概述

Linux系統的防火墻:IP信息包過濾系統,它實際上由兩個組件netfilter和iptables組成。
主要工作在網絡層,針對IP數據包。體現在對包內的IP地址、端口等信息的處理上。

1.netfilter/iptables關系

  • netfilter:netfilter屬于“內核態”(Kernel Space,又稱為內核空間)的防火墻功能體系。
    是內核的一部分,由一些數據包過濾表組成,這些表包含內核用來控制數據包過濾處理的規則集。

  • iptables:iptables屬于“用戶態”(User Space,又稱為用戶空間)的防火墻管理體系。
    是一種用來管理Linux防火墻的命令程序,它使插入、修改和刪除數據包過濾表中的規則變得容易,通常位于/sbin/iptables目錄下。

  • netfilter/iptables后期簡稱為iptables。iptables是基于內核的防火墻,其中內置了raw、mangle、nat和 filter 四個規則表。表中所有規則配置后,立即生效,不需要重啟服務。

2.四表五鏈

  • 規則表的作用:容納各種規則鏈
  • 規則鏈的作用:容納各種防火墻規則
  • 總結:表里有鏈,鏈里有規則

四表

  • raw表:確定是否對該數據包進行狀態跟蹤。包含兩個規則鏈,OUTPUT、PREROUTING。
  • mangle表:修改數據包內容,用來做流量整形的,給數據包設置標記。包含五個規則鏈,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
  • nat表:負責網絡地址轉換,用來修改數據包中的源、目標IP地址或端口。包含三個規則鏈,OUTPUT、PREROUTING、POSTROUTING。
  • filter表:負責過濾數據包,確定是否放行該數據包(過濾)。包含三個規則鏈,INPUT、FORWARD、OUTPUT。

注:在 iptables 的四個規則表中,mangle 表和 raw 表的應用相對較少。

五鏈

  • INPUT:處理入站數據包,匹配目標IP為本機的數據包。
  • OUTPUT:處理出站數據包,一般不在此鏈上做配置。
  • FORWARD:處理轉發數據包,匹配流經本機的數據包。
  • PREROUTING鏈:在進行路由選擇前處理數據包,用來修改目的地址,用來做DNAT。相當于把內網中的80端口映射到路由器外網端口上。
  • POSTROUTING鏈:在進行路由選擇后處理數據包,用來修改源地址,用來做SNAT。相當于內網通過路由器NAT轉換功能實現內網主機通過一個公網IP地址上網。

規則表之間的優先順序

數據包到達防火墻時,規則表之間的優先順序:raw > mangle > nat > filter

規則鏈之間的匹配順序

主機型防火墻:

  • 入站數據(來自外界的數據包,且目標地址是防火墻本機)
    PREROUTING --> INPUT --> 本機的應用程序
  • 出站數據(從防火墻本機向外部地址發送的數據包)
    本機的應用程序 --> OUTPUT --> POSTROUTING

網絡型防火墻:

  • 轉發數據(需要經過防火墻轉發的數據包)
    PREROUTING --> FORWARD --> POSTROUTING

規則鏈內的匹配順序:

  • 自上向下按順序依次進行檢查,找到相匹配的規則即停止(LOG策略例外,表示記錄相關日志)
    若在該鏈內找不到相匹配的規則,則按該鏈的默認策略處理(未修改的狀況下,默認策略為允許)

二、iptables的安裝

  • CentOS 7默認使用firewalld防火墻,沒有安裝 iptables,若想使用iptables防火墻。必須先關閉firewalld防火墻,再安裝 iptables
#關閉防火墻 systemctl stop firewalld.service systemctl disable firewalld.service #安裝并開啟iptables服務 yum -y install iptables iptables-services systemctl start iptables.service

iptables防火墻的配置方法

iptables命令行配置方法

命令格式:

iptables [-t 表名] 管理選項 [鏈名] [匹配條件] [-j 控制類型]

注意事項

  • 不指定表名時,默認指filter表
  • 不指定鏈名時,默認指表內的所有鏈
  • 除非設置鏈的默認策略,否則必須指定匹配條件
  • 選項、鏈名、控制類型使用大寫字母,其余均為小寫

常用的控制類型

控制類型作用
ACCEPT允許數據包通過。
DROP直接丟棄數據包,不給出任何回應信息。
REJECT拒絕數據包通過,會給數據發送端一個響應信息。
SNAT修改數據包的源地址。
DNAT修改數據包的目的地址。
MASQUERADE偽裝成一個非固定公網IP地址。
LOG在/var/log/messages文件中記錄日志信息,然后將數據包傳遞給下一條規則。
LOG只是一種輔助動作,并沒有真正處理數據包。

常用的管理選項

-A :在指定鏈的末尾追加(--append)一條新的規則 -I :在指定鏈的開頭插入(--insert)一條新的規則,未指定序號時默認作為第一條規則 -R :修改、替換(--replace)指定鏈中的某一條規則,可指定規則序號或具體內容 -P :設置指定鏈的默認策略(--policy) -D :刪除(--delete)指定鏈中的某一條規則,可指定規則序號或具體內容 -F :清空(--flush)指定鏈中的所有規則,若未指定鏈名,則清空表中的所有鏈 -L :列出(--list)指定鏈中所有的規則,若未指定鏈名,則列出表中的所有鏈 -n :使用數字形式(--numeric)顯示輸出結果,如顯示 IP 地址而不是主機名 -v :顯示詳細信息,包括每條規則的匹配包數量和匹配字節數 --line-numbers:查看規則時,顯示規則的序號

三、iptables的使用方法

1.添加新的規則

舉例: iptables -t filter -A INPUT -p icmp -j REJECT iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT

2.查看規則列表

iptables [-t 表名] -n -L [鏈名] [--line-numbers] 或 iptables -[vn]L #注意:不可以合寫為 -Ln舉例: iptables -n -L --line-numbers

3.設置默認策略

iptables [-t 表名] -P <鏈名> <控制類型>iptables -P INPUT DROP iptables -P FORWARD DROP #一般在生產環境中設置網絡型防火墻、主機型防火墻時都要設置默認規則為DROP,并設置白名單

4.刪除規則

舉例: iptables -D INPUT 2 iptables -t filter -D INPUT -p icmp -j REJECT注意: 1.若規則列表中有多條相同的規則時,按內容匹配只刪除的序號最小的一條 2.按號碼匹配刪除時,確保規則號碼小于等于已有規則數,否則報錯 3.按內容匹配刪數時,確保規則存在,否則報錯

5.清空規則

iptables [-t 表名] -F [鏈名] iptables -F INPUT iptables -F注意: 1.-F 僅僅是清空鏈中的規則,并不影響 -P 設置的默認規則,默認規則需要手動進行修改 2.-P 設置了DROP后,使用 -F 一定要小心! #防止把允許遠程連接的相關規則清除后導致無法遠程連接主機,此情況如果沒有保存規則可重啟主機解決 3.如果不寫表名和鏈名,默認清空filter表中所有鏈里的所有規則

四、規則的匹配

1.通用匹配

可直接使用,不依賴于其他條件或擴展,包括網絡協議、IP地址、網絡接口等條件。

協議匹配:-p 協議名 地址匹配:-s 源地址、-d 目的地址 #可以是IP、網段、域名、空(任何地址) 接口匹配:-i 入站網卡、-o 出站網卡 舉例: iptables -A FORWARD ! -p icmp -j ACCEPT iptables -A INPUT -s 192.168.80.11 -j DROP iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP

2.隱含匹配

要求以特定的協議匹配作為前提,包括端口、TCP標記、ICMP類型等條件

  • 端口匹配:–sport 源端口、–dport 目的端口
#可以是個別端口、端口范圍 --sport 1000 匹配源端口是1000的數據包 --sport 1000:3000 匹配源端口是1000-3000的數據包 --sport :3000 匹配源端口是3000及以下的數據包 --sport 1000: 匹配源端口是1000及以上的數據包 注意:--sport 和 --dport 必須配合 -p <協議類型> 使用 舉例: iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT iptables -I FORWARD -d 192.168.80.0/24 -p tcp --dport 24500:24600 -j DROP
  • TCP標記匹配
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT #丟棄SYN請求包,放行其他包
  • ICMP類型匹配:–icmp-type ICMP類型
#可以是字符串、數字代碼 “Echo-Request”(代碼為 8)表示 請求 “Echo-Reply”(代碼為 0)表示 回顯 “Destination-Unreachable”(代碼為 3)表示 目標不可達 關于其它可用的 ICMP 協議類型,可以執行“iptables -p icmp -h”命令,查看幫助信息 iptables -A INPUT -p icmp --icmp-type 8 -j DROP #禁止其它主機ping 本機 iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #允許本機ping 其它主機iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #當本機ping 不通其它主機時提示目標不可達 #此時其它主機需要配置關于icmp協議的控制類型為 REJECT iptables -A INPUT -p icmp -j REJECT

3.顯式匹配

  • 要求以“-m 擴展模塊”的形式明確指出類型,包括多端口、MAC地址、IP范圍、數據包狀態等條件

多端口匹配

多端口匹配:-m multiport --sport 源端口列表-m multiport --dport 目的端口列表 舉例: iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT

MAC地址匹配

MAC地址匹配:-m mac --mac-source MAC地址 iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #禁止來自某MAC 地址的數據包通過本機轉發

IP范圍匹配

IP范圍匹配:-m iprange --src-range IP范圍 iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP #禁止轉發源地址位于192.168.80.100-192.168.80.200的udp數據包

狀態匹配

狀態匹配:-m state --state 連接狀態 常見的連接狀態: NEW :與任何連接無關的,還沒開始連接 ESTABLISHED :響應請求或者已建立連接的,連接態 RELATED :與已有連接有相關性的(如FTP 主被動模式的數據連接),衍生態,一般與ESTABLISHED 配合使用 INVALID :不能被識別屬于哪個連接或沒有任何狀態iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP #禁止轉發與正常 TCP 連接無關的非--syn 請求數據包(如偽造的網絡攻擊數據包) 舉例: iptables -I INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #對進來的包的狀態進行檢測。已經建立tcp連接的包以及該連接相關的包允許通過。 #比如我和你做生意,我們談成了生意,到了支付的時候,就可以直接調用與這筆生意相關的支付功能 iptables -P INPUT DROP

五、SNAT原理與應用

1.SNAT 應用環境

局域網主機共享單個公網IP地址接入Internet(私有IP不能在Internet中正常路由)

2.SNAT原理

修改數據包的源地址

3.SNAT轉換前提條件

  • 1.局域網各主機已正確設置IP地址、子網掩碼、默認網關地址
  • 2.Linux網關開啟IP路由轉發

4.打開SNAT

臨時打開

echo 1 > /proc/sys/net/ipv4/ip_forward 或 sysctl -w net.ipv4.ip_forward=1

永久打開

vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #將此行寫入配置文件sysctl -p #讀取修改后的配置

5.SNAT轉換

固定的公網IP地址

iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to 12.0.0.1 或 iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10內網IP 出站 外網網卡 外網IP或地址池

非固定的公網IP地址(共享動態IP地址)

iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE

六、DNAT原理與應用

1.DNAT 應用環境

在Internet中發布位于局域網內的服務器

2.DNAT原理

修改數據包的目的地址

3.DNAT轉換前提條件

  • 1.局域網的服務器能夠訪問Internet
  • 2.網關的外網地址有正確的DNS解析記錄
  • 3.Linux網關開啟IP路由轉發

4.打開DNAT

vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p

5.DNAT轉換

發布內網的Web服務

#把從ens33進來的要訪問web服務的數據包目的地址轉換為 192.168.80.11 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.11 或 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11入站 外網網卡 外網IP 內網服務器IPiptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20

發布時修改目標端口

#發布局域網內部的OpenSSH服務器,外網主機需使用250端口進行連接 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22#在外網環境中使用SSH測試 ssh -p 250 root@12.0.0.1yum -y install net-tools #若沒有 ifconfig 命令可提前使用 yum 進行安裝 ifconfig ens33注意:使用DNAT時,同時還有配合SNAT使用,才能實現響應數據包的正確返回

七、防火墻規則的備份和還原

1.導出(備份)所有表的規則

iptables-save > /opt/ipt.txt

2.導入(還原)規則

iptables-restore < /opt/ipt.txt

3.將iptables規則文件保存在 /etc/sysconfig/iptables 中,iptables服務啟動時會自動還原規則

iptables-save > /etc/sysconfig/iptables systemctl stop iptables #停止iptables服務會清空掉所有表的規則 systemctl start iptables #啟動iptables服務會自動還原/etc/sysconfig/iptables 中的規則

總結

以上是生活随笔為你收集整理的Linux系统的iptables防火墙、SNAT、DNAT原理与设置规则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。