olemskoi.ru

Архив тега ‘howto’

Nagios Plugin: check_ftp_login (перепечатка)

Комментариев нет

В общем нужно было проверять Nagios’ом не только порт фтп на удаленном хосте, но и работоспособность определенного аккаунтa FTP. Т.е. чтобы check_ftp заходил на FTP сервер и логинился под определенным юзером.

Существующая утилитка check_ftp из набора Nagios Plugins на момент написания статьи не умела делать логин. Точнее утилитки как таковой там и нет, там просто стоит симлинк check_ftp -> check_tcp.

По сему утилитка была написана на Perl с использованием Nagios::Plugin и Net::FTP.

Может так же использоваться как пример написания Nagios Plugins на Perl в виду простоты кода.

Сырец: http://www.pentarh.com/files/check_ftp_login

Пользоваться так.

1. Скопировать в диру с плагинами Nagios

2. Поставить чмод 755

3. Убедиться что стоят перловые модули Net::FTP и Nagios::Plugin (т.е. запустить утилитку и если все ок, она выдаст USAGE)

4. Прописать команду в commands.cfg:

define command{
command_name    check_ftp_login
command_line    $USER1$/check_ftp -H ‘$ARG1$’ -u ‘$ARG2$’ -p ‘$ARG3$’
}
5. Юзать, например так

define service{
use remote-service
host_name ВАШХОСТ
service_description FTP LOGIN
check_command check_ftp_login!ftp.foobar.com!FTP_LOGIN!FTP_PASSWORD
normal_check_interval 10
}

Еще один способ отбиться от небольшого DDOS (перепечатка)

Комментариев нет

Все нижеописанное относится к GNU/Linux 2.6.x. ДДОС совершенно тупой, разномастный: syn/tcp/udp/icmp flood тупо на все открытые порты, мегабит на 60. UDP срали вообще куда попало. Но основная атака конечно на HTTP. По этому, тушим сервисы и пишем….

Немного sysctl…

vm.min_free_kbytes=70000
net.core.somaxconn=65536
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.ip_local_port_range = 2000 61000
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_timestamps = 0
net.core.rmem_max=16777216
net.core.wmem_max=32777216
net.ipv4.tcp_no_metrics_save=0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 187380 32777216
net.core.netdev_max_backlog=16384
net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.ip_conntrack_max=600000
net.ipv4.icmp_echo_ignore_all=1
net.ipv4.netfilter.ip_conntrack_max=500000
net.netfilter.nf_conntrack_max=500000
Не забываем перезапустить Network.

Немного iptables….

# Форвард нам нэ нада
iptables -P FORWARD DROP
# BAN – цепочка для помещения туда айпи хостов, ведущих себя не правильно ) Ну типа
# iptables – I BAN -s 123.123.123.123 -j DROP
iptables -N BAN
# TRUSTED – цепочка для помещения туда правильных хостов и хостов откуда мы сидим в шелле. Типа
# iptables -I TRUSTED -s 111.111.111.111 -j ACCEPT
iptables -N TRUSTED
# Стандартный заголовок, eth1 – наш интерфейс внешний
# если есть еще интерфейсы, надо их тоже запрячь правилами разрешения как у lo
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -m state –state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth1 -m state –state RELATED -j ACCEPT
# Проход по белым и черным цепочкам
iptables -A INPUT -i eth1 -j TRUSTED
iptables -A INPUT -i eth1 -j BAN
# У меня висит только сервис http, по этому здесь такая себе мини защита по данному порту
# Насчет –seconds 10 –hitcount 10, курим маны, экспериментируем, ставим то, что подойдет.
# Режем всех TCP на порту 80, которые за последние 10 секунд сделали 10 попыток открыть соединение
# (кому то может не подойти!)
iptables -A INPUT -p tcp -m tcp –dport 80 -m state –state NEW -m recent –update –seconds 10 –hitcount 10 –name httpd –rsource -j DROP
# А остальных разрешаем
iptables -A INPUT -i eth1 -p tcp -m tcp –dport 80 -j ACCEPT
# Вот по этой теме ддосеры тоже затрахали, по этому был категоричен
iptables -A OUTPUT -p udp -j DROP
iptables -A OUTPUT -p icmp -j DROP
# Здесь добавить разрешения на прочие порты, у меня прочих не было
# …
# Здесь добавить (!!!) свои айпи, с которых сидишь в шелле
iptables -A TRUSTED -s 111.111.111.111 -j ACCEPT
# Хорошо подумаем, покурим, затаим дыхание и напишем….
iptables -P INPUT DROP
# Что означает зарезать все, что не разрешили на INPUT’е
А теперь запускаем nginx/httpd и прочую лабуду. Надеюсь заработает. У меня заработало, как будто ничего и не происходило :)

