Защита от DDoS Своими силами. Часть 3, настраиваем веб-сервер



На этом этапе нам нужно установить стандартный набор приложений: php, mysql, nginx. Но при этом нужно заблокировать для всех коннект к серверу по http/https портам, а разрешить его только с нашего шлюза.

Устанавливаем mysql/mariadb

apt install mariadb-server

И сразу создаём пользователя- администратора:

mysql -u root -h localhost
USE mysql;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT

Устанавливаем php-fpm

apt install php7.0 php7.0-fpm php7.0-cli php7.0-curl php7.0-gd php7.0-mysql php7.0-gd php7.0-mcrypt php7.0-mbstring php7.0-curl php7.0-zip

Устанавливаем nginx

apt install nginx

Проверяем работает ли веб-сервер, открываем в браузере: http://IP_сервера/ . По этому адресу должна открыться страница приветствия nginx.

Переделываем конфиг nginx

Правим: /etc/nginx/sites-available/default

server {
        server_name default;
        root /var/www/default;
        index index.html index.htm index.php;
        
        proxy_read_timeout 20;
        proxy_send_timeout 20;
        
        location ~ /. {
                deny all;
        }

        location ~* /(?:uploads|files)/.*.php$ {
                deny all;
        }

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ .php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

В папке /var/www/default создаем index.php со следующим содержанием:

<?php 

echo phpinfo();

?>

Обновляем страницу, и видим информацию о сервере:

phpinfo

Многие на этом моменте сразу полезут ставить phpmyadmin в эту же папку. Но так делать нельзя. Специально для phpmyadmin создаём новый конфиг: /etc/nginx/sites-available/phpmyadmin.conf

server {
        listen  127.0.0.1:8888;
        
        root /var/www/phpmyadmin;
        
        index index.html index.htm index.php;
        
        proxy_read_timeout 20;
        proxy_send_timeout 20;
        
        location ~ /. {
                deny all;
        }

        location ~* /(?:uploads|files)/.*.php$ {
                deny all;
        }

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ .php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

И делаем на него симлинк:

cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/phpmyadmin.conf

Тестируем nginx:

nginx -t

Nginx test

И если всё ок, перезапускаем nginx:

service nginx restart

И открываем порт в фаерволе:

ufw allow from 127.0.0.1 to 127.0.0.1 port 8888 proto tcp

Но вы не сможете законнектиться на сервер на порт 8888, потому, что nginx обрабатывает только локальные подключения к нему. Чтобы подключиться к phpmyadmin серверу нужно проложить туннель:

ssh -L 8888:localhost:8888 ip_сервера -l root

И уже затем коннектимся к пхп админ по адресу: localhost:8888

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

ifconfig -a

Затем смотрим что у нас в правилах:

ufw status numbered

ufw rules list

Удаляем все правила для 80 и 443 порта

ufw delete номер_правила

После каждого делета, ещё раз вызывайте "ufw status numbered", номера сдвигаются после каждого удаления. И в завершении добавляем правила:

ufw allow from локальный_ip_шлюза to локальный_ip_веб-сервера port 80 proto tcp
ufw allow from локальный_ip_шлюза to локальный_ip_веб-сервера port 443 proto tcp

Всё, теперь к нашему веб-серверу просто так не подключишься. Приступаем к настройке шлюза.


Сообщество: AWS

Комментариев(0)


Всего: 0 комментариев на 0 страницах

Ваш комментарий будет анонимным. Чтобы оставить не анонимный комментарий, пожалуйста, зарегистрируйтесь



Сообщества