1. 程式人生 > >iptables防火牆詳解(二)SNAT和DNAT

iptables防火牆詳解(二)SNAT和DNAT

通過上一篇文章的學習,我們認識了Linux防火牆的表、鏈機構,並學會了編寫簡單的防火牆規則。Linux防火牆在很多時候承擔著連線企業內、外網的重任,除了提供資料包過濾功能以外,有時還需要提供一些基本的閘道器應用。

在配置SNAT和DNAT之前,需要開啟Linux系統中的地址轉發功能,否則資料無法通過防火牆轉發出去。

修改/etc/sysctl.conf配置檔案件,將ip_forward的值設定為1即可。

[[email protected] /]#vim /etc/sysctl.conf

......//省略部分內容

net.ipv4.ip_forwaed=1             //將此行中的0改為1

[[email protected]

/]#sysctl -p     //重新讀取修改後的配置

也可以開啟臨時的路由轉發,可以執行以下操作。

[[email protected]ocalhost /]#echo 1> /proc/sys/net/ipv4/ip_forward

或者

[[email protected] /]#sysctl -w net.ipv4.ip_forward=1

SNAT的策略及應用

SNAT:源地址轉換,是Linux防火牆的一種地址轉換操作,也是iptables命令中的一種資料包控制型別,其作用是根據指定條件修改資料包的源IP地址。

SNAT策略只能用在nat表的POSTROUTING鏈中,使用iptables命令編寫SNAT策略時,需要結合“--to-source  IP地址”選項來指定修改後的源IP地址。

列如:Linux閘道器伺服器通過eth0和eth1分別連線Internet和區域網,其中eth0的IP地址為218.29.30.31,eth1的IP地址為192.168.1.1。現在要求在Linux閘道器伺服器上配置規則,使用區域網內的所有使用者可以通過共享的方式訪問網際網路。可執行以下操作。

1)開啟路由轉發,上面已經講過,這裡不在詳述了。

2)在iptables的POSTROUTING中編寫SNAT規則。

[[email protected] /]#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31

3)在某些情況下,閘道器的外網IP地址可能不是固定的,列如使用ADSL寬頻接入時,針對這這種需求,iptables提供了一個名為MASQUERASE(偽裝)的資料包控制型別,MASQUERADE相當於SNAT的一個特列,同樣同來修改資料包的源IP地址只過過它能過自動獲取外網介面的IP地址。

參照上一個SNAT案例,若要使用MASQUERADE偽裝策略,只需要去掉SNAT策略中的“--to-source IP地址”。然而改為“-j MASQUERADE”指定資料包的控制型別。對於ADSL寬頻連線來說,連線名稱通常為ppp0,ppp1等。操作如下

[[email protected] /]#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

4)測試SNAT共享接入的結果

同過上面的配置,這時內部區域網訪問網際網路所使用的IP地址是閘道器伺服器的外網介面地址了。我們可以在往外客戶端執行“tcpdump -i eth0”監聽訪問本機的資料流,然後在內網ping外網客戶端,然後檢視外網客戶端監聽的狀態,會發現,訪問外網客戶機的IP地址是閘道器伺服器的外網介面地址,而不是內部區域網的地址。

DNAT策略及應用

DNAT:目標地址轉換,是Linux防火牆的另一種地址轉換操作,同樣也是iptables命令中的一種資料包控制型別,其作用是根據指定條件修改資料包的目標IP地址,目標埠。

DNAT策略與SNAT策略非常相似,只不過應用方向反過來了。SNAT用來修改源地址IP,而DNAT用來修改目標IP地址,目標埠;SNAT只能用在nat表的POSTROUTING鏈,而DNAT只能用在nat表的PREROUTING鏈和OUTPUT鏈中。

列如:藉助上述網路環境,公司內部區域網內搭建了一臺web伺服器,IP地址為192.168.1.7,現在需要將其釋出到網際網路上,希望通過網際網路訪問web伺服器。那麼我們可以執行如下操作。

1)在iptables的PREROUTING中編寫DNAT規則。

[[email protected] /]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.7:80

2)再列如:公司的web伺服器192.168.1.7需要通過網際網路遠端管理,由於考慮到安全問題,管理員不希望使用預設埠進行訪問,這時我們可以使用DNAT修改服務的預設埠。操作如下:

[[email protected] /]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.7:22

3)在外網客戶端瀏覽器中訪問閘道器伺服器的外網介面,可以發現訪問的居然是內網192.168.1.7的web伺服器的網頁。而在使用sshd連線2346埠時,居然可以遠端連線到192.168.1.7伺服器上。

相關推薦

iptables防火牆()SNATDNAT

通過上一篇文章的學習,我們認識了Linux防火牆的表、鏈機構,並學會了編寫簡單的防火牆規則。Linux防火牆在很多時候承擔著連線企業內、外網的重任,除了提供資料包過濾功能以外,有時還需要提供一些基本的閘道器應用。在配置SNAT和DNAT之前,需要開啟Linux系統中的地址轉發

MyBatis之Mapper XML 文件()-sql入參

java mybatis sql 參數 mapper sql這個元素可以被用來定義可重用的 SQL 代碼段,可以包含在其他語句中。它可以被靜態地(在加載參數) 參數化. 不同的屬性值通過包含的實例變化. 比如:<sql id="userColumns"> $

iptables防火牆(一)

