FastNetMon

Thursday 31 December 2009

Активация iptables на Debian при запуске

Данный способ НЕ рекомендован к использованию, рекомендую для запуска и конфигурации фаерволла использовать пакет: iptables-persistent.

В отличие от RedHat-like дистрибутивов, iptables в Debian не считается сервисом и вызывается скриптами поднятия сети и для его активации необходимо поставить ему флаг +x:

chmod +x /etc/network/if-up.d/iptables


Если же этого файла там нету, то его необходимо создать, вот его содержимое:

#!/bin/sh
/sbin/iptables-restore < /var/lib/iptables/rules

Конфиг iptables в Debian

Находится вот здесь:
/var/lib/iptables/rules



Необычно правда, что не в /etc, долго найти его не могу :(

Защищаемся от руткитов/спам скриптов и сканеров

Подавляющее большинство серверов взламываются через уязвимости в скриптах, позволяющие что-либо загрузить (обычно это perl скрипт) в /var/tmp либо /tmp и оттуда запустить (обычно PHP функцией exec).

Есть очень интересный вариант защиты - снятие exec флага с файловых систем /tmp и /var/tmp, это можно сделать следующим образом: http://www.debian-administration.org/articles/57

От второго можно защититься следующим образом, указав в /etc/php.ini либо /etc/php5/apache2/php.ini следующее (после внесения изменений необходимо перезапустить апача - /etc/init.d/httpd restart либо для Дебияна: /etc/init.d/apache2 restart):
disable_functions = dl, shell_exec, posix_mkfifo, exec, system,passthru, symlink, link, set_time_limit, max_execution_time


Это запретит ряд не безопасных функций предотвратит запуск бОльшей части вредоносных скриптов.

Wednesday 30 December 2009

Dec 30 16:56:31 sds kernel: [ 7.479844] udev: renamed network interface eth0 to eth2

Скорее всего, такое произошло при смене сетевой карты. Идем в файл
vi /etc/udev/rules.d/70-persistent-net.rules
и исправляем там mac адрес на новый :)

Какие данные необходимо сохранить в случае отказа сервера?

Состояние процессов и системы:

ps aux


Состояние Apache (необходимо включить mod_status):

elinks -dump http://localhost:80/server-status


Все активные соединения:

netstat -apnt

scp / sftp command not found, CentOS 5

# scp
-bash: scp: command not found
# sftp
-bash: sftp: command not found


Fix:
yum -y install openssh-clients

Предопределенные переменные для шаблонов Puppet

У Puppet а есть целый рад очень удобных стандартных констант, полный их список можно посмотреть, вызвав сам facter:

facter
architecture => x86_64
domain => test.ru
facterversion => 1.5.7
fqdn => 'test'
hardwareisa => x86_64
hardwaremodel => x86_64
hostname => monitor
id => root
interfaces => eth0,sit0
ipaddress => 88.
ipaddress_eth0 => 88.
is_virtual => false
kernel => Linux
kernelmajversion => 2.6
kernelrelease => 2.6.18-164.el5
kernelversion => 2.6.18
macaddress => 00:19
macaddress_eth0 => 00:19
manufacturer => MSI
memoryfree => 3.50 GB
memorysize => 3.80 GB
netmask => 255.255.255.255
netmask_eth0 => 255.255.255.255
network_eth0 => 88.
operatingsystem => CentOS
operatingsystemrelease => 5.4
path => /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
physicalprocessorcount => 1
processor0 => Dual-Core AMD Opteron(tm) Processor 1218
processor1 => Dual-Core AMD Opteron(tm) Processor 1218
processorcount => 2
productname => MS-7252
ps => ps -ef
puppetversion => 0.24.8
rubysitedir => /usr/lib/ruby/site_ruby/1.8
rubyversion => 1.8.5
selinux => false
serialnumber => To Be Filled By O.E.M.
sshdsakey => ''
sshrsakey => ''
swapfree => 4.01 GB
swapsize => 4.01 GB
timezone => CET
type => Desktop
uniqueid => c6583524
uptime => 69 days
uptime_days => 69
uptime_hours => 1670
uptime_seconds => 6012655
virtual => physical

Тестирование Ruby erb шаблонов Puppet а

Вот так очень легко искать ошибки:

erb -x -T - templates/rpaf.conf.erb
_erbout = ''; _erbout.concat "\n"
_erbout.concat "RPAFenable On\n"
_erbout.concat "RPAFsethostname On\n"
_erbout.concat "RPAFproxy_ips "; print '127.0.0.1' ; _erbout.concat "\n"
_erbout.concat "
\n"
_erbout

Ограничение nofile не работает в limits.conf в Debian 5 lenny

Увы, вот багрепорт: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=515673

ISPManager + Debian - проблемы с кодировкой

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

Фиксица так:

echo "CP1251" > /usr/local/ispmgr/etc/filemgr.enc
echo "UTF8" >> /usr/local/ispmgr/etc/filemgr.enc
iconv -l |cut -d" " -f1|sed "s|//||g" >> /usr/local/ispmgr/etc/filemgr.enc
killall -9 -r ispm

Tuesday 29 December 2009

Летающие поезда - уже реальность!

http://ketamin.livejournal.com/369522.html

Поточное редактирование файлов: изменение hostname в CentOS 5

Потребовалось из скрипта изменить файлик следующего вида:

cat /etc/sysconfig/network
### Hetzner Online AG - installimage
# general networking
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=CentOS-54-64-minimal


В частности - необходимо заменить hostname на наш, testdomain.ru, делается это очень легко:

sed -e 's/\(HOSTNAME=\).*/\1testdomain.ru/g' /etc/sysconfig/network


В итоге получается следующее:
### Hetzner Online AG - installimage
# general networking
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=testdomain.ru


А вместе с заменой конфига это будет выглядеть так:

sed -e 's/\(HOSTNAME=\).*/\1testdomain.ru/g' /etc/sysconfig/network > /etc/sysconfig/network.new
mv /etc/sysconfig/network.new /etc/sysconfig/network

Monday 28 December 2009

/usr/sbin/apache2ctl: line 119: www-browser: command not found

Fix it:
apt-get install lynx -y --force-yes

grsecurity патч ядра

Ранее много о нем слышал, но ни разу не обращал внимания :) А штука-то очень крутая, http://www.grsecurity.net/features.php особенно радует число патчей на chroot.

Sunday 27 December 2009

Установка Squid с выделенными IP для клиентов на Debian 4

Ставим:
apt-get install squid3 -y --force-yes


Добавляем в автозапуск:
update-rc.d squid3 defaults


Запускаем:
/etc/init.d/squid3 restart


Как видим, squid забиндился на все интерфейсы:

netstat -lnpt | grep squid
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 22485/(squid)


Открываем конфиг:
vi /etc/squid3/squid.conf


Добавляем туда следующее:

auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users


Также ищем и комментируем в конфиге строку:

# And finally deny all other access to this proxy
http_access deny all


Создаем файл паролей:

htpasswd -c /etc/squid3/passwd user1


Вводим пароль для пользователя:
New password:
Re-type new password:
Adding password for user user1


Выставляем полномочия для файла паролей:

chmod o+r /etc/squid3/passwd


Перезапускаем сервер для применения настроек:

/etc/init.d/squid3 restart


Пробуем с другой машины получить сайт через прокси:

http_proxy=http://ip.ad.dr.es:3128 wget --proxy-user user1 --proxy-password qwerty http://ya.ru


В случае неверного пароля будет выдано следующее:

Proxy request sent, awaiting response... 407 Proxy Authentication Required
2009-12-28 02:17:05 ERROR 407: Proxy Authentication Required.


А в случае успешного:

Connecting to ip.ad.dr.es:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 4908 (4.8K) [text/html]


Смотрим лог:

tail -f /var/log/squid3/access.log

Через Тихий Океан на плоту?

Очень интересная статья: http://www.bbc.co.uk/russian/international/2009/12/091226_haugland_obit.shtml

Надо книжку купить, наверное. )

write cache и linux soft raid 1

Вот такой вопрос - при почти любом горячем ребуте RAID начинает ребилд, что очень сильно достает. Сегодня заметил, что у всех дисков массива включен write cache. Может его отрубить попробовать?

OpenVZ: Unable to open pty: No such file or directory

Имеем проблему:
vzctl enter 1111
enter into CT 1111 failed
Unable to open pty: No such file or directory


Фиксим:

vzctl exec 1111 /sbin/MAKEDEV pty
vzctl exec 1111 /sbin/MAKEDEV tty

vzcenter 1111
entered into CT 1111

Saturday 26 December 2009

Тестирование SMART

Запуск self-теста:
smartctl -t short /dev/sda


Просмотр результатов:
smartctl --all /dev/sda


Если же в ответ Вы получаете ошибку:
SMART Disabled. Use option -s with argument 'on' to enable it.


То сначала попробуйте активировать SMART:
smartctl -s on /dev/sda


А также попробуйте использовать такой вид вызова:
smartctl -d ata --all /dev/sda


Вот это поле необходимо обратить внимание:
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 4367 -


К слову, кроме short есть целый набор типов теста: offline, short, long, conveyance, select,M-N, pending,N, afterselect,[on|off], scttempint,N[,p], но с этим уже сами разбирайтесь :)

Всем желающим открыть свой бизнес посвящается

http://alenacpp.blogspot.com/2009/12/blog-post_17.html

Сравнение железа, cpu, тест SPEC

http://www.spec.org/results_search.html

А вот еще чисто по процессорам: http://www.cpubenchmark.net

Friday 25 December 2009

OpenVZ + multiport

cat /etc/gentoo-release
Gentoo Base System release 1.12.13


При попытке использовать модуль multiport возникает проблема:

iptables -A drop-invalid -i venet0 -p tcp -m multiport --dports 100:150 -j DROP
FATAL: Could not load /lib/modules/2.6.18-128.2.1.el5.028stab064.8/modules.dep: No such file or directory
FATAL: Could not load /lib/modules/2.6.18-128.2.1.el5.028stab064.8/modules.dep: No such file or directory


Фиксица легко:

mkdir -p /lib/modules/2.6.18-128.2.1.el5.028stab064.8
depmod -a


И все:

iptables -A drop-invalid -i venet0 -p tcp -m multiport --dports 100:150 -j DROP


(с) http://forum.openvz.org/index.php?t=msg&goto=38107&

Thursday 24 December 2009

Где скачать QNX 6.4?

Идем на страницу: http://www.qnx.com/download/group.html?programid=19605

Там есть несколько вариантов дистрибутивов, но наилучший (вы же не экономите трафик, правда?):
QNX® Software Development Platform 6.4.0 — Installation DVD [All hosts] - в него включено все и вся.

