INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / Thingiverse / RSS / GPG

Борьба с хотлинками в nginx

№ 8099 В разделе "Sysadmin" от February 25th, 2016,
В подшивках: ,

Надоели хотлинкеры, сосущие траффик гигабайтами? Отличный рецепт:

location ~ .(gif|png|jpe?g)$ {
    valid_referers blindage.org;
    if ($invalid_referer) {
        access_log /var/log/nginx/hotlinks.log;
        rewrite (.*)\.(jpg|jpeg|png|gif)$ /;
    }
}

Нет комментариев »

Ложим apache (ну можно и nginx) в chroot в CentOS (Fedora, RedHat)

№ 6639 В разделе "Sysadmin" от August 22nd, 2014,
В подшивках: , ,

Появилась задача держать php4 и php5 на одном сервере и дабы не разводить адский геморрой (о да, это тот еще секс) решил просто запустить 2 вебсервера. Благо дополнительный IP адрес на сервере уже был и не использовался совсем.

Итак, первое что делаем это смотрим netstat и видим вот такую хрень:

bash-3.2# netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
...
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      15164/httpd
...
tcp        0      0 :::22                       :::*                        LISTEN      2592/sshd
tcp        0      0 :::443                      :::*                        LISTEN      15041/httpd

Apache висит сразу на всех интерфейсах. Его необходимо перевешать на первый IP адрес, на который смотрят домены апача. Не забывайте, что если домены смотрят на второй IP адрес, то их срочняком нужно переправлять на первый IP. Кроме тех, которые должны появиться внутри chroot, разумеется 😉

После изменения httpd.conf время установить специальный пакет yum-utils:

sudo yum install yum-utils

И вот сейчас можно наконец создать директорию, где будет находиться ваш chroot и создать окружение:

WCR=/var/chroot/2nd_apache
mkdir $WCR
rpm --root $WCR --initdb
yumdownloader --destdir=~ centos-release
rpm --root $WCR -ivh --nodeps ~/centos-release*.rpm
yum --installroot=$WCR -y install httpd php

Если у вас вместо CentOS стоит Fedora или Redhat, то заменяете на fedora-release или redhat-release. Теперь ждем конца установки и завершаем окружение монтированием системных директорий и запуском apache. Для этого создадим скрипт, который необходимо запускать при старте системы:

#!/bin/bash
WCR=/var/chroot/2nd_apache
mount -o bind /dev/ $WCR/dev
mount -o bind /sys/ $WCR/sys
mount -t proc proc $WCR/proc/
chroot $WCR /etc/init.d/httpd start

Вуаля! Теперь делаете скрипт исполняемым, ложите в init.d и заставляете запускаться при старте системы.

Делаете netstat и видите как апачи тихо шуршат на выделеных IP адресах:

bash-3.2# netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
...
tcp        0      0 213.118.129.100:80          0.0.0.0:*                   LISTEN      15164/httpd
tcp        0      0 213.118.128.100:80          0.0.0.0:*                   LISTEN      15041/httpd
...

Кстати, если у вас возникла потребность подключать дополнительные репозитории, то вот еще есть какой момент. Например, внутри chroot мне нужно иметь php 5.3, а в репозитории только 5.1. Значит нужно подключить другие репозитории с более новым PHP прямо внутри chroot. Сделать это можно так:
rpm --root=$WCR -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm --root=$WCR -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm

Мы указали –root, который является нашей директорией для chroot. Внутри нее идем в /etc/yum.repos.d и в файле webtatic.repo в секции [webtatic] ставим enabled=1.

Теперь можно проверить какие версии PHP нам доступны для установки
yum --installroot=$WCR --showduplicates list php

Самая свежая поставится автоматически или укажите версию пакета рядом с его именем
yum --installroot=$WCR install php

Подробнее об установке конкретных версий можно почитать здесь. Не забудьте поставить дополнительные модули php 😉

Нет комментариев »

Блокировка стран через nginx + geoip + недосказанное в остальных мануалах

№ 4795 В разделе "Sysadmin" от January 18th, 2013,
В подшивках: ,

Вы уже наверняка установили nginx с поддержкой GeoIP и распаковали куда-нибудь саму базу адресов. Нет? Ну так в сети куча мануалов. Зачем плодить их? А вот теперь самое интересное!

в секции http нужно подключить ваши конфиги:

    geoip_country /opt/GeoIP.dat;

    map $geoip_country_code $bad_country {
    default 1;
        include geo/good_countries;
    }

А теперь фишка! Об этом не написали в других мануалах. Конфиг самого сервера:

server {
    listen   80 default; ## listen for ipv4
    server_name  blablabla.ru;

    root   /var/www/blablabla.ru;
    index index.php index.html index.htm;

    error_page 405 403 /geoblock.html;
    location ~* /geoblock.html {
        internal;
        root /etc/nginx/errors;
        default_type        text/html;
    }

    location / {
        if ($bad_country){
            return 405; }
        if ($remote_addr = 31.24.28.1){
            return 405; }
    }

    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        fastcgi_index index.php;
        fastcgi_intercept_errors on;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Нужно было проверки IP поместить в секцию location / {}, о чем заботливо не написали ни в одном мануале 🙂

Нет комментариев »

Борьба с хотлинками в nginx (nginx hotlink protection)

№ 3801 В разделе "Sysadmin" от November 1st, 2011,
В подшивках:

Одолели меня как-то хотлинкеры и решил я защититься от них. Не, ну почему я должен платить свои кровные за то, что другие копипастят у меня картинки, гоняя на мой сервер вполне ощутимый траффик и получая за это деньги? В попец таких товарищей!

    #location ~ \.(jpg|png|gif)$ {
    location /wp-content {
        valid_referers server_names *.blindage.org;
        if ($invalid_referer) {
            return 403;
        }
    }

Как вы видите, я могу включить защиту на директорию или на группу файлов. Я выбрал на директорию потому, что задолбаюсь писать регулярку для хранимых файлов 🙂

Нет комментариев »

Яндекс.Метрика

Fortune cookie: pocket pool, n.: Well, for guys, it's two-ball in the side pocket. For women, it's playing the slots.