iptables防火墙与SNAT和DNAT
1、防火墻分類
硬件防火墻 ? 華為E9000 ----------------------------------------- 軟件防火墻 ? ? iptables ? Centos5/6 ? 系統默認防火墻 firewalld ? Centos7/8 ? 系統默認防火墻2、Linux防火墻基礎
netfilter
-
位于Linux內核中的包過濾功能體系
-
稱為Linux防火墻的”內核態“
iptables
-
位于/sbin/intables,用來管理防火墻規則的工具
-
稱為Linux防火墻的”用戶態“
netfilter/iptables關系:
-
netfilter:屬于”內核態“(Kernel Space,又稱為內核空間)的防火墻功能體系
是內核的一部分,由一些數據包過濾表組成,這些表包含內核用來控制數據包過濾處理的規則集
-
iptables:屬于”用戶態“(User space,又稱為用戶空間)的防火墻管理體系
是一種用來管理Linxu防火墻的命令程序,它使插入、修改和刪除數據包過濾表中的規則變得更容易,通常位于/sbin/iptabels文件下
-
netfilter/iptables后期簡稱為iptables。iptables是基于內核的防火墻,其中內置了raw、mangles、nat和filter四個規則表。表中所有規則配置后,立即生效,不需要重啟服務
?
3、四表五鏈
規則表的作用:容納各種規則鏈
規則鏈的作用:容納各種防火墻規則
3.1、四表
-
raw表:確定是否對該數據包進行狀態跟蹤。包括兩個規則鏈,OUTPUT、PREROUTING
-
mangle表:修改數據包內容,用來做流量整形的,給數據包設置標記。包括五個規則鏈,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
-
nat表:負責網絡地址轉換,用來修改數據包中的源、目標IP地址或端口。包括三個規則鏈,OUTPUT、PREROUTING、POSTROUTING
-
filter表:負責過濾數據包,確定是否放行該數據包(過濾)。包括三個規則鏈,INPUT、FORWARD、OUTPUT
優先順序
-
數據包到達防火墻時,規則表之間的優先順序raw>mangle>nat>filter
-
?
3.2、五鏈
-
INPUT:處理入站數據包,匹配IP為本機的數據包
-
OUTPUT:處理出站數據包,一般不在此鏈上做配置
-
FORWARD:處理轉發數據包,匹配流經本機的數據包
-
PREROUTING:在進行路由選擇前處理數據包,用來修改目的地址,用來做DNAT,相當于把內網服務器的IP和客戶端映射到路由器的外網IP和端口上
-
PSOTOUTING:在進行路由選擇后處理數據包,用來修改源地址,用來做SNAT,相當于把內網通過路由器NATZ轉換功能實現內網主機通過一個公網IP地址上網
優先順序
規則鏈之間的匹配順序:
主機型防火墻:
-
入站數據(來自外界的數據包,且目標地址是防火墻本機):PREROUTING——>INPUT——>本機的應用程序
-
出站數據(從防火墻本機向外部地址發送的數據包):本機的應用程序——>OUTPUT——>POSTOUTING
網絡型防火墻:
-
轉發數據(需要經過防火墻轉發的數據包):PREOUTING——>FORWARD——>POSTOUTING
-
?
規則鏈內的匹配順序
自上向下按順序依次進行檢查,找到相匹配的規則即停止(LOG策略例外,表示記錄相關日志)
若在該鏈內找不到相匹配的規則,則按該鏈的默認策略處理(未修改的狀態下,默認策略為允許)
4、安裝iptables
Centos 7默認使用firewalld防火墻,沒有安裝iptables,若想使用iptables防火墻。必須先關閉firewalld防火墻,再安裝iptables
[root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# systemctl disable firewalld.service Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@localhost ~]# yum install -y iptables iptables-services.x86_64 [root@localhost ~]# systemctl start iptables.serviceiptables防火墻的配置方式
-
使用iptables命令行
-
使用system-config-firewall (圖形化界面)centos 6才可用
4.1、iptabels命令行配置方法
命令格式;
iptables [-t 表名] 管理選項[鏈名] [匹配條件] [-j 控制類型]注意事項:
-
不指定表名時,默認指filter表
-
不指定鏈名時,默認指表內的所有鏈
-
除法設置鏈的默認策略,否則必須指定匹配條件
-
控制類型使用大寫字母,其余均為小寫
常用的控制類型
| ACCEPT | 允許數據包通過 |
| DROP | 直接丟棄數據包通過,不給出任何回應信息 |
| REJECT | 拒絕數據包通過,會給數據發送端一個響應信息 |
| SNAT | 修改數據包的源地址 |
| DNAT | 修改數據包的目的地址 |
| MASQUERADE | 偽裝成一個非固定公網IP地址 |
| LOG | 在/var/log/messages文件中記錄日志信息,然后 |
常用的管理選項
| -A | 在指定鏈的末尾追加(--append)一條新的規則 |
| -I | 在指定鏈的開頭插入(--insert)一條新的規則,未指定序號時默認作為第一條規則 |
| -R | 修改,替換(--replace)指定鏈中的某一條規則, |
| -P | 設置指定鏈的默認策略(--policy), |
| -D | 刪除(--delete)指定鏈中的某一條規則,可指定規則序號或具體內容 |
| -F | 情空(--fliush)指定鏈中的所有規則,若鏈若未指定鏈名,則清空表中所有鏈 |
| -L | 列出(--list)指定鏈中所有的規則,若未指定鏈名,則列出表中的所有鏈 |
| -n | 使用數字形式(--numeric)顯示輸出和結果,如顯示IP地址而不是主機名 |
| -v | 顯示詳細信息,包括每條規則的匹配包數量和匹配字節數 |
| --line-numbers | 查看規則時,顯示規則的序號 |
4.2、規則的匹配
1、通用匹配
可直接使用,不依賴于其他條件或擴展,包括網絡協議、IP地址、網絡接口等條件
-
協議匹配:-p 協議名 (tcp\udp\imcp)
-
地址匹配:-s 源地址 、 -d 目標地址 #可以是IP、網段、域名、空(任何地址)
-
接口匹配:-i 入站網卡 -o 出站網卡
2、隱含匹配
要求以特定的協議匹配作為前提,包括端口、TCP標記、ICMP類型等條件
端口匹配:--sport源端口、--dport目的端口
##可以是個別端口、端口范圍
-
--sport 1000 匹配源端口是1000的數據包
-
--sport 1000:3000 匹配源端口是1000-3000的數據包
-
--sport :3000 匹配源端口是3000及以下的數據包
-
--sport 1000: 匹配源端口是1000及以上的數據包
注意:--sport和--dport必須配合-p<協議類型>使用
3、顯示匹配
要求以“-m 擴展模塊”的形式明確指出類型,包括多端口、MAC地址、IP范圍、數據包狀態等條件
多端口匹配:-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
IP范圍匹配:-m iprange --src-range IP范圍
5、SNAT與NAT
SNAT源地址轉換
-
數據包從內網發送到公網時,SNAT會把數據包的源IP由私網IP轉換成公網IP
-
當響應的數據包從公網發送到內外時,會把數據包的目的IP由公網IP轉換為私網IP
DNAT目標地址轉換
-
修改數據包的目的地址
1、準備工作
服務端7-7 ? VMNet1 ? 內網 ? 192.168.80.20 ---------------------------------------------- systmectl stop firewalld systemctl disable firewalld setenfence 0 VMNet1 ? 內網 vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=192.168.80.20 GATEWAY=192.168.80.12 #DNS systemctl restart networi --------------------------------------------- 客戶端7-8 VMNet2 外網 ? ? 12.0.0.200 systmectl stop firewalld systemctl disable firewalld setenfence 0 VMNet2 外網 vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=12.0.0.200 GATEWAY=12.0.0.254 #DNS systemctl restart network ------------------------------------------- 網關服務器 7-2 ? ? ? ? ? 192.168.80.12 ? 12.0.0.254 加網卡 ? VMNet1 VMNet2 外網 ? 都是僅主機模式 vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=192.168.80.12 #GATEWAY #DNS vim /etc/sysconfig/network-scripts/ifcfg-ens36 #UUID IPADDR=12.0.0.254 #GATEWAY #DNS systemctl restart network2、驗證工作
----------------------------------------------- 網關服務器 7-2 ? ? ? ? ? 192.168.80.12 ? 12.0.0.254 ----------------------------------------------- vim /etc/sysctl.conf ? ? 打開IP轉換功能 net.ipv4.ip_forward=1 ? sysctl -p ? ? ---------------------------------------------- 服務端7-7 ? VMNet1 ? 內網 ? 192.168.80.20 ---------------------------------------------- yum install -y httpd systemctl start httpd cd /var/www/html echo 'this is second test web!' > index.html (三機去火花瀏覽器驗證) ---------------------------------------------3、轉發功能
網關服務器 7-2 ? ? ? ? ? 192.168.80.12 ? 12.0.0.254 ------------------------------------------------------- iptables -nL iptables -nL -t nat iptables -F &&iptables -F -t nat ? 刪表 iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to 12.0.0.254 iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 8080 -j DNAT --to 192.168.80.20:80 systemctl restart httpd總結
以上是生活随笔為你收集整理的iptables防火墙与SNAT和DNAT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三相桥式全控电路matlab,基于Mat
- 下一篇: kind kubernetes 集群内