Блокировка IP-адресов модулем mod_rewrite
Используя модуль mod_rewrite, список IP-адресов можно существенно сократить. В этом помогут регулярные выражения. Главное удобство модуля mod_rewrite в данной задаче — возможность использования правил исключений.
Блокировка IP-адресов стран Северной Америки модулем mod_rewrite
Задача: необходимо заблокировать IP-адреса ARIN (стран Северной Америки), оставив доступ к сайтам для поисковых роботов Bing, Google, Yahoo. При этом на хостинге размещены несколько сайтов, один из которых предназначен для американской аудитории.
Для этого в корневой директории хостинга размещаем файл .htaccess, в котором прописываем следующее правило:
Данное правило модуля mod_rewrite блокирует IP-адреса стран Северной Америки, если имя хоста не содержит my_english_site.com, и строка User-Agent не содержит имена поисковых роботов Bing, Google, Yahoo. Правило распространяется на все сайты, размещенные на хостинге, за исключением домена my_english_site.com. Если нужно исключить все поддомены этого сайта, пишем:
При использовании правил модуля mod_rewrite в файлах .htaccess, размещенных в директориях, не забудьте добавить наследование указанных правил, иначе они работать не будут:
Обязательно указывайте в RewriteBase путь к директории, в которой размещен файл .htaccess, от корня сайта. Все преобразования ссылок осуществляются относительно той директории, в которой расположен файл .htaccess
При этом унаследованные правила модуля mod_rewrite работают также относительно этой директории, то есть как бы копируются в КОНЕЦ текущего файла (обратите внимание на то, что наследуемые правила будут исполнены после правил .htaccess текущей директории, а не перед ними). Если файл .htaccess расположен в директории /partners/web/access/, как данная статья, то:
Интересную статью о том, как работает mod_rewrite, читайте на habrahabr.ru →
Использование общего файла .htaccess для всех сайтов возможно не на всех хостингах. В противном случае вам придется прописывать данные правила для каждого сайта в отдельности, что неудобно при редактировании (придется вносить изменения в файлы .htaccess каждого сайта).
Блокировка всех IP-адресов, кроме стран СНГ, Bing, Google, Yahoo
Правило, блокирующее все IP-адреса, за исключением стран СНГ (включая Балтию) и поисковых роботов Bing, Google, Yahoo:
В данное правило включены диапазоны IP-адресов по первому октету, в которые входят IP-адреса всех бывших республик СССР (включая Латвию, Литву и Эстонию). Данное правило не блокирует IP-адреса других европейских стран, которые также входят в данный диапазон. Правило удобно применять для сайтов, ориентированных исключительно на аудиторию СНГ. Правда, если в будущем список IP-адресов, закрепленных за странами СНГ, расширится, новые адреса окажутся в числе запрещенных.
Общая конфигурация и поддержка сети сайтов #Общая конфигурация и поддержка сети сайтов
Для работы WordPress на nginx вам потребуется настроить обработчик PHP (backend), это может быть php-fpm, php-cgi или fastcgi. Оптимальным и простым в установке вариантом является использование php-fpm, который поддерживается начиная с PHP 5.3
Основной файл конфигурации
Обычно это /etc/nginx/nginx.conf , но может и располагаться и в другом месте в зависимости от вашего дистрибутива операционной системы и источника пакетов nginx.
Ниже будут перечислены только те директивы, значение которых может непосредственно влиять на работу WordPress. Ваш дистрибутив должен предоставлять файл конфигурации обеспечивающий базовую работу nginx, вам следует только перепроверить его на директивы, перечисленные ниже. Строки в конфигурации начинающиеся с # являются комментариями.
Настройка PHP обработчика может быть произведена так (как в глобальном контексте http {} так и для каждого сайта в контекстах server {} , настройки должны соответствовать тем, что указаны в настройках директивы listen пула (pool) для php-fpm
Во многих дистрибутивах конфигурации для отдельных сайтов (контекст ) вынесены в папку sites-available, на которые создаются символические ссылки в папке sites-enabled. Конфигурации включенных сайтов загружаются в конце nginx.conf директивой
Некоторые полезные директивы для конфигурации сайта
server { # Это адрес сайта server_name example.com; # Путь к папке с файлами сайта (корню) root /var/www/example.com; # Файл индекса сайта. index index.php; # А вот показ индекса файлов в папках без файла-индекса отключим autoindex off; # Журнал доступа может быть записан в отдельный файл с отложенной записью access_log /var/log/jinx/www-example.com.log main buffer=2k flush=30s; # А для некоторых файлов журнал доступа можно и вовсе отключить location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Закроем доступ к скрытым файлам (начинаются с точки) location ~ /\. { deny all; } # Вот так можно закрыть доступ к папке кеша (плагинов) location ~ ^/wp-content/cache { deny all; } # Запрет выполнения PHP в папках для загруженных файлов location ~* /(?:uploads|files)/.*\.php$ { deny all; } # А директивы ниже показывают как можно установить заголовки кеширования для статических ресурсов (а также изменить сжатие gzip для некоторых из них) location ~* ^.+\.(jpg|jpeg|png|ico|gif|swf|webp|srv)$ { expires 3w; gzip off; } location ~* ^.+\.(css|js)$ { expires 7d; add_header Vary Accept-Encoding; } location ~* ^.+\.(eot|ttf|woff|woff2)$ { expires 92d; add_header Vary Accept-Encoding; } # Не забываем добавить обработчик для PHP location ~ \.php$ { include fastcgi.conf; fastcgi_intercept_errors on; fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name; # Должен соответствовать имени, определенному в примере директивы upsteam выше. fastcgi_pass php; } # Ну и наконец, правила для "красивых постоянных ссылок" location / { try_files $uri $uri/ /index.php?$args; } # поближе к закрытию контекста server }
Обязательно убедитесь в том, что в php.ini установлено значение константы
это предотвратит исполнение иных (без расширения .php) файлов, возможно содержащих PHP код, возможным злоумышленником.
Много других рецептов и хитростей по конфигурированию nginx можно посмотреть например здесь: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
Конфигурация для сети сайтов
С тех пор, как установка сети сайтов стала частью WordPress (а не отдельным пакетом WPMU), дополнительные правила для nginx не требуются, вам следует лишь иметь идентичные блоки server{} для всех сайтов вашей сети, вы можете создать отдельный файл и включать его в конфигурации сайтов директивой e. Переопределяя лишь и если вам нужно — .
Если же ваша сеть сайтов имеет общий домен, то вы можете разместить её на одном виртуальном сервере, с одним блоком конфигурации .
Директива будет работать с любым доменом третьего уровня в домене example.com.
Внимание: вы можете оставить комментарий обратной связи к этой статье. Если данная статья показалась вам неполной или вы нашли неточности, оставьте нам сообщение используя форму ниже. Если данная статья показалась вам неполной или вы нашли неточности, оставьте нам сообщение используя форму ниже
Если данная статья показалась вам неполной или вы нашли неточности, оставьте нам сообщение используя форму ниже.
Также вы можете поучаствовать в составлении и дополнении документации на русском языке.Подробнее тут.
Блокировка по странам
В случае как с перенаправлением, так же и с блокировкой. Есть возможность заблокировать того или иного посетителя в зависимости от страны. Для этого в .htaccess необходимо добавить следующий код:
GeoIPEnable On — включение модуля GeoIP SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry — создание некоего массива (цепочки) BlockCountry в которую вноситься условие что страна CN — Китай SetEnvIf GEOIP_COUNTRY_CODE FR BlockCountry — тоже самое что и предыдущая строка, только страна в этом случае Франция Deny from env=BlockCountry — блокирование стран которые находятся в цепочке BlockCountry
Источник
Защита htaccess.
Смешно так звучит, правда? Мы столько времени потратили на защиту сайта при помощи различных плагинов и блокировок, а про то, что сам файл htaccess остаётся уязвим, забыли.
Следующий кусок кода, защищает все файлы, начинающиеся с — «hta», от просмотра ненужными людьми:
<Files ~ "^.*\.()"> order allow,deny deny from all satisfy all </Files>
А какие коды используете Вы? Поделитесь с читателями своими наработками!
На сегодня это всё…
Дополнение к статье.
Также рекомендую установить специальный плагин который помогает дополнительно защитить ваш сайт.
Самый простой вариант это Clearfy Pro.
Здесь можно убрать стандартный адрес входа в админ панель и заменить его на свой вариант, о котором никто не догадается.
Например:
Также есть дополнительные настройки, которые также могут пригодиться.
Есть один интересный плагин, который мне понравился. All In One WP Security
Он предоставляет мощный функционал по защите своего сайта.
Плагин показывает текущий уровень защиты сайта.
И наиболее значимые изменения.
В целом эти плагины и другие рекомендации из этой статьи могут значительно снизить риск взлома сайта.
Также рекомендую вам регулярно делать бэкапы базы данный и файлов сайта. И нужно хранить бэкапы за длительный период, например если вы делайте бэкап раз в неделю. То у вас должны быть доступны бэкапы за год или пол года.
У меня есть внешний жесткий диск и специальная папка, где у меня хранятся резервные копии за год и более по всем сайтам.
Это очень важно. Некоторые люди забывают и потом не могут восстановить свой сайт в случае форс мажорных обстоятельствах
Запрет по странам htaccess
Господа необходим взгляд со стороны знатока.
Несколько месяцев подряд постоянно пытаются сломать сайт клиента. Были и успешные попытки, последняя — вчера, залили папку фейковой палкой. Гугл и хостер прислали свои «ай-йя-яй» сайтик маленький — 100+ страниц, висит на вордпрессе. Версии ВП регулярно обновляются. Однако атаки продолжаются. Не хочется выглядеть параноиком, но увы, грешу на конкурентов, т.к. с сайта идут продажи и многие из конкурентов были попячены в топах.
В качестве одной из мер отсечения решил запретить доступ ненужных стран в .htaccess, т.к. сайт региональный, а паразиты как правило лезут с «мусорных» айпишек.
Если есть спецы, одобрите или подправьте, плиз сделанную директиву (целью было отсечь всех, кроме стран СНГ и прибалтики):
Было бы точнее отсекать с помощью модуля апатча mod_geo. Но я так понял хостинг стандартный и вы ничего там настроить не можете? тогда может хотя бы впн лучше взять.
А чего ломают? фиксите движок. какие атаки идут? чтобы положить сайт? на нагрузку? дос? так на хостинге уже что-то ставить нужно типа даже того же дос дефлейта. А если ломают движок, то отсекать страны вообще ничего не даст.
может кеширование попробуйте, чтобы уменьшить нагрузку
Для начала смените все пароли (админки, хостинг, фтп, БД. )
Проверьте права на папки
Если ддосят. обычно слабо =) То лучше найти хороший антиддосовый хостинг или взять дешевый сервачек в ДЦ, у нормальных обычно уже стоят фильтрующие Цыски\Длинки
Хостинг обычный шаред, для 1 мелкого сайта не было нужды брать что-то серьёзнее. Взять вдс-ку — нет проблем. Но я в администрировании ламер. Моя задача двигать сайт. Попутные вопросы решаю по мере своих способностей, т.к. клиент является моим хорошим знакомым.
Ломают через вп, на сколько я вдупляю Заливают файлы. Например после последней атаки в корне появились лишние: phpmailer.php и папка .PayPal, обоим я сначала поставил нулевые права, после обнаружения. Папку вообще вчера снёс. Были попытки ковыряния и заливания папок и файлов через скрипты обрабатывающие картинки. Т.е. лезут во все щели, куда только можно.
Ддоса нет. Слишком дорогостоящее занятие для конкурентов клиента.
Например, сегодня вижу по ливу переходы с таких адресов:
N_N_N: Хостинг обычный шаред, для 1 мелкого сайта не было нужды брать что-то серьёзнее. Взять вдс-ку — нет проблем. Но я в администрировании ламер. Моя задача двигать сайт. Попутные вопросы решаю по мере своих способностей, т.к. клиент является моим хорошим знакомым.
Ломают через вп, на сколько я вдупляю Заливают файлы. Например после последней атаки в корне появились лишние: phpmailer.php и папка .PayPal, обоим я сначала поставил нулевые права, после обнаружения. Папку вообще вчера снёс. Были попытки ковыряния и заливания папок и файлов через скрипты обрабатывающие картинки. Т.е. лезут во все щели, куда только можно.
Ддоса нет. Слишком дорогостоящее занятие для конкурентов клиента.
Например, сегодня вижу по ливу переходы с таких адресов:
Как я понял вам заливают скрипты и шлют через ваш хостинг майл спам. А эти переходы похожи на скорее всего просто рефки по которым юзеры переходят со своией яху почты читая этот спам, наверное их провоцируют на какую-то оплату, раз еще заливают скрипты платежных систем.
Но в любом случае так и буду ломать если не пофиксить движок, серверные фишки и настройки htaccess врятли что-то дадут если дыра в движке.
А вы пробовали обновлять этот ворд прес до последней версии?, возможно было бы еще интерестно посмотреть логи того же апатча, можно было бы попробовать увидеть как ломают.
Грош цена такому скрипту, который еще кроме заливки картинок может ломать весь сайт:)
Источник
Вопросы по теме ‘hotlinking’
Apache 2.4 — Как перенаправить изображения в файл php?
Мне нужно перенаправить все изображения в файл php, включая путь и имя файла.
Представьте, что мой домен — example.com. У меня может быть https://example.com/art/logo.png и хотите перенаправить это на…
329 просмотров
schedule
08.10.2021
RewriteMap не работает, чтобы предотвратить хотлинкинг
Я пытаюсь предотвратить горячее связывание изображений и динамическое добавление разрешенных хостов с помощью RewriteMap в текстовый файл, но, к сожалению, условие не работает.
Вот код VirtualHost
<VirtualHost *:80>
DocumentRoot…
124 просмотров
schedule
17.09.2021
Файлы, для которых запрещена горячая ссылка, по-прежнему доступны для просмотра из исходного кода сайта
У меня есть файлы и изображения, которые нельзя просматривать или загружать. Поэтому, когда я просто ввожу и загружаю URL-адрес, скажем » http://www.domain.com/dir/image.png «он дает мне сообщение 403, как и ожидалось.
Но когда я обращаюсь к…
41 просмотров
schedule
26.10.2021
.htaccess — Проверить, соответствует ли реферер хосту без жесткого кодирования?
Я хотел бы сделать типичную вещь, когда вы убедитесь, что заголовок реферера соответствует вашему хосту, используя htaccess. Однако я хотел бы сделать это без жесткого кодирования доменного имени, чтобы код htaccess можно было легко повторно…
3262 просмотров
schedule
02.11.2021
IIS Предотвращение хотлинкинга контента других сайтов на самостоятельных сайтах
Мы хотим, чтобы наши собственные пользователи не использовали горячие ссылки на изображения и медиафайлы за пределами нашего собственного домена. Есть ли способ сделать это через IIS (версия 8 на Windows Server 2012)? У нас установлен модуль…
240 просмотров
schedule
15.08.2022
jQuery: есть ли способ добавить переменную в img, не загружая ее дважды?
Я пытаюсь настроить этот метод предотвращения горячих ссылок. за счет того, что к URL-адресам img добавляется ?i только при посещении браузером с поддержкой JavaScript, в отличие от ботов.
Используя это в $(document).ready(function() работах:…
269 просмотров
schedule
12.04.2022
Замена изображений с горячими ссылками версиями с низким разрешением
Я работаю над веб-сайтом производителя цифровых гаджетов. Изображения продуктов связаны с сотнями блогов и форумов. что вызывает проблемы с пропускной способностью.
мы хотим заменить все изображения с горячими ссылками их версиями с низким…
95 просмотров
schedule
28.07.2022
защита хотлинков
Я сделал этот простой код, чтобы предотвратить горячую ссылку на мои файлы из моего файла загрузки php:
if ((strpos($_SERVER,’www.domain.com’)!==0)) {
$redirect=’index.php’;
header(«Location: $redirect»);
exit;
}…
2478 просмотров
schedule
13.09.2021
URL-адрес плаката IMDB возвращает отказ в переходе
В моем приложении Ruby on Rails я использую гем imdb (https://rubygems.org/gems/imdb) для поиска фильма по названию, захватываю URL-адрес плаката и добавляю его в модель фильма, которая есть в моей базе данных. Затем, на мой взгляд, я помещаю этот…
9744 просмотров
schedule
14.11.2021
Динамически передискретизируйте изображения с горячими ссылками с помощью php
У меня есть каталог изображений, некоторые из которых имеют большое разрешение, поэтому я хотел бы использовать версию с гораздо более низким разрешением, если они получают горячую ссылку, и я также накладываю повторяющееся изображение (например,…
585 просмотров
schedule
16.07.2022
Что я могу сделать, чтобы Mozilla Firefox предварительно загрузил возможный результат изображения?
Я пытаюсь предварительно загрузить изображения с помощью JavaScript. Я объявил массив следующим образом со ссылками на изображения из разных мест:
var imageArray = new Array();
imageArray = new Image();
imageArray = new Image();…
1639 просмотров
schedule
14.05.2022
Разрешить/запретить хотлинкинг изображений с помощью .htaccess
Итак, у меня есть это в файле .htaccess моего сайта, чтобы предотвратить горячее связывание изображений, JS и CSS со всех других доменов.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain\.com
RewriteRule…
13406 просмотров
schedule
26.09.2022
http-изображение можно просматривать на внутренней странице, но не по прямому URL-адресу
Я не верю, что это возможно, но полагаю, что есть люди намного умнее меня, так почему бы не проверить ..
Я хотел бы иметь изображение HTTP, которое можно просматривать изнутри страницы при использовании с тегом img, но НЕ отображается, если…
633 просмотров
schedule
15.10.2021
MIME типы файлов
Чтобы понять, какие документы надо показывать как html, какие как графику, а к каким надо выдать меню, позволяющее сохранить файл на диск, браузер использует MIME типы.
MIME типы описывается набором символов, отражающим тип используемых данных. Например, файлам с расширением .html соответствует тип text/html. В ответ на пришедший запрос html-файла сервер возвращает заголовок Content-type: text/html. Браузер, получив такой заголовок, знает, что документ с типом данных text/html это обычная веб-страница на языке HTML.
Пример распространенных MIME типов данных
Описание данных |
Расширение файлов |
MIME type |
Картинки gif |
gif |
image/gif |
Картинки jpeg |
jpeg jpg jpe |
image/jpeg |
VRML-файлы |
wrl vrml |
model/vrml |
HTML-документ |
html htm |
text/html |
Обычный текст |
asc txt |
text/plain |
Архив ZIP |
zip |
application/zip |
Файл MS Word |
doc |
application/msword |
Файл MS Excel |
xls |
application/vnd.ms-excel |
Файл MS Power Point |
ppt |
application/vnd.ms-powerpoint |
Файл Adobe Acrobat |
|
application/pdf |
Flash-документ |
swf |
application/x-shockwave-flash |
Добавление MIME типов файлов
Периодически появляются новые MIME типы, которые не известны веб серверам, соответственно, в этом случае браузеры не смогут понять как обрабатывать указанный объект. Чтобы исправить эту проблему новые MIME типы надо добавить в настройках сервера или в файле .htaccess. Так же это пригодиться в случае если надо переопределить базовый MIME тип для уже известного расширения.
Файлы заканчивающиеся на / будут открываться как html:
Блокировка IP адресов директивой Deny
Разрешаем только методы GET, HEAD, POST:
Запрещаем доступ к сайту для всех методов с IP адресов AfriNIC, APNIC, LACNIC:
Данным правилом мы запретили доступ к сайту для IP адресов стран Юго-Восточной Азии, Африки, Южной Америки и Карибского бассейна, а также некоторых корпораций
Обратите внимание, что в этом списке отсутствуют IP адреса из смешанных зон, которые можно найти на сайтах AfriNIC, APNIC, LACNIC и RIPE. Однако данные диапазоны отсекают основной объем паразитного трафика
IP адреса ARIN блокировать не рекомендуется, иначе роботы поисковых систем Bing, Google, Yahoo не смогут заходить на ваш сайт.
Здесь умышленно задан порядок обработки правил Deny,Allow, а не наоборот, чтобы иметь возможность добавить ниже разрешающие правила исключений для некоторых IP-адресов из заблокированных диапазонов. Однако имейте ввиду, что и другие запрещающие правила для этих IP-адресов, касающиеся, например, запрета на использование определенных символов в URL, могут не действовать — будут разрешены любые URL-запросы. Кстати, в случае использования порядка обработки правил Allow,Deny рекомендуется прописать в самом начале разрешающее правило для всех Allow from all, но это не самое удачное решение — лучше его не использовать, если вы собираетесь устанавливать выборочно запрещающие правила.
Примечание: для отображения сообщения об ошибке 403 (доступ запрещен) лучше использовать не собственную страницу, а короткое сообщение, уменьшая тем самым нагрузку на сервер
Например, можно послать хакеров или ботов по известному адресу: ErrorDocument 403 «Fuck you! Обратите внимание на то, что в строке прописана только одна кавычка (для Apache 1.3). Для Apache 2.0 необходимо обязательно ставить закрывающую кавычку
Включение Gzip сжатия
Gzip – это формат сжатия веб-страниц, файлов CSS и JavaScript на стороне сервера перед отправкой их в браузер. Можно проверить сжимается ли уже сайт с помощью нескольких инструменов (https://seolik.ru/gzip-compression-test или https://checkgzipcompression.com). Есть смысл вложиться в данный вариант оптимизации, ибо колоссальная разница заметна сразу.При использовании Apache, можно включить сжатие, добавив следующий фрагмент в файл .htaccess.<IfModule mod_deflate.c> # Compress HTML, CSS, JavaScript, Text, XML and fonts AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml
# Remove browser bugs (only needed for really old browsers) BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0 no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html Header append Vary User-Agent</IfModule>Для Nginx, сжатие можно включить, добавив в файл nginx.conf фрагмент:gzip on;gzip_vary on;gzip_comp_level 2;gzip_http_version 1.0;gzip_proxied any;gzip_min_length 1100;gzip_buffers 16 8k;gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;gzip_disable «MSIE .(?!.*SV1)»;Необходимо отметить специфическую особенность, выявленную в практической эксплуатации сайта bmstu-kaluga.ru: когда производительность упирается в скорость сжатия, на двухядерной системе nginx с 2-мя процессами работает практически в 2 раза быстрее, чем с одним процессом.Как оказалось, результирующая производительность весьма ограничена производительностью процессора, и оснований думать что «процессоры нынче быстрые» нет, бездумно ставить сжатие на 9 уровень не выйдет. При сжатии на 9-тку nginx полностью занимает оба ядра процессора, но отдает всего контент на скорости всего 4 Мб/с, т.е. не способен загрузить канал 100 Мбит, не говоря уже о большей пропускной способности.Если сравнивать скорость сжатия и размер полученных файлов, то видно, что после степени 5 сжатие практически не растет, а вот скорость падает почти в 2 раза если сжимать на 9. Рекомендуемое решение заключается в использовании модуля ngx_http_gzip_static_module. Этот модуль позволяет избавиться от сжатия одних и тех же файлов. Мы просто максимально сжимаем их заранее, и помещаем в том же каталоге с расширением .gz, и если есть – то будет отдаваться сжатый файл, причем моментально. Если включить и gzip_static и обычный gzip с уровнем сжатия например 1, то если предварительно сжатый файл будет найден – его и отдадут, а если такого файла нет, или например контент от Apache приходит – то его сожмут на 1, максимально быстро.Для реализации описанной методики необходимо подготовить сжатые файлы:
for i in `find ./* -type f -name '*.js'`; do echo $i; gzip -c -9 $i > $i.gz; done;for i in `find ./* -type f -name '*.css'`; do echo $i; gzip -c -9 $i > $i.gz; done;
А в конфигурацию nginx добавляем строчку gzip_static on:gzip_static on;
Заголовок HTTP Content-Security-Policy (CSP)
Content Security Policy (CSP), что в переводе означает «Политика безопасности контента». Допустим у Вас есть сайт, на котором вы показываете рекламу пользователям и честно зарабатываете деньги. И всё идёт хорошо, пока к вам не начнут ходит пользователи с заражёнными браузерами. Заражённый браузер будет подменять рекламу на вашем сайте на свою и показывать её пользователю.
Злоумышленник может создать определенную ссылку, которая выполняет произвольный JavaScript в браузере жертвы.
Инструкция в файле .htaccess
Header always set Content-Security-Policy "upgrade-insecure-requests"
Указатель upgrade-insecure-requests заставляет браузер волшебным образом переделать все HTTP-запросы в HTTPS-запросы.
Однако CSP касается не только используемого протокола. Он предлагает детальные способы определения того, какие ресурсы и действия разрешены на вашем сайте. Вы можете, например, указать, какие скрипты должны выполняться или откуда загружать изображения. Если что-то не разрешено, браузер блокирует это действие и предотвращает потенциальные атаки на ваш сайт.
Интересным вариантом CSP является режим только для отчетов. Вместо того чтобы использовать заголовок Content-Security-Policy, вы можете сначала проверить влияние CSP на ваш сайт, сказав браузеру просто сообщать об ошибках, не блокируя выполнение скрипта и т. д., Используя заголовок Content-Security-Policy-Report-Only.
.htaccess переадресация
Блокируем хотлинки с других сайтов
Есть нехорошие товарищи, которые могут использовать картинки с вашего ресурса для использования в своих проектах. Они используют ваши изображения на своих сайтах, другими словами, используют вашу пропускную способность в своих целях, по аналогии с перемещением изображений на поддомен. Будем с ними бороться… Заменим любую картинку, на которую ведет хотлинк с другого сайта, на какое-нибудь предупреждающее изображение или на что хватит фантазии. В коде не забывайте менять адреса на ваши URL.
Перенаправим RSS фиды WordPress на Feedburner
Я не думаю, что кто-то пользуется чем-то другим, отличным от Feedburner. Удобно для пользователя, удобно для владельца блога, статистика, опять же. Если вы еще не используете — крайне рекомендую. Код ниже перенаправит все ваши RSS потоки на ваш аккаунт, не забывайте только вставить нужный адрес.
В этом примере идет перенаправление двух потоков: основного RSS и обновление комментариев, если посетитель подписан на обновления.
Изменим страницы ошибок
С хостингом и сайтом случается всякое, поэтому заранее нужно быть готовым к проблемам и сделать свои страницы ошибок. А пользователи в случае проблем будут перенаправлены на соответствующую страницу. На этих страницах можно дать краткую информацию для пользователя, почему такое случилось. Контакты свои оставить, в крайнем случае.
В этом примере идет перенаправление в случае основных ошибок. 404 я тоже добавил, хотя CMS обычно отрабатывают такие моменты, но бывали случаи.
301 и 302 редирект или перенаправление
301 редирект или, так называемое постоянное перенаправление — говорит о том, что страница поменяла адрес или URL и перенаправляет на новую страницу. Если у вас на сайте была проиндексированная ПС страница, а вы поменяли ее адрес — в обязательном порядке сделайте 301 редирект на новую страницу. При 301 редиректе старая страница не индексируется, а вместо нее «подставляется» новая.
Собственно, похожий пример внимательный читатель увидит выше, в случае перенаправления RSS. Да, технология та же. Бывает так, что сайт переезжает на новый домен, нужно сохранить структуру ссылок, а их могут быть сотни и тысячи, на каждую установить перенаправление нереально. Код ниже поможет разобраться с такой ситуацией:
Есть интересная методика «скрытия» внешних ссылок путем 301 редиректа. Допустим, у вас есть «сквозная» ссылка в сайдбаре, которая ведет на ваш профиль в Google+, она внешняя, то есть ведет на внешний ресурс. Для SEO очень хорошо, когда таких ссылок как можно меньше. Можно спрятать их и сделать внутренними.
Технология производства внутренних ссылок из внешних:
- ставим ссылку на мнимую страницу,
- настраиваем 301 редирект в htaccess с этой страницы на реальную страницу вашего профиля
- посетитель ничего не чувствует, ПС довольны
Подобным образом можно ставить любые другие условно постоянные ссылки. 302 редирект или временное перенаправление говорит ПС, что страница перемещена временно, поэтому индексировать нужно обе страницы, старую и новую.
Код абсолютно такой же, как в случае с постоянным перенаправлением. 302 редирект удобно использовать, когда проводятся какие-либо долгосрочные работы на сайте и не нужно показывать посетителям «поломанные» страницы. В таком случае вам поможет этот код:
Склеиваем сайты с www и без него
Очень плохо, когда сайт доступен по двум адресам, ПС это очень не любят. Склеить это в один адрес поможет код ниже:
В этом примере — главное зеркало это адрес без www. Если необходимо сделать наоборот — поменяйте www местами, сверху уберите, внизу добавьте.
Перенаправляем на главную
Перенаправление со страниц site.com/index.php и site.com/index.html на страницу site.com/. За код спасибо Василию Красноженову.
Блокировка IP-адресов директивой Deny
Разрешаем только методы GET, HEAD, POST:
Запрещаем доступ к сайту для всех методов с IP-адресов AfriNIC, APNIC, LACNIC:
Данным правилом я запретил доступ к сайту для IP-адресов стран Африки, Юго-Восточной Азии, Южной Америки и Карибского бассейна, а также некоторых корпораций и учрежний типа министерства обороны страны, скорый кирдык которой предрекал герой Сергея Бодрова в фильме «Брат»
Обратите внимание, что в этом списке отсутствуют IP-адреса из смешанных зон, которые можно найти на сайтах AfriNIC, APNIC, LACNIC и RIPE. Однако данные диапазоны отсекают основной объем паразитного трафика
IP-адреса ARIN блокировать не рекомендуется, иначе роботы поисковых систем Bing, Google, Yahoo не смогут заходить на ваш сайт.
Я умышленно задал порядок обработки правил Deny,Allow (при отсутствии директив Allow директиву Order лучше не использовать), а не наоборот, чтобы иметь возможность добавить ниже разрешающие правила исключений для некоторых IP-адресов из заблокированных диапазонов. Однако имейте ввиду, что и другие запрещающие правила для этих IP-адресов, касающиеся, например, запрета на использование определенных символов в URL, могут не действовать — будут разрешены любые URL-запросы. В этом случае запрещающие правила можно продублировать в mod_rewrite, проверяя условия через переменные окружения, установленные в mod_setenvif:
Кстати, в случае использования порядка обработки правил Allow,Deny рекомендуется прописать в самом начале разрешающее правило для всех Allow from all, но это не самое удачное решение — лучше его не использовать, если вы собираетесь устанавливать выборочно запрещающие правила.
Примечание: для отображения сообщения об ошибке 403 (доступ запрещен) лучше использовать не собственную страницу, а короткое сообщение, уменьшая тем самым нагрузку на сервер (какая вам разница, что увидят китаец или румын, пытавшиеся попасть на ваш сайт). Например, послать всех по известному адресу:
Глобальные настройки Apache
Данный раздел рассматривает важные параметры глобальных настроек Apache.
Timeout
По умолчанию этот параметр имеет значение 300. Это значит, что на выполнение каждого запроса у сервера есть максимум 300 секунд. В большинстве случаев это значение очень большое, и его рекомендуют уменьшить до 30-60 секунд.
KeepAlive
Если этот параметр имеет значение On, сервер позволит клиенту запрашивать несколько объектов в рамках одного соединения. Если параметр имеет значение Off, то каждый новый запрос будет создавать индивидуальное соединение. Такое поведение может привести к перенагрузке сайта с большим трафиком.
MaxKeepAliveRequests
Этот параметр позволяет определить максимальное количество запросов для одного соединения. Это позволяет увеличить производительность Apache.
Значение 0 позволит веб-серверу обрабатывать неограниченное количество запросов в рамках одного соединения.
KeepAliveTimeout
Данный параметр устанавливает промежуток времени между запросами. Если в течение указанного времени клиент не создал следующий запрос. Веб-сервер прервёт соединение. Если в дальнейшем этот клиент отправит запрос, сервер создаст новое соединение.