Untitled
unknown
sh
9 months ago
4.5 kB
5
Indexable
#!/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"
Editor is loading...
Leave a Comment