Pull to refresh

Админу на заметку: OpenVPN + pfSense + Dreamkas = автоматизация в розничной торговле

Reading time5 min
Views55K

В статье будет рассмотрен пример настроек касс вендора 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 и шифрования


Всем спасибо.
Tags:
Hubs:
Total votes 9: ↑7 and ↓2+5
Comments6

Articles