vim: внешние фильтры (перепечатка)

Комментариев нет

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

Выполнение внешней команды на диапазоне:

:{диапазон} ! {команда}

При этом на STDIN команды подается содержимое диапазона, а затем диапазон заменяется выводом STDOUT команды.

Несколько примеров.

Форматирование всего исходного текста на perl с помощью perltidy:

:% ! perltidy -es=4 -t -st

Отфильтровать с помощью команды grep все строки, содержащие символ «#» из строк 14-24:

:14,24 ! grep -v "\#"

vim: сортировка (перепечатка)

Комментариев нет

Сортировать в vim очень просто:

:{диапазон}sort

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

:'<,'>

Или для сортировки всего файла:

:%sort

Сортировка в обратном порядке:

:%sort!

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

:%sort -u

Также для сортировки можно использовать внешние утилиты, например стандартный юниксовый sort:

:%!sort --numeric-sort --reverse

Ну и как обычно, читаем маны:

:help :sort

Восстановление сбойного загрузочного диска в Linux RAID 1 (перепечатка)

Комментариев нет

Наткнулся на хорошую статью по замене загрузочного диска в софтверном RAID Linux.

Если кратко, то на второй уцелевший диск надо засетапать grub )

vim: избавляемся от dos-овых концов строк (\r\n -> \n) (перепечатка)

Комментариев нет

  1. Если vim распознал dos-овые концы строк, и не показывает ^M,
    :set ff=unix
    :w

    Документацию по поводу опции fileformat почитать можно в разделе usr_23:

    :help usr_23
  2. Если vim автоматически не распознал DOS line ends, то в конце строк будут символы ^M. Удалить их можно простой заменой:
    :%s/^M//g
    Символ ^M при этом вводится как Ctrl-V Ctrl-M.

Удаленный мониторинг хардварного RAID DELL Perc 6/i (LSI) с помощью Nagios и SNMPd (перепечатка)

Комментариев нет

Здесь можно узнать, как мониторить удаленно хардварный RAID DELL Perc 6/i (чип LSI) с помощью утилиты MegaCLI, самописных скриптов, SNMPd и Nagios в Linux (CentOS).

О том, как подготовить Nagios и SNMPd, рассказано в статье о мониторинге софтварного RAID. Туда добавить мне нечего, можно скопипастить инфу оттуда.

А вот скрипт raid_status.pl несколько изменился. Для его корректной работы нужно скачать утилитку LSI MegaCLI for Linux. Так же я ставил симлинк /opt/MegaRAID/MegaCli/MegaCli64 -> /usr/sbin/MegaCLI:

# ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/sbin/MegaCli

Теперь надо подготовить два скрипта.

1. Скрипт AWK для приведения выдачи утилиты MegaCLI в удобочитаемый формат.

©одрал не помню откуда. Положить его в /root/scripts/analysis.awk:

# This is a little AWK program that interprets MegaCLI output

