Защита 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