Часто, при цитировании материала с вашего сайта, адреса изображений или загружаемых файлов не изменяют. Возникает нагрузка на ваш сервер, но при этом посетитель даже не знает, откуда загружается рисунок и не видит вашего сайта.
Наиболее гуманно будет выдавать посетителю другого сайта изображение с текстом "Это изображение доступно только на сайте 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;
}
}
}
Используя директивы 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.
Передача файлов и работа с папкой в таком случае более безопасна, чем, например, 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) и вы с ней работаете как будто она находиться в вашей системе.
Стандартная процедура обновления заключается в следующем:
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
Очень часто по чьему-то злому умыслу или по случайности, ваш сервис начинает испытывать нагрузку свыше той, на которую он рассчитан. Зачастую в таких случаях ваши постоянные клиенты начинают страдать от отказа в обсушивании на вашем ресурсе. Это может проявляться как полным отсутствием ответа от вашего сервиса, так и неприемлемо медленной его работой. Данную ситуацию можно оценивать как атаку на ваш сервис. Данный вид атак называется 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
<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?" Для этого нам нужно за ценить сколько имеем места на жестком диске 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 происходит аналогичным образом.
Не давно возникла такая ситуация... нужно было определить какой тип памяти и количество занятых слотов на сервере.
Немного поискав в интернете, наткнулся на утилиту 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, который позволяет работать по конкретному проекту, не опасаясь влияния на другие проекты. Это позволяет несколько установок 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
Начнем установку из репозиториев:
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>