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

Необходимо ли защищать TCP-трафик для PHP FPM через общую частную сеть VPS?

Существует множество рекомендуемых практик и руководств по защите различных компонентов стека LEMP / LAMP при работе в кластере, трафик частной сети которого используется другими, потенциально враждебными хостами (например, AWS, Vultr, DigitalOcean). Вы можете защитить обратный прокси-сервер и трафик MySQL с помощью TLS. Но для кластеров, которые включают набор экземпляров, на которых размещаются пулы PHP-FPM, похоже, нет литературы по защите TCP-трафика между экземпляром веб-сервера и экземплярами PHP-FPM.

Это вообще необходимо, или есть причина, по которой нет литературы (например, трафик зашифрован, или ни один здравомыслящий VPS / облачный провайдер не будет запускать частные сетевые интерфейсы в беспорядочном режиме)? Я вижу проблемы, когда на сайт HTTPS поступает запрос, сайт отправляет детали запроса в пул PHP-FPM (включая, скажем, пароли или номера кредитных карт), и третья сторона каким-то образом прослушивает этот трафик.

Туннели SSH могут быть отличным вариантом для безопасного подключения к враждебной сети. Мы обнаружили, что туннели SSH очень просты в реализации, понимании и более надежны, чем некоторые варианты VPN. Также можно туннелировать все, что угодно, даже если собственный протокол приложения не поддерживает SSL / TLS.

Хорошо поместить свой SSH в сценарий bash, который будет запускать туннель SSH в цикле и перезапускать его, если он умирает.

Вот пример скрипта, который мы используем (имена изменены для защиты нечестных):

#!/bin/bash
umask 0077
if [ -L "$0" ]
then
    EXE=`readlink -e "$0"`
else
    EXE="$0"
fi
if [ "$1" = "daemon" ]
then
    while [ 1 ]
    do
        /usr/bin/ssh -L 127.0.0.1:5432:127.0.0.1:5432 -n -T -x tunnelusername@db.yourdomain.com sleep 100000000 >> "$EXE.log" 2>&1 &                                                                                                                                                       
        echo "$!" > "$EXE.ssh.pid"
        wait
        sleep 5
    done
elif [ "$1" = "stop" ]
then
    if [ -f "$EXE.pid" ]
    then
        kill `cat "$EXE.pid"`
        sleep 0.1
        rm -f "$EXE.pid"
    fi
    if [ -f "$EXE.ssh.pid" ]
    then
        kill `cat "$EXE.ssh.pid"`
        sleep 0.1
        rm -f "$EXE.ssh.pid"
    fi
else
    "$0" stop
    nohup "$0" daemon >> "$EXE.log" 2>&1 &
    echo "$!" > "$EXE.pid"
fi

Вы изменяете строку SSH, чтобы выполнить соответствующее туннелирование. Вы вызываете скрипт с параметрами «start» или «stop». Сценарий запускает демон, который перезапускает SSH, если он когда-либо умирает.

Для туннелей создайте минимально привилегированного пользователя и группу на другом конце для подключения, здесь "tunnelusername".

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

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