А license key для некоммерческого использования можете получить здесь: http://www.qnx.com/products/evaluation/index.html либо если вы студент / преподаватель, то вот здесь: http://www.qnx.com/products/evaluation/academic_faculty.html

После установки QNX уже аццки жжот - "uptime les than one hour", Фаерфокс там зовется "Bon echo" :)

Кстати, первый раз логиница в систему - логин: root пароль: пусто

Проблемы с установкой ISPManager на FreeBSD 7.2 / 8.0

Симптомы: ISPManager визуально ставится, но все тесты проваливаются и в итоге ничего не работает.

Кстати, если curl ни wget не стоят, то можно воспользоваться fetch:
fetch "http://download.ispsystem.com/install.sh"


Если есть беспокойство за то, что канал оборвется в процессе установки, установите и запустите screen:
cd /usr/ports/sysutils/screen
make install clean
/usr/local/bin/screen


Обращаю внимание, что первая перезагрузка после установки ISPManager приводит к долгой проверке квот, так что не торопитесь паниковать, а подождите минут 10.

У Вас apache не собрался из-за проблемы в портах FreeBSD. Не собирается зависимость libtool автоматически при установке apache. Установите libtool22

cd /usr/ports/devel/libtool22/
make install clean


Если же в портах только libtool15, то необходимо их обновить вот так: http://phpsuxx.blogspot.com/2009/11/freebsd.html

(c) саппорт ISPSystems

tcpdump: перехват пакетов только с определенного порта

tcpdump port 80

FreeBSD + ISPManager

Note that FreeBSD installation may last from 15 minutes to 1 - 2 hours, according to a server capacity.


Наверное, дорогая редакция догадывается, что я об этом думаю...

Сторонники мирового заговора?

Постоянно сталкиваюсь с людьми, которые почти во всех вещах ищут злой умысел третьей стороны или широкомасштабный (прямо-таки вселенский!) заговор. Так вот, есть у таких людей научное название - конспирологи. Хорошо ли это или плохо - я однозначно отвечать не буду, каждый имеет право на свою точку зрения. Но как человек с сугубо техническим складом ума я не верю в сложные системы, они просто-напросто нестабильны и долго существовать не могут :)


Услышано на просторах: http://shvarz.livejournal.com за что отдельное спасибо автору.

Скорость ребилда soft-raid (soft raid rebuild speed)

Недавно Датацентр посоветовал очень эффективный метод ускорения пересборки RAID (система стоит на нем же) - на время ребилда переводить сервер в Rescue (для тех, кто не в курсе, что это - это своего рода Live CD). Эффект от того, что файловая система при этом отмонтирована и на нее никто ничего не пишет очень и очень существенен.

Так что предлагаю всем брать на вооружение :)

Очень круто про OOM-killer

http://catap.ru/blog/2009/05/03/about-memory-oom-killer/
Давно хочу сделать подобную серию статей плана "как это работает", ибо понимание внутренностей механизма позволяет намного эффективнее использовать софт :)

Уведомление при наличии обновлений, Debian

Аналогично очень крутой тулзе yum-updatesd решил сделать контроль за наличием апдейтов на Debian.

Ставим пакет:

apt-get install -y --force-yes cron-apt


Открываем конфи-файл:

vi /etc/cron-apt/config


Ищем там строку и корректируем следующим образом:

SYSLOGON="always"


Теперь запускаем его вручную:

cron-apt


И смотрим выдачу в syslog:

tail -f /var/log/syslog
Dec 24 09:50:19 localhost cron-apt: Building dependency tree...
Dec 24 09:50:20 localhost cron-apt: CRON-APT LINE: /usr/bin/apt-get dist-upgrade -d -y -o APT::Get::Show-Upgraded=true
Dec 24 09:50:20 localhost cron-apt: Reading package lists...
Dec 24 09:50:20 localhost cron-apt: Building dependency tree...
Dec 24 09:50:20 localhost cron-apt: The following packages will be upgraded:
Dec 24 09:50:20 localhost cron-apt: acpid dnsutils libbind9-0 libdns22 libisc11 libisccc0 libisccfg1 liblwres9
Dec 24 09:50:20 localhost cron-apt: 8 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Dec 24 09:50:20 localhost cron-apt: Need to get 0B/1258kB of archives.
Dec 24 09:50:20 localhost cron-apt: After unpacking 0B of additional disk space will be used.
Dec 24 09:50:20 localhost cron-apt: Download complete and in download only mode


Ну вот и все, теперь достаточно на центральном сервере вовремя просматривать и парсить логи :)

Wednesday 23 December 2009

Уведомление при наличии обновлений, CentOS

Обновление системы - одн из тех задач, которые почти обязательно выполнять вручную, но проверять наличие апдейтов руками можно свихнуться. Поэтому будем автоматизировать :) Пойдем стандартным путем :)

Ставим пакет:
yum install yum-updatesd -y


Активируем запуск при старте:

chkconfig yum-updatesd on


Убеждаемся, что он добавился в автозапуск:

chkconfig --list | grep upda
yum-updatesd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


Открываем конфиг:

vi /etc/yum/yum-updatesd.conf


Корректируем там следующие поля:

emit_via = syslog
# automatically download updates
do_download = yes
# automatically download deps of updates
do_download_deps = yes


Запускаем демона:

/etc/init.d/yum-updatesd start


Теперь он каждый час будет проверять наличие апдейтов, при их наличии скачивать их вместе с зависимостями, а также отписывать об этом в syslog (который мы уже научились собирать на одном сервере, но, к слову, можно отправлять уведомления и на почту, но я не считаю этот способ надежным).

Судя по интернетам, эту штуку юзать в продакшене НЕ стоит. Во-первых, она категорически отказывается отображать имеющиеся апдейты в сислоге и к тому же может легко съесть всю память.

P.S.: беру свои слова обратно, вот только что увидел в сислоге следующее
Dec 23 16:50:47 xen15 : 174 updates available


Так что все работает! А уедание памяти уж как-нибудь пофиксим :)

CentOS 5.4 + fuse


In the 5.4 update, several significant additions have been made to file systems support. Base Red Hat Enterprise Linux now includes the Filesystem in Userspace (FUSE) kernel modules and user space utilities, allowing users to install and run their own FUSE file systems on an unmodified Red Hat Enterprise Linux kernel (BZ#457975). Support for the XFS file system has also been added to the kernel for future product enablement (BZ#470845). The FIEMAP input/output control (ioctl) interface has been implemented, allowing the physical layout of files to be mapped efficiently. The FIEMAP ioctl can be used by applications to check for fragmentation of a specific file or to create an optimized copy of a sparsely allocated file (BZ#296951).


(c) http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.4/html-single/Release_Notes/

Это все хорошо, конечно, тока curlftp у меня сдох после этого...

Переключение ssh в CentOS на альтернативный порт

Последней стадией стало вот такое наблюдение в логах за последние три дня:

cat /var/log/secure|grep fail|wc -l
54887


Как видите, перебор очень суровый. Задолбало однако :) Есть, конечно, всякие fail2ban, но я уверен, что почти все попытки подобрать прекратятся после переноса ssh эдак на 2000й порт :)

Итак, открываем конфиг:
vi /etc/ssh/sshd_config


Корректируем там следующим образом:
Port 2000


Перезапускаем:

/etc/init.d/sshd restart


Ну вот и все:

netstat -lnpt | grep ssh
tcp 0 0 :::2000 :::* LISTEN 6981/sshd


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

Подключение fuse-curlftpfs на CentOS 5 / Debian 5

Наш Датацентр для бэкапов предоставляет только ftp, что часто очень неудобно по причине неприспособленности бэкап скриптов для работы с ним. Поэтому идея примонтировать папку и скопировать туда бэкапы очень заманчива. Эту задачу решает программа: fuse-curlftpfs

Итак, для начала подключаем rpm-forge: http://phpsuxx.blogspot.com/2009/08/rpmforge-rhel5-centos-5.html

Ставим пакет:
yum install -y fuse-curlftpfs


На Debian 5:
apt-get install -y curlftpfs


Создаем точку монтирования для бэкапов:
mkdir -p /mnt/backup


Монтируем ФТП:

curlftpfs backup_server_login:password@backup_host /mnt/backup


Демонтировать ФС (угу, я склоняюсь к тому, что это более правильное с точки зрения языка описание процесса, чем "размонтировать") так:
fusermount -u /mnt/backup

Debian: IE (SMART) not enabled, skip device

На Debian Etch имеем ошибку:


Dec 23 06:04:56 billing smartd[4494]: Device: /dev/sda, IE (SMART) not enabled, skip device Try 'smartctl -s on /dev/sda' to turn on SMART features


Чтобы он заработал, необходимо явно указывать тип устройства:
smartctl --all -d ata /dev/sdb

Крутой 3D движок от наших, ура!

В блоге бесподобной Алены C++ обнаружил ссылку на мега интересную штуку, а именно трехмерный движок российской разработки :) Прошу: http://unigine.com

Tuesday 22 December 2009

puppet активация файл-сервера

Самый удобный способ раздачи конфигов в puppet - посредством встроенного средства, которое поддерживается и сервером и клиентом. Но оно по умолчанию отключено, поэтому придется немного времени посвятить его перенастройке.

Открываем конфиг:
vi /etc/puppet/fileserver.conf


Создаем папку для хранения конфигов:

mkdir -p /etc/puppet/files


Добавляем туда следующее (где ip.ad.dr.es - IP клиентской машины, которой позволено скачивать этот конфиг):

[files]
path /etc/puppet/files
allow ip.ad.dr.es


Перезапускаем:

/etc/init.d/puppetmaster restart


Размещаем конфиг sudoers в папке (конфиг, думаю сами сгенерите, ага?):
vi /etc/puppet/files/sudoers


