運維安全05,iptables規則保存與恢復

一:網絡安全

1.1、昨日功能優化

配置后引發的問題:

配置iptables后防火墻起到了防護作用,但使用127.0.0.1訪問不了數據庫了

[root@localhost /]# mysql -u admin -p -h 127.0.0.1
Enter password:

思考:如果使用localhost可以訪問嗎? 是什么原因?

localhost127.0.0.1 的區別

  • localhost:通常被解析為127.0.0.1,但它的訪問方式不使用網卡,不受防火墻和網卡限制。它通過內存中的套接字(socket)進行通信。

  • 127.0.0.1:是一個具體的IP地址,訪問時會通過網卡傳輸數據,受防火墻和網卡設置的限制。

當設置了iptables規則后,這些規則可能會影響網絡流量,特別是針對特定IP地址或端口的流量。

  • 使用127.0.0.1無法登錄:

    • 當您嘗試通過127.0.0.1連接MySQL時,數據包會通過網卡發送,并受到iptables規則的檢查。如果iptables規則中包含了阻止127.0.0.1訪問MySQL端口(通常是3306)的規則,那么連接就會被拒絕。

  • 使用localhost可以登錄:

    • 使用localhost連接MySQL時,數據不會通過網卡傳輸,而是直接在內存中通過套接字進行通信,因此不受iptables規則的影響。這樣即使iptables有阻止127.0.0.1的規則,也不會影響到localhost的連接。

配置iptables解決問題:

[root@localhost /]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost /]# iptables -A OUTPUT -o lo -j ACCEPT
?# 查看規則
[root@localhost /]# iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes) 
pkts bytes target ? ? prot opt in ? ? out ? ? source 
destination ? ? ? ? 
1153 68876 ACCEPT ? ? tcp  --  * ? ?  * ? ? ? 0.0.0.0/0 ? ? ? ? ?  0.0.0.0/0 ? ? ? ? ?  tcp dpt:22 ? 
4 ? 176 ACCEPT ? ? tcp  --  * ? ?  * ? ? ? 0.0.0.0/0 ? ? ? ? ?  0.0.0.0/0 ? ? ? ? ?  tcp dpt:80 ? 
0 ? ? 0 ACCEPT ? ? all  --  lo ? ? * ? ? ? 0.0.0.0/0 ? ? ? ? ?  0.0.0.0/0 ? ? ? ? ? ?Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) 
pkts bytes target ? ? prot opt in ? ? out ? ? source ? ? ? ? ? ? ? 
destination ? ? ? ? 
?Chain OUTPUT (policy DROP 0 packets, 0 bytes) 
pkts bytes target ? ? prot opt in ? ? out ? ? source ? ? ? ? ? ? ? destination ? ? ? ?630 49672 ACCEPT ? ? tcp  --  * ? ?  * ? ? ? 0.0.0.0/0 ? ? ? ? ?  0.0.0.0/0 ? ? ? ? ?  tcp spt:22  
24  1056 ACCEPT ? ? tcp  --  * ? ?  * ? ? ? 0.0.0.0/0 ? ? ? ? ?  0.0.0.0/0 ? ? ? ? ?            tcp spt:80 ? 
0 ? ? 0 ACCEPT ? ? all  --  * ? ?  lo ? ?  0.0.0.0/0 ? ? ? ? ?  0.0.0.0/0 ? 

iptables -A INPUT -i lo -j ACCEPT

允許所有從本地回環接口(lo)進入本機的網絡流量。簡單來說,就是讓本機可以接收來自自己內部的服務請求。

iptables -A OUTPUT -o lo -j ACCEPT

允許所有通過本地回環接口(lo)向外發送的網絡流量。也就是說,讓本機能正常回應自己內部發出的請求。

再次測試mariadb

[root@localhost /]# mysql -u admin -p -h 127.0.0.1
Enter password: 
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>

1.2、規則的保存與恢復

配置的防火墻規則如果不保存,在重啟之后規則需要重新配置,規則的保存命令如下:

# 將規則保存到etc/iptables-script
[root@localhost ~]# iptables-save > /etc/iptables-script# 恢復規則
[root@localhost ~]# iptables-restore /etc/iptables-script

1.3、安全加固

配置 MariaDB 以允許遠程主機訪問數據庫服務,并通過防火墻規則進一步限制只有特定 IP 范圍的客戶端可以訪問。

# 配置mariadb允許遠程訪問
MariaDB [mysql]> grant all privileges on *.* to 'admin'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

