允许 OpenVPN 通过特定端口 - CentOS 6.5

允许 OpenVPN 通过特定端口 - CentOS 6.5

我拥有一台 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

http://pastebin.com/RhzFBG8R

输出: iptables -L -n -v | head

http://pastebin.com/n6gLe68s

答案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

相关内容