А теперь в конфиг site.pp можем внести примерно следующее (puppet:/// - означает, что подключаемся к дефалтному серверу, в /files/ - это имя модуля, а не путь в фс):

package {
sudo:
ensure => latest
}

file {
"/etc/sudoers":
mode => 440,
owner => 'root',
group => 'root',
source => "puppet:///files/sudoers"
}


Запускаем синхронизацию:

puppetd --verbose --test

Установка VDSManager OpenVZ на CentOS 5

Для начала заказываем лицензию для нашего айпи в биллинге ISPSystem, после этого приступаем к установке:

yum -y install wget
wget "http://download.ispsystem.com/install.sh"
sh install.sh


Если же ни curl ни wget нету, то попробуйте:
fetch "http://download.ispsystem.com/install.sh"

Соглашаемся с тем, что инсталлятор правильно определил ОС, соглашаемся с предложением подключить Epel репозиторий. Вводим пароль для админа. Потом выбираем "Install most popular software", потом выбираем ядро "ovzkernel-2.6.18-194.26.1.el5.028stab079.2". Ну и, наконец, соглашаемся с ребутом "Your system should be rebooted to boot new kernel. Do you want to reboot the server now?".

Ну и после перезагрузки рекомендую обновить всю систему:
yum update -y


После этого можете входить в панель управления по адресу: https://ip.ad.dr.es/manager/vdsmgr, используя логин admin и пароль, выбранный при установке.

Использование.

Входим в панель и идем в Настройки - Список IP-адресов, добавляем имеющиеся у нас IP. Далее нужно добавить шаблоны операционных систем, идем в Настройки - Шаблоны диска, щелкаем на кнопочку с диском и выбираем образ нужной ОС. Я рекомендую Debian, так что стягиваем образ debian-5.0-amd64-minimal.

Использование Puppet для управления конфигурациями

Сервер конфигураций

Подключаем Epel: http://phpsuxx.blogspot.com/2009/03/centos-rhel.html

Ставим пакет:
yum install -y puppet-server


Итого, сервер puppet имеет следующий набор конфигов:

ls /etc/puppet/
fileserver.conf manifests puppet.conf


Сразу можно оценить поистине ОГРОМНЫЙ набор конфигов:

ls -l /usr/lib/ruby/site_ruby/1.8/puppet/provider
augeas host naginator.rb selmodule
computer ldap.rb nameservice service
confine macauthorization nameservice.rb ssh_authorized_key
confine_collection.rb mailalias package sshkey
confine.rb maillist package.rb user
confiner.rb mcx parsedfile.rb zfs
cron mount port zone
group mount.rb selboolean zpool


Создаем стандартный конфиг (Now we'll create the site.pp manifest which is the master manifest. Puppet will search for a manifest by this name by default. ):
vi /etc/puppet/manifests/site.pp


А теперь сделаем финт ушами - будем ставить sudo посредством puppet. Для этого в выше указанынй файл забиваем следующее:

package {
sudo:
ensure => latest
}


Запускаем сервер (автоматически он в автозапуск не прописывается):

/etc/init.d/puppetmaster start


Добавляем сервер в автозапуск:

chkconfig puppetmaster on


Открываем в фаерволле доступ к Puppet:
iptables -A INPUT -p tcp --dport 8140 -j ACCEPT


Сохраняем настройки фаерволла:
/etc/init.d/iptables save


Кстати, если у Вас очень много машин, то не лишним будет запроксировать Puppet посредством Nginx, как это сделать, описывается здесь. А если хотите использовать Passenger / Mongrel, то прошу сюда: http://docs.puppetlabs.com/guides/scaling.html

Клиент

Подключаем Epel: http://phpsuxx.blogspot.com/2009/03/centos-rhel.html

yum install puppet -y


Либо, если клиентская машина на Debian:
apt-get install puppet -y


Далее в случае Debian необходимо убрать Puppet из автозагрузки:
update-rc.d -f puppet remove
/etc/init.d/puppet stop


Клиент имеет всего-лишь один конфиг-файл:

ls /etc/puppet/
puppet.conf


Открываем конфиг файл:

vi /etc/puppet/puppet.conf


Теперь в блок [puppetd] добавляем следующее (это адрес нашего puppet сервера):

server=puppet.server.ru


Теперь запускаем команду тестирования конфига:

puppetd --verbose --test
warning: peer certificate won't be verified in this SSL session
notice: Did not receive certificate
notice: Set to run 'one time'; exiting with no certificate


Есть еще вариант запуска без демонизации (в обычном случае puppet запускает своего демона, а onetime запрещает ему это делать):
puppetd --verbose --test --onetime


Теперь сертификат клиентской машинки будет отослан на сервер и нам необходимо сходить на сервер и посмотреть, что это произошло успешно:
puppetca --list
client.domain.ru


Теперь нам необходимо его подписать (опять же на сервере):

puppetca --sign client.domain.ru
Signed client.domain.ru


Возвращаемся на клиента:

puppetd --verbose --test


В ответ мы должны получить следующее:
warning: peer certificate won't be verified in this SSL session
notice: Got signed certificate
info: No classes to store
info: Caching catalog at /var/lib/puppet/localconfig.yaml
notice: Starting catalog run
notice: //Package[sudo]/ensure: created
notice: Finished catalog run in 10.89 seconds


Ну вот и все:
sudo был установлен:

rpm -qa | grep sudo
sudo-1.6.9p17-5.el5


Что еще сказать - это мегасупер штука, обеспечивающая ОГРОМНУЮ экономию времени на деплой систем :)

Вопросы

1. Можно ли использовать Puppet клиент на сервере, где установлен Puppet сервер? Да, можно, все будет отлично работать.

Основано на: http://habrahabr.ru/blogs/linux/68532/ а вот и список всех "контроллеров" (для управления различными частями ОС) и их возможностей: http://reductivelabs.com/trac/puppet/wiki/TypeReference#package

Ту-95МС

Хы... http://www.airliners.net/photo/Russia---Air/Tupolev-Tu-95MS/1618170/L/

Выбор ОС для хостинга: CentOS или Debian 5?

Довольно долгое время работаю с обоими ОС в основном в контексте
"хостинг-сервер". Раньше я склонялся к мнению, что лучше всего для
хостинг-серверов подходит CentOS 5 (т.к. все же это полноценный
"Enterprise" дистрибутив со всеми вытекающими), но сейчас уверенности
у меня поубавилось. Поэтому я постараюсь дать как можно более
объективное сравнение дистрибутивов как раз по качествам, которые в
первую очередь важны для хостинга.

Сравнение будет выполняться в следующем оснащении дистрибутивов:
Debian - только базовый репозиторий, CentOS - только базовый и Epel
репозитории (я бы его тоже отнес к "стандартным", т.к. работать в
CentOS без него почти невозможно).

Для начала давайте вспомним, что такое хостинг и из какого ПО он состоит.

Хостинговое ПО
Во-первых, это конечно же Apache, который выполняет львиную долю
работы на хостинге и является стандартом де-факто (по большей части
благодаря всеми любимому mod_rewite и .htaccess). Тут отличия найти
сложно, оба дистрибутива имеют 2.2 версию Apache и вполне стабильно
работают. Так что тут равноценно.

Кроме Апача для снижения нагрузки (и, к слову, в некоем роде защиты от
DoS при ограниченных ресурсах сервера) и раздачи статики часто
используется Nginx - актуальная версия в CentOS: 0.6.39, Debian:
0.6.32. К слову, обе эти версии имеют баг (он исправлен только в 0.7,
см. рассылку nginx-ru) при котором при усечении конфига nginx.conf
(проявляется такое, например, в довольно популярной панели ISPManager)
Nginx съедает всю памяти и система просто-напросто виснет. Так что тут
обоим минус и придется самому собирать пакет и ставить Nginx 0.7.

Для полноценного взаимодействия Nginx и Apache, т.е. для корректной
передачи IP бэкэнду необходим модуль Апача - rpaf, который
просматривает полученный от Nginx IP и передает его Апачу. Этот модуль
отсутствует даже в репозитории Epel CentOS`а (сейчас я его беру в
CentAlt), но в тоже время, в Debian он есть стандартно. Что также
добавляет преимуществ именно Debian`у.

Теперь о главном, о PHP, ведь это фактически причина использования
всего остального хостингового ПО, ибо подавляющее количество CMS
написано именно на нем (прощу прощения у любителей Python, Perl и
Ruby, а также других языков, но статистика потребительского шаред
хостинга говорит о тотальном количественном преимуществе PHP).

Тут-то и начинаются проблемы у CentOS, во-первых, на нем стоит PHP
5.1.6, а многое ПО (например, Magento - очень популярный веб-магазин)
требует именно 5.2 версию и если вы не хотите столкнуться с большим
числом жалоб от клиентов по причине неработоспособности скриптов, Вы
будете вынуждены либо подключать сторонние репозитории (которые мало
того, что не гарантируют стабильности ПО и корректности его сборки, а
в худшем случае - даже не отвечают требованиям безопасности и
надежности), либо собирать PHP 5.2 самостоятельно со всеми модулями
(что опять же сделать не так тривиально, учитывая число модулей в
репозиториях - в Debian это, например, около 50 штук). А если еще
вспомнить, что для PHP довольно часто выходят исправления
безопасности, то придется весь этот комплект оперативно патчить,
собирать в пакеты и разносить по серверами, то задача уже кажется
почти нерешаемой.

Также стоит упомянуть баг php-cgi в CentOS из-за которого он не читает
php.ini в текущей папке, когда он присутствует и все равно идет в
/etc/php.ini, что сильно мешает его работе в режиме php-fastcgi (в
Debian же с этим все ок). В Debian стоит 5.2.6 версия PHP с патчем
suhosin, который значительно увеличивает безопасность скриптов и
позволяет запускать почти все без исключения современные движки.

Далее пройдем по проприетарным модулям для PHP, которые используются
для защиты скриптов - это Zend Optimizer и IonCube. Что первый, что
второй поставляются в сборках и под PHP 5.1 и под 5.2. Так что и с
ними никаких проблем не будет.

MySQL, оба дистрибутива содержат 5.0 версию со всеми необходимыми
опциями. Стабильной же (по мнению Sun Microsystems) является 5.1, но
ни в одном дистрибутиве ее еще "не признали" по-настоящему стабильной
да и ПО, которое требует только 5.1 версию я не видел еще ни разу.

Postfix, Exim, Sendmail - все три почтовика представлены в обоих
дистрибутивах. Причем, к слову, postfix-mysql находится в стандартном
репо Debian, в то время как в CentOS он ставится весьма нетривиально,
но это лишь опция и в явные преимущества записывать не будем.

Теперь поговорим о версиях хостинговой экзотики - Perl, Python и Ruby.
В CentOS присутствует только 2.4 версия языка, а в Debian 2.5, так
что для любителей новых возможностей тут, пожалуй выбор однозначный. С
Ruby выбор чуть побольше - в Debian присутствует и 1.8 и 1.9 версии, а
в CentOS только 1.8.5. Perl же в Debian самой модной версии - 5.10, в
CentOS же проверенный временем (и лингвистами :) 5.8.8.

Управление ПО: установка и обновление
Тут у обоих дистрибутивов дела обстоят довольно хорошо, как я уже
говорил выше, для CentOS существует отличный сторонний репозиторий со
многими необходимыми пакетами - Epel (является частью проекта Fedora),
а у Debian даже без дополнительных репозиториев выбор пакетов очень
большой. Для установки и обновления программ в CentOS используется
YUM, отличающийся относительно неэкономным отношением к памяти, но при
этом он не заваливает пользователя вопросами о конфигурации пакетов,
как это делает пакетный менеджер Debian - apt-get.

Различные способы запуска ОС
По поводу работы на "чистом железе" (выделенный, dedicated сервер либо
colocation) стоит отдать предпочтение все же Debian, т.к. у него ядро
новее, чем у CentOS (да, Вы можете возразить, что RH оперативно
бэкпортит поддержку оборудования, но все же мой опыт говорит о том,
что с Debian при работе на железе проблем намного меньше, чем c
CentOS).

Отдельным пунктом, думаю, стоит отметить стабильность работы в
виртуальных окружениях OpenVZ и Xen. Оба дистрибутива работают отлично
и каких-либо нареканий и проблем не имеют, что очень важно, учитывая
популярность VPS хостингов и Cloud платформ (например, Amazon EC2).

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

P.S. статья была попыткой получить инвайт на Хабр, неудачной попыткой - отклонили :) Так что выкладываю здесь :)

