![允许 OpenVPN 通过特定端口 - CentOS 6.5](https://linux22.com/image/623647/%E5%85%81%E8%AE%B8%20OpenVPN%20%E9%80%9A%E8%BF%87%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3%20-%20CentOS%206.5.png)
我拥有一台 VPS(CentOS 6.5)。我已在此服务器上安装了 OpenVPN。一切正常,我可以连接和浏览等。假设我的服务器 IP 是:1.2.3.4
。当我连接到我的 VPS 时,我的 IP 是1.2.3.4
。
我还安装了 OpenERP(在同一个 VPS 上),它在端口 8069 上运行。
我想要实现的是阻止端口 8069 上除 VPN 流量之外的所有流量。因此,我必须使用 OpenVPN 连接到我的 VPS 才能访问http://1.2.3.4:8069
。
我尝试了网上的几个 iptables 教程,但都没有用。
例如:
iptables -A INPUT -p tcp -s 1.2.3.4 --dport 8069 -j ACCEPT
or
iptables -A INPUT -p tcp -s 10.8.0.0/24 --dport 8069 -j ACCEPT
or
iptables -I INPUT \! --src 10.8.0.0/24 -m tcp -p tcp --dport 8069 -j DROP
or
iptables -I INPUT \! --src 1.2.3.4 -m tcp -p tcp --dport 8069 -j DROP
这些只是示例。我尝试了更多规则。我遵循的所有教程都会阻止端口 8069 上的所有流量,即使我使用 OpenVPN 连接到我的 VPS,我也无法访问http://1.2.3.4:8069
。
有人知道如何阻止端口 8069 上除我的 VPN 连接之外的所有流量吗?我该如何实现这一点?
我的 server.conf 是:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-option DNS 10.8.0.1"
user nobody
group nobody
keepalive 5 30
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun
verb 5
我的客户端配置是:
dev tun
client
proto udp
remote 1.2.3.4
port 1194
resolv-retry infinite
nobind
redirect-gateway def1
persist-key
persist-tun
ca ca.crt
cert nika-pc.crt
key nika-pc.key
cipher AES-256-CBC
comp-lzo
ns-cert-type server
verb 5
提前致谢。
编辑:
输出:iptables -L -n -v
输出: iptables -L -n -v | head
答案1
老实说,这是一个复杂的防火墙设置(尽管可怕许多规则的数据包计数为零,这让我认为其中有很多历史遗留问题)。与其深入研究并试图找出哪些现有规则错误地捕获了这些流量,我建议我们直接切入正题,将相关规则放在最顶部:
iptables -I INPUT 1 -p tcp -i tun+ --dport 8069 -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 8069 -j REJECT
编辑:我真的鼓励您将更新编辑到您的问题中,而不是留下无休止的 pastebin 链接,这些链接可能会随着时间的推移而保留,也可能不会保留。无论如何,感谢您的新输出。如您所见,第一条规则上的数据包计数为零,而第二条(全面拒绝)规则上的数据包计数绝对不是零。剩下的唯一结论是,您对使用 OpenVPN 连接的流量有误解;很明显,它是通过纯文本互联网传输的。如果您想完全地当然,在上面两条规则之间添加第三条规则,
iptables -I INPUT 2 -p tcp --dport 8069 -j LOG --log-prefix "CARROT: "
除非这个词CARROT
经常出现在您的日志文件中,否则应该很容易在您的系统日志中找到这些匹配的输出(/var/log/messages
,或syslog
您的发行版认为合适的),它们应该确认被拒绝的数据包来自哪个接口。我不指望它是tun0
。
答案2
我添加了一个答案,因为我无法添加评论。我认为使用的协议是 udp 而不是 tcp,所以
iptables -I INPUT 1 -p udp -i tun+ --dport 8069 -j ACCEPT
iptables -I INPUT 2 -p udp --dport 8069 -j REJECT