此操作雖然開放了遠程訪問權限,但并沒有限制具體的訪問源 IP。

如果僅需要特定 IP 可以訪問,應將 % 替換為具體的 IP 或子網(如 'admin'@'192.168.114.0/24'

# 配置防火墻規則,允許訪問3306
[root@localhost ~]# iptables -A INPUT -p tcp --dport 3306 -m iprange --src
-range 192.168.114.100-192.168.114.150 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 3306 -m iprange--dst-range 192.168.114.100-192.168.114.150 -j ACCEPT

iptables -A INPUT -p tcp 允許指定 IP 范圍訪問 MariaDB 端口(3306)

iptables -A OUTPUT -p tcp 允許 MariaDB 向指定 IP 范圍發送響應數據

注意事項

  1. 最小權限原則:不要隨意使用 GRANT ALL PRIVILEGES,應根據實際需求授予最小權限。

  2. IP 白名單限制:盡量避免使用 admin@%,改為使用 admin@192.168.114.0/24 等方式限制具體來源。

  3. 保存防火墻規則:執行完 iptables 命令后,使用 service iptables saveiptables-save > /etc/iptables/rules.v4 保存規則,防止重啟后失效。

1.4、狀態過濾

狀態過濾(Stateful Packet Inspection,SPI)是一種防火墻技術,它不僅檢查數據包的頭部信息(如源IP、目標IP、端口號等),還會跟蹤和維護連接的狀態信息。

通過這種方式,它可以更智能地判斷數據包是否合法,從而提高安全性。

假設已經配置了以下基本的 iptables 規則:

# 允許 80 端口的入站(INPUT)流量
iptables -A INPUT -p tcp --dport 80 -j ACCEPT# 允許 80 端口的出站(OUTPUT)流量
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT# 默認拒絕所有其他入站流量
iptables -P INPUT DROP
iptables -P OUTPUT DROP

思考配置存在的問題

步驟數據方向源 IP:端口目標 IP:端口
1. 請求發起客戶端 → 服務器192.168.1.10:54321203.0.113.45:80
2. 響應返回服務器 → 客戶端203.0.113.45:80192.168.1.10:54321

但這只是“無狀態”的規則 —— 它不會區分這個流量是否是主動發起連接后返回的響應

情況:A服務器不能遠程訪問其他服務器資源

A服務器主動連接C服務器

  • A服務器 主動向 C服務器 的 80 端口發起HTTP請求。

  • 源端口 是 5623(一個非特權端口),目標端口 是 80

  • 連接被 拒絕。

問題:

  • iptables 規則中,只允許目標端口為 80 的入站流量,但沒有明確允許從 A服務器 發起的出站流量。

  • 因此,即使 A服務器 使用非特權端口(如 5623)發起請求,這個連接也會被默認的 DROP 策略拒絕。

那能不能將5623設置為開放呢? 同學們請思考:

當服務器(或客戶端)主動發起一個 TCP 連接時(比如訪問網頁、API 等),它會使用一個 臨時非特權端口(ephemeral port)作為源端口。

這些端口通常在 Linux 上是范圍在 32768 到 60999 或 49152 到 65535 之間(不同系統略有差異)。

所以每次建立新連接時,源端口都可能是不同的,而且是非特權端口。

如果想讓從A服務器主動發起訪問外部 80 端口的服務,并能接收到響應

# 允許主動發起訪問遠程 80 端口的請求
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT# 允許遠程服務器返回給的響應數據包進來
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
[ 本地程序 ]
|
| 使用 TCP 協議發起請求
| 源地址: 192.168.1.10:5623
| 目標地址: 203.0.113.45:80
v
[ OUTPUT 鏈 - 出站規則 ]
|
| 檢查 iptables 規則:
| -A OUTPUT -p tcp --dport 80 -j ACCEPT
| 匹配目標端口為 80 → 放行
v
[ 發送請求到遠程服務器 ]
|
| 數據包到達遠程 Web 服務器
| Web 服務器處理請求并準備返回響應
v
[ 遠程 Web 服務器發送響應 ]
|
| 源地址: 203.0.113.45:80
| 目標地址: 192.168.1.10:5623
v
[ INPUT 鏈 - 入站規則 ]
|
| 檢查 iptables 規則:
| -A INPUT -p tcp --sport 80 -j ACCEPT
v
[ 響應數據包交付給本地程序 (端口 5623) ]

情況:A服務器不能ping其他服務器 (同理)

情況:B服務器與A服務器之間的正常通信

B服務器 向 A服務器 的 80 端口發起請求,源端口 是 6534

A服務器 響應 B服務器,源端口 是 80,目標端口 是 6534

連接成功(綠色箭頭)。

情況:黑客可以通過自己的80端口,連接A服務器中的一個隨機端口

當從 A 服務器訪問一個 Web 服務器(如 B 服務器的 http://b.example.com:80),通信過程如下:

步驟數據包方向源端口目標端口
1. A 發起請求A → B隨機非特權端口(如 54321)80
2. B 返回響應B → A8054321

當我們在上面設置針對80的過濾規則之后,就會出現問題

  1. IP欺騙:黑客構造一個TCP/IP數據包,并將該數據包的源IP地址設置為目標服務器信任的另一臺服務器的IP地址。這樣做的目的是讓目標服務器誤以為收到的數據包是來自一臺它信任的機器。

  2. 端口偽裝攻擊:在上述的基礎上,黑客進一步將源端口設為80(HTTP服務的默認端口)或其它常見的、被允許通過防火墻的服務端口。許多網絡管理員會開放這些端口以確保正常的服務通信,但這同樣可能成為攻擊者的入口。

  3. 繞過防火墻規則:如果防火墻規則配置不當,例如僅基于目的端口(--dport)或者源端口(--sport)進行過濾,而沒有考慮連接的狀態或其他安全策略,那么黑客就有可能通過這種方式發送惡意流量并成功繞過防火墻限制。

1、處理方案:tcp協議標記位

使用tcp協議的標記位,阻止從外部進來的第一次握手請求

[root@localhost ~]# iptables -I INPUT -p tcp -m tcp --sport 80 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j DROP# 簡化寫法,只檢查SYN標記位
[root@localhost ~]# iptables -I INPUT -p tcp -m tcp -sport 80 --sync -j DROP# 但這樣做也是有問題的,比如協議時UDP是沒有標記位的,無法通過標記位去判斷來自外部的第一次請求

TCP 是面向連接的協議,通信前需要建立連接,過程如下:

  1. 客戶端 → 服務端:SYN(同步標志位)=1

  2. 服務端 → 客戶端:SYN=1, ACK=1

  3. 客戶端 → 服務端:ACK=1

所以:

  • 第一次握手:只有 SYN=1

  • 后續才是 SYN+ACKACK

如果黑客試圖偽裝成 Web 服務器,主動發起連接(比如想攻擊本地的 SSH、MySQL 等服務),他會發送一個 SYN 包,源 IP 和源端口偽造為可信服務器的 80 端口。

通過上面的規則:

  • 只攔截 SYN 請求(也就是“主動發起連接”的請求)

  • 不影響正常的響應流量(因為正常響應是 SYN,ACK 或者只是 ACK

這樣就能有效防止黑客偽裝成 Web 服務器發起連接請求。

UDP 沒有 TCP 的標記位,所以不能使用 --syn 這類判斷。

UDP 是無連接協議,沒有三次握手,所以這類規則對 UDP 無效。

有些合法服務可能會從源端口 80 發起連接,如果不加區分地丟棄所有來自源端口 80 的 SYN 請求,可能會導致某些正常連接失敗。

2、處理方案:state擴展

對于靜態的無狀態的防火墻,將每個數據包都看作是獨立的數據包,并不知道數據包之間的關系,

使用 state擴展,可以分析出數據包之間的關系,不再將每個數據包只看做孤立的,

所以使用了state擴展后 netfilter可以用作有狀態防火墻,相對于無狀態防火墻,有狀態防火墻可以定義更加精準的過濾條件。

state說明
NEW新創建連接的數據包。這是指那些試圖建立新連接的初始數據包,通常包含TCP三次握手的第一個SYN包。
ESTABLISHED已連接狀態下的數據包。這些是已經成功建立連接后,在連接中傳輸的數據包,包括正常的數據交換和ACK確認等。
RELATED新建的,且與現有連接相關的數據包,典型的如ICMP數據包,FTP數據傳輸數據包。這類數據包雖然不是直接屬于某個已建立的連接,但與之相關聯,例如FTP的控制連接和數據連接、ICMP錯誤消息等。
INVALID沒有與現有連接相關的數據,像一匹孤狼,直接DROP。這類數據包無法被識別為任何已知連接的一部分,可能是由于網絡錯誤、攻擊或配置問題導致的無效數據包,通常會被丟棄以防止潛在的安全威脅。

NEW:當一個數據包試圖建立一個新的連接時,它會被標記為NEW。例如,當使用瀏覽器訪問一個網站時,計算機發送的第一個SYN包就是NEW狀態。

ESTABLISHED:一旦連接成功建立,后續在這個連接中傳輸的所有數據包都會被標記為ESTABLISHED。這包括從網站下載的數據、向網站發送的請求等。

RELATED:有些數據包雖然不是直接屬于某個已建立的連接,但與之相關聯。例如,當使用FTP下載文件時,除了控制連接外,還會有一個數據連接用于實際的數據傳輸,這個數據連接的數據包就會被標記為RELATED。再比如,ICMP錯誤消息也是與某個已建立的連接相關的,因此也會被標記為RELATED

INVALID:如果一個數據包無法被識別為任何已知連接的一部分,它就會被標記為INVALID。這種情況可能是由于網絡錯誤、攻擊或配置問題導致的。為了安全起見,這類數據包通常會被直接丟棄(DROP)。

使用state擴展來配置防火墻

配置之前,無法ping外部主機

[root@localhost ~]# ping 192.168.114.1
PING 192.168.114.1 (192.168.114.1) 56(84) bytes of data.
ping: sendmsg: 不允許的操作
ping: sendmsg: 不允許的操作

結果顯示 ping 操作被拒絕,提示“不允許的操作”。這表明當前的網絡策略或防火墻設置阻止了 ICMP 請求。

無法訪問外部 web 服務

這個執行之前請去除源端口80規則(講解A-C的時候設置的)

[root@localhost ~]# wget www.baidu.com--2021-08-18 17:16:26--  http://www.baidu.com/
正在解析主機 www.baidu.com (www.baidu.com)... 失敗:未知的名稱或服務。wget: 無法解析主機
地址 “www.baidu.com”

配置 state 擴展

[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

這里添加了兩條 iptables 規則來配置狀態擴展模塊:

INPUT 鏈規則:允許所有已建立(ESTABLISHED)和相關聯(RELATED)的入站數據包通過。

這意味著任何與現有連接相關的數據包都會被接受,例如響應數據包、ICMP 錯誤消息等。

OUTPUT 鏈規則:允許所有新建(NEW)、已建立(ESTABLISHED)和相關聯(RELATED)的出站數據包通過。

這意味著新的連接請求、現有連接的數據傳輸以及與現有連接相關的數據包都會被接受。

配置后,驗證

可以執行 ping

[root@localhost ~]# ping 192.168.114.1
PING 192.168.114.1 (192.168.114.1) 56(84) bytes of data.
64 bytes from 192.168.114.1: icmp_seq=1 ttl=128 time=0.165 ms

配置完成后,再次嘗試使用 ping 命令訪問外部 IP 地址 192.168.114.1

這次成功收到了回應,顯示 ICMP 數據包已經能夠正常發送和接收,說明出站和入站的 ICMP 流量已經被允許。

可以訪問外部資源

[root@localhost ~]# wget www.baidu.com
--2021-08-18 17:22:34--  http://www.baidu.com/
正在解析主機 www.baidu.com (www.baidu.com)... 14.215.177.39, 14.215.177.38
正在連接 www.baidu.com (www.baidu.com)|14.215.177.39|:80... 已連接。
已發出 HTTP 請求,正在等待回應... 200 OK
長度:2381 (2.3K) [text/html]

配置完成后,再次嘗試使用 wget 命令訪問百度網站 www.baidu.com

這次成功解析了主機地址并建立了連接,收到了 HTTP 200 OK 響應,說明出站和入站的 HTTP 流量已經被允許,可以正常訪問外部 Web 服務。

配置時需要注意規則的順序,如果將新加的state擴展規則,放到了前面,則可能回造成遠程客戶機 不能訪問本地web服務的問題。

nmap掃描

C:\Users\lisensir>nmap -sS -O 192.168.114.140
Starting Nmap 7.92 ( https://nmap.org ) at 2021-08-18 17:44 中國標準時間
Nmap scan report for 192.168.114.140
Host is up (0.00044s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT       STATE    SERVICE
22/tcp     open     ssh
80/tcp     closed   http
3306/tcp   closed   mysql
MAC Address: 00:0C:29:BC:31:9A (VMware)
Device type: general purpose
Running: Linux 3.x|4.x
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

更嚴謹一些的方式

# 1. 允許 TCP 協議、源端口為 1024-65535 的出站流量(NEW, ESTABLISHED, RELATED)
iptables -A OUTPUT -p tcp -m multiport --sports 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT# 2. 允許 UDP 協議、源端口為 1024-65535 的出站流量(NEW, ESTABLISHED, RELATED)
iptables -A OUTPUT -p udp -m multiport --sports 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT# 3. 允許 ICMP 協議的出站流量(NEW, ESTABLISHED, RELATED)
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT# 4. 允許所有已建立和相關連接的入站流量
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

第一個: 允許TCP協議的出站流量,滿足以下條件:

  • 源端口在 1024 到 65535 范圍內(即非特權端口,客戶端常用)

  • 并且連接狀態是:新建 (NEW)、已建立 (ESTABLISHED) 或相關 (RELATED)

客戶端發起請求時,通常使用隨機非特權端口(如瀏覽器訪問網頁、curl、wget 等),這些端口一般都在 1024~65535

  • 使用 -m multiport --sports 可以限制只放行這類客戶端使用的源端口。

  • 結合狀態模塊,確保只放行合法的新建連接或已有連接的后續通信。

用途:允許本機主動發起 TCP 連接(如訪問 Web、SSH、數據庫等)

第二個: 允許UDP協議的出站流量,滿足以下條件:

  • 源端口在 1024~65535

  • 連接狀態是:新建、已建立或相關

解釋:

  • 與第一條類似,但適用于 UDP 協議(如 DNS 查詢、NTP 時間同步、VoIP 等)

  • UDP 是無連接協議,但仍可通過狀態模塊追蹤會話

用途:允許本機主動發起 UDP 請求(如解析域名)

第三個: 允許ICMP協議(如 ping)的出站流量

  • 連接狀態為:新建、已建立或相關

解釋:

  • ICMP 不涉及端口,所以不需要用到 multiport 模塊

  • 放行 ICMP 流量是為了允許執行 pingtraceroute 等網絡診斷命令

用途:允許本機使用 ping 和 traceroute 等工具測試網絡連通性

第四個: 允許所有已建立連接和相關連接的入站流量

解釋:

  • 這是最關鍵的一條安全規則!

  • 當服務器主動發起一個請求(如訪問某個網站、更新系統包),遠程服務器會返回響應數據包,這些響應包進入服務器時走的是 INPUT 鏈。

  • 如果不放行這些響應數據包,就收不到任何回復。

  • 使用狀態模塊可以自動識別哪些是“自己發起的連接”的返回數據包,并安全地放行它們。

用途:讓服務器能正常接收自己請求的響應(比如 curl 返回結果)

二:FTP的防火墻配置

FTP分為主動模式和被動模式。

在主動模式下ftp服務器防火墻配置

# 允許入站的TCP連接到端口21(FTP控制端口),狀態為NEW或ESTABLISHED時接受
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT# 允許出站的TCP連接,源端口為21,目標端口在1024-65535之間,狀態為ESTABLISHED時接受
iptables -A OUTPUT -p tcp --sport 21 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT# 允許入站的TCP連接到端口20(FTP數據端口),狀態為ESTABLISHED時接受
iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT# 允許出站的TCP連接,源端口為20,目標端口在1024-65535之間,狀態為NEW或ESTABLISHED時接受
iptables -A OUTPUT -p tcp --sport 20 --dport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

功能:允許入站的TCP連接到端口21(FTP控制端口)。

說明:當客戶端嘗試與FTP服務器建立新的連接(NEW)或者已經建立了連接(ESTABLISHED)時,允許這些連接通過防火墻。這是為了確保客戶端能夠成功地連接到FTP服務器并進行命令交互。

iptables -A OUTPUT -p tcp --sport 21 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

功能:允許出站的TCP連接,源端口為21,目標端口在1024-65535之間,狀態為ESTABLISHED時接受。

說明:當FTP服務器響應客戶端請求時,它會從端口21發送數據到客戶端的高隨機端口(1024-65535)。這條規則確保了這些響應數據包能夠順利通過防火墻返回給客戶端。

iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

功能:允許入站的TCP連接到端口20(FTP數據端口),狀態為ESTABLISHED時接受。

說明:在主動模式下,FTP服務器會使用端口20來傳輸數據。這條規則確保了當數據傳輸已經開始(ESTABLISHED)時,數據包能夠順利通過防火墻到達客戶端。

iptables -A OUTPUT -p tcp --sport 20 --dport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT

功能:允許出站的TCP連接,源端口為20,目標端口在1024-65535之間,狀態為NEW或ESTABLISHED時接受。

說明:在主動模式下,FTP服務器會從端口20發起新的數據傳輸連接(NEW)或者繼續已有的數據傳輸(ESTABLISHED)。這條規則確保了這些數據傳輸連接能夠順利通過防火墻。

在設置客戶端防火墻時,比較麻煩: 在入站規則中,服務器的20端口號需要對客戶機的一個隨機的非特權端口發起連接請求。為方便客戶機設置,出現了被動模式。

在被動模式下ftp服務器防火墻配置

# 1. 允許 FTP 控制連接(端口 21)
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT# 2. 允許 FTP 被動模式使用的端口范圍(5000-5100)
iptables -A INPUT -p tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 5000:5100 -m state --state ESTABLISHED -j ACCEPT# 3. 允許 FTP 主動模式下的數據連接(服務器端口 20)
iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -m state --state NEW,ESTABLISHED -j ACCEPT# 4. 允許客戶端發起的數據連接(客戶端使用隨機非特權端口)
iptables -A INPUT -p tcp --sport 1024:65535 --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 1024:65535 --sport 20 -m state --state ESTABLISHED -j ACCEPT

2.1、連接跟蹤助手(了解即可)

它是 Netfilter(即 iptables/nftables)框架下的一個模塊,專門用于跟蹤 FTP 協議的連接狀態,尤其是被動模式下由服務器主動打開的額外數據連接。

若使用連接跟蹤模塊(nf_conntrack_ftp):

對于主動模式:

ftp服務器20端口號連接客戶端特定端口號的第一次握手信息(SYN)將被連接跟蹤模塊視為相關性的 (RELATED),客戶端的返回的(SYN,ACK)就是已連接(ESTABLISHED)的。

對于被動模式:

客戶端主動發起連接到ftp服務器的第一次握手信息(SYN)將被連接跟蹤模塊視為相關性的 (RELATED),ftp服務器的返回(SYN,ACK)則為已連接的(ESTABLISHED)

[root@localhost ~]# modprobe nf_conntrack_ftp
[root@localhost ~]# modinfo nf_conntrack_ftp
filename:       /lib/modules/3.10.0-1160.15.2.e17.x86_64/kernel/net/netfilter/nf_conntrack_ftp.ko.xz
alias:          nfct-helper-ftp
alias:          ip_conntrack_ftp
description:    ftp connection tracking helper
author:         Rusty Russell <rusty@rustcorp.com.au>
license:        GPL
retpoline:      Y
rhelversion:    7.9
srcversion:     F21861D5AD43080B93CC4DD
depends:        nf_conntrack
intree:         Y
vermagic:       3.10.0-1160.15.2.e17.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        02:FB:1B:20:B0:39:E3:CD:C7:59:93:8B:A9:58:53:84:81:77:80:31
sig_hashalgo:   sha256
parm:           ports:array of ushort
parm:           loose:bool
[root@localhost ~]#

2.2、實驗過程

安裝vsftp服務器

停用firewalld

使用nmap掃描,查看沒有設置防火墻的情況

首先設置防火墻允許22端口號,否則沒法使用遠程客戶端

[root@localhost /]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost /]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

設置默認規則,除明確允許的端口,禁止其他所有的端口

[root@localhost /]# iptables -P INPUT DROP
[root@localhost /]# iptables -P OUTPUT DROP

??允許客戶端發起到ftp服務器21命令端口號的連接

[root@localhost /]# iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED \
> -j ACCEPT -m comment --comment "ftp21命令端口"
# 允許外部客戶端通過 TCP 協議訪問本機的 FTP 控制端口(21),無論是新發起的連接還是已經建立的連接。[root@localhost /]# iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT \
> -m comment --comment "ftp21端口出站"
# 允許本機 FTP 服務通過 TCP 端口 21 發送響應數據包,但只允許那些屬于已建立連接的流量,防止非法出站行為。

主動模式下,允許服務器從20端口發起數據連接

[root@localhost /]# iptables -A OUTPUT -p tcp --sport 20 -m state --state RELATED,ESTABLISHED \
> -j ACCEPT -m comment --comment "允許ftp20端口出站"
# 允許服務器通過端口 20 向客戶端發送數據包,但只允許那些屬于已有 FTP 控制連接(端口 21)
或其關聯連接的數據包通過,確保安全性。[root@localhost /]# iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED \
> -j ACCEPT -m comment --comment "允許ftp服務器20端口進站"
# 允許客戶端通過端口 20 向服務器發送數據包,但僅限于已經建立的 FTP 連接(控制通道),從而
防止非法訪問。

被動模式下,允許客戶端連接ftp服務器的非特權端口

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/923605.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/923605.shtml
英文地址,請注明出處:http://en.pswp.cn/news/923605.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線性代數 · 矩陣 | 秩 / 行秩 / 列秩 / 計算方法

注&#xff1a;本文為 “線性代數 矩陣 | 秩” 相關合輯。 圖片清晰度受引文原圖所限。 略作重排&#xff0c;未全校去重。 如有內容異常&#xff0c;請看原文。 矩陣的秩及其應用 一、矩陣秩的基本概念 &#xff08;一&#xff09;k 階子式 設矩陣 A(aij)mnA (a_{ij})_{m…

Ajax-day2(圖書管理)-彈框顯示和隱藏

Bootstrap 彈框圖書管理-Bootsrap 彈框&#xff08;一&#xff09;屬性控制一、模板代碼二、彈框模板三、bootsrap 的顯示彈框屬性完整代碼&#xff08;二&#xff09;JS 控制一、模板代碼二、步驟圖書管理-Bootsrap 彈框 Bootstrap 框架渲染列表&#xff08;查&#xff09;新…

【Linux網絡】認識https

認識https一&#xff0c;概念鋪墊1.1 什么是加密&#xff1f;1.2 為什么要加密&#xff1f;1.3 加密的方式1.4 數據摘要&數據指紋二&#xff0c;認識https2.1 方案1-只使用對稱加密2.2 方案2-只使用非對稱加密2.3 方案3-雙方都使用非對稱加密2.4 方案4-非對稱加密對稱加密2…

OC-AFNetworking

文章目錄AFNetworking簡介問題&#x1f914;優化策略解決AFNetworking局限性使用單例進行網絡請求的優勢使用單例進行網絡請求的風險最優使用使用參數講解POST請求AFNetworking 簡介 這篇文章旨在實現使用AFNetworking設置一個集中的單通道網絡對象&#xff0c;該對象與MVC組建…

【數據結構】跳表

目錄 1.什么是跳表-skiplist 2.skiplist的效率如何保證&#xff1f; 3.skiplist的實現 3.1節點和成員設計 3.2查找實現 3.3前置節點查找 3.4插入實現 3.5刪除實現 3.6隨機層數 3.7完整代碼 4.skiplist跟平衡搜索樹和哈希表的對比 1.什么是跳表-skiplist skiplist是由…

html實現右上角有個圖標,鼠標移動到該位置出現手型,點擊會彈出登錄窗口。

寫了一段html代碼實現的效果&#xff1a;實現右上角有個圖標&#xff0c;鼠標移動到該位置出現手型&#xff0c;點擊會彈出登錄窗口。功能實現前端&#xff0c;沒有實現后端。<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF…

STM32G4 電流環閉環(二) 霍爾有感運行

目錄一、STM32G4 電流環閉環(二) 霍爾有感運行2. 霍爾有感運行附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)一、STM32G4 電流環閉環(二) 霍爾有感運行 2. 霍爾有感運行 文章使用的BLDC在定子側以互差120電角度的位置安裝三個霍爾元件Ha&#xff0c;Hb&#xff0c;Hc。當…

展示框選擇

好的&#xff0c;非常感謝您提供更詳細的項目情況。這是一個非常典型的父子組件通信場景。 根據您的新需求&#xff0c;我將對代碼進行重構&#xff1a; FaultSelect.vue (子組件): 這個組件現在將變得更加“純粹”。它只負責自身的下拉框邏輯&#xff0c;不關心外部按鈕&#…

第5課:上下文管理與狀態持久化

第5課:上下文管理與狀態持久化 課程目標 掌握上下文存儲和檢索策略 學習會話狀態管理 了解數據持久化方案 實踐實現上下文管理系統 課程內容 5.1 上下文管理基礎 什么是上下文管理? 上下文管理是Agent系統中維護和利用歷史信息的能力,包括: 對話歷史:用戶與Agent的交互…

計算機畢業設計 基于大數據技術的醫療數據分析與研究 Python 大數據畢業設計 Hadoop畢業設計選題【附源碼+文檔報告+安裝調試】

博主介紹&#xff1a;?從事軟件開發10年之余&#xff0c;專注于Java技術領域、Python、大數據、人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&…

K8S集群管理(2)

目錄 1.什么是Pod的根容器&#xff1f; 2.解釋Pod的生命周期。 3.Init類型容器有什么特點&#xff0c;主要用途&#xff1f; 4.Sidecar類型容器和Init容器的區別在哪&#xff1f; 5.什么是靜態Pod&#xff1f; 6.說明K8s控制器的作用&#xff1f; 7.什么是ReplicaSet&#xff0…

視頻全模態referring分割:Ref-AVS: Refer and Segment Objects in Audio-Visual Scenes

一、TL&#xff1b;DR 為什么要做&#xff1a;傳統的referring分割無法使用音頻模態&#xff0c;本文提出Reference audio-visual Segmentation本文怎么做&#xff1a;構建首個 Ref-AVS 基準數據集通過充分利用多模態提示&#xff0c;將音頻信息通過和文本融合作為載體&#x…

A股大盤數據-20250916分析

&#x1f4ca; 一、大盤數據深度分析1.1 &#x1f9ee; 市場活躍度與資金流向總成交額&#xff1a;滬深京合計約 2.37萬億元&#xff0c;市場交投活躍&#xff0c;深市成交&#xff08;13516.4億&#xff09;明顯高于滬市&#xff08;9897.9億&#xff09;&#xff0c;顯示中小…

[計算機畢業設計]基于深度學習的噪聲過濾音頻優化系統研究

前言 &#x1f4c5;大四是整個大學期間最忙碌的時光,一邊要忙著備考或實習為畢業后面臨的就業升學做準備,一邊要為畢業設計耗費大量精力。近幾年各個學校要求的畢設項目越來越難,有不少課題是研究生級別難度的,對本科同學來說是充滿挑戰。為幫助大家順利通過和節省時間與精力投…

貪心算法應用:NFV功能部署問題詳解

Java中的貪心算法應用&#xff1a;NFV功能部署問題詳解 1. NFV功能部署問題概述 網絡功能虛擬化(NFV, Network Function Virtualization)是一種將傳統網絡設備功能從專用硬件轉移到虛擬化軟件的技術。在NFV功能部署問題中&#xff0c;我們需要將各種虛擬網絡功能(VNFs)部署到有…

SeriLog測試

安裝Serilog.Sinks.Seq(5.2.3.0)&#xff0c;Serilog.Sinks.File(7.0.0) 下載Seq安裝包并安裝&#xff08;https://datalust.co/download&#xff09; 代碼如下&#xff1a; private Logger _logger;private void button1_Click(object sender, EventArgs e){_logger new Lo…

HarmonyOS 5.0應用開發——V2裝飾器@param的使用

【高心星出品】 文章目錄V2裝飾器param的使用概念使用方法案例V2裝飾器param的使用 概念 在鴻蒙ArkTS開發中&#xff0c;Param裝飾器是組件間狀態管理的重要工具&#xff0c;主要用于父子組件間的單向數據傳遞&#xff0c;這一點與V1中的prop類似。 Param裝飾的變量支持本地…

SLAM | 無人機視覺/激光雷達集群SLAM技術進展綜述

主要內容如下: 無人機集群SLAM技術概述:介紹無人機集群SLAM的基本概念、重要性及面臨的挑戰,使用表格對比不同傳感器配置的特點。 多傳感器融合與協同SLAM架構:分析集中式、分布式和混合式協同架構的特點,使用表格對比不同架構的優缺點。 視覺協同SLAM的技術進展:總結直接…

信息化系統運維文檔資料,運維服務方案,運維巡檢方案

1、系統服務內容?1.1 服務目標?1.2 信息資產統計服務?1.3 網絡與安全系統運維服務?1.4 主機與存儲系統運維服務?1.5 數據庫系統運維服務?1.6 中間件運維服務?2、服務管理制度規范?2.1 服務時間管理?2.2 運維人員行為規范?2.3 現場服務支持規范?2.4 問題記錄與歸檔規…

JavaScript——document對象

DOM 是 document object model&#xff08;文檔對象模型&#xff09;的縮寫。它是一種與平臺、語言無關的接口&#xff0c;允許程序動態地訪問或更新 HTML、XML 文檔的內容、結構和樣式&#xff0c;且提供了一系列的函數和對象來實現增、刪、改、查操作。DOM 對象的一個特點是&…