我在配置以下場景時需要幫助:小型機構網路的網頁瀏覽是透過代理伺服器完成的,其身份驗證在 Debian 中配置為代理/防火牆(使用 iptables 規則)並連接到父代理。 LAN 的用戶端不會向外部進行任何類型的 DNS 查詢,因為所有 Web 瀏覽都是透過代理進行的,不需要對外部服務進行其他類型的存取。現在:我們必須存取特定IP位址xxx.xxx.xxx.xxx的jitsi伺服器。對 jitsi 伺服器的 Web 存取權很好,因為代理程式會處理它,但是分別發送到 UDP 連接埠 10000 和 TCP 4443 的資料包,我還沒有設法在 iptables 規則中處理它們。
組網方案如下:
eth0 上的 LAN (192.168.0.0/24) ---- (192.168.0.1 ens18)debian 代理/防火牆(192.168.1.2 ens19) -- (192.168.1.1)調變解調器路由器 ---->ISP
iptables規則如下:
*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT DROP [0:0]
# ##### INPUT chain ###### Accept relate or stablished connections
-A INPUT -m conntrack ! -i lo --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
-A INPUT -p udp -m udp -m conntrack --dport 33434:33534 --ctstate NEW -j REJECT
# Anti spoofing rule
-A INPUT ! -s 192.168.0.0/24 -i ens18 -j LOG --log-prefix "SPOOFED PKT "
-A INPUT ! -s 192.168.0.0/24 -i ens18 -j DROP
# LAN TO PROXY LOCAL
-A INPUT -p tcp -m state -s 192.168.0.0/24 -i ens18 --dport 8080 --state NEW -j ACCEPT
# ACCESS TO WEB REPORTS
-A INPUT -p tcp -m state -s 192.168.0.2/24 -i ens18 --dport 80 --state NEW -j ACCEPT
# ACCESS TO SSH
-A INPUT -p tcp -m state -s 192.168.0.2/24 -i ens18 --dport 22 --state NEW -j ACCEPT
# TIME SYNC FOR LAN
-A INPUT -p udp -i ens18 -m state --sport 123 --state NEW -j ACCEPT
# WEBMIN ACCESS
-A INPUT -p tcp -m state -s 192.168.0.2/24 -i ens18 --dport 10000 --state NEW -j ACCEPT
# LOG the rest and drop by default input chain
-A INPUT ! -i lo -j LOG --log-prefix "DROP INPUT " --log-ip-options --log-tcp-options
-A OUTPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
-A OUTPUT -m state --state INVALID -j DROP
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ##### OUTPUT chain ###### ## ACCEPT rules for allowing connections out
-A OUTPUT -p tcp -m state --dport 21 --state NEW -j ACCEPT
-A OUTPUT -p tcp -m state --dport 80 --state NEW -j ACCEPT
-A OUTPUT -p tcp -m state --dport 443 --state NEW -j ACCEPT
-A OUTPUT -p udp -m state --dport 123 --state NEW -j ACCEPT
# external DNS servers (only reachable, no recursion enabled)
-A OUTPUT -p udp -m state -d XXX.XXX.XXY.131 --dport 53 --state NEW -j ACCEPT
-A OUTPUT -p tcp -m state -d XXX.XXX.XXX.132 --dport 53 --state NEW -j ACCEPT
-A OUTPUT -m state -d XXX.XXX.XXX.68 --state NEW -j ACCEPT
**# TRYING TO REACH JITSI SERVER
-A OUTPUT -m state -d XXX.XXX.ZXX.XXX --state NEW -j ACCEPT**
-A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
# ##### FORWARD chain ###### Accept relate or stablished connections
-A FORWARD -m state --state INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD ! -s 192.168.0.0/24 -i ens18 -j LOG --log-prefix "SPOOFED PKT "
-A FORWARD ! -s 192.168.0.0/24 -i ens18 -j DROP
# prevent forwarding packets for connections initiated from the outside (spoofing)
-A FORWARD -m state -i ens19 --state NEW -j DROP
# ## default log rule
-A FORWARD ! -i lo -j LOG --log-prefix "DROP FORWARD " --log-ip-options --log-tcp-options
COMMIT
# Completed
# Generated by webmin
*mangle
:OUTPUT ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
# Generated by webmin
*nat
:OUTPUT ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# SOURCE NAT FOR LAN NETWORK ON
-A POSTROUTING -o ens19 -j SNAT --to-source 192.168.1.2
# MASQUERADE (FOR DYNAMIC IP ADDRESSS IN CASE OF DHCP MODEM)
-A POSTROUTING -s 192.168.0.0/24 -o ens19 -j MASQUERADE
COMMIT
# Completed
**** 這些相同的防火牆規則有一些有趣的事情:我們可以訪問伺服器上的視訊會議https://meet.jit.si沒有什麼問題。 xxx.xxx.xxx.xxx 的 jitsi 伺服器管理員認為只需要存取連接埠 UDP 10000 和 TCP 4443,正如我所解釋的,當然還有 443(由網路代理處理)