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

XAMPP как защитить прокси-сервер пересылки для порта 443

Мне нужна помощь с защитой моего тестового сервера XAMPP на портах 80 и 443. Я использую Apache 2.4.7 на машине с Windows 7.

Настройка следующая:

Я перенаправляю весь трафик, поступающий на IP-адрес моего сервера, порт 80 и 443, в приложение Java, работающее на localhost: 5000.

Код, выполняющий все это в файле httpd-vhosts.conf, следующий:

<VirtualHost *:80> 
  ServerName demo.website.com
  ServerAlias website.com

  <Location />
    ProxyPass http://localhost:5000/
    ProxyPassReverse http://localhost:5000/
  </Location>
</VirtualHost> 

<VirtualHost *:443>    
  ServerName demo.website.com
  ServerAlias website.com

  <Location />
    ProxyPass /api/socket ws://localhost:5000/api/socket
    ProxyPassReverse /api/socket ws://localhost:5000/api/socket
    ProxyPass http://localhost:5000/
    ProxyPassReverse http://localhost:5000/
  </Location>

  SSLEngine on
  SSLCertificateFile "conf/ssl.crt/cert1.crt"
  SSLCertificateKeyFile "conf/ssl.key/cert1.key"
</VirtualHost>

Приведенный выше код работает для порта 80, но когда я добавляю его для порта 443, apace не запускается. Примечание: я включил LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so.

РЕДАКТИРОВАТЬ1: Ошибка, которую я получаю в Apache:

ProxyPass|ProxyPassMatch can not have a path when defined in a location

Кажется, проблема в этих двух строках, когда я их удаляю, Apache запускается нормально:

ProxyPass /api/socket ws://localhost:5000/api/socket
ProxyPassReverse /api/socket ws://localhost:5000/api/socket

РЕДАКТИРОВАТЬ2

В конце концов я сделал это:

<VirtualHost *:443>    
      ServerName demo.website.com
      ServerAlias website.com

      <Location /api/socket>
        ProxyPass ws://localhost:5000/api/socket
        ProxyPassReverse ws://localhost:5000/api/socket
      </Location>

      <Location />
        ProxyPass http://localhost:5000/
        ProxyPassReverse http://localhost:5000/
      </Location>

      SSLEngine on
      SSLCertificateFile "conf/ssl.crt/cert1.crt"
      SSLCertificateKeyFile "conf/ssl.key/cert1.key"
    </VirtualHost>

Это нормально с точки зрения безопасности?

<VirtualHost *:443>    
      ServerName demo.website.com
      ServerAlias website.com
      <Location /api/socket>
        ProxyPass ws://localhost:5000/api/socket
        ProxyPassReverse ws://localhost:5000/api/socket
      </Location>
      <Location />
        ProxyPass http://localhost:5000/
        ProxyPassReverse http://localhost:5000/
      </Location>
      SSLEngine on
      SSLCertificateFile "conf/ssl.crt/cert1.crt"
      SSLCertificateKeyFile "conf/ssl.key/cert1.key"
    </VirtualHost>

Это нормально с точки зрения безопасности?

Технически это будет работать так, как ожидалось / необходимо, и это не является непосредственной проблемой безопасности (например, запуск открытого прокси-сервера).

Для более безопасной среды вы можете пойти на компромисс и настроить гораздо больше, чем просто использовать настройки по умолчанию, с которыми поставляется пакет Apache httpd:

  • регулярно проверяйте и устанавливайте обновления безопасности и серьезные исправления
  • https://httpd.apache.org/docs/2.4/misc/security_tips.html - одно из многих руководств для начинающих по усилению защиты httpd-сервера Apache.
  • настройте параметры TLS.
    Протестируйте свой сервер с помощью https://www.ssllabs.com/ssltest/ следуйте их рекомендациям и рекомендациям https://cipherli.st/
  • в частности, для API, но также и для более общих веб-сайтов / приложений, которые вы можете захотеть ограничить разрешенные методы http только для подмножества GET, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK и UNLOCK.
  • когда вам нужна только функция обратного прокси, используйте что-нибудь более легкое вместо полноценного веб-сервера, такого как Apache.