Настраиваем сервер для LiveStreet. Часть III. Некоторые настройки ядра, репозитории и базовые утилиты.

Предыдущие части:

Сначала мы сделаем некоторые настройки ядра, за этот совет благодарность уходит господину ewden .

Редактируем файл /etc/sysctl.conf:
vim /etc/sysctl.conf

Я привожу конфигурацию от ewden целиком:
# Допустим случись у нас какой-то косяк с системой или ядром.
# Может произойти паника ядра (Kernel Panic)
# На сий случай есть настройка, указывающая, что система должна будет перезагрузится в течении 10 сек в примере:
kernel.panic = 12
# включение проверки маршрута от источника. Может быть полезно против некоторых видов спуфинг-атак.
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

# След. опция разрешает/запрещает передачу так называемых syncookies вызывающему хосту
# в случае переполнения очереди SYN-пакетов для заданного сокета. Когда в
# систему поступает слишком много запросов на соединение, то очередь может
# переполниться и тогда запускается передача syncookies в ответ на каждый
# SYN-запрос. Эта переменная используется для предотвращения syn-flood атак. 
net.ipv4.tcp_syncookies=1

# Устанавливает параметры приёма icmp-сообщений о переодресации
# Которые используются для уведомления (обычно маршрутизаторов)
# О существовании лучшего маршрута передачи пакетов целевому хосту.
# Включение параметра может справоцировать атаку человек по середине (Man In The Middle) 
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Разрешает или запрещает нашему хосту передачу выще упомянутых сообщений переадресации.
net.ipv4.conf.all.send_redirects = 0

# Позволяет отправителю определить путь, по которому должен следовать пакет по сети.
# Может позволить посторонним произвести подмену адресов. 
net.ipv4.conf.all.accept_source_route = 0

# Игнорироваться ICMP сообщения, отправленные на
# широковещательный или групповой адрес. Вполне очевидно, почему полезно
# включить этот параметр  - защита от smurf атак.
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Контролирует процент свободной памяти, при которой начнется активный сброс страниц в раздел swap. 
vm.swappiness=10


Однако, изначально этот файл скорее всего уже будет не совсем «умолчальным», потому что хостеры тоже не дураки, и некоторые изменения вносят сами. Нужно просто внимательно проверить что, из описанного в приведенной конфигурации, уже у вас есть, а чего нет. И внести недостающее, не трогая то, что сделал хостер.

После сохранения изменений, для того чтобы они вступили в силу, выполняем команду:
sysctl -p


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

Вносим изменения в конфигурационный файл /etс/apt/sources.list
vim /etс/apt/sources.list


Всё, что там было можно смело удалять. Файл должен стать таким:
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

deb http://ftp.de.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.de.debian.org/debian/ squeeze main contrib non-free

deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free

deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx

deb http://repo.percona.com/apt squeeze main
deb-src http://repo.percona.com/apt squeeze main

# deb http://packages.dotdeb.org squeeze all
# deb-src http://packages.dotdeb.org squeeze all

Можно сменить немецкое зеркало ftp.de.debian.org на другое, физически более близкое к вашему серверу список вот: www.debian.org/mirror/list

Политика установки пакетов, которой я придерживаюсь:
  • Первый приоретет: репозитории разработчиков либо .deb пакеты с сайта разработчиков (nginx, Percona Server, Sphinx)
  • Второй приоритет: Официальный репозиторий Debian squeeze (stable)
  • Третий приоритет: Официальный репозиторий Debian squeeze (squeeze-backports). При условии что версия пакета в squeeze (stable) неприемлемо старая (mod-rpaf, modsecurity, php-apc)
  • Последний приоритет: Репозиторий dotdeb.org. Если нет другого выбора, т.е. пакет приемлемой версии отсутствует в официальных стабильных репозиториях Debian (php-fpm и как следствие все php пакеты по зависимостям)

Именно поэтому dotdeb.org изначально закомментирован. Из него мы будем устанавливать только то, чего нет в других местах в приемлемом виде, когда до этого дойдёт.

На всякий случай устанавливаем кое-что необходимое (вообще-то уже должно быть, но подстрахуемся):
apt-get -y install wget gnupg

Теперь выполняем последовательность команд чтобы обеспечить ключи для не родных репозиториев:
wget http://nginx.org/keys/nginx_signing.key

cat nginx_signing.key | apt-key add -

gpg --keyserver  hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

gpg -a --export CD2EFD2A | apt-key add -

wget http://www.dotdeb.org/dotdeb.gpg -O - -q | apt-key add -

За последнюю команду благодарность уходит документу от господина xyz

Обновляемся (эти команды будут много чего писать и делать, терпеливо ждём):
apt-get update

apt-get upgrade


И устанавливаем мелочи, которые пригодятся нам позже:
apt-get -y install mc zip unzip pwgen lynx socat


GNU Midnight Commander который запускается командой:
mc

Это файл менеджер очень похожий на старый добрый Norton Commander. Даже многие комбинации клавиш работают так же. Сам по себе он нам не нужен, но просто удобно.

