Iptables流量轉發實驗


Iptables流量轉發實驗

Iptables簡介

Iptables其實不是真正的防火牆,我們可以把它理解成一個客戶端代理,用戶通過iptables這個代理,將用戶的安全設定執行到對應的“安全框架”中,這個“安全框架”才是真正的防火牆,這個框架的名字叫Netfilter

Netfilter才是防火牆真正的安全框架(framework),netfilter位於內核空間。

Iptables其實是一個命令行工具,位於用戶空間,我們用這個工具操作真正的框架。

所以說,雖然我們使用service iptables start啟動iptables"服務",但是其實准確的來說,iptables並沒有一個守護進程,所以並不能算是真正意義上的服務,而應該算是內核提供的功能。

iptables的結構:iptables -> Tables -> Chains -> Rules。 簡單地講,tables由chains組成,而chains又由rules組成。
Tables包括Filter, NAT, Mangle, Raw四種表。
Chains包括Input, Output, Forward, Prerouting, Postrouting五種鏈。
rules指定所檢查包的特征和目標。如果包不匹配,將送往該鏈中下一條規則檢查;如果匹配,那么下一條規則由目標值確定。該目標值可以是用戶定義的鏈名,或是某個專用值,如ACCEPT[通過],DROP[刪除], QUEUE[排隊],或者 RETURN[返回]。

命令選項

-t:指定要操縱的表;
-A:向規則鏈中添加條目;
-D:從規則鏈中刪除條目;
-i:向規則鏈中插入條目;
-R:替換規則鏈中的條目;
-L:顯示規則鏈中已有的條目;
-F:清楚規則鏈中已有的條目;
-Z:清空規則鏈中的數據包計算器和字節計數器;
-N:創建新的用戶自定義規則鏈;
-P:定義規則鏈中的默認目標;
-h:顯示幫助信息;
-p:指定要匹配的數據包協議類型;
-d:指定目的ip
--dport:指定目標端口
-s:指定要匹配的數據包源ip地址;
-j:指定要跳轉的目標;
-i:指定數據包進入本機的網絡接口;
-o:指定數據包要離開本機所使用的網絡接口。

參考文章:

https://blog.csdn.net/u011537073/article/details/82685586
http://www.zsythink.net/archives/1199

實驗描述:

將服務端的nginx服務流量,通過iptables創建規則轉發到另一台主機的端口上,這樣就將服務端隱藏了起來,訪問代理機的流量實際上來自於本機。

實驗環境:

服務端:kali2019 ip:192.168.245.129

代理機:kali2018 ip:192.168.245.139

實驗步驟:

  1. 啟動docker容器,開啟nginx服務,將服務端的80端口映射到7799端口

    $service docker start
    $docker run -p 7799:80 nginx
    

    瀏覽器訪問服務端的7799端口可以看到成功開啟

  2. 現在切換到代理機,輸入命令創建兩條規則

    $iptables -t nat -A PREROUTING -p tcp --dport 7788 -j DNAT --to 192.168.245.129:7799
    $iptables -t nat -A POSTROUTING -p tcp -d 192.168.245.129 --dport 7799 -j SNAT --to 192.168.245.139
    
  3. 查看一下是否創建成功

    $iptables -t nat -L
    

  4. 現在開啟轉發,查看ip_forward值是否為1,若不是設置值為1

    $cat /proc/sys/net/ipv4/ip_forward
    

    sysctl -w net.ipv4.ip_forward=1
    

  5. 添加規則,設置轉發所有流量

    iptables -t filter -I FORWARD -j ACCEPT
    
  6. 此時訪問代理機的7788端口,返回了服務端7799端口的流量


免責聲明!

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



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