我目前正在 Linode 上跨多个数据中心设置 OpenVPN。OpenVPN 设置运行良好,我现在专注于设置防火墙,以便保护 Linode 提供的公共和私有 IP。
但是,我似乎遇到了问题。在我的 VPN 服务器上,当我设置防火墙并重新启动 VPN 服务器时,防火墙会在启动时自动加载,但是,我的 VPN 客户端似乎都无法 ping VPN 服务器(位于10.8.0.1
)。当我关闭 VPN 服务器上的防火墙(iptables -F
)时,客户端能够 ping VPN 服务器。当我随后在服务器上恢复防火墙(iptables-restore < /etc/iptables.up.rules
)时,客户端仍然能够 ping VPN 服务器。
我认为防火墙要么阻止要么不阻止,但我似乎无法弄清楚为什么会出现这种情况。
这些是我的 VPN 服务器上的 iptables:
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
# prevent attacks on port 22.
-I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
-I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 90 --hitcount 4 -j DROP
# OpenVPN
-A INPUT -i eth0:0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
-A INPUT -i eth0:1 -m state --state NEW -p udp --dport 1194 -j ACCEPT
# Allow TUN interface connections to OpenVPN server
-A INPUT -i tun+ -j ACCEPT
# Allow TUN interface connections to be forwarded through other interfaces
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# NAT the VPN client traffic to the internet
*nat
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
答案1
防火墙不会阻止已经建立 VPN 连接因为在顶部附近有以下规则:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
这意味着,已经处于该ESTABLISHED
状态的连接(从连接跟踪如果不指定 netfilter 模块,则该命令将一直通过。
另外,您的链很可能INPUT
有一个“策略” ACCEPT
;这就是为什么打开iptables -F
防火墙,允许 OpenVPN 建立连接。
请注意,即使刷新了 netfilter 规则,连接仍然会被跟踪。
概括起来,发生的事情是:
- 防火墙阻止了 OpenVPN 连接尝试
- 规则被冲走了
- OpenVPN 可以连接 ==> 状态转换到
ESTABLISHED
- 规则已恢复
- OpenVPN 流量可以恢复,因为状态已经
ESTABLISHED