
我正在嘗試將 ubuntu 伺服器 22.04(虛擬化)設定為具有一個 wan 介面(ens18)和多個 lan 介面 ens19:ens23 和 ens1 的路由器。
這是我想要實現的目標:
- 允許 ens19:ens21 上網
- 允許 ens23 上網
- 允許 ens22 訪問互聯網,但僅限於工作日的工作時間
- 拒絕 ens1 上網。
- 允許所有 LAN 接口,包括 ens1 存取 ens19
- 阻止 ens19 之外的 LAN 之間的訪問
這是我面臨的問題。由於某種原因,當我將預設轉送規則設定為 DROP 時,客戶端網路根本無法存取互聯網,也無法存取 ens19。我嘗試將預設轉送規則設為接受,然後我可以從每個網路完全存取網路。
我認為我在前向鏈中缺少一些規則或使用了不正確的規則。非常感謝這裡的任何建設性意見。
以下是我用來設定 iptables 的指令:
#flush existing config
sudo iptables -F
sudo iptables -X
#temporary rules for configuration purposes
sudo iptables -A INPUT -i ens18 -p tcp --dport 22 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 3306 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 33060 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 80 -j ACCEPT
##set default policies
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
#allow loopback
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
#allowe established and related incoming traffic
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#Allow access to WAN
sudo iptables -A FORWARD -i ens19 -o ens18 -j ACCEPT
sudo iptables -A FORWARD -i ens20:ens21 -o ens18 -j ACCEPT
sudo iptables -A FORWARD -i ens22 -o ens18 -m time --timestart $(date -u -d @$(date "+%s" -d "07:00") +%H:%M) --timestop $(date -u -d @$(date "+%s" -d "20:00") +%H:%M) --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
sudo iptables -A FORWARD -i ens23 -o ens18 -j ACCEPT
#Allow Access from LAN to DMZ
sudo iptables -A FORWARD -i ens20:ens23 -o ens19 -j ACCEPT
sudo iptables -A FORWARD -i ens1 -o ens19 -j ACCEPT
#deny access to WAN from the lan connected to ens1
sudo iptables -A FORWARD -i ens1 -o ens18 -j DROP
#deny communication between interfaces ens20:ens23, ens1
sudo iptables -A FORWARD -i ens20 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens20 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens20 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens23 -j DROP
#enable masquerading on port ens18
sudo iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
##save and reload
sudo netfilter-persistent save
sudo netfilter-persistent reload
這是 iptables -nvL 的輸出:
henrik@server0router:~$ sudo iptables -nvL
Chain INPUT (policy DROP 3 packets, 939 bytes)
pkts bytes target prot opt in out source destination
104 7488 ACCEPT tcp -- ens18 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
Chain FORWARD (policy DROP 58 packets, 4640 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- ens18 ens19 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
0 0 ACCEPT tcp -- ens18 ens19 0.0.0.0/0 0.0.0.0/0 tcp dpt:33060
0 0 ACCEPT tcp -- ens18 ens19 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- ens19 ens18 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- ens20:ens21 ens18 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- ens22 ens18 0.0.0.0/0 0.0.0.0/0 TIME from 05:00:00 to 18:00:00 on Mon,Tue,Wed,Thu,Fri UTC
0 0 ACCEPT all -- ens23 ens18 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- ens20:ens23 ens19 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- ens1 ens19 0.0.0.0/0 0.0.0.0/0
6 450 DROP all -- ens1 ens18 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens20 ens21 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens20 ens22 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens20 ens23 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens21 ens20 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens21 ens22 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens21 ens23 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens22 ens20 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens22 ens21 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens22 ens23 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens23 ens20 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens23 ens21 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens23 ens22 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens1 ens20 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens1 ens21 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens1 ens22 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens1 ens23 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 3 packets, 984 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
54 5744 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate ESTABLISHED
henrik@server0router:~$ ^C
答案1
好的,所以我想我找到了解決方案。
澄清一下,我的設定是幾個 ubuntu 伺服器在 Proxmox VE 上作為 Qemu/KVM 運行,此外還有一些桌面虛擬機來模擬不同的網路用戶端。
這些機器使用 proxmox 中設定的橋接器將每個客戶端和「server1」連接到「server0router」。這裡的問題是,當proxmox中的VM添加網路介面時,虛擬機器管理程式中的防火牆功能預設為啟用,以允許在Web介面中為VM建立防火牆規則。
在 proxmox 中取消選取 server0router 虛擬機器網路介面中的「防火牆」複選框後,一切似乎都按照虛擬機器內的規則集指定的方式運作。
編輯:也必須切換到每個連接埠的單獨規則,而不是使用 ens20:ens23,因為即使輸入命令沒有給出錯誤,範圍似乎也不起作用。