- Шаг 1: Включение WSL2 (Windows Subsystem for Linux)
- Шаг 2: Установка Debian 12 в среде WSL2
- Шаг 3: Установка и настройка Nginx (веб-сервер)
- Шаг 4: Установка и настройка СУБД MySQL (MariaDB)
- Шаг 5: Установка PHP 8.3 и настройка PHP-FPM
- Шаг 6: Проброс портов для доступа извне (port forwarding)
- Шаг 7: Обеспечение безопасности системы

Шаг 1: Включение WSL2 (Windows Subsystem for Linux)
- Активируйте компоненты WSL и виртуализации. Убедитесь, что в BIOS включена поддержка виртуализации. Затем включите необходимые компоненты Windows. Это можно сделать через графический интерфейс (Панель управления → Программы → Включение или отключение компонентов Windows → отметить пункты «Подсистема Windows для Linux» и «Платформа виртуальной машины» с последующей перезагрузкой) или командой в PowerShell от имени администратора:
dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartПосле выполнения команд перезагрузите компьютер. (На Windows 11 эти компоненты обычно включаются автоматически при установке WSL.)
- Установите последнюю версию WSL. После перезагрузки откройте PowerShell от администратора и обновите WSL до актуальной версии командой:
wsl --updateЭто установит последнюю версию WSL из Microsoft Store (если она еще не установлена).
- Установите WSL2 в качестве версии по умолчанию. Выполните команду:
wsl --set-default-version 2Она убедится, что новые дистрибутивы Linux будут разворачиваться на ядре WSL2. (Windows 11 по умолчанию использует WSL2, но эта команда не повредит.)
Шаг 2: Установка Debian 12 в среде WSL2
- Установка дистрибутива Debian. Выберите оптимальный способ запуска Debian внутри Windows 11. Рекомендуется использовать WSL2 – встроенную подсистему Windows для Linux (без использования сторонних гипервизоров). Для установки Debian 12 можно воспользоваться Microsoft Store (найти приложение Debian и установить его) либо выполнить команду в PowerShell:
wsl --install -d DebianЭта команда автоматически загрузит и установит актуальный образ Debian GNU/Linux для WSL. Примечание: На момент написания Debian в Microsoft Store соответствует актуальной стабильной версии (Bookworm, Debian 12).
- Первый запуск и настройка Debian. После установки запустите Debian (через меню «Пуск» или командой
wsl -d Debian). При первом запуске будет проведена первоначальная настройка: вас попросят ввести имя нового UNIX-пользователя и пароль для него. Задайте имя пользователя (например,user) и придумайте пароль. Этот пользователь будет иметь праваsudo(администратора) по умолчанию. После этого вы окажетесь в командной строке Debian внутри WSL. - Обновление пакетов в Debian. Перед установкой серверных компонентов обновите систему Debian до актуального состояния. Выполните в Linux-оболочке WSL (под своим новым пользователем, используя
sudoдля повышения прав):
sudo apt update && sudo apt upgrade -yЭта команда обновит списки пакетов и установит доступные обновления.
- (Опционально) Включение systemd в WSL2. По умолчанию в WSL2 система инициализации
systemdможет быть отключена, что влияет на автозапуск служб. Для полноценной работы сервиса MySQL/MariaDB, SSH и т.п. рекомендуется включить systemd. Выполните:
sudo nano /etc/wsl.confи добавьте в файл следующие строки:
[boot]
systemd=trueСохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X). Затем выйдите из Debian (exit) и в PowerShell выполните команду перезапуска WSL:
wsl --shutdownПосле этого заново запустите Debian (через меню или wsl -d Debian). Теперь WSL загрузит дистрибутив с активированным systemd, и вы сможете использовать systemctl для управления сервисами, а службы смогут автоматически стартовать при запуске WSL.
Шаг 3: Установка и настройка Nginx (веб-сервер)
- Установка Nginx. В среде Debian установите веб-сервер Nginx командой:
sudo apt install nginx -yПакет Nginx присутствует в стандартном репозитории Debian 12, поэтому установка произойдет из официальных источников. После завершения установки убедитесь, что служба Nginx запущена и добавлена в автозапуск. Выполните:
sudo systemctl status nginxВы должны увидеть состояние active (running), а строка Loaded должна содержать enabled, что означает, что Nginx будет автоматически запускаться при старте системы. Например, на скриншоте ниже показан вывод статуса Nginx на Debian 12:
Вывод команды systemctl status nginx, подтверждающий, что сервис Nginx активен и включен в автозапуск.
- Проверка работы Nginx локально. По умолчанию Nginx слушает порт 80. Чтобы проверить, работает ли веб-сервер, выполните из Windows команду в браузере: http://localhost (или откройте браузер и перейдите на
http://localhost). В режиме WSL2 с сетевым NAT вы можете обращаться к сервисам, запущенным в WSL, через локальный адрес Windows (localhost). Должна открыться стандартная стартовая страница Nginx (сообщение «Welcome to nginx»). Если она отображается, значит Nginx успешно обслуживает HTTP-запросы локально. - Настройка виртуального хоста и PHP-интеграции. Для работы PHP через Nginx необходимо настроить обработку PHP-файлов с помощью PHP-FPM. Можно использовать существующий конфиг по умолчанию или создать новый. В данном руководстве создадим новый сайт. Например, если вы планируете размещать сайт
example.com:
- Создайте каталог для сайта и установите права:
sudo mkdir -p /var/www/example.com sudo chown -R www-data:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com(Это создаст каталог и задаст владельцем веб-сервераwww-data.) - Создайте файл конфигурации сайта для Nginx:
sudo nano /etc/nginx/sites-available/example.com.confДобавьте в него содержимое (заменитеexample.comна ваше доменное имя при необходимости):server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }Этот виртуальный хост настроен на обслуживание доменаexample.comи передает обработку PHP-файлов в PHP-FPM (через сокет php8.3-fpm). Сохраните файл и выйдите из редактора. - Активируйте конфигурацию и перезапустите Nginx:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginxПервая команда включает сайт, создавая символическую ссылку, вторая проверяет синтаксис конфигурации и перегружает Nginx. Теперь Nginx будет обслуживать ваш сайт. (При тестировании локально без DNS вы можете временно добавить в файлC:\Windows\System32\drivers\etc\hostsстроку127.0.0.1 example.comчтобы открыть сайт по имени.)
Шаг 4: Установка и настройка СУБД MySQL (MariaDB)
- Выбор СУБД и установка. Debian 12 в стандартной поставке использует MariaDB 10.x в качестве заменяемой СУБД MySQL (аналогичной по функционалу). Пакеты Oracle MySQL по умолчанию недоступны в репозиториях Debian 12. Поэтому оптимально установить MariaDB – она полностью совместима с MySQL для большинства задач. Для установки выполните:
sudo apt install mariadb-server mariadb-client -yПосле установки убедитесь, что сервис MariaDB запущен: sudo systemctl status mariadb. При включенном systemd база данных должна автоматически стартовать и быть помеченной как enabled (в автозапуске). Если systemd отключен, MariaDB можно запускать вручную командой sudo service mysql start (но мы включили systemd на шаге 2).
- Первоначальная настройка безопасности MariaDB. Запустите скрипт начальной настройки безопасности СУБД:
sudo mysql_secure_installationЭтот скрипт предложит ряд шагов для повышения безопасности базы данных. В процессе рекомендуется:
- Установить пароль для пользователя
rootбазы данных (если еще не задан). Введите новый надежный пароль для root-MariaDB. - Удалить анонимных пользователей – ответьте
Y(Yes), чтобы закрыть доступ без имени пользователя. - Запретить удаленный вход root – ответьте
Y, чтобы аккаунтrootСУБД не мог подключаться удаленно (только локально). - Удалить тестовую базу данных – она не нужна в боевой среде, согласитесь на удаление.
- Перезагрузить таблицы привилегий – подтвердите для применения изменений. Скрипт последовательно задаст эти вопросы – нажимайте
Y(или Enter, если значение по умолчанию «Yes») для соглашения со всеми перечисленными мерами безопасности.
- Проверка работы базы данных. После выполнения
mysql_secure_installationможно проверить доступ к СУБД. Выполните команду:
sudo mariadb(или sudo mysql – алиас). Это откроет консоль СУБД под пользователем root (так как мы запускаем с sudo). Введите запрос SELECT VERSION(); чтобы убедиться, что сервер отвечает и узнать версию MariaDB/MySQL. Для выхода наберите EXIT;.
Примечание: Если требуется именно Oracle MySQL, его можно установить из официального репозитория Oracle. Для этого скачайте деб-пакет конфигурации mysql-apt-config с сайта dev.mysql.com и запустите его (sudo dpkg -i mysql-apt-config_*all.deb), выберите версию MySQL (например, 8.0 или 8.4) в меню и затем установите пакет mysql-server. Однако для большинства задач достаточно использования MariaDB, поставляемой с Debian.
Шаг 5: Установка PHP 8.3 и настройка PHP-FPM
- Подключение репозитория с PHP 8.3. Стандартные репозитории Debian 12 (Bookworm) содержат PHP версии 8.2 на момент выпуска. PHP 8.3 отсутствует в штатных репозиториях Debian, поэтому используем репозиторий deb.sury.org от разработчика Ondřej Surý, который предоставляет актуальные сборки PHP для Debian. Чтобы добавить этот репозиторий, выполните следующие команды в Debian WSL:
sudo apt install -y ca-certificates apt-transport-https curl gnupg2 lsb-release
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt updateПервая команда установит инструменты, необходимые для https-репозиториев. Далее скачивается и добавляется ключ подписи репозитория, затем добавляется новый источник пакетов (для текущего выпуска Debian, $(lsb_release -sc) подставит bookworm). После обновления списков пакетов можно устанавливать PHP 8.3.
- Установка PHP 8.3 и необходимых модулей. Выполните установку PHP и компонентов:
sudo apt install -y php8.3 php8.3-fpm php8.3-mysql php8.3-cli php8.3-curl php8.3-mbstring php8.3-xml php8.3-zipЗдесь:
php8.3-fpm– пакет менеджера процессов PHP (FastCGI Process Manager) для работы с Nginx.php8.3-mysql– модуль PHP для подключения к MySQL/MariaDB.- Также устанавливаем распространенные модули: cURL, Mbstring, XML, Zip (при необходимости можно добавить и другие, например
php8.3-gdдля обработки изображений и т.д.).
После установки, включите и запустите PHP-FPM:
sudo systemctl enable php8.3-fpm
sudo systemctl start php8.3-fpmУбедитесь, что сервис PHP-FPM запущен (active (running)). Теперь PHP-FPM будет автоматически запускаться при старте (если включен systemd).
- Интеграция PHP с Nginx. Мы уже добавили в конфигурацию Nginx блок
location ~ \.php$ { ... }, указывающий Nginx передавать обработку PHP-файлов на сокет PHP 8.3 FPM (fastcgi_pass unix:/run/php/php8.3-fpm.sock;). Убедитесь, что путь сокета совпадает с путем, прописанным в конфигурации PHP-FPM. По умолчанию PHP 8.3 FPM в Debian создаёт сокет/run/php/php8.3-fpm.sock– это соответствует тому, что мы указали. Если вы изменяли название сокета или хотите использовать TCP-порт, скорректируйте настройки Nginx соответственно. - Тестирование PHP. Для проверки создайте простой PHP-скрипт. Например:
echo "<?php phpinfo();" | sudo tee /var/www/example.com/info.php(предполагается, что корень сайта – /var/www/example.com). Затем в браузере на Windows откройте http://localhost/info.php (или http://example.com/info.php, если настроили hosts для имени). Должна отобразиться страница с информацией о PHP (phpinfo), включая версию 8.3, загруженные модули и настройки. Если она отображается – связка Nginx + PHP 8.3-FPM работает корректно.
Шаг 6: Проброс портов для доступа извне (port forwarding)
Теперь настроим доступ к запущенному в WSL Debian веб-серверу из интернета через Windows 11, учитывая, что у вас есть статический внешний IP-адрес.
По умолчанию WSL2 использует NAT-сеть, и его сетевой интерфейс (виртуальный адаптер) отделен от хоста Windows. Внешние подключения напрямую в WSL2 по его IP невозможны без настройки проксирования или проброса портов. Мы организуем перенаправление портов 80 (HTTP) и 443 (HTTPS) с хоста Windows на ВМ Debian (WSL).
- Узнайте IP-адрес WSL Debian. Выполните в PowerShell:
wsl -d Debian hostname -IЭта команда выведет текущий внутренний адрес WSL Debian (например, 172.25.35.235). Запомните или скопируйте его.
- Настройте перенаправление портов Windows→WSL. В PowerShell от имени администратора выполните команду для каждого порта:
- Для HTTP (порт 80):
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=<WSL_IP> connectport=80 - Для HTTPS (порт 443):
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=<WSL_IP> connectport=443Замените<WSL_IP>на IP-адрес, полученный на предыдущем шаге. Параметрlistenaddress=0.0.0.0означает, что Windows будет принимать подключения на порт на всех своих интерфейсах (включая внешний статический IP) и перенаправлять их на указанный адрес и порт внутри WSL. Команда настроит постоянный прокси (портфорвардинг) на уровне Windows.
Примечание: Если вы хотите ограничить прослушивание только конкретным интерфейсом/адресом (например, только статическим внешним IP, либо только локальной сетью), укажите в
listenaddress=конкретный адрес Windows. Например,listenaddress=192.168.1.100будет слушать только на этом локальном IP.0.0.0.0слушает на всех IPv4-интерфейсах.
- Настройте брандмауэр Windows. После добавления правил порт-прокси, откройте соответствующие порты в брандмауэре Windows для входящих подключений. В PowerShell (администратор) выполните:
netsh advfirewall firewall add rule name="WSL2 Nginx HTTP" dir=in action=allow protocol=TCP localport=80
netsh advfirewall firewall add rule name="WSL2 Nginx HTTPS" dir=in action=allow protocol=TCP localport=443Эти команды создадут правила брендмауэра, разрешающие входящие соединения на портах 80 и 443. (Альтернатива – настроить правила через графический интерфейс «Защитника Windows с расширенной безопасностью».) Убедитесь, что на уровне маршрутизатора/провайдера данные порты также не блокируются и что внешний статический IP адресован вашему ПК.
- Проверка доступа из интернета. Теперь ваш веб-сервер, работающий в Debian (WSL2), должен быть доступен снаружи. Попробуйте зайти на свой веб-сайт через интернет, используя ваш внешним IP или доменное имя, привязанное к нему. Например,
http://<ваш-статический-IP>/илиhttps://<домен>(если настроен SSL). Windows примет входящее соединение на указанных портах и перенаправит его в WSL2 на Nginx. Примечание по HTTPS: Для работы HTTPS вам понадобится установить сертификат. Можно либо настроить Nginx на прием HTTPS (слушать 443 и указать пути к сертификату), либо терминировать SSL на стороне Windows (например, с помощью IIS или стороннего прокси) и передавать в WSL по HTTP. Проще реализовать полный цикл на Nginx в WSL: скопируйте сертификаты в WSL и добавьте в конфигlisten 443 ssl;и пути кssl_certificateиssl_certificate_key. Не забудьте также открыть порт 443, как показано выше. - Динамический IP WSL. Учтите, что IP-адрес WSL Debian может меняться при перезапуске WSL или системы. В этом случае правила
portproxyнужно обновлять. Вы можете создать скрипт PowerShell, который при запуске системы будет заново добавлять правила с актуальным IP WSL. Например:
$wsl_ip = wsl hostname -I
netsh interface portproxy set v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=$wsl_ip connectport=80
netsh interface portproxy set v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=$wsl_ip connectport=443Этот скрипт можно сохранить и добавить в «Планировщик заданий» Windows с триггером «При входе в систему» от имени Администратора, чтобы правила обновлялись автоматически после каждого запуска. (Либо можно прописать netsh interface portproxy add с ключом listenaddress=<ваш-статический-IP> как в примере выше – тогда при изменении IP WSL достаточно сбросить старые правила netsh interface portproxy reset и выполнить новые.)
Шаг 7: Обеспечение безопасности системы
Наконец, важно настроить базовые меры безопасности как в Windows, так и внутри Debian.
1. Брандмауэр и ограничение портов. Мы уже настроили брандмауэр Windows для нужных портов. Рекомендуется закрыть все прочие неиспользуемые порты на Windows и разрешить только те, которые необходимы (80, 443, возможно 22 для SSH). По умолчанию Windows Firewall блокирует входящие соединения, кроме разрешенных правил, поэтому дополнительных действий может не требоваться.
На стороне Debian вы также можете настроить внутренний брандмауэр (iptables/ufw) на случай, если каким-то образом посторонний трафик достигнет WSL. Например, установите ufw и разрешите только нужные порты:
sudo apt install ufw -y
sudo ufw allow 22/tcp # разрешить SSH
sudo ufw allow 80/tcp # разрешить HTTP
sudo ufw allow 443/tcp # разрешить HTTPS
sudo ufw enableЭто включит брандмауэр UFW внутри Debian и будет блокировать любые лишние соединения. Однако учитывайте, что при использовании portproxy все подключения выглядят для WSL как исходящие от хоста (обычно с IP адресом шлюза 172.x.x.1). Поэтому внутренний firewall пригодится в основном если вы в будущем настроите «просвет» (bridge) или прямое соединение к WSL-интерфейсу. В нашей схеме NAT+portproxy безопасность в основном обеспечивается брандмауэром Windows.
2. Fail2Ban для защиты от брутфорса. Для защиты от подборов паролей и других атак рекомендуется установить Fail2Ban внутри Debian. Fail2Ban следит за журналами (например, попытки входа по SSH, ошибки веб-сервера) и при обнаружении множества неудачных попыток блокирует (банит) IP-адрес нарушителя на уровне брандмауэра. Установите fail2ban командой:
sudo apt install fail2ban -yПри наличии systemd запустите и добавьте в автозапуск: sudo systemctl enable --now fail2ban.
По умолчанию Fail2Ban на Debian содержит фильтр для SSH. Можно настроить его параметры в файле /etc/fail2ban/jail.local. Для начала скопируйте дефолтный конфиг: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local и отредактируйте jail.local, убедившись, что в секции [sshd] стоит enabled = true (в некоторых дистрибутивах по умолчанию уже включено). Также можно настроить maxretry (число попыток до бана, например 3) и время бана. Затем перезапустите Fail2Ban: sudo systemctl restart fail2ban.
Важно: В условиях WSL2 с
portproxyвсе внешние SSH-подключения могут логироваться как исходящие от одного адреса (адреса хоста Windows). Это означает, что Fail2Ban в случае многократных попыток может забанить ваш Windows-хост, что разом отрежет все подключения (поскольку все идут через хост). Будьте осторожны с этой настройкой: возможно, имеет смысл не включать автоматический бан в WSL, а полагаться на сложные пароли/ключи и брандмауэр Windows. Либо, как вариант, использовать Fail2Ban на стороне Windows (например, с помощью встроенного механизма ограничений Windows или сторонних утилит).
3. Безопасный SSH-доступ. Если вы планируете подключаться к своему Debian по SSH (например, для администрирования удаленно), необходимо укрепить безопасность SSH:
- Установите и запустите SSH-сервер:
sudo apt install openssh-server -y && sudo systemctl enable --now ssh. - Отредактируйте конфигурацию
/etc/ssh/sshd_config: отключите вход под root (PermitRootLogin no), при необходимости поменяйте порт на нестандартный, например 2222 (Port 2222), разрешите аутентификацию по ключам (PubkeyAuthentication yes) и отключите парольную аутентификацию (PasswordAuthentication no) для более высокой безопасности – либо оставьтеyesдля паролей, если ключи не используются. Также можно ограничить круг пользователей, которым разрешен доступ, добавивAllowUsers <ваш_user>. - После изменений перезапустите SSH:
sudo systemctl restart ssh. Убедитесь, что SSH работает:sudo systemctl status ssh(должно быть active). - Настройте на Windows проброс порта 22 (или выбранного) по аналогии с шагом 6, если планируете входить извне. Например,
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=<WSL_IP> connectport=2222и откройте порт 2222 в брандмауэре Windows. После этого вы сможете подключаться по SSH извне, указав IP Windows и порт 2222 (например,ssh user@<ваш-IP> -p 2222).
Совет: Настройте вход по ключу SSH для удобства и безопасности. Сгенерируйте ключи (ssh-keygen на клиенте), добавьте содержимое вашего id_rsa.pub в файл ~/.ssh/authorized_keys на Debian WSL (создав его через nano), и установите права chmod 600 ~/.ssh/authorized_keys. После этого сможете входить без пароля. Не забудьте очень надежный пароль для учетной записи, если сохраняете возможность входа по паролю, или вовсе отключите парольный вход как упомянуто выше.
4. Обновления и мониторинг. Регулярно обновляйте систему Debian внутри WSL командой sudo apt update && sudo apt upgrade (или настроив unattended-upgrades), чтобы получать последние патчи безопасности. Следите за логами Nginx, PHP и системой (файлы в /var/log/), чтобы выявлять подозрительную активность. Инструмент Fail2Ban поможет автоматически реагировать на некоторые типы атак, но ручной аудит тоже важен.
Следуя этому руководству, вы развернули Debian 12 на Windows 11 Pro с помощью WSL2, установили стек веб-сервера (Nginx + PHP 8.3 + MySQL/MariaDB) и настроили доступ к нему через интернет с учетом статического IP, а также реализовали базовые меры безопасности для защиты сервера. Теперь ваш Debian-хост в WSL2 функционирует как полноценный веб-сервер, доступный извне, но управляемый из Windows. Успешной работы!
Источники:
- Официальная документация Microsoft: настройка WSL2 и установка Debian, рекомендации по сети WSL2.
- Опыт сообщества: Horus_Sirius, “WSL2 Debian & Nginx & PHP 8.3 & MariaDB” – пошаговый пример установки стек LEMP на WSL2.
- Блог UltraVDS: установка LEMP на Debian 12 (Nginx, MariaDB, PHP) и советы по безопасности MariaDB.
- Справочник CrownCloud: защита SSH с Fail2Ban на Debian 12.
- База знаний купереал.ком: подключение к WSL2 по SSH и проброс портов (пример команды
netsh portproxyи правило брандмауэра).
Для отправки комментария необходимо войти на сайт.