Configuration Managament на практике!

Давно еще нашел отличные статьи про Puppet - http://phpsuxx.blogspot.com/2009/10/puppet.html теперь пришло время его попробовать на деле (ага, синхронизация /etc/aliases, /etc/sudoers, /etc/rsyslog.conf, /etc/httpd/conf, sysctl.conf, /etc/sysconfig/iptables-config/sendmail/yumignore это дико полезно и удобно ) :) Ждите статей)

Причем, после долгих прикидок и изучения - puppet можно заочно отнести к софту "так бы и сам написал", что очень радует :)

Визуализация логов rsyslog

Для этого есть средство: http://www.phplogcon.org/

rsyslog: централизованный сбор логов

Для передачи логов с одной машины на другую нам понадобится две активных инсталляции rsyslog: server и client. Поставим их по мануалу: Замена rsyslog (sysklogd) на syslog в CentOS 5

Client

Тут в принципе ничего сложного - нам необходимо настроить отправку важных логов по tcp на удаленную машину, пусть это будет log.domain.ru (ага, я не боюсь постоянного резолвера).

Открываем конфиг:
vi /etc/rsyslog.conf


Стандартный конфиг выглядит так:

cat /etc/rsyslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* -/var/log/maillog


# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages
*.emerg *

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log
local7.* /var/log/boot.log


Вариант с отсылкой всех логов без сохранения локально будет выглядеть так (простое копирование):

*.info;mail.none;authpriv.none;cron.none @@xx.xx.xx.xx:514


А для сохранения локально и отсылки на удаленный сервер он будет выглядеть так:

*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none @@xx.xx.xx.xx:514


Перезапускаем rsyslog:
/etc/init.d/rsyslog restart


А на сервере можно заменить слушающий rsyslog командой nc:
nc -l 514


Теперь для теста попробуем отправить сообщение, которое обычно должно упасть в /var/log/messages:

logger -p ftp.info 'test message suxx'


Server

Открываем конфиг (эта и последующие операции выполняются на сервере):
vi /etc/rsyslog.conf


Разрешаем rsyslog у слушать удаленные машины:

vi /etc/sysconfig/rsyslog


И строку:
SYSLOGD_OPTIONS="-m 0"


Заменяем на:
SYSLOGD_OPTIONS="-m 0 -t514"


Добавляем в самый верх следующее:

$AllowedSender TCP, 127.0.0.1, cli.ent.ip.add


Перезапускаем rsyslog:
/etc/init.d/rsyslog restart


Теперь открываем просмотр лога для контроля, что tcp слушается (tcpReception="Yes") и ожидания логов с клиент машины:

tail -f /var/log/messages
x-pid="32126" x-info="http://www.rsyslog.com"][x-configInfo udpReception="No" udpPort="514" tcpReception="Yes" tcpPort="514"] restart



А тем временем на клиент машине вызываем давнюю команду:
logger -p ftp.info 'test remote message suxx'


И в ответ на сервере должны увидеть следующее:

Dec 22 06:08:09 clienthostname root: test remote message suxx


Ну и все, осталось узнать, как это все себя будет вести под нагрузкой =)

Замена syslog (sysklogd) на rsyslog в CentOS 5

Встала задача централизации сбора всех логов на один сервер, а вариант рассылки логов по UDP (единственный сетевой способ передачи логов, который поддерживает sysklogd) не особенно устраивал тем, что логи придется переправлять по "незащищенному каналу" и вероятность их подмены также не особенно устраивала.

Итак, основываясь на моем немного забегающем вперед эксперименте "/etc/init.d/rsyslog start Shut down sysklogd before you run rsyslog", убеждаемся в необходимости отключения стандартного логгера.

Итак, поехали:
yum install -y rsyslog


Убираем стандартный логгер из автозапуска:
chkconfig syslog off


Добавляем туда "нестандартный":
chkconfig rsyslog on


Выключаем стандартный и включаем rsyslog:

/etc/init.d/syslog stop
/etc/init.d/rsyslog start


В итоге это выведет следующее:

# /etc/init.d/syslog stop
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
# /etc/init.d/rsyslog start
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]



А теперь убедимся, что все запустилось просмотром лога:

tail -f /var/log/messages
...
Dec 22 04:28:19 node yum: Installed: rsyslog-2.0.6-1.el5.x86_64
Dec 22 04:30:39 node kernel: Kernel logging (proc) stopped.
Dec 22 04:30:39 node kernel: Kernel log daemon terminating.
Dec 22 04:30:41 node exiting on signal 15
Dec 22 04:30:46 node rsyslogd: [origin software="rsyslogd" swVersion="2.0.6" x-pid="26857" x-info="http://www.rsyslog.com"][x-configInfo udpReception="No" udpPort="514" tcpReception="No" tcpPort="0"] restart
Dec 22 04:30:46 node kernel: rklogd 2.0.6, log source = /proc/kmsg started.

Такой разный apt

У него оказывается есть опция -t, в которой при наличие нескольких репо в системе (стейбл, анстейбл, тестинг) возможно выбирать, с какого именно ставить :)

(с) "Linux сборник рецептов" Карла Шредер, рекомендую!

Немного дорожного позитива от Гугла :)

Monday 21 December 2009

Правильное отключение нод с OpenVZ

Если сначала не выключить vz (т.е. все VPS) следующим образом, то есть вероятность, что машинка повиснет (проявляется на 164 ядрах):

/etc/init.d/httpd stop # тут имеется в виду отключение админ-панели
/etc/init.d/vz stop
shutdown -r now

Установка Memcached на Debian5

Ставим пакет:

apt-get install -y --force-yes memcached

Если требуется сменить порт или настроить размер используемой памяти, милости просим в конфиг:
vi /etc/memcached.conf

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

Добавляем в автозапуск:
update-rc.d memcached defaults


Запускаем (насчет фаерволла можно не волноваться, он биндится только на локальный интерфейс):
/etc/init.d/memcached start

Linux + java.io.IOException: Too many open files

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

Фиксица это добавлением в скрипт запуска строк:
ulimit -n 10000000

CE: hpet increasing min_delta_ns to ... nsec

После запуска сервер одной игры получили вот такое в логе ядра:
[ 4426.552587] CE: hpet increasing min_delta_ns to 15000 nsec
[ 4686.884120] CE: hpet increasing min_delta_ns to 22500 nsec


Изыскания по интернету подсказывают, что hpet - это High Precision Event Timer. А вот зачем он увеличивает свою дельту - непонятно. Кто в курсе?

Активация модулей ipt_state и ip_conntrack для OpenVZ VE

Открываем конфиг IPTABLES:
vi /etc/sysconfig/iptables-config


Ищем там строку:
IPTABLES_MODULES="ip_conntrack_netbios_ns"


Добавляем в нее наши модули через пробел:
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack ipt_state"


Перезапускаем iptables:
/etc/init.d/iptables restart


Открываем конфиг VE:
vi /etc/vz/conf/$VEID.conf


Ищем существующую строку либо добавляем сами строку (если строка уже была, то необходимо добавить последних три модуля в список, причем iptable_filter является обязательным, но указывается только в конфиге VE, но не глобальном):
IPTABLES="ip_tables ip_conntrack ipt_state iptable_filter"


Перезапускаем контейнер:
vzctl restart $VEID


Все, теперь -m state --state RELATED будет работать внутри контейнера :)

Мануал от Parallels по iptables http://kb.parallels.com/en/746

В каких отношениях состоят ip_conntrack и ipt_state?

Вот сейчас клиент попросил поставить для VE модуль ipt_state, поэтому задумался, он ли один нужен или еще ip_conntrack необходимо включить. Ну судя по логике, conntrack используется для режима state который "RELATED". Так что связаны :)

Dec 21 15:37:27 domain.ru proftpd[18122] domain.ru (xxx-xx-xx-x.xx[xx.xx.xx.xx]): SECURITY VIOLATION: root login attempted.

Это значит, что не стоит пытаться войти рутом на FTP по причине того, что это крайне небезопасно (протокол FTP не использует шифрование паролей и канала передачи данных) и с высокой вероятностью может вызвать взлом сервера.

Route hash chain too long! Adjust your secret_interval!

Столкнулись с такой проблемой, что OpenVZ ядра 164й ветки (точно: RHEL5 2.6.18-164.2.1.el5 028stab066.7 и RHEL5 2.6.18-164.2.1.el5 028stab066.10) виснут, сопровождая зависание вот такими логами:

Dec 18 00:15:03 CentOS-54-64-minimal kernel: Route hash chain too long!
Dec 18 00:15:03 CentOS-54-64-minimal kernel: Adjust your secret_interval!


Более подробно:

Dec 17 14:15:32 CentOS-54-64-minimal dhclient: parse_option_buffer: option time-offset (255) larger than buffer.
Dec 17 20:50:19 CentOS-54-64-minimal kernel: unregister_netdevice: waiting for venet0=ffff81023f457800 to become free. Usage count
= 3 ve=1730
Dec 17 20:50:50 CentOS-54-64-minimal last message repeated 3 times
Dec 17 20:51:00 CentOS-54-64-minimal kernel: unregister_netdevice: waiting for venet0=ffff81023f457800 to become free. Usage count
= 3 ve=1730
Dec 17 20:51:00 CentOS-54-64-minimal kernel: unregister_netdevice: device ffff81023f457800 marked to leak
Dec 17 20:51:00 CentOS-54-64-minimal kernel: free_netdev: device venet0=ffff81023f457800 leaked
Dec 17 20:51:00 CentOS-54-64-minimal kernel: neighbour leakage
Dec 17 20:51:00 CentOS-54-64-minimal kernel: CT: 1730: stopped
Dec 17 20:51:02 CentOS-54-64-minimal kernel: CT: 1730: started
Dec 18 00:15:03 CentOS-54-64-minimal kernel: Route hash chain too long!
Dec 18 00:15:03 CentOS-54-64-minimal kernel: Adjust your secret_interval!
Dec 18 01:15:20 CentOS-54-64-minimal syslogd 1.4.1: restart.


