![Безопасное открытие порта](https://rvso.com/image/761003/%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D0%B5%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B5%20%D0%BF%D0%BE%D1%80%D1%82%D0%B0.png)
Я работаю над веб-приложением, которое должно быть доступно только небольшому числу людей, оснащенных планшетами. Оно обслуживается портом 80 сервера, который находится в нашей локальной сети за маршрутизатором ISP.
Вопрос в следующем: как я могу обеспечить доступ авторизованному пользователю, чтобы другие пользователи не имели к нему доступа? Неавторизованные пользователи должны завершить соединение сбросом, как будто порт не был открыт.
Я думал открыть порт на маршрутизаторе, перенаправить его на сервер и защитить его сертификатом, но возможно ли это вообще?
Другим решением может стать установка VPN, но для некоторых пользователей это может оказаться слишком сложным в управлении.
решение1
Есть много способов сделать это, но правильный из них зависит от того, какие еще механизмы безопасности у вас есть. Примеры:
- Клиентские сертификаты. Это вполне возможно, если только вы не хотите использовать порт 80, который обычно не зашифрован. Вам нужно будет перенастроить ваш веб-сервер или поставить перед ним прокси, но это, безусловно, возможно. Как это сделать с Apache, описано здесь,https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html#allclients
- Фильтрация по IP или MAC-адресу на сетевом уровне, т.е. в брандмауэре.
- Используйте VPN, как вы упомянули. Это можно сделать достаточно прозрачным для пользователей.
- Проверьте наличие заголовка аутентификации на веб-сервере или на прокси-сервере перед ним.
Несомненно, их больше. Некоторые из них не подходят, если у вас нет дополнительных методов аутентификации, например, MAC-адреса легко подделываются. Другие варианты становятся доступными, если вы ослабляете требование к сетевому порту выглядеть закрытым, поскольку многие методы аутентификации не работают, пока порт не открыт.
решение2
Ваш вопрос как-то обобщён. Вы можете сделать одно или несколько из следующих:
- Требуйте действительное имя пользователя/пароль для доступа к вашему веб-приложению. Это можно сделать на уровне приложения или на уровне веб-сервера (например: apache2).
- Защитите доступ к этому IP/порту, настроив брандмауэр. Разрешены только определенные IP. Другие запрещены. Для этого вам необходимо получить список IP-адресов ваших пользователей.
- Перенаправьте пользователей с http (порт 80) на https (порт 443) для защиты от атак типа «man-in-the-middle».
- Обеспечьте конфиденциальность доступа к серверу и направляйте трафик пользователей в вашу сеть (одно из решений VPN, требующих аутентификации).