LINUX.ORG.RU
решено ФорумAdmin

[OpenVPN] [iptables] [TightVNC] Безопасное удалённое администрирование


0

1

Добрый день. Необходимо реализовать безопасное удалённое администрирование на основе связки OpenVPN и TightVNC. Администрировать предполагается разнородные хосты (клиенты), причём с минимальным вмешательством в уже существующие сетевые структуры.

Предполагается работать по следующей схеме:

  • На хосте-клиенте поднимается либо постоянное подключение к серверу OpenVPN, либо подключение инициирует клиент.
  • Администратор должен иметь возможность работать откуда угодно (как из офиса, так и со своего ноутбука, через Интернет).
  • Никакого другого трафика, кроме как на порт TightVNC (5900) ходить внутри сети не должно.
  • Никакой маршрутизации между физическими сетями быть не должно, весь трафик должен ходить только внутри туннелей.

Самым простым способом реализации мне показался такой: и клиенты, и администратор подключаются к серверу OpenVPN в нашем офисе, после чего администратор, находясь с клиентом в одной виртуальной сети (172.17.255.0/24) и зная статический адрес клиента, подключается к последнему по TightVNC. Я сделал следующее:

  • Поднял в нашей сети (192.168.1.0/24) сервер OpenVPN с нуля. (192.168.1.23).
  • Настроил его на выдачу статических адресов для каждого клиента, выписал для клиентов и администратора сертификаты
    Конфиг OpenVPN:
    
    Сервер (часть конфигурации):
    ------------------
    local 192.168.1.23
    port 1194
    proto tcp
    dev tun0
    server 172.17.255.0 255.255.255.0
    client-to-client
    client-config-dir /etc/openvpn/ccd
    
    
    Пример клиентской конфигурации (/etc/openvpn/ccd/client1):
    ----------------------------------
    ifconfig-push 172.17.255.9 172.17.255.10
    
    Конфигурация администратора (/etc/openvpn/ccd/admin)
    ----------------------------------
    ifconfig-push 172.17.255.5 172.17.255.6
    
    
    
  • Частично настроил iptables
    iiptables -n -t filter -L
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     tcp  --  192.168.1.0/24       192.168.1.23        tcp dpt:8000 
    ACCEPT     tcp  --  0.0.0.0/0            192.168.1.23        tcp dpt:22 
    ACCEPT     tcp  --  0.0.0.0/0            192.168.1.23        tcp dpt:1194 
    ACCEPT     tcp  --  0.0.0.0/0            172.17.255.0/24     tcp dpt:5900 
    
    Chain FORWARD (policy DROP)
    target     prot opt source               destination         
    ACCEPT     all  --  172.17.255.0/24      0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            172.17.255.0/24     state RELATED,ESTABLISHED 
    ACCEPT     all  --  192.168.1.0          0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            192.168.1.0         state RELATED,ESTABLISHED 
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    
    -------------------------------------------------------------------
    
    sudo iptables -n -t nat -L
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    SNAT       all  --  172.17.255.0/24      0.0.0.0/0           to:192.168.1.23 
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination 
    

Сейчас все клиенты нормально подключаются, пинг между клиентами и на сервер проходит. Вопрос: что добавить/изменить в iptables, чтобы заблокировать весь трафик между клиентами, кроме как на порт 5900 от администратора к клиенту? Клиенты не должны иметь возможность подключения друг к другу на порт TightVNC.

Помогите, пожалуйста, разобраться.

Как всё умно пишешь, а man openvpn не читал, скопипастил client-to-client откуда-то и теперь выдумываешь решение, чтобы клиенты друг-друга не видели.

А администратор просто через сервер должен выполнять подключение.

adriano32 ★★★ ()
Ответ на: комментарий от adriano32

Почитал ман. Действительно, client-to-client тут совершенно не нужен, так как в этом случае пакеты между клиентами вообще не проходят фильтрацию. Убрал из конфига.

администратор просто через сервер должен выполнять подключение

Но как это лучше сделать? Вынести админа в отдельную сеть (например, 172.17.1.1/32)? Я, честно говоря, в замешательстве. Сейчас читаю openvpn-howto, FAQ по сетям, диаграмму прохождения пакетов и руководство по iptables.

