Существует множество рекомендуемых практик и руководств по защите различных компонентов стека 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".
Что касается кредитных карт: для работы с ними вы должны получить лицензию, которой вы не получите, если будете работать в таких средах, не случайно, а по причинам, которые вы упомянули выше. Что касается вашего вопроса: если частная сеть используется совместно с другими, я бы рекомендовал зашифровать весь трафик через станнель например.
(Но все же это общая среда: если люди рядом с вами обнаруживают недостаток, который позволяет им захватить хост или другие виртуальные машины, они могут читать трафик до того, как он будет зашифрован - это не должно сделать бесполезным то, что я просто написал, просто чтобы иметь это в виду.)