iptables、共用上網SNAT、埠轉發DNAT

来源:https://www.cnblogs.com/xuxuxuxuxu/archive/2023/09/03/17675867.html
-Advertisement-
Play Games

# iptables、共用上網SNAT、埠轉發DNAT ## 1.防火牆概述 封端⼝,封ip 實現NAT功能 共用上⽹ 端⼝映射(端⼝轉發),ip映射 ## 2.防火牆 ### 2.1防火牆種類以及使用說明 硬體:整個企業入口 軟體:開源軟體 網站內部 封ip iptables 雲防火牆 安全組 ...


iptables、共用上網SNAT、埠轉發DNAT

1.防火牆概述

封端⼝,封ip
實現NAT功能
共用上⽹
端⼝映射(端⼝轉發),ip映射

2.防火牆

2.1防火牆種類以及使用說明

硬體:整個企業入口

軟體:開源軟體 網站內部 封ip
iptables

雲防火牆
安全組
NAT網關
waf應用防火牆

2.2專有名詞

容器、表、鏈、規則

2.3iptables執行過程

1.防⽕牆是層層過濾的,實際是按照配置規則的順序從上到下,從前到後進⾏過濾的。
2.如果匹配成功規則,即明確表示是拒絕(DROP)還是接收(ACCEPT)數據包就不再向下匹配新的規則
3.如果規則中沒有明確表明是阻⽌還是通過的,也就是沒有匹配規則,向下進⾏匹配,直到匹配預設規則得到明確的阻⽌還是通過。
4.防⽕牆的預設規則所有規則都匹配完才會匹配的

2.4表與鏈

iptables 是 4表伍鏈
4表: filter 表 nat表 raw表 mangle表
伍鏈: INPUT OUTPUT FORWARD PREROUTING POSTROUTING

1.filter表
實現防火牆功能:屏蔽或准許埠ip

2.nat表
實現nat功能:實現共用上網 埠映射和ip映射

2.5環境準備及命令

先關閉防火牆

systmectl stop firewalld
systemctl disable firewalld

1.安裝並啟動

yum install iptables-services
   
systemctl enable iptables
systemctl start iptables

2.設置開機自啟防火牆相關模塊

cat >>/etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state 
EOF

lsmod | egrep 'filter|nat|ipt'

3.查看規則

iptables -nL 預設filter -n不要把端⼝ 或ip反向解析為名字 -L 列出規則

