В статье будет рассмотрен пример настроек касс вендора Dreamkas и маршрутизатора pfSense для работы с сервером 1С через OpenVPN быстро и зашифровано (с использованием TLS/SSL), по любым публичным каналам.
Задача: есть много касс во многих магазинах, есть сервер 1С в офисе. Нужно настроить взаимодействие. Вдаваться в настройку 1С не буду, акцент сделан на OpenVPN в маршрутизаторе pfSense и построении сети. Подробное описание касс в моей статье отсутствует.
Пункт 1. Обновляем ПО до актуальных версий
Версию pfSense можно посмотреть на главной странице, там же обновить буквально в 3 клика + 1 перезагрузка.
Версию кассы можно обновить в автоматическом режиме через меню «настройки» на самой кассе. Есть ещё куча вариантов обновления, они перечислены на сайте производителя.
В основном обновлять ПО нужно для минимизации проблем с OpenVPN. У меня были «нюансы» для работы с openVPN на разных версиях pfSense. Оградите себя от излишних проблем. Так же и пакет OpenVPN появился в кассах относительно недавно.
Пункт 2. Выписываем CA сертификат
Идём в System->Cert.Manager->Ca, нажимаем кнопочку Add и заполняем поля.
Обращаю внимание на поля:
— выбираем Create an internal, если у вас нет уже готового сертификата
— Lifetime (days) — срок жизни сертификата CA
— Common Name — именно так он будет отображаться дальше в настройке.
Вводите данные обдуманно, изменить не получится.
Пункт 3. Выписываем серверный сертификат
Идём System > Certificate Manager > Certificates, нажимаем Add и заполняем поля.
Обращаю внимание на следующие пункты:
— Create an internal, если у нас нет готового сертификата
— Certificate authority — выбираем наш сертификат CA, созданный в п.1
— Certificate Type выбираем Server
— Lifetime (days) — срок жизни сертификата сервера
— Common Name — именно так он будет отображаться дальше в настройке.
Пункт 4. Выписываем клиентский сертификат
ВАЖНО! Для каждого клиента — свой индивидуальный сертификат! Идём System > Certificate Manager > Certificates, нажимаем Add и заполняем поля. Всё аналогично п.3, за исключением Certificate Type, где выбираем Client
Обращаю внимание на следующие пункты:
— Certificate authority — выбираем наш сертификат CA, созданный в п.1
— Certificate Type выбираем Client
— Lifetime (days) — срок жизни сертификата сервера
— Common Name — именно так он будет отображаться дальше в настройке.
— можно задействовать поле Alternative Names, но если вы не знаете что это, то оно вам не нужно(оставьте пустым). А вообще — по этому полю можно задавать доп настройки и привязки для openVPN клиентов.
—
Поделюсь своим опытом — я даю осознанное название в Common Name, вида mag.address.kassanomer — это позволит визуально отличать сертификаты друг от друга.
Пункт 5. Настраиваем OpenVPN
Тут всё просто. Всё в pfSense настраивается мышкой через user-friendly интерфейс. Спасибо разработчикам и всем участникам сообщества.
Идём VPN > OpenVPN > Servers, добавляем сервер.
Сделаю некоторые замечания:
— я работаю с tap туннелем, мне так удобнее, он имитирует L2 уровень. С ним работают всякие мультикасты, бродкасты и т.п.;
— протокол UDP быстрее чем TCP, и ширина канала в одинаковых условиях больше. Это древняя проблема OpenVPN;
— выбираем в разделе Server mode режим RemoteAccess;
— выбираем в разделе Peer Certificate Authority из списка наш сертификат CA;
— выбираем в разделе Server certificate наш серверный сертификат;
— выбираем в разделе DH Parameter length (bits) нужную длину;
— выбираем в разделе Certificate Depth режим One(Client+Server), это схема без удостоверяющих посредников;
— в разделе IPv4 Tunnel Network прописываем нашу туннельную сетку, например 192.168.202.0/24;
— в разделе IPv4 Local network(s) прописываем ресурсы, роутинг до которых должны получить кассы. У меня это например 192.168.100.2/32, 192.168.1.0/24;
— остальное можно не трогать, либо заполнять на своё усмотрение. Не забудьте открыть на фаерволе порт, на который повешается ваш OpenVPN сервер.
ВАЖНО!
Кассы будут цепляться на сервер, и получать адреса из диапазона IPv4 Tunnel Network, адреса будут выдаваться в порядке очередности подключения. Но сервер 1С всегда должен знать, что «такая то касса» находится на «таком то адресе». Поэтому настраиваем дальше.
Идём в VPN > OpenVPN > Client Specific Overrides, кнопка Add. Нужно создать настройки для конкретных клиентов. Привяжем каждому клиенту свой IP адрес
Дальше алгоритм такой:
— выбираем в Server List наш сервер
— Common name прописываем имя нашего клиентского сертификата из п.4
— в разделе Advanced прописываем команду присвоения IP адреса
ifconfig-push 192.168.202.12 255.255.255.0
Пункт 6. Выгрузка с pfSense сертификатов
Нужно выгрузить следующие файлы:
1) CA-сетификат
2) клиентский сертификат + ключ
3) если у нас SSL/TLS, то сохраним ключ
4) dh параметры
Пункты 1) и 2) экспортируются через веб-интерфейс:
Файл для 3) экспортируется из настроек OpenVPN сервера. Если вы его уже создали — зайдите, там будет прописан ключ. Копируем, вставляем в файл, сохраняем например в файл client.tls-auth.
DH параметры сохраняются через команды:
/usr/bin/openssl dhparam 1024 > /etc/dh1024.pem
/usr/bin/openssl dhparam 2048 > /etc/dh2048.pem
/usr/bin/openssl dhparam 4096 > /etc/dh4096.pem
Через меню Diagnostics ->Edit File открываем нужный нам файл, например dh1024.pem, настройки DH задаются в настройках OpenVPN сервера.
Пункт 7. Для общего развития
Когда я настраивал TLS/SSL, я слабо представлял, что должно быть написано в конфиге у клиента, у меня были весьма скромные знания по OpenVPN. Я попробовал решение в лоб — настроил на другом pfSense коннект в режиме «клиент», подгрузил сертификаты клиента, проверил как работает. Маршрутизатор настраивается через веб интерфейс, коннект не составил никакой сложности.
Благодаря консоли управления pfsense я знал, что конфиги OpenVPN лежат в папке /var/etc/openvpn. Используя Edit File можно посмотреть, как включение и выключение галочек и параметров в веб интерфейсе прописывается в файл. Заодно можно подглядеть ключи.
Если будете делать так же — не забываем удалить за собой OpenVPN-клиент и сертификаты с тестового сервера.
Пункт 8. Настройка кассы
У кассы по умолчанию открыта smb-папка с именем \\ipaddress\exchange, там есть доступ на запись. Выгружаем в неё все 4 файла из п.6.
Подконнекчиваемся по SSH к кассе, стандартный дефолтный аккаунт root / 324012, переносим наши файлы в /opt/networks. Да, на борту какой то обрезанный линукс.
Чтобы коннектиться к серверу нужен файл client.ovpn, его можно посмотреть в п.7 и отредактировать под свои нужды. Положить туда же — /opt/networks. У меня получилось примерно так:
client
dev tap
proto udp
remote server_ip server_port
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
cipher AES-128-CBC
auth SHA1
resolv-retry infinite
nobind
persist-key
persist-tun
ca "//opt//networks//CAforOpenVPN.crt"
cert "//opt//networks//mag.magaddress.kassa1.crt"
key "//opt//networks//mag.magaddress.kassa1.key"
dh "//opt//networks//dh1024.pem"
tls-client
tls-auth "//opt//networks//client.tls-auth" 1
ns-cert-type server
verb 3
Файл сохраняем. Всё заработает, когда мы перезагрузим кассу, например через reboot. Не забудьте прописать правила на интерфейсе openVPN в pfSense для наших подсетей!
Как визуально видеть, что кассы работают(коннектятся)?
Вариант 1 — вынести виджет OpenVPN на главную страницу pfSense
Вариант 2 — через меню Status->OpenVPN
Вариант 3 — через кассу. Коннектимся по ssh, а дальше уже стандартный набор — ifconfig, ping etc…
Пункт 9. Как работать с 1С
Касса в smb-папке хранит свои рабочие материалы. Сервер 1С считывает их, и записывает. Имейте это ввиду эту дырку в информационной безопасности, когда будете проектировать сеть магазина.
Как итог
В статье рассмотрен пример, как имея в распоряжении бесплатный маршрутизатор pfSense и множество Linux-based касс можно сделать хороший шифрованный туннель до удалённого сервера 1С, который настраивается за несколько кликов.
В описанном варианте настройки мы получаем очень масштабируемую схему подключения касс с персональным сертификатом для каждого удалённого устройства.
Использование OpenVPN напрямую в кассе делает неактуальными риски информационной безопасности по части передачи данных.
Если у вас маленькая торговая точка — то строить сеть возможно нет необходимости. Покупаем любой роутер с поддержкой 3G, заводим интернет — касса его получает либо по кабелю, либо через Wi-Fi, и уже сама постучится на сервер. В моих масштабах это существенная экономия на сетевой инфраструктуре.
Полезные ссылки
О pfSense
OpenVPN PKI: Site-to-Site инструкция для обсуждения
Инструкция от производителя, без TLS/SSL и шифрования
Всем спасибо.
Комментарии (6)
throttle
13.10.2016 19:17Один вопрос — зачем тут pfSense? Чтоб можно было мышкой?
Любой linux способен на все то-же самое искаропки (почти).
P.S. Не наезд, просто интересно. У меня на управлении несколько ovpn-серверов, ни разу не чувствовал необходимости в чем-то большем, чем ssh.derwin
14.10.2016 04:26+1потому что минимум действий для разворачивания системы, для восстановления из бекапа. И полный фарш функциональности сразу после установки, которая занимает 3 минуты. А ещё обучение «свежих» сотрудников всяким сетевым премудростям проходит быстрее.
Когда ты 1 и у тебя нет критически важных сервисов — ваш подход имеет место быть (хотя я бы уже изучив pfsense не стал бы). А когда у тебя бизнес за 3 тысячи рабочих мест — всплывают вопросы отказоусточивости и избыточности(оборудования, сетей, людей), вопросы производительности и минимального времени устранения проблемы. И таки да, под конкретные задачи применяются свои железки.
helg1978
15.10.2016 06:57подскажите, что делать, если клиентских устройств много, и система на них переносится клонированием образа диска, а значит сертификат один и тот же (я знаю, это плохо). По сути устройства отличаются только MAC адресом. Есть ли возможность заставить OpenVPN назначать конкретные IP адреса устройствам?
derwin
16.10.2016 07:54Вы правы, это плохо. А если по делу то можете разрешить клиентам менять ip адреса и на клиентской стороне прописывать свой адрес на туннель
r_dem
Пункт 6. Выгрузка с pfSense сертификатов
openvpn-client-export не пробовали?
derwin
1. Требуется пакет openvpn-client-export
2. я не использую этот пакет. Уже привык, что выгрузка безбожно бажная от версии к версии, одно чинят другое ломают. Последнее что приходит на ум — при нажатии на кнопку выгрузки архивом у меня pfsense отдавал ошибку 404.