Linux防火墻之SNAT和DNAT詳解
1.SNAT是什么
SNAT又稱源地址轉(zhuǎn)換。源地址轉(zhuǎn)換是內(nèi)網(wǎng)地址向外訪問時,發(fā)起訪問的內(nèi)網(wǎng)ip地址轉(zhuǎn)換為指定的ip地址(可指定具體的服務(wù)以及相應(yīng)的端口或端口范圍),這可以使內(nèi)網(wǎng)中使用保留ip地址的主機訪問外部網(wǎng)絡(luò),即內(nèi)網(wǎng)的多部主機可以通過一個有效的公網(wǎng)ip地址訪問外部網(wǎng)絡(luò)。
真實環(huán)境運用中私網(wǎng)可以通過路由轉(zhuǎn)發(fā),將數(shù)據(jù)包傳送給公網(wǎng)IP地址的服務(wù)器,而公網(wǎng)地址無法將相應(yīng)的數(shù)據(jù)包回還給私網(wǎng)地址的用戶。此時二者之間需要一個媒介,就是一個建立在私網(wǎng)和公網(wǎng)之間的網(wǎng)關(guān)服務(wù)器,對其之間的數(shù)據(jù)包進行相應(yīng)的處理。來完成私網(wǎng)IP與公網(wǎng)IP之間的建立聯(lián)系
2.DNAT是什么
DNAT:目的地址轉(zhuǎn)換的作用是將一組本地內(nèi)部的地址映射到一組全球地址。通常來說,合法地址的數(shù)量比起本地內(nèi)部的地址數(shù)量來要少得多。
- 私網(wǎng)地址只能作為源地址來訪問公網(wǎng)IP,而無法作為目標(biāo)地址被其他主機訪問
- 所以DNAT將私網(wǎng)中web服務(wù)器映射到公網(wǎng)IP,使其公網(wǎng)IP作為目標(biāo)地址被公網(wǎng)中主機進行訪問
簡單來說:
- SNAT是對源地址轉(zhuǎn)換
- DNAT是對目的地址轉(zhuǎn)換
SNAT的典型應(yīng)用場景

SNAT策略的工作原理

SNAT源地址轉(zhuǎn)換過程:
- 數(shù)據(jù)包從內(nèi)網(wǎng)發(fā)送到公網(wǎng)時,SNAT會把數(shù)據(jù)包的源地址由私網(wǎng)IP轉(zhuǎn)換成公網(wǎng)IP。
- 當(dāng)相應(yīng)的數(shù)據(jù)包從公網(wǎng)發(fā)送到內(nèi)網(wǎng)時,會把數(shù)據(jù)包的目的地址由公網(wǎng)IP轉(zhuǎn)換為私網(wǎng)IP。
- 當(dāng)內(nèi)網(wǎng)有多臺主機訪問外網(wǎng)時,SNAT在轉(zhuǎn)換時會自動分配端口,不同內(nèi)網(wǎng)主機會通過端口號進行區(qū)分。
如何用iptables實現(xiàn)地址轉(zhuǎn)換
準(zhǔn)備任務(wù)
1.準(zhǔn)備三臺虛擬機

2.給網(wǎng)關(guān)服務(wù)器添加一張?zhí)摂M網(wǎng)卡

3.拓?fù)洌?/p>

- test1:20.0.0.10 內(nèi)網(wǎng)
- test2:ens33: 20.0.0.254
- ens36:12.0.0.254
做SNAT的地址轉(zhuǎn)換
- test3:12.0.0.100 外網(wǎng)
過程
關(guān)閉防火墻
編輯網(wǎng)卡信息
首先ifconfig查看網(wǎng)卡名稱(我這里是ens36)

cd /etc/sysconfig/network-scripts #進入該路徑 cp ifcfg-ens33 ifcfg-ens36 #創(chuàng)建新網(wǎng)卡信息

TYPE=Ethernet DEVICE=ens36 ONBOOT=yes BOOTPROTO=static IPADDR=12.0.0.254 NETMASK=255.255.255.0 #GATEWAY=20.0.0.2 #DNS1=8.8.8.8

此處不用設(shè)置網(wǎng)關(guān),因為要充當(dāng)內(nèi)網(wǎng)網(wǎng)關(guān)
TYPE=Ethernet DEVICE=ens33 ONBOOT=yes BOOTPROTO=static IPADDR=20.0.0.254 NETMASK=255.255.255.0 #GATEWAY=20.0.0.2 #DNS1=8.8.8.8

客戶機配置
TYPE=Ethernet DEVICE=ens33 ONBOOT=yes BOOTPROTO=static IPADDR=20.0.0.10 NETMASK=255.255.255.0 GATEWAY=20.0.0.254 #DNS1=218.2.135.1

web配置
TYPE=Ethernet DEIVCE=ens33 ONBOOT=yes BOOTPROTO=static IPADDR=12.0.0.100 NETMASK=255.255.255.0 GATEWAY=12.0.0.254 #DNS1=8.8.8.8

網(wǎng)卡配置結(jié)束后,要通過iptables命令添加
iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 10.0.0.10
- -t:指定表名
- nat:地址轉(zhuǎn)換的表名
- -A:添加一條規(guī)則,在行尾追加
- POSTROUTING:在出本機的時候添加一個地址轉(zhuǎn)換的規(guī)則
- -s:192.168.233.0/24 指定源IP地址
- -j SNAT:指定控制類型
- --to 10.0.0.10 所有源IP屬于233.0這個網(wǎng)段,只要你是從ens36出來,都會把它們IP地址轉(zhuǎn)換為10.0.0.10
完成之后, iptables -t nat -vnL查看
- 最后,網(wǎng)關(guān)服務(wù)器要同意轉(zhuǎn)發(fā)
vim /etc/sysctl.conf