Сейчас откатились на 128 ядро (OpenVZ, 2.6.18-128.2.1) и тестируем на нем, пока, вроде, полет нормальный и сообщений о free/leak нету, как и зависаний.

Судя по поиску, обе строки из сабжа выдает функция rt_emergency_hash_rebuild из файла net/ipv4/route.c

Как и ожидалось, в ядре 2.6.18-128.2.1 ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/kernel-2.6.18-128.2.1.el5.src.rpm этой функции нету и никаких упоминаний строк из сабжа. Так что можно спать спокойно на 128 ядре :)

Сейчас проверю 164е: ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/kernel-2.6.18-164.el5.src.rpm. Да, этот патч от RHEL 5.4 (O-Subject: [RHEL 5.4 PATCH]: allow for on demand emergency route cache flushing): linux-2.6-net-allow-for-on-demand-emergency-route-cache-flushing.patch, суть его сводится к следующему:


Several customer have pointed out that Linux has this periodic latency
resulting from us flushing the route cache. We do this purposefully, since we
don't want to use the same hash secret too long and risk having an attacker
flood our system with carefully selected packets, creating route cache entries
that all hash to the same value. It would be nice if we could, instead of
flushing every X seconds weather we need to or not, to flush only when we detect
that a chain in our hash table is growing suspiciously long.


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

Ап! А вот что пишут на форуме опенвз (ссылка):

As a workaround downgrade to RHEL 5.3 based kernel or decrease your /proc/sys/net/ipv4/route/secret_interval value (default 600), but not too much.

But I hope that a permanent fix is on it's way.


Update: проблема исправлена 67.4 ядре http://wiki.openvz.org/Download/kernel/rhel5/028stab067.4

Update: проблема ВНОВЬ появилась в 194 серии ядер: http://bugzilla.openvz.org/show_bug.cgi?id=1611

Где взять SRC RPM для RHEL?

Тут: ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/

Sunday 20 December 2009

Обновить ISPManager Lite до ISPManager Pro

Можно командой:

/usr/local/ispmgr/sbin/up2prof.sh
killall -9 -r ispmgr # без этого не обновится

Journal-guided Resynchronization for Software RAID Reviews Shared by: termo Categories Education Tags Journal-guided Resynchronization for soft raid

Кто интересуется темой - велкам в гугл!

А вот еще с той же оперы слово для затравки: dirty region log (DRL)

Типы журналов Ext3

journal
All data is committed into the journal prior to being written into the main file system.

ordered
This is the default mode. All data is forced directly out to the main file system prior to its metadata being committed to the journal.

writeback
Data ordering is not preserved - data may be written into the main file system after its metadata has been committed to the journal. This is rumoured to be the highest-throughput option. It guarantees internal file system integrity, however it can allow old data to appear in files after a crash and journal recovery.


А вот информация прямиком из ядра (filesystems/ext3.txt):

journal All data are committed into the journal prior to being written into the main file system.

ordered (*) All data are forced directly out to the main file system prior to its metadata being committed to the journal.

writeback Data ordering is not preserved, data may be written into the main file system after its metadata has been committed to the journal.


И еще немного с документации ядра:

* writeback mode
In data=writeback mode, ext3 does not journal data at all. This mode provides
a similar level of journaling as that of XFS, JFS, and ReiserFS in its default
mode - metadata journaling. A crash+recovery can cause incorrect data to
appear in files which were written shortly before the crash. This mode will
typically provide the best ext3 performance.

* ordered mode
In data=ordered mode, ext3 only officially journals metadata, but it logically
groups metadata and data blocks into a single unit called a transaction. When
it's time to write the new metadata out to disk, the associated data blocks
are written first. In general, this mode performs slightly slower than
writeback but significantly faster than journal mode.

* journal mode
data=journal mode provides full data and metadata journaling. All new data is
written to the journal first, and then to its final location.
In the event of a crash, the journal can be replayed, bringing both data and
metadata into a consistent state. This mode is the slowest except when data
needs to be read from and written to disk at the same time where it
outperforms all other modes.

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

apt-get -y --force-yes install sudo

Замены syslog (sysklogd) в CentOS 5: syslog-ng и rsyslog

rsyslog (кстати, к нему даже есть провайдер для хранения логов в MySQL: rsyslog-mysql):


yum info rsyslog
Name : rsyslog
Arch : x86_64
Version : 2.0.6
Release : 1.el5
Size : 201 k
Repo : base
Summary : Enhanced system logging and kernel message trapping daemons
URL : http://www.rsyslog.com/
License : GPLv2+
Description: Rsyslog is an enhanced multi-threaded syslogd supporting, among others, MySQL,
: syslog/tcp, RFC 3195, permitted sender lists, filtering on any message part,
: and fine grain output format control. It is quite compatible to stock sysklogd
: and can be used as a drop-in replacement. Its advanced features make it
: suitable for enterprise-class, encryption protected syslog relay chains while
: at the same time being very easy to setup for the novice user.


syslog-ng:
yum info syslog-ng
Available Packages
Name : syslog-ng
Arch : x86_64
Version : 2.1.4
Release : 1.el5
Size : 263 k
Repo : epel
Summary : Next-generation syslog server
URL : http://www.balabit.com/products/syslog_ng/
License : GPLv2+
Description: syslog-ng, as the name shows, is a syslogd replacement, but with new
: functionality for the new generation. The original syslogd allows
: messages only to be sorted based on priority/facility pairs; syslog-ng
: adds the possibility to filter based on message contents using regular
: expressions. The new configuration scheme is intuitive and powerful.
: Forwarding logs over TCP and remembering all forwarding hops makes it
: ideal for firewalled environments.

Установка logwatch

Ставим:
yum -y install logwatch



Логвоч стандартно вываливает кучи избыточной информации, поэтому его нужно тюнить. Вот список всех доступных сервисов:
ls -la /usr/share/logwatch/scripts/services/


Открываем конфиг:
vi /etc/logwatch/conf/logwatch.conf


И вписываем следующее:

# Local configuration options go here (defaults are in /usr/share/logwatch/default.conf/logwatch.conf)
Service = All
# отключаем отчет о свободном месте, т.к. за этим следит другая система мониторинга
Service = "-zz-disk_space"
# т.к. у Пофикса очень большие логи и этот скрипт не очень прямой и сильно спамит
Service = "-postfix"


Запускаем: /etc/cron.daily/0logwatch и следим за количеством спама =)

Как отправить текстовый лог в syslog?

Довольно легко:
http://www.oreillynet.com/pub/a/sysadmin/2006/10/12/httpd-syslog.html

Подключение собственных event-handler к ISPManager

Допустим, наш тестовый event-handler называется: usrparam.set (и привязывается он к соответствующему действию ISPManager).

Вот так можно получить список всех ивентов, которые можно хукнуть:
/usr/local/ispmgr/sbin/mgrctl eventlist


Создаем папку для event-handler ов:
mkdir -p /usr/local/ispmgr/event


Помещаем в нее наш хендлер и обязательно выставляем 700е права:

vim /usr/local/ispmgr/event/usrparam.set
chmod 700 /usr/local/ispmgr/event/usrparam.set


Перезапускаем ISPMager:
killall -9 -r ispmgr


Следим в логах, с каким успехом вызывается наш хендлер:
tail -f /usr/local/ispmgr/var/ispmgr.log

Postfix: разрешить прием почты только от доверенных SMTP серверов

Часто при использовании многокаскадных почтовых систем необходимо запретить серверу принимать почту от всех, кроме перечисленных списком серверов, делается это не особенно тривиально, но вполне возможно :)

Открываем конфиг:
vi /etc/postfix/main.cf


Ниже строк:

#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table


Добавляем:
mynetworks = 127.0.0.0/8, ip.ad.dr.es, ip.ad.dr.es


Далее ищем строку:

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_unlisted_recipient, reject_unverified_recipient


И заменяем на:

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_unverified_recipient, reject


Итого: был удален reject_unauth_destination, добавлен reject, о них подробно ниже.

reject_unauth_destination
Reject the request unless one of the following is true:

* the resolved destination address matches $relay_domains or a subdomain thereof, and the address contains no sender-specified routing (user@elsewhere@domain),
* Postfix is the final destination: any destination that matches $mydestination, $inet_interfaces, $virtual_alias_domains, or $virtual_mailbox_domains.

The relay_domains_reject_code parameter specifies the response code for rejected requests (default: 554).


Перезапускаем Postfix:
/etc/init.d/httpd restart


Ну вот теперь все сообщения от узлов, чьи IP отличны от ip.ad.dr.es (ога, у остальных с цифреками) будуи сразу же отклоняться почтовиком, а вот клиенты, желающие отправить почту будут запущены на машинку.

Настройка исключений для yum update

Часто при установке "патченного" софта (конечно же, из rpm, а не сорцов) встает необходимость заблокировать последующие апдейты "патченного" пакета, иначе они отключат все его фичи.

Для этого есть плагин к yum:
yum-versionlock.noarch : Yum plugin to lock specified packages from being updated


Ставим его:
yum -y install yum-versionlock


Открываем список игнорируемых пакетов:
vi /etc/yum/pluginconf.d/versionlock.list


И вписываем туда (ну имя пакета, разумеется, Ваше):
kernel-xen*


Всё, при запуске yum update он появляться более не будет :)

Mailman: Message body is too big: 57364 bytes with a limit of 40 KB

Как исправить?
Идём в файл:
vi /usr/lib/mailman/Mailman/Defaults.py


Корректируем там строчку:
DEFAULT_MAX_MESSAGE_SIZE = 200

(ранее было 40, поставили 200)

ISPManager: как правильно менять тарифные планы

Логинимся рутом, настройки => политика, ставим галочку "применять изменения в шаблонах". После этого входим реселлером и меняем тарифы. Также в политиках появляется опция: "принудительно применять изменения в шаблонах", но она нам сейчас не нужна.

ISPManager. Ошибка: rotate уже существует

Смотреть в файл:
/usr/local/ispmgr/etc/rotate.conf

есть ли там запись про домен. Если есть, то необходимо удалить.

Устанавливаем Московский часовой пояс в CentOS 5 / Debian 5

Ну можете и свой пояс поставить, но лично мне Московский почему-то роднее :)
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime


На Debian 5 Lenny:

cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Или еще более правильный способ:
dpkg-reconfigure tzdata

Во всплывшем окне выбираем Europe - Moscow.

Использование nmap

Наиболее удобный режим запуска nmap (сканируются вообще все порты):
nmap -p0-65535 -v -A domain.ru

Скрипт для установки паролей для множества юзеров подряд

Ставим генератор паролей:

yum -y install pwgen


Сам скрипт:

