正确配置 openvpn 服务器后面的 iptables 规则

正确配置 openvpn 服务器后面的 iptables 规则

嗨朋友们,希望大家都过得很好。

我对如何为 openvpn 服务器配置 iptables v4 规则有一点误解。

如果有巫师可以给我提示那就太好了。

我很确定这次会议很混乱,我可以清理一下然后开始工作。

openvpn 是 pfSense 后面的服务器(通过 ipsec 连接到其他 pfSense)

有 5 个子网:

10.17.1.0/24
10.17.3.0/24
192.168.0.0/24
192.168.1.0/24
192.168.2.0/24

这里是 openvpn 接口:

ens18            UP             10.17.1.66/16
tun0             UNKNOWN        100.65.0.1 peer 100.65.0.2/32

openvpn server.conf如下:

port 1194
proto udp
dev tun
ca ca.crt
cert OpenVPN-srv.crt
key OpenVPN-srv.key  # This file should be kept secret
dh dh.pem
server 100.65.0.0 255.255.0.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "route 10.17.1.4 255.255.255.255"
push "route 10.17.1.50 255.255.255.255"
push "route 10.17.1.30 255.255.255.255"
push "route 10.17.1.100 255.255.255.255"
push "route 10.17.1.104 255.255.255.255"
push "route 10.17.1.204 255.255.255.255"
push "route 192.168.1.3 255.255.255.255"
push "route 192.168.0.39 255.255.255.255"
push "route 192.168.0.45 255.255.255.255"
push "route 192.168.0.46 255.255.255.255"
client-config-dir ccd
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-GCM
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 0
explicit-exit-notify 1

因此,vpn 为所有用户提供特定的路由(nas 和其他东西)

我们的目的基础非常简单:

  1. 所有人都需要访问这些 IP
  2. 管理员/技术人员需要访问所有子网 /24
  3. 一些客户端(ccd)只需要访问一个特定的ip

这是 iptables 规则集:小心,你的眼睛可能会被这样的混乱所灼伤:

### Generated by xtables-save v1.8.2 on Mon Apr 11 22:36:15 2022
*nat
:PREROUTING ACCEPT [409:51597]
:INPUT ACCEPT [129:18430]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [35:2589]
-A POSTROUTING -o ens18 -j MASQUERADE
COMMIT
# Completed on Mon Apr 11 22:36:15 2022
# Generated by xtables-save v1.8.2 on Mon Apr 11 22:36:15 2022
*filter
:INPUT ACCEPT [4750:1371382]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3080:2057099]

# we accept ssh from those subnets
-A INPUT -p tcp -m tcp --dport 22 -s 100.65.0.77/32 -d 10.17.1.66/32 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -s 192.168.1.0/24 -d 10.17.1.66/32 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -s 192.168.0.0/24 -d 10.17.1.66/32 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -s 10.17.1.0/24 -d 10.17.1.66/32 -j ACCEPT

# we accept any new connection on udp :1194 from outside (interface ens18)
-A INPUT -i ens18 -m state --state NEW -p udp --dport 1194 -j ACCEPT

# we drop ssh on tcp :22
-A INPUT -i ens18 -p tcp -m tcp --dport 22 -j DROP

# we accept already established forwarded con
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# we accept all clients on all specific ips

# NAS
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.4/32 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.30/32 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.50/32 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.104/32 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.204/32 -j ACCEPT

# server1 server2 server3 
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.21/32 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.24/32 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.100/32 -j ACCEPT

# servera serverb serverc
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 192.168.0.39/32 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 192.168.0.45/32 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 192.168.0.46/32 -j ACCEPT

# serverx
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 192.168.1.3/32 -j ACCEPT

# we give static ips to specific clients
# we accept admins/tech on all subnets

# admin1
-A FORWARD -i tun0 -s 100.65.0.77/32 -d 10.17.1.0/24 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.77/32 -d 10.17.3.0/24 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.77/32 -d 192.168.0.0/24 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.77/32 -d 192.168.1.0/24 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.77/32 -d 192.168.2.0/24 -j ACCEPT

# we need specific access from client to only specific subnets or ips

# tech1 need to be limited to this very ip
-A FORWARD -i tun0 -s 100.65.0.81/32 -d 10.17.3.130/32 -j ACCEPT

# tech2 need to be limited to this very subnets
-A FORWARD -i tun0 -s 100.65.0.206/32 -d 10.17.1.0/24 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.206/32 -d 10.17.3.0/24 -j ACCEPT

# client3 need to be limited to this very ip
-A FORWARD -i tun0 -s 100.65.0.108/32 -d 10.17.1.50/32 -j ACCEPT

# client4 need to be limited to this very ips
-A FORWARD -i tun0 -s 100.65.0.157/32 -d 10.17.1.204/23 -j ACCEPT
-A FORWARD -i tun0 -s 100.65.0.157/32 -d 192.168.0.39/32 -j ACCEPT

# client5 need to be limited to this very ip
-A FORWARD -i tun0 -s 100.65.0.25/32 -d 192.168.1.3/32 -j ACCEPT

# client6 need to be limited to this very ip
-A FORWARD -i tun0 -s 100.65.0.166/32 -d 10.17.1.100/32 -j ACCEPT


# we drop any other demand on the subnets
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 192.168.0.0/16 -j DROP
-A FORWARD -i tun0 -s 100.65.0.0/24 -d 10.17.1.0/16 -j DROP
-A FORWARD -i tun0 -s 100.65.0.166/32 -d 10.17.1.0/24 -j DROP
-A FORWARD -i tun0 -s 100.65.0.166/32 -d 10.17.3.0/24 -j DROP
-A FORWARD -i tun0 -s 100.65.0.166/32 -d 192.168.0.0/24 -j DROP
-A FORWARD -i tun0 -s 100.65.0.166/32 -d 192.168.1.0/24 -j DROP
-A FORWARD -i tun0 -s 100.65.0.166/32 -d 192.168.2.0/24 -j DROP

COMMIT

所以问题是:

  1. 我觉得这太乱了
  2. client6 需要仅限于 10.17.1.100,现在他可以访问 192.168.1.3、192.168.0.39、192.168.0.45,
  3. 在某些时候,我会尝试仅让某些客户端访问特定端口(使用 -dport 选项)。

我非常确定有人可以启发我,并给我一些提示和线索来帮助我解决这个问题。

提前致谢。

祝你今天过得愉快。

答案1

我会以答案的形式回答一个问题,因为我还没有足够的积分来发表评论,但在理解您的评论后我会删除。

好吧,您是否尝试阻止使用 OpenVPN 连接到您网络的每个人的 IP 范围?

请提供更多详细信息,说明您如何尝试阻止此曲目以及结果如何。

相关内容