Назад | Перейти на главную страницу

Контроль доступа к ресурсам за сервером

Я хочу ограничить доступ пользователей VPN к одной локальной сети. Я пытался обернуть голову вокруг client-config-dir внутри server.conf, но не могу заставить его работать.


+---------+             +---------+
| client1 |             | client2 |
+---------+             +---------+
           \           /
            +---------+
            | server  | 10.10.1.23
            +---------+
                 |
            +---------+
            |   vpc   | 10.10.0.0/16
            +---------+
                 |
            +---------+
            |  local  | 10.10.0.112
            +---------+
+-------------------------------+
| VPC  |     subnet   | region  |
+------+------------+-----------+
| vpc0 | 10.10.0.0/16 | region0 |
+------+-------------+----------+

С моей текущей настройкой openvpn я могу подключиться ко всем экземплярам за VPC. Однако мне нужно, чтобы client1 имел доступ только к машине 10.10.0.112, а client2 - только к машине 10.10.0.222. Я играл с ccd директива и iptables, но я не могу об этом подумать.

Мой Openvpn server.conf

port 1194
proto udp
dev tun
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.10.0.2"
push "redirect-gateway def1 bypass-dhcp"
dh none
client-config-dir /etc/openvpn/ccd
ecdh-curve prime256v1
tls-crypt tls-crypt.key 0
crl-verify crl.pem
ca ca.crt
cert server_4nP1zpKP5eaV6jEz.crt
key server_4nP1zpKP5eaV6jEz.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
log-append /home/ubuntu/openvpn.log
status /var/log/openvpn/status.log
verb 3

client1.ovpn

client
proto udp
remote **.**.***.*** 1194
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verify-x509-name server_4nP1zpKP5eaV6jEz name
auth SHA256
auth-nocache
cipher AES-128-GCM
tls-client
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
setenv opt block-outside-dns # Prevent Windows 10 DNS leak
verb 3

Таблица маршрутов для сервер netstat -nr

0.0.0.0         10.10.1.1       0.0.0.0         UG        0 0          0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U         0 0          0 tun0
10.10.1.0       0.0.0.0         255.255.255.0   U         0 0          0 eth0

IP-МАРШРУТ ip route

default via 10.10.1.1 dev eth0 
10.8.0.0/24 dev tun0  proto kernel  scope link  src 10.8.0.1 
10.10.1.0/24 dev eth0  proto kernel  scope link  src 10.10.1.140 

ПЗС для КЛИЕНТ

Нужна помощь с client-config-dir, нужно только, чтобы client1 имел доступ к 10.10.0.112, на данный момент он может получить доступ ко всем машинам LAN за VPN-сервером.

IPTABLE ДЛЯ КЛИЕНТА

iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 10.10.0.112 -j ACCEPT

Буду очень признателен, если кто-то может указать мне правильное направление.

Вы должны назначить клиентам фиксированные IP-адреса. Например. ccd/client1 может содержать:

ifconfig-push 10.8.0.112 255.255.255.0
push "route 10.10.0.112"

Таким образом, клиент получает фиксированный адрес (10.8.0.112) и маршрут для хоста 10.10.0.112 только. Конечно, клиент может переопределить конфигурацию, отправленную сервером, и добавить свои собственные, например:

pull-ignore "ifconfig"
# this will fail
ifconfig 10.8.0.222 255.255.255.0
# this will work
route 10.10.0.0 255.255.0.0

Сервер сбросит все пакеты, приходящие из client1, которые не имеют адреса 10.8.0.112 так что ifconfig директива не будет работать, но это не функция безопасности, а техническое ограничение. В route директива с другой стороны будет работать по запросу.

Поэтому вам необходимо добавить правила брандмауэра на VPN-сервере:

# Access to DNS server
iptables -A FORWARD -p udp --dport 53 -s 10.8.0.0/24 -d 10.10.0.2 -j ACCEPT
iptables -A FORWARD -p tcp --dport 53 -s 10.8.0.0/24 -d 10.10.0.2 -j ACCEPT
# Access for client1
iptables -A FORWARD -s 10.8.0.112 -d 10.10.0.112 -j ACCEPT
# Drop everything else
iptables -A FORWARD -s 10.8.0.0/24 -d 10.10.0.0/16 -j DROP