На этом всё. Продолжение в следующей части:
Часть IV. MySQL.

46 комментариев

avatar
Вопрос относительно файла /etc/sysctl.conf: посмотрел у себя на сервере и, что интересно, он очень похож на представленный, но все строки закомментированы (все без исключения). Что это может значить?
  • dsg
  • 0
avatar
Может хостер оставил информацию как шпаргалку — кому надо тот включит (раскомментирует)
avatar
может и так, но увидев, что все закоментено я задумался — а может не просто так? раскоментю и все обвалится...)
avatar
Да, по большей части описаны стандартные настройки, которые нужно просто раскомментировать.
avatar
Оставляют в комментириях не хостеры, а разработчики дистрибутивов.
avatar
То что вы пописали — так выглядит файл который Debian имеет по умолчанию при установке. Но хостеры его зачатую меняют до неузнаваемости.
avatar
В sysctl достаточно много настроек ядра, сетевой подсистемы, файловой и т.д.
Можно очень много изменить по мере надобности.
Только надо понимать, всё, что делаешь, иначе этой порой может привести к плохим последствиям.
avatar
Полезная информация! Примите благодарности.
avatar
Gmugra В конфиге sysctl закоментируйте пояснения перед параметром
net.ipv4.tcp_syncookies
. Пояснения писал на быструю руку да забыл. )
Кстати. Зачем разом ставить lynx, wget? Их по идее на сервере не нужно, если кушает паранойя. Да и смысла сразу и то и то ставить я как-то не вижу.
Во вторых, sudo вы дальше будете настраивать? Зачем он вам вообще?
sudo — грубо говоря уязвимость, позволяющая обычному пользователю получить права рута.
Зы. Я вот обычно настройками pam-модулей даже запрещаю использовать su всем, кто не в определённой группе.
Если что:
/etc/pam.d/su
Раскомментировать
auth       required   pam_wheel.so

Потом
groupadd --system wheel

usermod -a -G wheel юзер_которому_разрешено_su
avatar
lynx нужен будет по ходу дела в дальнейшем, для локальных тестов, чтобы визуально убеждаться что конфигурации работают. Мне это кажется удобным. По завершении всего его вполне можно деинсталировать.

Да, sudo по плану собирался коснутся в одной из последних глав. Сейчас просто установили, чтобы был. Но если знаете лучший способ, настроить admin аккаунт, который не root — то можем и отказаться от описания sudo.
avatar
Что значит admin-аккаунт?
Права на настройку системы, установку софта соответственно по соображениям безопасности должен иметь только root.
Если вы админ сервера, я думаю вам не составит труда зайти под своим аккаунтом на сервер, выполнить su и производить любые действия в системе.
avatar
Хм. Мысль вашу понял. Вы, в общем, правы. Есть случаи когда sudo удобен, но это пожалуй не описываемый нами случай. Выкидываю.
avatar
Работает конфигурация, что именно проверять? Отдаст ли nginx/apache hello world и/или phpinfo? Можно и без них:
echo "GET / HTTP/1.1\nHost: localhost\n" |nc localhost 80

Или
telnet localhost 80 
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
Host: localhost
avatar
ewden с чем спорим? :) lynx для той же цели imho удобней и читабельный. По завершении его просто просто деинсталируем — ok. У меня например на сервере telnet как раз не стоит :)
avatar
Простите, просто я слишком любитель минимализма. :)
avatar
Вот эта часть документации мне действительно пригодилась, до этого, был смертельно напуган нашим сис админом, по поводу последствий редактирования sysctl, хоть и в ближайшее время я не планирую что то менять но однозначно в будующем это пригодится.

По поводу дополнить, не могли бы вы добавить еще чуть информации по поводу iptables, на подобии приметивной защиты от напримерsiege -c 100 domain(or ip) в какой то момент решил ребутнуть сервак, 1 раз за 3 месяца, так перед этим забыл сделать iptables -save :) а там была большая часть ботов из ...apache/error.log и брутфорсеров из .../auth.log (не смотря на fail2ban все равно заносил их в фильтр iptables)
avatar
Такие вещи как siege, ab можно в полне не плохо отсекать настройкой лимитов на энжиниксе.
Благо по limit_conn модулю примеров достаточно.
avatar
Эти утилиты кстати порой хорошо помогают протестировать и более классно настроить и систему и энжиникс для обработки большего числа запросов. :)
avatar
На данный момент пока оставил апач, странно но слоулори на него не действует, хотя на другой сайт на другом хостинге действует. На будующее планирую все таки подружить nginx и апач, сейчас слегка конфузная ситуация, стоит апач с apache handler, думал сначала прикрутить nginx, но там ведь желательно с php-fpm сразу ставить. Из за недостатка времени на то чтобы проверить что будет если установить fpm поверх apache handler решить последовать правилу — работает? Не трогай! :) потом все по полной буду переустанавливать.
avatar
Вообще, можно как-бы сделать реверс-прокси. Так часто делают. И это тоже не плохо.
Насчёт правил к iptables, вот, по памяти если не ошибаюсь пример:

