Untitled
#!/bin/sh # # Скрипт автоматической установки и настройки nginx, PHP, SSL (self-signed), # а также включения и настройки PF-файервола на FreeBSD. # # ВНИМАНИЕ: # 1. Перезапишет /usr/local/etc/nginx/nginx.conf и /etc/pf.conf # 2. Меняйте ext_if="vtnet0" на нужный вам интерфейс # 3. Запускать ТОЛЬКО от root (или через sudo) LOGFILE="/var/log/nginx_php_pf_setup.log" # Перенаправляем вывод (stdout и stderr) в лог exec > "$LOGFILE" 2>&1 echo "=== Начало работы скрипта установки и настройки (лог: $LOGFILE) ===" echo "1. Обновляем репозитории и устанавливаем пакеты..." pkg update -y pkg install -y nginx php84 php84-extensions echo "2. Настраиваем автозапуск сервисов в /etc/rc.conf..." # Функция для аккуратного добавления строки в /etc/rc.conf add_rcconf_line() { local LINE="$1" if ! grep -q "^${LINE}\$" /etc/rc.conf; then echo "$LINE" >> /etc/rc.conf fi } add_rcconf_line 'nginx_enable="yes"' add_rcconf_line 'php_fpm_enable="yes"' add_rcconf_line 'pf_enable="yes"' add_rcconf_line 'pflog_enable="yes"' echo "3. Создаём минимальный конфиг /usr/local/etc/nginx/nginx.conf..." cat << 'EOF' > /usr/local/etc/nginx/nginx.conf user www; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # Для удобства можно раскомментировать логи: # access_log /var/log/nginx/access.log; # error_log /var/log/nginx/error.log; # HTTP-сервер server { listen 80; server_name _; root /usr/local/www/nginx; index index.php index.html index.htm; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } # HTTPS-сервер server { listen 443 ssl; server_name _; # Указываем пути к сертификату и ключу ssl_certificate /usr/local/etc/nginx/ssl/server.crt; ssl_certificate_key /usr/local/etc/nginx/ssl/server.key; root /usr/local/www/nginx; index index.php index.html index.htm; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } } EOF echo "4. Создаём тестовый PHP-файл info.php..." cat << 'EOF' > /usr/local/www/nginx/info.php <?php phpinfo(); exit(0); ?> EOF echo "5. Генерируем самоподписанный SSL-сертификат..." mkdir -p /usr/local/etc/nginx/ssl openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /usr/local/etc/nginx/ssl/server.key \ -out /usr/local/etc/nginx/ssl/server.crt \ -subj "/C=US/ST=Test/L=Test/O=Test/OU=Test/CN=192.168.56.201" echo "6. Настраиваем PF-файервол (/etc/pf.conf)..." # ВНИМАНИЕ: замените vtnet0 на нужный вам интерфейс (em0, re0, enp0s3 и т.п.) cat << 'EOF' > /etc/pf.conf ext_if="vtnet0" set skip on lo0 # 1. По умолчанию всё блокируем block all # 2. Разрешаем исходящие соединения pass out quick on $ext_if from any to any keep state # 3. Разрешаем входящие соединения на SSH (22), HTTP (80) и HTTPS (443) pass in on $ext_if proto tcp to any port { 22, 80, 443 } keep state # 4. Пример защиты от DDoS на SSH: table <ssh_guys> persist block in quick from <ssh_guys> to any pass in on $ext_if proto tcp to any port 22 \ keep state (max-src-conn 5, max-src-conn-rate 3/60, overload <ssh_guys> flush) EOF echo "7. Запускаем службы..." service php_fpm restart service nginx restart service pf start service pflog start echo "=== Установка и базовая настройка завершены успешно! ===" echo "Проверяйте логи здесь: $LOGFILE"
Leave a Comment