/Device Id/ { counter += 1; device[counter] = $3 }
/Firmware state/ { state_drive[counter] = $3 }
/Inquiry/ { name_drive[counter] = $3 » » $4 » » $5 » » $6 }
END {
for (i=1; i<=counter; i+=1) printf ( «Device %02d (%s) status is: %s <br/>\n», device[i], name_drive[i], state_drive[i]); }

2. Скрипт парсинга вывода предыдущего скрипта :)

Это уже писано лично ) Положить в /root/scripts/raid_status.pl

#!/usr/bin/perl

open $f,’/usr/sbin/MegaCli -PDList -aALL | /bin/awk -f /root/scripts/analysis.awk |’;
$numraid=0;
$ok=1;
%dev=();

while (<$f>) {
if (/^Device\s+(\d+)\s+\(([^)]+)\)\s+status is: (\w+)/) {
($d,$m,$s)=($1,$2,$3);
if ($s !~ /Online/i) {
$ok=0;
$dev{$d}=$s;
}
$numraid++;
}
}

close $f;

if ($numraid != 6) {
print «FAILURE: numraid !=6″;
exit;
}

if ($ok!=1) {
$s=»;
foreach (keys (%dev)) {
$s.=»$_ : «.$dev{$_}.’; ‘;
}
print «FAILURE: $s»;
exit;
}

print «OK»;

Убедиться что скрипт выдает ОК. Настроить nagios как указано в начале статьи.

Мониторинг Software RAID в Linux с помощью Nagios (перепечатка)

Комментариев нет

Небольшой ликбез по удаленному мониторингу софтварного рейда в Linux с помощью Nagios и SNMPd.

1. Мониторинговый скрипт

[ДАННЫЙ СКРИПТ НЕПРАВИЛЬНЫЙ, НО НЕТ ВРЕМЕНИ ПОФИКСИТЬ]

Для начала подготовим перловый скрипт на машине, которую требуется мониторить. Скрипт  будет проверять рейд и выдавать «OK» или «FAILED: описание» в зависимости от статуса RAID.

#!/usr/bin/perl
open $f,’/proc/mdstat’;
$numraid=0;
$raids=5;
$ok=1;

%dev=();

while (<$f>) {
if (/^(md[0-9])\s*:\s*([a-zA-Z]+)/) {
($d,$s)=($1,$2);
if ($s !~ /active/i) {
$ok=0;
$dev{$d}=$s;
}
$numraid++;
}
}

close $f;

if ($numraid != $raids) {
print «FAILURE: numraid !=$raids»;
exit;
}

if ($ok!=1) {
$s=»;
foreach (keys (%dev)) {
$s.=»$_ : «.$dev{$_}.’; ‘;
}
print «FAILURE: $s»;
exit;
}

print «OK»;

В данном скрипте следует установить переменную $raids в значение общего числа софтварных рейд-массивов в вашей системе. Узнать сколько у вас рейдов можно командой «cat /proc/mdstat».

Положите скрипт в /root/scripts/raid_status.pl

2. Настраиваем SNMPd

/etc/snmp/snmpd.conf:

syslocation  «Cool datacenter»
syscontact  cool@admin.su
sysservices 72

# Здесь нужно перечислить айпишники, с которых позволено обращаться к SNMPd
# secret_pass – пароль комунити

com2sec nagios 1.2.3.4/32 secret_pass
com2sec nagios 127.0.0.1 secret_pass

group pgroup v2c nagios
view all included  .1
access pgroup «»      any       noauth    exact  all all  none

# для мониторинга какого то процесса поставить «proc имя_процесса»
# proc httpd
# proc vsftpd
# для мониторинга партишена поставить disk /partition
# disk /
# disk /var
# Для мониторинга ЛА поставить load 15 10 10
# load 15 10 10
# Для мониторинга свапа поставить swap минимальное_своб_место_свапа_кб
# swap 1500000

# Собственно, наш скрипт мониторинга RAID
exec raid_status /root/scripts/raid_status.pl

master agentx
AgentXSocket tcp:localhost:705

