форум vBSupport.ru > В помощь веб-мастеру > Общие вопросы сайтостроения > Системное администрирование
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Anonymous
Специалист
 
Anonymous's Avatar
Default nginx + GeoIP для борьбы с анонимными прокси и нежелательными странами
7

дисклеймер: данная информация может быть полезна только тем, кто может управлять настройками nginx, т.е. владельцам выделенных серверов и различных vps/vds.

в этой статье я хочу на простом примере рассказать, как можно избавиться от нежелательных на сайте гостей при помощи замечательной базы GeoIP и nginx, работающего в качестве front-end'а. GeoIP можно прикрутить и к apache и к iptables, но это тема других статей

1. сначала нужно получить свежую версию базы GeoIP. сделать это можно разными способами в зависимости от используемой ОС и желания. например, если у вас CentOS, то можно установить ее командой "sudo yum install geoip". но в таком случае мы получим старую версию базы. свежую базу нужно скачать с сайта www.maxmind.com:
Code:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
и распаковать:
Code:
gunzip -f GeoIP.dat.gz
складывают GeoIP.dat обычно в каталог /usr/share/GeoIP/. для автоматизации процесса обновления базы нужно добавить в список заданий cron следующую запись:
Code:
cd /usr/share/GeoIP/ && wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz && gunzip -f GeoIP.dat.gz
и запускать ее от имени root'a раз в месяц.

2. предполагаю, что nginx уже используется в качестве front-end'a и он собран с поддержкой модуля geoip (проверить командой nginx -V, среди кучи буковок выведенных на экран должен быть следующий набор: --with-http_geoip_module).

в CentOS 6.4 из дефултовых репозиториев скачивается nginx уже с поддержкой geoip, сам GeoIP.dat.gz скачается автоматически в зависимостях (но старая версия!).

3. итак, nginx и geoip есть. осталось настроить nginx.

идем в nginx.conf и в секцию http добавляем следующие строки:
Code:
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $good_country {
    default yes;
        A1 no; # давим анонимусов
        CN no; # давим китайцев
        }
потом в секции location нужного нам server добавляем следующие строки:
Code:
if ($good_country = no){
                            return 404;
                            }
пример части конфига nginx с секцией server:

Code:
        server {
                server_name google.ws www.google.ws;
                listen 8.8.8.8; # по адресу 8.8.8.8 отвечает наш сайт
                listen 8.8.8.8:443 ssl;
                charset WINDOWS-1251;
                index index.php;
                set $root_path /var/www/google/data/www/google.ws; # здесь корень нашего форума
                location ~* ^.+\.(jpg|jpeg|picture|gif|png|svg|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
                        root $root_path;
                }
                location / {
                        proxy_pass http://8.8.8.8:81; # на порту 81 живет apache
                        proxy_redirect http://8.8.8.8:81/ /;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header X-Real-IP $remote_addr;
                        if ($good_country = no){
                            return 404;
                            }
            }
ну и перечитать конфиг nginx'a:
Code:
/etc/init.d/nginx reload
ну вот, китайцев и анонимусов (простите, братья...) мы отсекли полностью. полный список нужных буковок для GeoIP можно посмотреть здесь: http://dev.maxmind.com/geoip/legacy/codes/iso3166/

3.1 само собой, если нам нужно отсекать много стран, то проще создать для этого отдельный файл и инклюдить его в конфиг nginx'a вместо указания каждой отдельной страны. файл можно назвать, например, bad_countries и он должен быть следующего формата:
Code:
A1 no;
CN no;
US no;
т.е. каждая страна с новой строки и заканчивается точкой с запятой.

в конфиг nginx'a в этом случае в секцию http добавляем следующие строки:
Code:
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $good_country {
    default yes;
    include /etc/nginx/bad_countries;
        }
3.2 аналогичным образом можно создавать не список нежелательных гостей, а наоборот - разрешенных. в этом случае в секции location условие нужно поменять на обратное:
Code:
if ($good_country = yes){
                            return 404;
                            }

зы. настройку apache для корректной работы с nginx я не рассматриваю. это другой вопрос и он тут много раз обсуждался.
ззы. может я не прав и вместо 404 надо выдавать 403, но мне так захотелось.

Last edited by Anonymous : 06-26-2013 at 06:19 PM. Reason: очепятки исправил
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
xorex
Эксперт
vBSponsor
 
xorex's Avatar
Default
0

Насколько я помню с этим модулем не работает rpaf_module и несколькими другими (точно не помню), так на всякий случай предупредил.

UP


Имел в виду mod_evasive

Last edited by xorex : 06-27-2013 at 05:22 PM.
 
 
Anonymous
Специалист
 
Anonymous's Avatar
Default
1

Quote:
Originally Posted by xorex View Post
с этим модулем не работает rpaf_module
ну тут как в старом анекдоте про кошек у меня все работает.
 
 
xorex
Эксперт
vBSponsor
 
xorex's Avatar
Default
0

видимо уже пофиксили
 
 
Anonymous
Специалист
 
Anonymous's Avatar
Default
1

Quote:
Originally Posted by xorex View Post
видимо уже пофиксили
да там фиксить нечего. просто все мануалы в инете (и тут, в том числе) по скрещиванию nginx и rpaf рассчитаны на nginx 0.9 в лучшем случае. а в продакшен давно 1.х, который с "RPAFsethostname on" не работает. а его с упорством пытаются вписать. да и сам rpaf уже давно версии 0.6, а везде описания под 0.5, котором были какие-то проблемы с RPAFheader X-Forwarded-For и RPAFheader X-Real-IP ...

да и вообще, к GeoIP это отношения не имеет, это проблемы кривого проксирования nginx'ом. надо сначала настроить нормально проксирование, убедиться, что ip'шники показываются правильно, а потом прикручивать GeoIP. и волосы будут мягкими и шелковистыми

=======================================

в общем, раз начал про rpaf, напишу как оно у меня настроено. сразу скажу: у меня nginx 1.0.х, apache 2.2.х и rpaf 0.6.

rpaf для centos6 х64 можно взять в репе CentALT. подключаем репозиторий:
Code:
sudo rpm -ihv http://centos.alt.ru/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm
поставили и сразу его отключаем, чтоб мусора оттуда не наставить
Code:
sudo nano /etc/yum.repos.d/centalt.repo
и там меняем enabled на 0.

устанавливаем rpaf:
Code:
sudo yum -y —enablerepo=CentALT install mod_rpaf
в районе /etc/httpd/conf.d/ создаем конфиг для rpaf:
Code:
sudo nano /etc/httpd/conf.d/rpaf.conf
и вписываем туда:
Code:
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 127.0.0.1 xx.xx.xx.xx #xx.xx.xx.xx — ip nginx'a
RPAFheader X-Real-IP
RPAFheader X-Forwarded-For
а в конфиге nginx, как я уже писал выше:
Code:
location / {
                        proxy_pass http://8.8.8.8:81; # на порту 81 живет apache
                        proxy_redirect http://8.8.8.8:81/ /;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header X-Real-IP $remote_addr;
                        if ($good_country = no){
                            return 404;
                            }
            }
проверить правильность работы можно при помощи файлика со следующим содержимым:
PHP Code:
<?PHP
echo $_SERVER['REMOTE_ADDR'];
?>
если показывает ip вашего десктопа, значит все работает нормально. если 127.0.0.1 или адрес сервера, то где-то что-то не так.

зы. строчку "RPAFsethostname Off " я не прописывал, хотя везде рекомендуют. но у меня с этим параметром были какие-то проблемы - уже не помню какие, а без него все работает.

Last edited by Anonymous : 06-26-2013 at 08:35 PM. Reason: дописал поэму ;)
 
 
xorex
Эксперт
vBSponsor
 
