Рубрики
OS

Apache, nginx

Защита Apache2 от аттак

apt-get install libapache2-mod-evasive

Apache2 — перезапуск без разрывов солединений

/etc/init.d/apache2 graceful

Скрываем начинку веб-сервера от глаз

ServerSignature Off
ServerTokens Prod
expose_php = Off
display_errors = Off

Генератор файлов конфигураций для Apache2, Nginx

run.sh — Скрипт для запуска создания файлов и перезапуска Nginx, Apache2:

#!/bin/sh
cd /home/admin/www/_default/
php /home/admin/www/_default/conf.php
/etc/init.d/nginx restart
/etc/init.d/apache2 restart
echo "The end"

domains.txt — список доменов:

домен1.ru
домен2.ru
домен3.ru

conf.php — Генератор конфигов на PHP:

 $domains = explode("\n", file_get_contents("domains.txt"));

$tmpl_apache='

ServerAdmin webmaster@localhost

ServerName _host_
ServerAlias www._host_
AssignUserId admin www-data

DocumentRoot /home/admin/www/_host_/
Options Indexes FollowSymLinks All MultiViews
AllowOverride All

ErrorLog /home/admin/logs/_host_-error_log
';

$tmpl_nginx = '

server {
listen 80;
server_name ##domain## ##domain_aliases##;

location /block.png
{
gzip off;
default_type image/png;
root /home/##user##/www/##domain##;
}

location ~* ^.+\.(swf|xml|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|ods|arj|htc|avi|mpg|mp3|mid)$ {
valid_referers none blocked server_names ~\.google\. images.yandex.ru;
if ($invalid_referer)
{
return 404;
#rewrite /(.*)\.(gif|jpg|jpeg|png)$ / break;
#rewrite ^(.*)$ /block.png break;
}

root /home/##user##/www/##domain##;

}
location ~ \.flv$ {
root /home/##user##/www/##domain##;
flv;
}

location / {
proxy_pass http://127.0.0.1:81;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Accel-Internal /internal_xxx;
proxy_set_header Host $http_host;
proxy_redirect http://##domain##:81/ /;
}

location ~ /\.htp { deny all; }
location ~ /\.hta { deny all; }
location ~ /\.svn { deny all; }
location /stub_status { stub_status on; access_log off;}
}

';

foreach($domains as $d)
{
if(strlen($d)>3)
{
$d = strtolower(trim($d));
$path = "/home/admin/www/".$d."/";
if(!file_exists($path))mkdir($path, 0755);

$domain_aliases = "www.".$d;
$user="admin";
//##domain## ##domain_aliases##
$s = str_replace("_host_",$d,$tmpl_apache);
$n = str_replace("##user##",$user,$tmpl_nginx);
$n = str_replace("##domain##",$d,$n);
$n = str_replace("##domain_aliases##",$domain_aliases,$n);

//echo $s;
$app_conf.=$s;
$nginx_conf.=$n;
}
}

echo file_put_contents("../apache_sites.conf", $app_conf);
echo file_put_contents("../nginx_sites.conf", $nginx_conf);
echo "ok";

apache2 — Запуск виртуальных хостов от разных учетных записей

Ситуация: У вас сервер. Вы предоставляете хостинг для своих друзей. У них отдельные SSH/FTP аккаунты. Необходимо разграничить доступ на уровне apache. По сути, нужно, что бы Apache запускался для каждого пользователя под своим логином.

Есть решения основанные на CGI, но я предпочитаю использовать модуль apache2-mpm-itk.

Установка apache2-mpm-itk может удалить apache2 и apache2-mpm-prefork

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

$ sudo apt-get install apache2-mpm-itk

Далее, прописываем к каждому виртуальному хосту следующее:

<IfModule mpm_itk_module>
AssignUserId USER GROUP
</IfModule>

Если для виртуального хоста не будет указана эта директива, то сайт будет работает от стандартного пользователя, который установлен к файле настроек apache2 (Обычно www-data или apache2 или httpd).

Далее, необходимо установить права владения файлов у виртуальных хостов:

$sudo chownMYUSER:MYGROUP /var/www/my-virtualhost/ -R

Активировать этот модуль через a2enmod НЕ нужно.

Перезапускаем Apache2:

$ sudo /etc/init.d/apache2 reload