ipset -N blacklist iptree --timeout 600
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j SET --add-set blacklist src
iptables -A INPUT -m set -j DROP

Если на 80-TCP порт больше 100 соединений, добавляем в блеклист на 10 минут.
ipset конечно надо будет ещё поставить.
avatar
Спасибо
avatar
avatar
Но зачем?
avatar
avatar
Поставьте fail2ban и забейте на них.
avatar
Он поставлен :)
avatar
Какой смысл тогда в «ваших велосипедах»?
avatar
Есть идея не знаю на сколько она будет удачная, начать логировать таких ботов, где нибудь на гитхабе держать постоянно обновляемый список. Возможно поможет чуточку при досах. Знаю что пальцем в небо, но меня они раздражают.
avatar
только вот не понятно что будет если такой список будет over 10000
avatar
В инете уже есть блеклисты, с которых можно разом собрать дофига айпи-адресов таких и делать с ними всё, что придёт в голову.
Раздражают — ну попал в бан, и всё. Если у вас fail2ban ещё шлёт на мыло все попытки, и там чаще одни и те-же адреса, можно время бана поставить побольше. Или вообще отключить уведомления.
avatar
Лучше вообще настроить аутентификацию по ключам и тогда класть на них полностью. Ибо шансов 0. :)
avatar
Я так и хочу сделать. Но немного заглядывая вперед, если будет именно какая нибудь атака на сервер, то эти боты в логах будут слегка отвлекать от настоящих плохишей.
avatar
PSNet аккуратно прошелся и проминусовал все топики про установку :)
Честно сказать — не приятно. Ну ладно бы написал бы в комментариях что не так. Конструктивно.

Но это не значит что я не буду писать эти топы дальше — буду :)
avatar
это значит что тебе может не стоит так же делать перед этим.
avatar
у него критические дни, видимо… мои он тоже все проминусовал, не расстраивайся.
avatar
ещё один… ты же сам минусовал мои топики перед этим, так зачем это публичное ля-ля?
avatar
пруфы? последние мои оценки твоим топикам это три плюса (думаю что последние) 1, 2 и 3. Освежи-ка мне память, может я чего забыл?
avatar
Всё, что там было можно смело удалять. Файл должен стать таким:
На хэтзнере если все удалить и заменить на список реп из поста то будет ругатся на каждый пока не закомментируешь все до единого, предварительно добавив ключи.
avatar
Вернул ихний сорслист, apt-get update все ок, добовляю любой репозиторий сразу ругается и не позволяет update/upgrade, а в ихних репах перконы нет и сапорт молчит :)
avatar
У Hetzner это всё и тестилось, собственно. Сначала чиним список, потом добавляем ключи, потом сделам apt-get update.
avatar
Как именно ругается? даже интересно.
avatar
Я так и делал, не помогло

E: Malformed line 1 in source list /etc/apt/sources.list (URI parse)
E: The list of sources could not be read.
root@Debian-60-squeeze-64-minimal ~ # nano /etc/apt/sources.list
root@Debian-60-squeeze-64-minimal ~ # apt-get update
E: Malformed line 2 in source list /etc/apt/sources.list (URI parse)
E: The list of sources could not be read.
root@Debian-60-squeeze-64-minimal ~ # nano /etc/apt/sources.list
root@Debian-60-squeeze-64-minimal ~ # apt-get update
E: Malformed line 4 in source list /etc/apt/sources.list (URI parse)
E: The list of sources could not be read.
root@Debian-60-squeeze-64-minimal ~ # nano /etc/apt/sources.list
root@Debian-60-squeeze-64-minimal ~ # apt-get update
E: Malformed line 5 in source list /etc/apt/sources.list (URI parse)
E: The list of sources could not be read.
root@Debian-60-squeeze-64-minimal ~ # nano /etc/apt/sources.list
root@Debian-60-squeeze-64-minimal ~ # apt-get update
E: Malformed line 7 in source list /etc/apt/sources.list (URI parse)
E: The list of sources could not be read.
root@Debian-60-squeeze-64-minimal ~ # nano /etc/apt/sources.list
root@Debian-60-squeeze-64-minimal ~ # apt-get update
E: Malformed line 9 in source list /etc/apt/sources.list (URI parse)
E: The list of sources could not be read.
root@Debian-60-squeeze-64-minimal ~ # nano /etc/apt/sources.list
root@Debian-60-squeeze-64-minimal ~ # apt-get update
E: Malformed line 10 in source list /etc/apt/sources.list (URI parse)
E: The list of sources could not be read.
avatar
грр… Вы правы. LS в таге цитаты убирает http:// я это прозевал. исправил в заметке на так code. чтобы http:// было видно. Пробуйте теперь.
avatar
Все разаработало, спасибо!
avatar
Пожалуйста :) p.s. hostname подправьте :) «Debian-60-squeeze-64-minimal» — не спортивно :)
avatar
Видимо что-то где-то я неправильно выполнил, но после апдейтов на серваке осталось только Welcome to nginx! а там был один сайтец, Базы и ftp на месте… На каком этапе могла возникнуть ошибка? (если это конечно ошибка)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.