xorex's Avatar
Default
0

@Anonymous, давно уже выкинул апач, может что то попадалось похожее на rpaf для связки fpm-fcgi >> nginx ?
 
 
Anonymous
Специалист
 
Anonymous's Avatar
Default
0

Quote:
Originally Posted by xorex View Post
похожее на rpaf для связки fpm-fcgi >> nginx
не совсем понял смысла. rpaf нужен для корректной передачи ip клиента от фронт-сервера к бэк-серверу. а в этой связке кому и что передавать?
 
 
xorex
Эксперт
vBSponsor
 
xorex's Avatar
Default
0

@Anonymous, блин заклинило,



перепутал модуль =)

с самого начала имел в виду mod_evasive

еще подумал, причем здесь проксирование ...
 
 
Anonymous
Специалист
 
Anonymous's Avatar
Default
0

Quote:
Originally Posted by xorex View Post
имел в виду mod_evasive
при помощи nginx можно защититься от пионерского ддоса самим nginx'ом, проверяя наличие реферера:
Code:
if ($http_referer !~* ^($|http://|https://) ){
         return 403;
    }
или при помощи вот такой штуки, например. но я этим не пользовался, знания только теоретические. ибо в софтовую защиту от хорошего ддоса не верю, а от пионерского спасает хороший проц + достаточное количество памяти меня пионеры пытались валить - ничего не вышло, только юзвери жаловались на возникающие иногда тормоза. а если серьезно кто-то захочет завалить, то никакие nginx'ы не помогут

кстати, в случае пионерского ддоса можно просто вычислить страну и временно отрубить ее описанным выше способом
 
 
xorex
Эксперт
vBSponsor
 
xorex's Avatar
Default
0

Это все понятно, мне он больше нравился как защита от залипания F5, сам отслеживает и сам же банит без всяких там fail2ban и прочих заморочек, при этом особо не напрягая систему, особенно актуально когда имеется не совсем оптимизированный код по запросам.

Давно когда то тестил и другие способы по блокировке этого дела, либо дофига гемора, либо костыли.

То что встроено в ngnix тоже не то, как не крути нагруз дает при таких действиях, mod_evasive в этом плане был идеален.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 01:15 PM.


Powered by vBulletin® Version 3.7.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.