perl -Mstrict -e 'my @ls = qw/host1 host2 host3 host4 host5 host6/; for my $user (@ls) { $_ = `/usr/bin/pwgen 16 1`; chomp; open my $passwd, "|/usr/bin/passwd --stdin $user" or die "$!"; print {$passwd} "$_\n"; close($passwd); print "$user $_\n" }'

Передача файлов посредством nc

Ага, это возможно! Не зря же он Net Knife (причем, явно швейцарский) !

На принимающей стороне:
nc -vv -l 6969 > /tmp/disk.iso


На отправляющей:
nc -w1 domain.ru 6969 < disk.iso



Ну вот и все :)

Установка Monit на CentOS

Monit - это программный watchdog, который умеет перезапускать демоны (да и вообще делать все, что душа пожелает) при наступлении определенного события, например перегрузки CPU или исчерпания всей памяти и проч. Я приведу пример работы с ним для защиты от зависаний Спамообороны.

yum -y install monit


Конфиг его тут:
vi /etc/monit.conf


А вот пример правила для перезапуска Спамообороны при зависании:

set daemon 35

check process sp-daemon with pidfile /var/run/sp-daemon.pid
start = "/etc/init.d/sp-daemon start"
stop = "/etc/init.d/sp-daemon stop"
if children < 2 then restart



Добавляем в автозапуск:
/sbin/chkconfig monit on


Запускаем:
/etc/init.d/monit start

Решение проблем с Named на CentOS 5

Очень часто при апдейте Named (Bind) сбрасывает владельцев зон в папке /var/named на root, в результате чего Named ломается, фиксить это так:

chown -R named:named /var/named/


Итого как-то вот так выглядит его "правильное" обновление:
yum -y update bind && chown -R named:named /var/named/ && /etc/init.d/named restart && ls -la /var/named | head

Что значат поля DNS SOA записи?

Refresh говорит вторичным серверам, как часто они должны проверять значение serial.

Retry говорит о том, как часто вторичный сервер должен пытаться прочитать данные, если первичный сервер не отвечает.

Expire говорит вторичным серверам, в течение какого времени они должны обслуживать домен, если первичный сервер не отвечает. По истечении этого времени вторичные сервера будут считать свои данные устаревшими.

Minimum задает время жизни записей по умолчанию для данной зоны.

(с) потерял :(

Срезать mac чужих серверов на уровне IPTABLES

Многие хостеры (да и провайдеры, думаю) вылавливают в сети не свои DHCP и забивают их lease целиком. Но можно средствами фаерволла перекрыть доступ к DHCP всем, кроме своих серверов:

iptables -A INPUT -p tcp --dport 67:68 -m mac --mac-source 00:50:56:2F:97:69 -j ACCEPT
iptables -A INPUT -p tcp --dport 67:68 -j DROP


источник: http://shirwablog.com/?p=26

Как готовить Core Dumps?

http://linuxfocus.berlios.de/English/July2004/article343.shtml

Как скачать файлы указанные как SOURCES в SPEC?

Никак.

The URLs listed in source directives are for convenience and future reference only. RPM will not download these files.

Работа с NFS 3/4 на CentOS 6: сервер

Ставим необходимый софт:
yum -y install nfs-utils nfs-utils-lib

Запускаем:
/etc/init.d/nfs start
Активируем запуск при загрузке сервера:
chkconfig nfs on 

Для NFS 4 нужно настроить демона idmapd (иначе будет ругань в стиле: nfsv4 idmapping failing: has idmapd not been started?):
chkconfig rpcidmapd on
/etc/init.d/rpcidmapd start

Открываем конфигурацию экспортируемых ФС:
vi /etc/exports

Вписываем там (эта конфигурация небезопасна, все файлы будут доступны как для root, но зато не будет проблем с соответствием uid на разных машинах). Причем 10.0.100.100 - это IP клиента, который имеет право монтировать эту ФС.

/nfs 10.0.100.100(rw,no_root_squash,fsid=0)

В случае NFS 2/3 также нужно сконфигурировать portmap.

Если требуется 3я версия NFS, то нужно еще поставить portmap:
yum install -y portmap
И запустить его:


/etc/init.d/portmap start

Потом добавляем 10.0.100.100 как доверенный для доступа к portmap:
vi /etc/hosts.allow


Добавляем туда:

portmap: 10.0.100.100


Для применения настроек перезапускаем все сервисы (не уверен, что это требуется, но лучше сделать, если нет соседних чтений/записей):

/etc/init.d/portmap restart
На самом финише делаем итоговый рестарт для применения настроек:
/etc/init.d/nfs restart


Просматриваем список экспортируемых ФС:
exportfs

Ну вот и все :)

Работа с NFS 3/4 на CentOS: клиент

Ставим необходимые пакеты:
yum -y install nfs-utils 

Запускаем необходимые службы:

/etc/init.d/nfs start

Если монтируем NFS 3, то нужно также поставить и запустить portmap
yum install -y portmap
/etc/init.d/portmap start

Создаем точку монтирования для NFS диска:
mkdir -p /mnt/nfsdisk

Монтируем:
mount 10.0.100.100:/mnt/host5 /mnt/nfsdisk
Также можно сделать это через /etc/fstab такой строкой:
10.0.100.100:/mnt/host5 /mnt/nfsdisk nfs4  
А потом сделав mount:
mount -a 
Также не забываем проверить активность демона netns, чтобы nfs подцепился при следующем буте:
chkconfig netns on 

А если не смонтировалось, то идти читать:
tail -f /var/log/messages


Ну вот и все :)

subversion: разрешить правку комментов к коммитам

При попытке изменения на стандартно настроенном svn получаем следующее:

svn pe svn:log -r 5826 --revprop
svn: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook


Фиксица так (на сервере, разумеется):

1. Идём в папку /var/spool/svn/имя_репозитория/hooks/
2. Там выполняем:

cp pre-revprop-change.tmpl pre-revprop-change
chmod +x pre-revprop-change

3. Перезапускаем svnserve и вуаля, всё работает :)

Команда для удобного поиска в svn репозитории

grep -HiR 'text' * | grep -v svn

iptables: забанить диапазон

/sbin/iptables -A INPUT -m iprange --src-range 193.169.0.0-193.169.255.255 -j DROP

Установка агента Zabbix

Установка Агента

Подключаем Epel:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm


Ставим:
yum install -y zabbix-agent


Конфигурируем:
vi /etc/zabbix/zabbix_agentd.conf


Корректируем там следующее:

Server=ip.ad.dr.es
Hostname=хостнейм_машинки
Timeout=30


Добавляем в автозапуск и запускаем:

chkconfig zabbix-agent on
/etc/init.d/zabbix-agent start



Включение сервера в мониторинг на сервере.



1. Входим на: http://где_у_вас_стоит_заббикс.ru
2. "Настройка" => "Узлы сети"
3. В списке выбираем "узлы сети", далее щелкаем "Создать узел сети"
4. Имя "hostname.ru" (хостнейм машинки)
5. Ставим: "Подключиться к IP адрес"
6. Вписываем DNS имя и IP машинки
7. Связать с шаблоном, жмем "добавить" и выбираем там "Template_Linux" для обычных серверов
8. Тыкаем "Ok"

Обновление всех CPAN модулей


cpan
cpan shell -- CPAN exploration and modules installation (v1.9402)
Enter 'h' for help.
cpan[1]> upgrade

Интересная система по управлению Agile проектами

http://freshmeat.net/projects/opproject

Суперскоростная установка CPAN модулей

Для автоматического ответа на все запросы CPAN есть хак:

PERL_MM_USE_DEFAULT=1 cpan Catalyst

Очень крутая визуализация БД

http://ondras.zarovi.cz/sql/demo/?keyword=default

Примеры OpenID идентификаторов для популярных сервисов

Вот все, что нашел:

имя_вашего_жж.livejournal.com
http://имя_вашего_блога.blogspot.com
https://ваш_логин_на_яндексе.ya.ru

Хороший мануал по FreeBSD Jail

http://www.samag.ru/cgi-bin/go.pl?q=articles;n=11.2006;a=04

Настройка синхронизации времени на CentOS Linux

Ставим пакет:
yum install -y ntp


Открываем конфиг:
vi /etc/sysconfig/ntpd


Корректируем там:
SYNC_HWCLOCK=yes


А также изменяем (-L чтобы не слушать сеть вообще):
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -L"


Синхронизируем время:
/usr/sbin/ntpdate 0.rhel.pool.ntp.org europe.pool.ntp.org


Добавляем в автозапуск:
/sbin/chkconfig ntpd on


Запускаем:
/etc/init.d/ntpd start


Но иногда ntpd глючит и получается большие отставания:

sntp time.nist.gov
2010 Feb 19 16:33:10.653 + 79.089 +/- 0.152 secs


Тогда надо делать следующее:
/etc/init.d/ntpd stop
/usr/sbin/ntpdate 0.rhel.pool.ntp.org europe.pool.ntp.org
/etc/init.d/ntpd start


Теперь все ок:
sntp time.nist.gov
2010 Feb 19 16:33:25.111 - 0.009 +/- 0.151 secs


А если требуется выставить другой часовой пояс, используем мануал: http://phpsuxx.blogspot.com/2009/12/centos-5_20.html

Интересная опция Linux ядра

sysctl -a | grep fack
net.ipv4.tcp_fack = 1

Saturday 19 December 2009

Узнать размер страницы на данной платформе в Linux

getconf PAGE_SIZE

Зависание OpenVZ

На CentOS 5.4 x86_64 2.6.18-164.2.1.el5.028stab066.10 вот такая напасть, выливающаяся в спорадические зависания ноды (происходить при старте/стопе VPS):

Dec 17 15:35:01 ovz18 kernel: CT: 1830: started
Dec 17 15:59:16 ovz18 kernel: CT: 1830: stopped
Dec 17 16:00:02 ovz18 kernel: CT: 1830: started
Dec 17 12:46:10 ovz18 kernel: free_netdev: device venet0=ffff81029897f800 leaked
Dec 17 16:44:59 ovz18 kernel: unregister_netdevice: waiting forvenet0=ffff810213b61800 to become free. Usage count= 4 ve=1818


А вот в реально времени вместе с выдачей sockstat:

Message from syslogd@ at Sat Dec 19 22:32:17 2009 ...
CentOS-54-64-minimal kernel: unregister_netdevice: waiting for lo=ffff810128413000 to become free. Usage count = 4 ve=1612
Message from syslogd@ at Sat Dec 19 22:32:57 2009 ...
CentOS-54-64-minimal last message repeated 4 times
Message from syslogd@ at Sat Dec 19 22:32:57 2009 ...
CentOS-54-64-minimal kernel: unregister_netdevice: device ffff810128413000 marked to leak
Message from syslogd@ at Sat Dec 19 22:32:58 2009 ...
CentOS-54-64-minimal kernel: free_netdev: device lo=ffff810128413000 leaked