[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

查看指定表的規則 iptables -t nat -nL

[root@localhost ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination 

配置filter表規則

-A 添加防火牆規則(尾部追加)
-D 刪除防火牆規則
-I 插入防火牆規則(首部插入)
-F 清空防火牆規則
-X 刪除用戶自定義的鏈
-L 列出添加防火牆規則
-R 替換防火牆規則
-Z 清空防火牆數據表統計信息
-P 設置鏈預設規則
-p 協議 protocal tcp/udp/icmp/all 指定埠的時候需要用到指定協議
--dport 目標埠
-j 滿足條件後的動作 DROP/ACCEPT/REJECT drop 把數據丟掉不會返回給用戶 reject 返回拒絕信息
-s --source 源ip
-d --destination ⽬標ip

1.先清空規則

[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -X
[root@localhost ~]# iptables -Z
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

2.添加規則

iptables -t filter -I INPUT -p tcp --dport 22122 -j drop

3.刪除規則

iptables -t filter -D INPUT 1  //1是行號 上述添加的規則的行號

1:封ip

1.192.168.70.133機器 ping 192.168.70.136機器

[root@web2 ~]# ping 192.168.70.136
PING 192.168.70.136 (192.168.70.136) 56(84) bytes of data.
64 bytes from 192.168.70.136: icmp_seq=1 ttl=64 time=0.937 ms

2.136機器添加規則

iptables -t filter -I INPUT -s 192.168.70.134 -j DROP

3.刪除規則

iptables -D INPUT 1  //刪除後可以發現又繼續ping了

2:禁止網段訪問指定埠

iptables -t filter -I INPUT -s 192.168.70.0/24 -p tcp --dport 8888 -j DROP

3:只允許指定網段連入

iptables -I INPUT ! -S 192.168.70.0/24 -j DROP

4:指定多埠

iptables  -I INPUT -m multiport -p tcp --dport 80,433 -j DROP  //禁止80和433埠
iptables  -I INPUT -p tcp --dport 1:10 -j DROP  //禁止1-10埠

5:控制是否能ping

iptables -I INPUT -p icmp -j DROP

另一種方法

vim /etc/sysctl.conf  //添加如下一條指令
net.ipv4.icmp_echo_ignore_all = 1

sysctl -p  //生效

6:匹配⽹絡狀態(TCP/IP連接狀態)

NEW:已經或將啟動新的連接
ESTABLISHED:已建⽴的連接
RELATED:正在啟動的新連接INVALID:⾮法或⽆法識別的

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

7:限制併發及速率

-m limit --limit 10/minute #每分鐘只能有10個數據包 每6秒⽣成

8:防⽕牆規則的保存與恢復

iptables-save 預設輸出到屏幕
iptables-restore 加上⽂件
寫⼊到/etc/sysconfig/iptables

iptables-save > /etc/sysconfig/iptables

iptables-restore < /etc/sysconfig/iptables

3.實際⽣產⽤法

iptables -F
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -s 允許的IP地址 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables-save

4.共用上網SNAT

實現:內部網路的伺服器通過可訪問外網的機器訪問到外網

環境準備

server01設置為VMnet2 192.168.100.18
server02設置為NAT 192.168.70.134 網路再添加一個網卡VMnet2 192.168.100.16

1.設置好server01的ip

[root@server01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="none"
IPADDR=192.168.100.18
NETMASK=255.255.255.0
NAME="ens33"
DEVICE="ens33"
DNS1=114.114.114.114

2.設置好server02的ip

[root@server02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:13:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.70.134/24 brd 192.168.70.255 scope global noprefixroute dynamic ens33
       valid_lft 5270229sec preferred_lft 5270229sec
    inet6 fe80::725c:49ee:6f78:42a0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:0c:29:eb:13:92 brd ff:ff:ff:ff:ff:ff
    
[root@server02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
BOOTPROTO="none"
IPADDR=192.168.100.16
NETMASK=255.255.255.0
NAME="ens37"
DEVICE="ens37"
DNS1=114.114.114.114

[root@server02 ~]# systemctl restart network
[root@server02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:13:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.70.134/24 brd 192.168.70.255 scope global noprefixroute dynamic ens33
       valid_lft 5269237sec preferred_lft 5269237sec
    inet6 fe80::725c:49ee:6f78:42a0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:13:92 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.16/24 brd 192.168.100.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feeb:1392/64 scope link 
       valid_lft forever preferred_lft forever

3.測試ping相互下一

[root@server01 ~]# ping 192.168.100.16

4.server02開啟轉發功能

[root@serve02 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@serve02 ~]# sysctl -p

5.server02設置iptables

[root@serve02 ~]# iptables  -t  nat  -A POSTROUTING  -s  192.168.100.0/24 -j SNAT --to-source 192.168.70.134

6.測試

[root@server01 ~]# ping baidu.com  //能通則成功了

[root@server02 ~]# iptables  -t  nat  -D POSTROUTING 1  //再試著關閉規則 再試試ping

5.埠轉發DNAT

在上述snat基礎上增加一臺機器server03

1.server02添加prerouting規則

iptables -t nat -A PREROUTING -d 192.168.70.134 -p tcp --dport 9000 -j DNAT --to-destination 192.168.100.18:22

2.server03測試

[root@localhost ~]# ssh 192.168.70.134 -p 9000
[email protected]'s password: 
Last login: Fri Sep  1 20:37:06 2023

[root@localhost ~]# ip a  //查看埠可以發現連上的是server01
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:18:39:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.18/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::725c:49ee:6f78:42a0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天學習了spring cloud 中的註冊中心——eureka,作為微服務的註冊中心,eureka需要對服務的可用狀態進行一個體現。直觀的體現方式就是在eureka啟動後的ui界面上可以看到服務的是否可用。 在某一個時刻下,如果後端某一個服務不可用了,eureka不會立即將其從ui界面上刪除。而是 ...
  • **原文鏈接:** [go-zero 的自適應熔斷器](https://mp.weixin.qq.com/s/r1kTYUK_r-JalvhzAKKQwg) 上篇文章我們介紹了微服務的限流,詳細分析了計數器限流和令牌桶限流演算法,這篇文章來說說熔斷。 熔斷和限流還不太一樣,限流是控制請求速率,只要還能 ...
  • ## 標準庫 `cmp` 原文在[這裡](https://pkg.go.dev/cmp) go 1.21 新增 `cmp` 包提供了與有序變臉比較相關的類型和函數。 ### Ordered 定義如下: ```go type Ordered interface { ~int | ~int8 | ~in ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 題目描述 - 難度:**困難** - 編程語言:Jav ...
  • ## 1、線程的基本管控 包含頭文件``後,通過構建`std::thread`對象啟動線程,任何可調用類型都適用於`std::thread`。 ```c++ void do_some_work(); struct BackgroundTask { void operator()() const; } ...
  • > 本文深入探討了Go語言的多個關鍵方面,從其簡潔的語法、強大的併發支持到出色的性能優勢,進一步解析了Go在雲原生領域的顯著應用和廣泛的跨平臺支持。文章結構嚴謹,逐一分析了Go語言在現代軟體開發中所占據的重要地位和其背後的技術原理。 > 關註TechLeadCloud,分享互聯網架構、雲服務技術的全 ...
  • java中要實現excel新老格式的轉換比較麻煩,開源庫也沒幾個好用的。用ChatGpt查詢也是推薦直接用POI,下麵是藉助ChatGPT寫出來的代碼,經過小小修改,格式轉換良好,基本能用,就是效率比較低下。將就著用吧,哎! /** * Excel格式從xls轉換成xlsx格式 * * @param ...
  • Hi,大家好,我是一路狂奔的烏龜 很高興遇見你~ 我們可能會在睡前下載文件,而不想自己的電腦一整晚都在運行,浪費電也損耗電腦硬體 基於這個日常需求(你怎麼知道我喜歡在半夜下載文件?) 所以我就開發了這款軟體 至今已經修改了三四個版本了,基本滿足要求了就不再更新了 好了, 接下來,,就容我介紹一下這款 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...