Linux的防火牆體系主要工作在網路層,針對TCP/IP資料包實施過濾和限制,屬於典型的包過濾防火牆(或網路層防火牆)。在Linux中netfilter和iptables都是指Linux防火牆。區別在於: netfilter:指的是Linux核心中實現包過濾防火牆的內部

iptables防火牆

iptables規則組成:四張表+五條鏈(Hook  point)+規則 規則1:對所有的地址開放本機tcp的22、80、10-21埠的訪問 iptables -v #檢視iptables版本 iptables -L #檢視之前的iptables規

(轉)Linux的iptables做代理伺服器防火牆

https://blog.csdn.net/harryxlb/article/details/7339307 用Linux的iptables做代理伺服器和防火牆配置詳細介紹     代理/防火牆     1.iptables規則表 &n

CentOS 7中firewall防火牆配置以及切換為iptables防火牆

原文連結:http://blog.csdn.net/xlgen157387/article/details/52672988 一、firewall介紹 CentOS 7中防火牆是一個非常的強大的功能,在CentOS 6.5中在iptables防火牆中進行了升級了。

AppDomain 【轉】-C#中動態加載卸載DLL

all created 新版本 odin generic reflect 可能 params 詳細 在C++中加載和卸載DLL是一件很容易的事,LoadLibrary和FreeLibrary讓你能夠輕易的在程序中加載DLL,然後在任何地方 卸載。在C#中我們也能使用Asse

iptables SNAT DNAT的轉化配置實驗

實驗 ip add PC 語法 中繼 那種 源地址 轉換 由器 原文鏈接:http://www.jb51.net/LINUXjishu/402441.html DNAT(Destination Network Address Translation,目的地址轉換) 通常被叫

Linux用戶搶占內核搶占(概念, 實現觸發時機)--Linux進程的管理與調度(十)

amp 3.1 not 職責 mon 顯式 default hust ron 1 非搶占式和可搶占式內核 為了簡化問題,我使用嵌入式實時系統uC/OS作為例子 首先要指出的是,uC/OS只有內核態,沒有用戶態,這和Linux不一樣 多任務系統中, 內核負責管理各個任務, 或

C#委託事件(

  一、當我們使用關鍵字delegate宣告一個自定義委託型別時,實際上是聲明瞭一個該名稱的類型別,繼承自抽象類System.MulticastDelegate,還包含例項方法Invoke、BeginInvoke、EndInvoke:   public delegate void MyDelegate

Java併發(十八):阻塞佇列BlockingQueue BlockingQueue(阻塞佇列)詳解 叉堆(一)之 圖文解析 C語言的實現 多執行緒程式設計:阻塞、併發佇列的使用總結 Java併發程式設計:阻塞佇列 java阻塞佇列 BlockingQueue(阻塞佇列)詳解

阻塞佇列(BlockingQueue)是一個支援兩個附加操作的佇列。 這兩個附加的操作是:在佇列為空時,獲取元素的執行緒會等待佇列變為非空。當佇列滿時,儲存元素的執行緒會等待佇列可用。 阻塞佇列常用於生產者和消費者的場景,生產者是往佇列裡新增元素的執行緒,消費者是從佇列裡拿元素的執行緒。阻塞佇列就是生產者

react router @4 vue路由 ()react-router @4用法

  完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html   2、react-router @4用法   a、大概目錄        不需要像vue那樣麻煩的用到

C#特性反射(

  使用反射(Reflection)使得程式在執行過程中可以動態的獲取物件或型別的型別資訊,然後呼叫該型別的方法和建構函式,或訪問和修改該型別的欄位和屬性;可以通過晚期繫結技術動態的建立型別的例項;可以獲取程式集中的所有型別資訊;可以在動態構建新型別;還可以檢索元素所新增的特性;  ※反射相關的類基本都位於名

java實現標準化考試系統()-----資料庫、資料表的規劃題庫增刪改查

(一)、資料庫、資料表的規劃 首先我們需要考慮一下作為考試系統我們需要哪些資料,這些資料將以後作為欄位值出現。 我們先來看看這張圖: 圖中框起來的部分基本上就是我們需要的資料,細數數就是: 1.試題序號,它作為主鍵出現不可以重複(id) 2.適用工程,可以理解為這個題適用

【原創】Junit4:Junit4 Runner以及test case執行順序原始碼理解

1 package com.citi.risk.services.credit.facility.impl; 2 3 import java.io.Closeable; 4 import java.io.IOException; 5 6 import org.juni

Servlet():requestresponse物件

什麼是request和response request物件是伺服器對瀏覽器請求的封裝,而response是伺服器對伺服器響應的封裝。 request用來取出請求資訊,而response則用來新增要返回給瀏覽器的資訊。 使用response物件設定h

linux網路防火牆-iptables配置

Chain RH-Firewall-1-INPUT (0 references) target       prot opt source                 destination          ACCEPT       all    --    0.0.0.0/0             

JAVAWEB開發之mybatis()——高階對映、查詢快取、mybatis與Spring整合以及懶載入的配置逆向工程

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "ht

Java構造解析Json資料的兩種方法

package com.json; import java.lang.reflect.Method; import java.text.ParseException; import java.util.HashMap; import java.util.Iterator; import java.uti

配置防火牆,開啟80埠、3306埠 & iptables 使用

1:配置防火牆,開啟80埠、3306埠 vi /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允許80埠通過防火牆) -A INPUT -m state –state NEW -m