Не исключено, что я зря взялся за это дело вообще :(

lucif0rm ()
Ответ на: комментарий от lucif0rm

Что значит зря? Это ваша работа :)

Но как это лучше сделать

Самый элементарный и возможно туповатый вариант IMO — выключить client-to-client, а для админского адреса завести на файрволе OpenVPN-сервера правила для портмаппинга, то есть переадресовывать запрос VNC-клиента админа, скажем, на порт 5901 OpenVPN-сервера на порт 5900 клиента#1, на порт 5902 OpenVPN-сервера на порт 5900 клиента#2, на порт 5903 OpenVPN-сервера на порт 5900 клиента#3 и т.д.

Останется только подпилить на стороне сервера, чтобы при подключении каждого нового клиента добавлялось правило в файрвол, а при отключении — удалялось.

Наверняка есть более простой способ, скастуйте mky, mironov_ivan, true_admin, Pinkbyte, zgen если вам срочно.

adriano32 ★★★ ()

>Самый элементарный и возможно туповатый вариант IMO — выключить client-to-client, а для админского адреса завести на файрволе OpenVPN-сервера правила для портмаппинга

хм. а я в первую очередь подумал бы о втором процессе OpenVPN с отдельными настройками для админа(другой порт и подсеть, сертификаты сервера/ca можно оставить те же), соответственно вся маршрутизация будет идти не через демона OpenVPN, а как обычно через ядро. Ну а там хоть обфаерволься :D

Pinkbyte ★★★★★ ()

Решено

Спасибо за рекомендации! Создал второй конфиг OpenVPN, специально для администратора (или администраторов, так как такая схема позволяет работать нескольким админам одновременно). Прописал фильтры в цепочку FORWARD. Моя текущая конфигурация:

  • /etc/openvpn/client_server.conf:
    local 192.168.1.23
    port 1194
    proto tcp
    dev tun0
    ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
    cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
    key /etc/openvpn/easy-rsa/2.0/keys/server.key  # This file should be kept secret
    dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
    server 172.17.2.0 255.255.255.0
    keepalive 10 12
    cipher BF-CBC
    comp-lzo
    user nobody
    group nogroup
    persist-key
    persist-tun
    verb 3
    mute 20
    client-config-dir /etc/openvpn/ccd-client
    log-append /var/log/openvpn.log
    
    
  • /etc/openvpn/admin_server.conf:
    local 192.168.1.23
    port 1195
    proto tcp
    dev tun1
    ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
    cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
    key /etc/openvpn/easy-rsa/2.0/keys/server.key  # This file should be kept secret
    dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
    server 172.17.1.0 255.255.255.0
    keepalive 10 12
    cipher BF-CBC
    comp-lzo
    user nobody
    group nogroup
    persist-key
    persist-tun
    verb 3
    mute 20
    client-config-dir /etc/openvpn/ccd-admin
    log-append /var/log/openvpn.log
    
    
  • Примеры конфигураций /etc/openvpn/ccd-*/:
    ccd-admin:
    ifconfig-push 172.17.1.5 172.17.1.6
    push "route 172.17.2.0 255.255.255.0"
    
    ccd-client:
    ifconfig-push 172.17.2.9 172.17.2.10
    push "route 172.17.1.0 255.255.255.0"
    
    
  • Файрволл:
    iptables -n -t filter -L
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     tcp  --  192.168.1.0/24       192.168.1.23        tcp dpt:8000 
    ACCEPT     tcp  --  0.0.0.0/0            192.168.1.23        tcp dpt:22 
    ACCEPT     tcp  --  0.0.0.0/0            192.168.1.23        tcp dpt:1194 
    ACCEPT     tcp  --  0.0.0.0/0            192.168.1.23        tcp dpt:1195 
    
    Chain FORWARD (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  172.17.1.0/24        172.17.2.0/24       tcp dpt:5900 
    ACCEPT     all  --  172.17.2.0/24        172.17.1.0/24       state RELATED,ESTABLISHED 
    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    
    (таблицы nat и mangle пустые)
    

    На всякий случай проверил все хосты nmap-ом, всё работает как и должно. Ещё раз спасибо всем за советы :)

lucif0rm ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.