sysctl -p

立即啟動
客戶端鏈接web端(內(nèi)網(wǎng)鏈接外網(wǎng))測試


DNAT地址轉(zhuǎn)換
iptables -t nat -A PREROUTING -d 11.0.0.11 -i ens36 -p tcp --dport 80 -j DNAT --to 20.0.0.10:80
web端連接客戶端測試


實驗結(jié)束
Linux抓包技術(shù)--tcpdump
- tcpdump為Linux自帶的抓包工具
- wireshark只適用于Windows
抓包方式:
- 1.指定抓包數(shù)量
- 2.動態(tài)抓包,一致會獲取包,除非人工停止
tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and net 20.0.0.0/24 -w ./target.cap
- tcpdump:抓包命令,固定開頭
- tcp:抓包的協(xié)議
- -i:經(jīng)過,只抓經(jīng)過ens33的數(shù)據(jù)包
- -t:不顯示時間戳
- -s0:抓完整的數(shù)據(jù)包
- -c:指定抓包的個數(shù)
- dst port:80 訪問的是httpd的80端口
- src net:192.168.233.0/24
- -w:抓包的數(shù)據(jù),保存位置。
firewalld技術(shù)
- firewalld:centos7自帶的,和iptables一樣,也是包過濾防火墻
- firewalld過濾,通過區(qū)域來進行配置
- iptables 靜態(tài)防火墻
- firewalld 動態(tài)防火墻
firewalld 分為以下幾個區(qū)域
- trusted :信任區(qū),所有流量都可以傳入
- public :公共區(qū)域,允許ssh或者dhcpv6-client的流量可以傳入,其他的全部拒絕,也是firewalld的默認(rèn)區(qū)域。
- external:外部區(qū)域,允許ssh或者dhcpv6-client的流量可以傳入,其他的全部拒絕,默認(rèn)通過此區(qū)域轉(zhuǎn)發(fā)的ipv4流量地址,可以進行偽裝
- home 家庭區(qū)域:允許ssh或者dhcpv6-client的流量可以傳入,其他的全部拒絕
- internal:內(nèi)部區(qū)域,默認(rèn)值與home區(qū)域的作用相同
- work 工作區(qū)域,允許ssh或者dhcpv6-client的流量可以傳入,其他的全部拒絕
- DMZ 隔離區(qū) 非軍事區(qū):允許ssh,其他的預(yù)定義好配置,其他的全部拒絕
- block:限制區(qū),拒絕所有流量
- drop:丟棄區(qū)域,所有流量都會丟棄
firewalld相關(guān)命令
firewall-cmd --list-service
查看區(qū)域內(nèi)允許通過的服務(wù)

firewall-cmd --add-service=http --zone=public
添加,瀏覽器20.0.0.10即可看到是否成功

firewall-cmd --remove-service=http --zone=public
刪除

firewall-cmd --add-service=http --add-service=ftp --zone=pubilc
添加多個服務(wù)
firewall-cmd --list-services
查看
firewall-cmd --add-service={ftp,http}添加多個的不同方法
firewall-cmd --add-service={ftp,http} --zone=public --permanent永久生效
firewall-cmd --remove-service=http --zone=public --permanent
刪除永久生效的項
firewall-cmd --zone=public --add-port=80/tcp
根據(jù)端口添加
firewall-cmd --zone=public --remove-port=80/tcp
移除
firewall-cmd --zone=指定區(qū)域
firewall-cmd --zone=public -add-port={3306,80,21}/tcp添加多個端口
firewall-cmd --zone=public -add-port=30-35/tcp
添加端口的范圍
firewall-cmd --list-all 查看

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux系統(tǒng)設(shè)置開機自動運行腳本的方法實例
這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)設(shè)置開機自動運行腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Linux系統(tǒng)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
關(guān)于bash函數(shù)你可能不知道的一些事情(譯)
這篇文章主要給大家介紹了關(guān)于bash函數(shù)你可能不知道的一些事情,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
虛擬機安裝linux系統(tǒng)無法上網(wǎng)的解決方法
這篇文章主要為大家詳細介紹了虛擬機安裝linux系統(tǒng)無法上網(wǎng)的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
Ubuntu設(shè)置開機自動掛載所有格式硬盤分區(qū)
原來那么簡單,安裝下面的東東,運行,設(shè)置,搞定!2008-09-09
探討如何減少Linux服務(wù)器TIME_WAIT過多的問題
本篇文章是對如何減少Linux服務(wù)器TIME_WAIT過多的問題進行了詳細的分析介紹,需要的朋友參考下2013-06-06
Linux /etc/network/interfaces配置接口方法
在本篇文章里小編給各位分享的是一篇關(guān)于Linux /etc/network/interfaces配置接口方法知識點,需要的朋友們可以學(xué)習(xí)下。2020-02-02
Discuz 7.0偽靜態(tài)ReWrite的.htaccess規(guī)則
在確定您的服務(wù)器支持偽靜態(tài)ReWrite后,您可以通過修改設(shè)置.htaccess文件來實現(xiàn)Discuz論壇的偽靜態(tài)功能2010-12-12