# cat /proc/net/sockstat
sockets: used 3228
TCP: inuse 341 orphan 0 tw 541 alloc 497 mem 490
UDP: inuse 17 mem 0
RAW: inuse 0
FRAG: inuse 0 memory 0



Теперь идем читаем, что такое параметр tcp_mem: http://phpsuxx.blogspot.com/2009/12/procsysnetipv4tcpmem.html

Товарищи с Parallels (ссылка ниже) советуют эти значения увеличить до: 786432 1048576 1572864

Имеем до (все числа в страницах):

cat /proc/sys/net/ipv4/tcp_mem
188416 192512 196608


Добавляем строку в:
vi /etc/sysctl.conf


net.ipv4.tcp_mem = 786432 1048576 1572864


Применяем настройки:
sysctl -p


Смотрим результат:

cat /proc/sys/net/ipv4/tcp_mem
786432 1048576 1572864


Взято с: http://forum.parallels.com/showthread.php?t=97158

Что такое /proc/sys/net/ipv4/tcp_mem ?

Вот Redhat Deployment Guide тоже не знает и ссылается на: /usr/share/doc/kernel-doc-/Documentation/networking/ip-sysctl.txt

Но для использования этой документации необходимо поставить пакет:
yum install -y kernel-doc


В моем случае это будет:
vi /usr/share/doc/kernel-doc-2.6.18/Documentation/networking/ip-sysctl.txt


По сабжу:

tcp_mem - vector of 3 INTEGERs: min, pressure, max
min: below this number of pages TCP is not bothered about its
memory appetite.

pressure: when amount of memory allocated by TCP exceeds this number
of pages, TCP moderates its memory consumption and enters memory
pressure mode, which is exited when memory consumption falls
under "min".

max: number of pages allowed for queueing by all TCP sockets.

Defaults are calculated at boot time from amount of available
memory.



Как можно понять, эти значения идут от меньшего к большему.

Далее стоит вопрос - как посмотреть, сколько их now in use сейчас? Товарищ подсказывает, что смотреть в:

cat /proc/net/sockstat
sockets: used 1720
TCP: inuse 146 orphan 0 tw 29 alloc 207 mem 9
UDP: inuse 3 mem 0
RAW: inuse 0
FRAG: inuse 0 memory 0



Предполагаю, что параметр этот mem, но в каких попугаях он - вопрос, явно не проценты, т.к. на соседней машинке он был аж за 200:

cat /proc/net/sockstat
sockets: used 3402
TCP: inuse 412 orphan 0 tw 478 alloc 570 mem 205
UDP: inuse 17 mem 0
RAW: inuse 0
FRAG: inuse 0 memory 0


Народ подсказывает, что документациях есть в сорцах ядра: /usr/src/linux/net/ipv4/proc.c, поэтому идем GitWeb kernel.org: http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.27.y.git;a=blob_plain;f=net/ipv4/proc.c;hb=HEAD

А там в "mem" выводится "&tcp_memory_allocated", который объявлен как:
atomic_t tcp_memory_allocated; /* Current allocated memory. */


Потому оно становится полем memory_allocated структуры tcp_prot

А дальше инфы не нашел...

Аэрофобам посвящается :)

Категорически показано к прочтению данным гражданам: http://www.rusrep.ru/2009/48/aerofobiya/

Cмена лицензии на VDSmanager

rm -f /usr/local/ispmgr/etc/vdsmgr.lic
wget http://lic.ispsystem.com/vdsmgr.lic?ip=ip.ad.dr.es -O/usr/local/ispmgr/etc/vdsmgr.lic
killall -9 -r vdsmgr

Книжки от IBM

Может найдете что-либо полезное: http://www.redbooks.ibm.com/

Что за настройка /etc/vz/vz.conf: IPTABLES

Там указано следующее:

## IPv4 iptables kernel modules
IPTABLES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length"


Что это значит - непонятно. Есть подозрения, что это "дефалтовый" список IPTABLES модулей для новых контейнеров - но не уверен, опять же. Причем, как я понял, указывать модуль здесь для проброса его в контейнер далеко не обязательно.

Подскажите?

Ап!

Она обозначает то, какие из модулей iptables загружаются на VPS в данном hardware node по умолчанию, определяется составом параметра IPTABLES в файле /etc/sysconfig/vz.

(с) http://www.opennet.ru/docs/RUS/virtuozzo/

Подключение ip_conntrack_ftp на CentOS 5 / OpenVZ

На хост-машине делаем следующее:

vi /etc/sysconfig/iptables-config


Там видим нечто типа:
IPTABLES_MODULES="ip_conntrack_netbios_ns"


Добавляем через пробел еще один модуль:
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp"


Перезапускаем фаерволл:
/etc/init.d/iptables restart


Убеждаемся, что модуль загрузился:
cat /proc/modules | grep ftp
ip_conntrack_ftp 42192 0 - Live 0xffffffff8869b000 (U)
ip_conntrack 101396 6 ip_conntrack_ftp,ip_conntrack_netbios_ns,iptable_nat,xt_state,ip_nat, Live 0xffffffff8853f000 (U)


Теперь открываем конфиг контейнера:
vi /etc/vz/conf/1420.conf


Видим там следующую строку:
IPTABLES="ip_tables iptable_filter iptable_mangle ipt_limit ipt_REJECT ipt_length ip_conntrack iptable_nat ipt_REDIRECT "


добавляем туда через пробел ip_conntrack_ftp:
IPTABLES="ip_tables iptable_filter iptable_mangle ipt_limit ipt_REJECT ipt_length ip_conntrack iptable_nat ipt_REDIRECT ip_conntrack_ftp"



Перезапускаем контейнер (это обязательно, увы):

vzctl restart 1420

Ну вот и все, теперь модуль доступен в контейнере :) Кстати, как я понял - модуль не имеет настроек как таковых, он просто хачит поведение опции RELATED, чтобы она и ftp коннекты оными считала.

источник: http://forum.openvz.org/index.php?t=msg&goto=13133&

Friday 18 December 2009

Perl vs Python

Взял наобум кусок кода на Perl (из дистрибутива ISPManager, так что все копирайты их Программистов).

Вот вариант на Перле: http://paste.org.ru/?sa0zf2, вот на Python: http://paste.org.ru/?kg8anl

Как заставить strace показывать читаемые/записываемые в/ис дескрипторов тексты целиком?

Ключом -s:
strace -s 1024 -f -p 4939

Описание OpenVZ UBC на русском

numproc - Максимальное количество процессов и тредов (потоков).
numothersock - Максимальное количество TCP-сокетов.
vmguarpages - Гарантированный объем оперативной памяти,
которая может быть запрошена стандартными механизмами резервирования памяти в Linux.
kmemsize - Память ядра — объем оперативной памяти, выделяемый для внутренних структур данных
ядра, связанных с процессами виртуального сервера.
Каждый процесс запрашивает как минимум 24 Кб таких данных. Средний процесс использует 30—60 Кб ядерной памяти. Большие процессы, такие как Apache и MySQL, могут использовать гораздо больше.

tcpsndbuf - Суммарный размер буферов, которых может быть использован для отправки данных через TCP-соединения.
tcprcvbuf - Суммарный размер буферов, которых может быть использован для приема данных через TCP-соединения.
othersockbuf - Суммарный размер буферов, которые могут быть использованы как для приема,
так и для отправки данных через локальные сокеты, а также буферы,
используемые для отправки данных по протоколу UDP.

dgrampages - Суммарный размер буферов, которые могут быть использованы для приема данных через UDP-соединения.
privvmpages - Объем оперативной памяти, которая может быть запрошена процессами виртуального
сервера системным вызовом malloc и другими стандартными механизмами резервирования памяти в Linux.
oomguarpages - Гарантированный объем оперативной памяти, превышение которого вызовет сигнал outof-memory.

lockedpages - Объем памяти, которая может быть заблокирована с помощью системного вызова mlock. Этот объем включен в kmemsize.
shmpages - Общий объем разделяемой оперативной памяти (IPC). Этот параметр включен в privvmpages.
numfile - Максимальное количество открытых файлов.
numflock - Максимальное количество возможных блокировок файлов.
numpty - Максимальное количество псевдо-терминалов.
numsiginfo - Максимальное количество siginfo-структур. Размер структуры включен в kmemsize.
dcachesize - Объем памяти, необходимый для блокировки dentry- и inode-структур. Объем этой памяти включен в kmemsize.
numiptent - Максимальное количество записей в firewall (netfilter).

Примечание:
- все параметры вида «*pages» измеряется в 4 Кб страницах;
- все параметры вида «num*» измеряется в штуках;
- все остальные параметры («*size», «*buf») измеряется в байтах.


позаимствовано целиком с: http://wiki.helpdesk.by/index.php/%D0%9B%D0%B8%D0%BC%D0%B8%D1%82%D1%8B_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2

ISPManager + плагины: Внутренняя ошибка malformed result

При попытке открыть любой плагин выдается следующее:

Внутренняя ошибка malformed result


CentOS:

yum install -y perl-XML-LibXML perl-HTML-Parser perl-Compress-Zlib gcc make


Debian (список неактуален, не пробовал сам):

apt-get install libxml-libxml-perl make lynx


Также на обоих дистрибутивах надо поставить гору cpan модулей:

cpan
cpan> force install HTML::TreeBuilder


Но у меня он так и не поставился (дада, я перл-программист местами), так что ставим руками

# http://search.cpan.org/~petek/HTML-Tree-3.23/lib/HTML/TreeBuilder.pm
cd /tmp
wget http://search.cpan.org/CPAN/authors/id/P/PE/PETEK/HTML-Tree-3.23.tar.gz
tar -xf HTML-Tree-3.23.tar.gz
cd HTML-Tree-3.23
perl Makefile.PL
make
make install


Далее в частности для apachestatus надо настроить Apache Status для localhost (CentOS) или http://phpsuxx.blogspot.com/2010/01/server-status-apache-httpd-debian.html (Debian)


killall -9 -r ispmgr



Взято с: http://forum.ispsystem.com/ru/showthread.php?t=6204&page=2

Распаковать .deb пакет?

mkdir /tmp/apache_package/
dpkg --extract apache2_2.2.9-10+lenny6_all.deb /tmp/apache_package/


И теперь в папке /tmp/apache_package/ у нас содержимое пакета:

ls -la /tmp/apache_package/
total 20K
drwxr-xr-x 3 root root 4.0K 2009-11-14 23:25 .
drwxrwxrwt 5 root root 12K 2009-12-18 23:58 ..
drwxr-xr-x 3 root root 4.0K 2009-11-14 23:25 usr

