• Быстрый переход
  • Рубрики
  • Свежие записи
  • Метки
  • Архивы
  • Реклама 1
  • Реклама 2
  • Рейтинг@Mail.ru

    Добро пожаловать! Ваш IP-адрес: ec2-54-80-33-183.compute-1.amazonaws.com

    2014 Январь

    nginx: Защита файлов от прямых ссылок ngx_http_referer_module

    Часто, при цитировании материала с вашего сайта, адреса изображений или загружаемых файлов не изменяют. Возникает нагрузка на ваш сервер, но при этом посетитель даже не знает, откуда загружается рисунок и не видит вашего сайта.

    Наиболее гуманно будет выдавать посетителю другого сайта изображение с текстом "Это изображение доступно только на сайте www.example.com". Если ссылаются на загружаемый файл — перенаправлять на страницу загрузок вашего сайта.

    Сделать это можно с помощью модуля ngx_http_referer_module: он будет анализировать поле "Referer" (ссылающаяся страница) в запросе посетителя и сравнивать со списком разрешенных доменов. Конечно, посетитель может подделать это поле в своем запросе, но это не так просто и обычно этого никто не делает.

    Не стоит забывать, что некоторые сервисы могут использовать ваши картинки, принося вам пользу в виде трафика. Например, поиск по изображениям Google. Если вы в этом заинтересованы, обязательно включите домены таких сервисов в список разрешенных.

    Кроме того, не стоит блокировать запросы без поля "Referer", очень часто за ними скрываются посетители вашего сайта с необычными браузерами или нестандартными настройками.

    Для изображений:

    server {
    ...

    location ~ \.(jpg|gif|png)$ {
    valid_referers none blocked server_names ~\.google\. images.yandex.ru;
    if ($invalid_referer) {
    rewrite ^(.*)$ /img/invalid_referer.png redirect;
    }
    }
    }

    Подробнее...

    nginx: Ограничение доступа по паролю

    Используя директивы auth_basic и auth_basic_user_file, можно ограничить доступ ко всему серверу, сайту, каталогу или любому URL по маске, с авторизацией по протоколу "HTTP Basic Authentication".

    Формат файла со списком логинов и паролей такой же, как в Apache. Создание такого файла утилитой htpasswd.
    Добавьте в нужную секцию файла конфигурации две директивы:

    location /admin/ {
    auth_basic "Admin Zone";
    auth_basic_user_file /var/www/example.com/admin/.htpasswd;
    }

    auth_basic задает имя ресурса (realm), которое будет показано посетителю в окне ввода пароля. auth_basic_user_file — путь к файлу с логинами и паролями. Данные из файла считываются заново при каждом обращении посетителя к ресурсу.
    Если необходимо, чтобы файл с паролями находился в каталоге, доступном посетителям, скрыть его от всех можно следующим кодом:

    server {
    listen 80;
    server_name example.com;
    location / {
    ...
    }
    location ~ /\.ht {
    deny all;
    }
    }

    Этот код скроет от посетителя все файлы, начинающиеся с ".ht"

    Монтирование удаленной папки через тунель SSH

    Предположим Вам понадобилось, чтоб данные удаленной папки были у Вас на локальном сервере или компьютере, для этого мы будем использовать монтирование удаленной (находящейся на другом компьютере) папки с помощью защищенного туннеля ssh.
    Передача файлов и работа с папкой в таком случае более безопасна, чем, например, ftp. Для реализации задуманного нам понадобиться SSHFS (это файловая система работающая через модуль ядра FUSE).
    sudo apt-get install sshfs

    Далее загружаем модуль ядра fusе (если в вашем ядре его нет)
    modprobe fuse

    Добавляем группу через которую будет работать SSHFS. (скорее всего данная группа будет создана при установке sshfs)
    addgroup fuse

    Добавляем в эту группу пользователя из под которого вы планируете использовать удаленное монтирование.
    adduser user fuse

    разрешаем группе fuse обращаться к устройству
    chown root:fuse /dev/fuse

    Создаем каталог в который будем монтировать удаленную папку.
    mkdir /folder-local

    Теперь монтируем необходимую папку с удаленного сервера.
    sshfs user@server-remote:/folder-remote /folder-local

    Теперь в папке /folder-local находиться все содержимое вашей удаленной папки (/folder-remote) и вы с ней работаете как будто она находиться в вашей системе.

    Чистим лишние пакеты после обновления Linux Debian

    Стандартная процедура обновления заключается в следующем:
    1. Правим список репозиториев в "/etc/apt/sources.list" на актуальные.
    2. Запускаем обновление, выполняя
    apt-get dist-upgrade

    3. Перезапуск, командой:
    shutdown -r now

    После такого обновления часто в системе остаются не удаленные пакеты.
    Их список можно посмотреть командой:
    dpkg -l | grep ^rc

    Чтобы от них избавиться, выполняем следующую команду:
    dpkg -l | grep ^rc | cut -d' ' -f3 | xargs dpkg -P

    Борьба с DDoS-атакой с помощью (D)DoS Deflate

    Очень часто по чьему-то злому умыслу или по случайности, ваш сервис начинает испытывать нагрузку свыше той, на которую он рассчитан. Зачастую в таких случаях ваши постоянные клиенты начинают страдать от отказа в обсушивании на вашем ресурсе. Это может проявляться как полным отсутствием ответа от вашего сервиса, так и неприемлемо медленной его работой. Данную ситуацию можно оценивать как атаку на ваш сервис. Данный вид атак называется DoS — Denial of Service(если атака производится с одного адреса), либо DDoS — Distributed Denial of Service (если атака производится с множества адресов). В данной статье мы расскажем как настроить систему которая позволит защищать ваш сервис от подобного вида атак.
    1. Подтверждение атаки на сервер
    При DDoS-атаке (в нашем случае на 80 порт, который открыт на ресурсах, где размещены проекты, к которым нужен доступ по http) наблюдается повышение открытых и ожидающих закрытия соединений (до нескольких тысяч или десятков тысяч), возрастает количество пакетов на сетевом интерфейсе. В случае DDoS-атаки на 80 порт увеличивается общее число процессов на сервере, количество процессов apache (httpd), сайты начинают долго отвечать или не отвечать вовсе, на сервере используется большее число ресурсов (возрастает LA сервера, использование CPU и RAM достигает 100%). В таком случае нужно проверить общее количество соединений с сервером командой netstat:
    netstat -n -p | awk '{print $6}'|awk -F: '{print $1}' | sort -n | uniq -c | sort -nr | head -n10

    вывод команды в случае DDoS-а будет приблизительно таким:
    8580 LAST_ACK
    340 ESTABLISHED
    251 SYN_RECV
    157 FIN_WAIT1
    28 CONNECTED
    7 CLOSING
    6 TIME_WAIT
    3 FIN_WAIT2
    3 CLOSE_WAIT

    Подробнее...

    Как изменить hostname на различный Linux системах?

    Чтобы изменить имя хоста достаточно набрать команду:
    #hostname <name>

    Но это не достаточно, так как после перезагрузки системы hostname вернется на дефолтный. По этому нам нужно добавить некоторые изменения в файле: для различный семейств Линукс - это разные файлы!

    Для Linux Debian и Ubuntu:

    Когда система загружается она считывает имя хоста из файла /etc/hostname, поэтому просто вносим изменения в него (где - имя вашего хоста):
    #echo "" > /etc/hostname
    Чтобы применить изменения можно и не перезагружатся, достаточно запустить команду:
    #/etc/init.d/hostname.sh start
    Если хоснаме не изменился попробуйте пере подключится в серверу!

    Для Linux RedHat или Centos:

    Имя хоста указывается в файле /etc/sysconfig/network и используется скриптом /etc/rc.d/rc.sysinit при старте системы, посему открываем файл:
    #nano /etc/sysconfig/network
    Находим строку HOSTNAME и меняем на имя своего хоста:
    #HOSTNAME=""

    Для Linux ArchLinux:

    Имя хоста указывается в файле /etc/rc.conf, оттуда оно и берется при запуске, открываем его:
    #vim /etc/rc.conf

    Находим строку HOSTNAME и меняем на имя своего хоста:
    #HOSTNAME=""

    Для изменения имени хоста через sysctl:

    Чтобы узнать текущее имя:
    sysctl kernel.hostname
    Чтобы изменить его (где - имя вашего хоста):
    sysctl kernel.hostname=

    Как добавить swap-файл и swap-раздел в Linux?

    Все мы хоть раз сталкивались с такой проблемой "Как увеличить или добавить swap-файл и swap-раздел в Linux?" Для этого нам нужно за ценить сколько имеем места на жестком диске df -h или сколько swap-пространства у нас уже имеется в системе - для этого следует дать команду в консоли от рута: swapon -s

    Результат будет в виде:
    # swapon -s
    Filename Type Size Used Priority
    /dev/sda2 partition 8000508 0 -1

    Описание вывода команды:
    Filename описывает имеющиеся у вас своп-пространства и где они находятся.
    Type указывает тип пространства: partition (раздел) или file (файл).
    Size сообщает общий размер Swap-пространств.
    Used говорит о том, сколько сейчас свопа задействовано.
    Priority указан приоритет, т.е. какие пространства системе использовать вначале.
    Тот же самый результат мы получим по команде cat /proc/swaps

    Создание swap-файла в Linux
    1. Открываем консоль\терминал и получаем полномочия root или используем sudo:
    $ su
    2. Думаем*, какой размер swap-файла нам нужен в мегабайтах. Подумавши, даём команду:
    # sudo dd if=/dev/zero of=/swapfile bs=1M count=500
    или
    # dd if=/dev/zero of=/swapfile bs=1M count=500
    В команде dd для задания размеров можно использовать суффиксы K, M, G для килобайт, мегабайт и гигабайт соответственно. В данном примере это 500 Mегабайт файла подкачки.

    3. Поясняем системе, что созданный пустой файл это всё-таки файл подкачки для Linux:

    # sudo mkswap /swapfile
    или
    # mkswap /swapfile

    4. Подключаем созданный swap-файл:
    # sudo swapon /swapfile
    или
    # swapon /swapfile
    При этом в выводе команды top или команды free должно появиться упоминание, что свопинга в системе поприбавилось. Чтобы отключить файл подкачки, пишем
    # sudo swapoff /swapfile
    или
    # swapoff /swapfile
    Чтобы не подключать swap-файл или swap-раздел каждый раз, полезно занести запись в /etc/fstab следующего содержания:
    /swapfile none swap sw 0 0
    На всякий случай отмечу, что каждый раз создавать swap-файл не нужно: просто подключаете и отключаете его с помощью swapon/swapoff. Работа со swap-разделами в Linux происходит аналогичным образом.

    Подробнее...

    Сбор информации в Linux с помощью утилиты dmidecode

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

    Немного поискав в интернете, наткнулся на утилиту dmidecode: Для прямого доступа к аппаратной части программа требует прав суперпользователя, поэтому ее запуск производится от имени пользователя root.

    Для отображения всей системной информации можно дать в консоли команду:

    dmidecode

    Список будет большим, для удобства можно выводить информацию по группам, чтобы посмотреть возможные группы команда дается с ключем -t

    dmidecode -t

    Возможные группы:

    bios
    system
    baseboard
    chassis
    processor
    memory
    cache
    connector
    slot

    Информация о процессоре:

    dmidecode -t processor

    SMBIOS 2.6 present.

    Handle 0x0004, DMI type 4, 42 bytes
    Processor Information
    Socket Designation: LGA1155
    Type: Central Processor
    Family: Core 2 Duo
    Manufacturer: Intel
    ID: A7 06 02 00 FF FB EB BF
    Signature: Type 0, Family 6, Model 42, Stepping 7
    Flags:
    FPU (Floating-point unit on-chip)
    VME (Virtual mode extension)
    DE (Debugging extension)
    PSE (Page size extension)
    TSC (Time stamp counter)
    MSR (Model specific registers)
    PAE (Physical address extension)
    MCE (Machine check exception)
    CX8 (CMPXCHG8 instruction supported)
    APIC (On-chip APIC hardware supported)
    SEP (Fast system call)
    MTRR (Memory type range registers)
    ........................................

    Подробнее...

    Как использовать Python virtualenv?

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

    Проверьте, если установлен Virtualenv. Существует вероятность, что virtualenv уже установлен в вашей системе.
    Выполните следующую команду в терминале:

    #virtualenv --version

    В случае если инваермент не установлен идем далее:

    $ sudo apt-get install python-virtualenv
    Также рекомендуется для некоторых пакетов ставить:
    $ sudo apt-get install python-dev
    $ sudo apt-get install libpq-dev
    $ sudo apt-get install libmemcached-dev
    $ sudo apt-get install libxml2-dev libxslt1-dev
    $ sudo apt-get install libcurl4-gnutls-dev librtmp-dev
    $ sudo apt-get install libcache-memcached-perl
    $ sudo easy_install virtualenv
    $ sudo pip install virtualenv

    Опять проверяем:
    #virtualenv --version
    1.7.1.2

    Подробнее...

    Установка Redis на Debian

    Начнем установку из репозиториев:

    apt-get install -y redis-server

    Установочный скрипт сам добавит сервис в автозапуск, а также запустит демона. Кроме этого, демон забиндится лишь на локальный сокет, что исключает проблемы с безопасностью:

    netstat -lnpt|grep redis
    tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      19487/redis-server

    Теперь попробуем поместить и изъять данные из Redis, это крайне легко сделать посредством telnet:

    telnet 127.0.0.1 6379
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    SET hello 5
    world
    +OK
    GET hello
    $5
    world

    В данном листинге требует описания разве что число 5, это длина строки, которую мы помещаем в Редис.
    Тоже самое, но в еще более удобной форме можно сделать через redis cli:

    redis-cli
    redis> set hello 777
    OK
    redis> get hello
    777
    redis>

    Подробнее...