/etc/sysconfig/snmpd.options:

OPTIONS=»-Lf /var/log/snmpd.log»

Далее, стартуем snmpd и добавляем его в стартап:

# /etc/init.d/snmpd start
# chkconfig –level 3 snmpd on

3. Конфигурация удаленного Nagios’a

Задаем команду проверки RAID в commands.cfg:

define command{
command_name check_snmp_raid
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 2c -o .1.3.6.1.4.1.2021.
8.1.101.$ARG1$ -C $ARG2$ -r «OK»
}

В конфигурации хоста ourhost.cfg:

# Определяем удаленный хост; 1.1.1.1 – айпи удаленного хоста
define host{
use             server
host_name       our_host
alias           Remote Host with software RAID
address         1.1.1.1
check_command   check-host-alive
}

#… здесь всякие другие проверки ЛА, свапа, свободного места, процессов и пр.

# Собсно мониторинг RAID, secret_pass – пароль комунити удаленного сервера

define service{
use             remote-service
host_name       our_host
service_description RAID status
check_command   check_snmp_raid!1!secret_pass
normal_check_interval       20
}

Установка X/KDE на удаленный CentOS сервер/VDS (перепечатка)

Комментариев нет

Написано по материалам HowTo VNC Server. В качестве операционной системы удаленного сервера возьмем CentOS.

Поскольку у нас отсутствует доступ к консоли сервера, установим KDE на http://www.softpedia.com/get/Internet/Remote-Utils/VNC-for-Windows.shtml.

На сервере понадобится 512М оперативы чтобы все это нормально работало.

Все нижеописанное работает на VDS/VPS на основе Virtuozzo/OpenVZ.

1. Устанавливаем иксы и KDE:

# yum -y groupinstall «X Window System»
# yum -y groupinstall «KDE (K Desktop Environment)»

2. Добавляем некоего юзера user1, под которым будут запускаться кеды:

# useradd user1
# passwd user1

3. Конфигурируем VNC Server (должен был поставиться с вышеописанными пакетами):

файл /etc/sysconfig/vncservers:
VNCSERVERS=»1:user1»
VNCSERVERARGS[1]=»-geometry 1024×768″

4. Устанавливаем пароль на VNC для нашего юзера:

# su user1
# vncpasswd

5.  Редактируем /home/user1/.vnc/xstartup:

Убираем камменты со следующих строк:

unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

Должно получиться примерно следующее:

unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80×24+10+10 -ls -title «$VNCDESKTOP Desktop» &
twm &

6. Стартуем VNC Server, добавляем в автозагрузку:

# /etc/init.d/vncserver start
# chkconfig –level 3 vncserver on

7. Качаем VNC Client, например отсюда

8.  Выбираем параметры коннекта, глубину цвета и т.п. Коннектимся на SERVER_IP:1, вводим пароль с шага 4

9. Опционально, yum install firefox ;)

10. Enjoy

Уменьшение потребления памяти MySQL (перепечатка)

Комментариев нет

В основном это касается Virtual Dedicated Server (VDS/VPS), т.к. дефолтная установка MySQL на CeontOS/Fedora/RHEL с дефолтным my.cnf делает malloc на сотню с лишним мегабайт.

Конечно на потребляемую память MySQL влияют такие параметры как key_buffer, query_cache_size и т.п. Но они по дефолту идут минимальные, а кеш запросов вообще по моему отключен по дефолту.

Так вот все очень просто. Добавляем в my.cnf:

skip-innodb
skip-bdb

Это выключит хандлеры InnoDB и BerkeleyDB и всю потребляемую ими память. Ну конечно делать это нужно если вы не используете вышеприведенные типы таблиц.

Далее рестартуем мускуль и видим в топе что он занимает десяток-другой мегабайт.

PS: в большинстве случаев не помешает опция и skip-networking. А вот thread_cache_size я советую поставить в значение 5-15 (в зависимости от нагрузки) :)