Debian: как скачать .deb пакет без установки?

Вот так:

Удаляем кэш пакетов:
apt-get clean


Переставляем пакет:
apt-get --reinstall install apache2


Потом он (.deb файл) появится в папке:
ls /var/cache/apt/archives


А вот эта команда у меня не скачивала, если пакет уже установлен (хотя должна отлично сработать для новых пакетов):
apt-get --download-only install apache2

CentOS: Memory for crash kernel (0x0 to 0x0) notwithin permissible range

А что это такое? И что значит?

Сбрасываются ли настройки ethtool после рестарта сети?

Нет!


ethtool -k eth0
Offload parameters for eth0:
Cannot get device udp large send offload settings: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off
generic-receive-offload: off


root@CentOS-54-64-minimal ~ # /etc/init.d/network restart
Shutting down interface eth0: [ OK ]
Shutting down interface venet0: Shutting down interface venet0:
[ OK ]
Shutting down loopback interface: [ OK ]
Disabling IPv4 packet forwarding: net.ipv4.ip_forward = 0
[ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0:
Determining IP information for eth0... done.
RTNETLINK answers: File exists
[ OK ]
Bringing up interface venet0: Bringing up interface venet0:
Configuring interface venet0:
net.ipv4.conf.venet0.send_redirects = 0
[ OK ]


root@CentOS-54-64-minimal ~ # ethtool -k eth0
Offload parameters for eth0:
Cannot get device udp large send offload settings: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off
generic-receive-offload: off



А вот при перезагрузке они все же сбрасываются :)

Thursday 17 December 2009

Повышаем безопасность сервера - посылаем письмо при логине рутом

Подсмотрел у одного клиента очень крутую фишку по повышению безопасности серверов:

В файл:
vi /root/.bashrc


Добавляем строки:


echo 'ALERT - Root Shell Access (hzgde.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d"(" -f2 | cut -d")" -f1`" user@domain.ru


И получаем письма при каждом логине по ssh :)

-bash: mail: command not found

В CentOS это решается:
yum install -y mailx

OpenVZ: Error: undump failed: Invalid argument

vzmigrate --remove-area no --online new_node.ru 1201



OPT:--remove-area
OPT:--online
OPT:new-node.ru
Starting online migration of CT 1201 to new-node.ru
Preparing remote node
Initializing remote quota
Syncing private
Live migrating container...
Syncing 2nd level quota
Error: Failed to undump container
vzquota : (error) Quota is not running for id 1201


А в verbose режиме:

vzmigrate -v --remove-area no --online newnode.ru 1201
OPT:-v
OPT:--remove-area
OPT:--online
OPT:new.node.ru
Starting online migration of CT 1201 to new-node.ru
OpenVZ is running...
Loading /etc/vz/vz.conf and /etc/vz/conf/1201.conf files
Check IPs on destination node: new-node.ru
Preparing remote node
Copying config file
1201.conf 100% 1778 1.7KB/s 00:00
Saved parameters for CT 1201
Creating remote container root dir
Creating remote container private dir
Initializing remote quota
Quota init
Turning remote quota on
Syncing private
Live migrating container...
Suspending container
Setting up checkpoint...
suspend...
get context...
Checkpointing completed succesfully
Dumping container
Setting up checkpoint...
join context..
dump...
Checkpointing completed succesfully
Copying dumpfile
dump.1201 100% 32MB 10.7MB/s 00:03
Syncing private (2nd pass)
Syncing 2nd level quota
Dumping 2nd level quota
Copying 2nd level quota
quotadump.1201 100% 967 0.9KB/s 00:00
Load 2nd level quota
Undumping container
Restoring container ...
Starting container ...
Container is mounted
undump...
vzquota : (warning) Quota is running for id 1201 already
Error: undump failed: Invalid argument
Restoring failed:
Error: Unknown image version: 303. Can't restore.
Container start failed
Container is unmounted
Error: Failed to undump container
Resuming...
vzquota : (error) Quota is not running for id 1201



И, судя по Гуглу, решение одно: I found a fix, it works without the --online command.

Так что запускаю:

vzmigrate -v --remove-area no new-node.ru 1201



Хотя сейчас попробовал запустить на обоих машинах yum update чтобы сровнять версии ПО. Но это не помогло, наверное, надо ровнять версии ядер - но это попахивает бредом почему-то.

Переключение ssh на авторизацию по ключам

1. Создаем для своего аккаунта публичный (уйдет на удаленный сервер) и приватный (останется у нас) сертификаты:

ssh-keygen -t rsa


Стандартно он будет сохранен по пути: /home/<имя_вашего_юзера>/.ssh/id_rsa), при этом строго обязательно указываем passphrase (пароль, который будет спрашиваться при доступе к ключу).

Если же хотите сгенерировать ключи из скрипта, чтобы он не задавал лишних вопросов, используйте такой вызов:

ssh-keygen -t rsa -q -f /root/.ssh/id_rsa -P ""


2. Теперь надо свой ключ разложить по серверам:
ssh-copy-id -i ~/.ssh/id_rsa.pub my_login_on_target_system@target-hostname.ru


или более кратко в случае, если файл лежит по стандартному пути:

ssh-copy-id target-hostname.ru


3. При этом (т.е. при закладывании ключей на удаленную систему) будет запрошен ваш пароль на сервер, но сделано это будет в крайний раз, потом вход на сервер будет осуществляться исключительно по ключам

4. Все, можете входить на удаленную систему по ключам:
ssh target-hostname.ru uname -r

Online миграция контейнеров OpenVZ

Имеем две хост-машины: host_source и host_target, перенос контейнера будем осуществлять с первой на вторую.

Для начала на обоих машинах обновляем до последней актуальной версии пакет vzctl (vzmigrate входит в его состав):
yum upgrade vzctl -y

Кладем на удаленный (target) сервер свои ключи: http://phpsuxx.blogspot.com/2009/12/ssh_17.html

Вызываем команду vzlist на host_source чтобы определить, CTID контейнера, который будем переносить:
vzlist


В моем случае это контейнер 1201.

Сохраняем состояние host_source:

vzlist | grep 1201
1201 42 running ip.ad.dr.es domain.ru


И host_target:

vzlist | grep 1201
Container(s) not found


Так как ssh может отцепиться в процессе переноса, а это очень долгий процесс ставим и запускаем screen:
yum install screen -y
screen
# а если у Вас отцепится ssh, при повторном входе делаете screen -r


Обращаю внимание, что если идет речь о переносе веб-сервера, то на нем заведомо может быть огромное число файлов в папке /tmp (либо /var/www/username/data/mod-tmp), которые могут ОЧЕНЬ сильно замедлить процесс переноса, поэтому позаботьтесь об их удалении загодя, иначе это чревато тем, что миграция будет идти пару суток :)

Также есть опасность получить проблемы (например, такие), если на source сервере загружены спец модули iptables, которых может не оказаться на target машине.

Поэтому смотрим, какие IPTABLES модули подключены к VPS:
cat /etc/vz/conf/1201.conf | grep IPTABLES -i
IPTABLES="ip_tables iptable_filter iptable_mangle ipt_limit ipt_REJECT ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ipt_state iptable_nat ipt_REDIRECT "


Тут список модулей весьма велик и на время миграции (ну или навсегда, их стоит отключить во избежание проблем):
vi /etc/vz/conf/1201.conf


И приводим строку к виду:
IPTABLES=""


Перезапускаем контейнер:
vzctl stop 1201; vzctl start 1201


Запускаем перенос (если хотите, чтобы скрипт миграции не забивал экран текстом, то уберите --rsync="-v"):
vzmigrate -v --remove-area no --online --rsync="-v" host_target_ip 1201

Если нужно отказаться от копирования каких-либо файлов, после -v через пробел дописываем:
--exclude-from=/root/exclude.txt

В итоге получаем облом:

Starting online migration of CT 1201 to host_target_ip
Error: Can't connect to destination address using public key
Error: Please put your public key to destination node


Бороться с этим вот так: http://phpsuxx.blogspot.com/2009/12/ssh_17.html (те для source системы настраиваем авторизацию на target)

Повторяем предыдущую команду.


OPT:--online
OPT:88.198.37.23
Starting online migration of CT 1201 to 88.198.37.23
Preparing remote node
Initializing remote quota
Syncing private
Live migrating container...
Syncing 2nd level quota
Cleanup



И в итоге на host_source имеем:

vzlist | grep 1201


А на host_target:

vzlist | grep 1201
1201 42 running ip.ad.dr.es domain.ru


А с private data дела сложнее - данные 1201 VE были удалены с source ноды целиком (что очень не радует...), зато целиком (надеюсь) переехали на новую в папку: /vz/private/1201/

А вот пинги у меня обломались, т.к. датацентр не поддерживает live-миграцию айпи с одной машины на другую.

После окончания переноса не забываем удалить ssh ключи с target машины, ибо это крайне небезопасно:
rm -f /root/.ssh/authorized_keys

Далее не забываем отдать все ресурсы выделенного сервера контейнеру: http://phpsuxx.blogspot.com/2010/03/openvz-vps.html


Далее, если при переносе сменился IP необходимо скорректировать настройки контейнера:

sed -i 's/178.63.175.246/' /etc/vz/conf/1201.conf
vzctl stop 1201
vzctl start 1201


Далее производим изменения ip уже в контейнере (пример для Debian):
export OLD_IP=12.1.1.1
export NEW_IP=122.33.44.55
vzctl enter 1201
# Debian
sed -i "s/$OLD_IP/$NEW_IP/" /etc/nginx/nginx.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/apache2/apache2.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/apache2/conf.d/rpaf.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/apache2/mods-enabled/rpaf.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/hosts
/etc/init.d/nginx restart
/etc/init.d/apache2 restart

# CentOS
sed -i "s/$OLD_IP/$NEW_IP/" /etc/nginx/nginx.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/httpd/conf/httpd.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/hosts
/etc/init.d/httpd restart
/etc/init.d/nginx restart

А также на всякий случай поищем упоминания старого IP в других конфигах:
cd /etc
grep -HiR "$OLD_IP" *

Также, если используется VDSManager, то необходимо открыть его конфиг:

vi /usr/local/ispmgr/etc/vdsmgr.conf


И удалить оттуда блок, соответствующий перенесенному VPS:

vds "xx.xx.xx.xx" {
Name test.domain.ru
Owner admin
CPULimit 0
TrafLimit 99999999
TrafUsed 574
Backup none
}


После этого перезапускаем VDSManager:
killall -9 vdsmgr


И убеждаемся, что команда сбора статистики:
/usr/local/ispmgr/sbin/dostat.pl


Более не выдает ошибки: "ERROR 1 : VDS not found"

Основано на мануале: http://wiki.openvz.org/Checkpointing_and_live_migration