iptables 規則通過 NAT 轉發 tftp
我有一個嵌入式 Linux 設備通過乙太網連接到我的 PC。PC 能夠通過 VPN 訪問 tftp 伺服器,我正在嘗試設置 iptables 規則以允許嵌入式設備訪問 tftp 伺服器。
首先,我使用網路管理器在 eno1 設備上建立連接,並將嵌入式設備配置在同一(專用)網路上。我可以成功訪問設備上的 Web 配置頁面。
其次,我在 PC 上添加了 iptables 規則來轉發和 NAT 進出 VPN 的流量,
192.168.11.0/24
本地乙太網上的私有子網在哪裡,遠端 tftp 伺服器172.16.0.0/16
通過以下方式在子網上tun0
:-A FORWARD -i eno1 -j ACCEPT -A FORWARD -o eno1 -j ACCEPT -A POSTROUTING -s 192.168.11.0/24 -d 172.16.0.0/16 -o tun0 -j MASQUERADE
該設備現在可以通過 VPN 訪問遠端伺服器上的 http,但我找不到將 tftp 流量轉發和 NAT 到同一台伺服器的規則。我已經手動載入了以下核心模組(我不知道這是否必要):
nf_nat_tftp 16384 0 nf_conntrack_tftp 16384 1 nf_nat_tftp
我已經嘗試
-A FORWARD ... RELATED,ESTABLISHED -j ACCEPT
了我能想到的所有組合(以及網際網路建議的),但沒有任何樂趣。我有限的理解是我需要某種有狀態的轉發規則,但是我可以使用什麼?
自 2016 年的 Linux 4.7 起,預設情況下禁用 conntrack 自動助手分配(在核心消息中對此有多年警告之後):
四年前,我們在 72110dfaa907 中引入了一個新的 sysctl 旋鈕來禁用自動助手分配(“netfilter:nf_ct_helper:禁用自動助手分配”)。此旋鈕預設啟用此行為以保持保守。
引入此措施是為了提供一種通過顯式規則配置 iptables 和連接跟踪幫助程序的安全方法。
雖然很容易恢復到非安全版本,但我寧願使用使用iptables的新方法提供答案(nftables也可以這樣做,但鏈優先級略有不同)。此部落格中記錄了執行此操作的方法:安全使用 iptables 和連接跟踪助手。
因此,按照那裡的資訊,這應該在進行 NAT 的路由器上完成:
- 大警告:
輔助模組必須存在並且能夠在原始表中引用它的規則之前自動載入,否則規則添加將失敗。這甚至可能會阻止
iptables-restore
防火牆正常工作並使防火牆在啟動時沒有任何規則。無論如何,模組的 NAT 部分(此處
nf_nat_tftp
)不會自動載入。所以最好像 OP 一樣在系統啟動時顯式載入這個模組。
- 假設現在這是預設設置或已完成:
# sysctl -w net.netfilter.nf_conntrack_helper=0
- 幫助器位置的顯式聲明,這裡的選擇器模仿 OP 的 POSTROUTING 中使用的選擇器(使用 TFTP 伺服器的精確和唯一IP 地址會更好):
iptables -A PREROUTING -t raw -p udp --dport 69 -s 192.168.11.0/24 -d 172.16.0.0/16 -j CT --helper tftp
這個規則現在應該在足夠的時候啟動助手,從而觸發 TFTP 數據和埠的修改,因為 TFTP 是一個複雜的協議,伺服器回复可以從不相關的源埠返回到動態/臨時客戶端源埠,如圖所示在 TFTP 的此Wikipedia 條目中。
- 明確接受通用的已建立流量、到tftp的相關流量和初始 TFTP 查詢:
由於您已經接受來自和去往eno1的任何內容,因此這些規則對您目前的配置沒有用處。如果您選擇收緊防火牆規則,這裡就是。您可以選擇使它們或多或少緊密(添加介面等):
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -A FORWARD -m conntrack --ctstate RELATED -m helper --helper tftp -s 172.16.0.0/16 -d 192.168.11.0/24 -j ACCEPT iptables -A FORWARD -s 192.168.11.0/24 -d 172.16.0.0/16 -p udp --dport 69 -j ACCEPT
第二條規則在回復建立之前授權從伺服器到客戶端的那些特定於 TFTP 的反向連接(因此方向相反)。FORWARD 鏈看到非 NAT 的流量,所以它不必知道 MASQUERADE 期間發生了什麼(雖然 tftp 助手確實干預了那裡)。