<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Записки сисадмина</title>
	<atom:link href="http://www.pentarh.com/wp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pentarh.com/wp</link>
	<description>Или помойное ведро идей</description>
	<lastBuildDate>Thu, 26 Aug 2010 14:06:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Monit из репозитория Epel &#8211; в сад</title>
		<link>http://www.pentarh.com/wp/2010/08/26/monit-epel-sucks/</link>
		<comments>http://www.pentarh.com/wp/2010/08/26/monit-epel-sucks/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 14:04:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FixIT]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[epel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[monit]]></category>
		<category><![CDATA[rpm]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=213</guid>
		<description><![CDATA[Monit 4-й версии в репозитарии EPEL (у меня был monit-4.10.1-8) оказался напрочь неработоспособен под CentOS/RHEL. Неработоспособен это значит несовместим с RC скриптами RedHat. Т.е. когда ему декларируешь start/stop команду из /etc/init.d/, в частности для стандартного апача (/etc/init.d/httpd stop/start), то наш монит в следствии урезания каких то ENV&#8217;ов не в состоянии ни запустить ни остановить службу. [...]]]></description>
			<content:encoded><![CDATA[<p>Monit 4-й версии в репозитарии EPEL (у меня был monit-4.10.1-8) оказался напрочь неработоспособен под CentOS/RHEL. Неработоспособен это значит несовместим с RC скриптами RedHat. Т.е. когда ему декларируешь start/stop команду из /etc/init.d/, в частности для стандартного апача (/etc/init.d/httpd stop/start), то наш монит в следствии урезания каких то ENV&#8217;ов не в состоянии ни запустить ни остановить службу.</p>
<p>Не знаю, зачем такое старье поместили в EPEL, но к счастью в исходниках более нового monit имелся spec-файл и можно руками собрать более новую RPM&#8230;.</p>
<p><span id="more-213"></span>Нам потребуется рэдхатовская утилита rpm-build (yum install rpm-build).</p>
<p>Качаем файло monit-5.x.x.tar.gz где то <a href="http://mmonit.com/monit/download/" target="_blank">из этих степей</a> Заливаем архив в /usr/src/redhat/SOURCES. Достаем из него файл monit.spec и ложим его в /usr/src/redhat/SPECS/.</p>
<p>Лично я поправлял исходники и spec файл, в частности, дабы главный конф назывался не monitrc, а monit.conf. Далее</p>
<p style="padding-left: 30px;">cd /usr/src/redhat/SPECS/<br />
rpmbuild -bb monit.spec</p>
<p>Вуаля. Теперь у нас есть в /usr/src/redhat/RPMS/{ARCH}/ свеженький RPM монита, лишенный несовместимостей с CentOS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2010/08/26/monit-epel-sucks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagios Plugin: check_ftp_login</title>
		<link>http://www.pentarh.com/wp/2010/08/20/nagios-plugin-check-ftp-login/</link>
		<comments>http://www.pentarh.com/wp/2010/08/20/nagios-plugin-check-ftp-login/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 14:31:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Очумелые ручки]]></category>
		<category><![CDATA[Утилиты]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[user]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=207</guid>
		<description><![CDATA[В общем нужно было проверять Nagios&#8217;ом не только порт фтп на удаленном хосте, но и работоспособность определенного аккаунтa FTP. Т.е. чтобы check_ftp заходил на FTP сервер и логинился под определенным юзером. Существующая утилитка check_ftp из набора Nagios Plugins на момент написания статьи не умела делать логин. Точнее утилитки как таковой там и нет, там просто [...]]]></description>
			<content:encoded><![CDATA[<p>В общем нужно было проверять Nagios&#8217;ом не только порт фтп на удаленном хосте, но и работоспособность определенного аккаунтa FTP. Т.е. чтобы check_ftp заходил на FTP сервер и логинился под определенным юзером.</p>
<p>Существующая утилитка check_ftp из набора Nagios Plugins на момент написания статьи не умела делать логин. Точнее утилитки как таковой там и нет, там просто стоит симлинк check_ftp -&gt; check_tcp.</p>
<p>По сему утилитка была написана на Perl с использованием <a href="http://search.cpan.org/~tonvoon/Nagios-Plugin-0.34/lib/Nagios/Plugin.pm" target="_blank">Nagios::Plugin</a> и <a href="http://search.cpan.org/~gbarr/libnet-1.22/Net/FTP.pm" target="_blank">Net::FTP</a>.</p>
<p>Может так же использоваться как <strong>пример написания Nagios Plugins на Perl </strong>в виду простоты кода.</p>
<p><span id="more-207"></span></p>
<p>Сырец: <a href="http://www.pentarh.com/files/check_ftp_login" target="_blank">http://www.pentarh.com/files/check_ftp_login</a></p>
<p>Пользоваться так.</p>
<p>1. Скопировать в диру с плагинами Nagios</p>
<p>2. Поставить чмод 755</p>
<p>3. Убедиться что стоят перловые модули Net::FTP и Nagios::Plugin (т.е. запустить утилитку и если все ок, она выдаст USAGE)</p>
<p>4. Прописать команду в commands.cfg:</p>
<p style="padding-left: 30px;">
<div id="_mcePaste" style="padding-left: 30px;">define command{</div>
<div id="_mcePaste" style="padding-left: 30px;">command_name    check_ftp_login</div>
<div id="_mcePaste" style="padding-left: 30px;">command_line    $USER1$/check_ftp -H &#8216;$ARG1$&#8217; -u &#8216;$ARG2$&#8217; -p &#8216;$ARG3$&#8217;<br />
}</div>
<div>5. Юзать, например так</div>
<p style="padding-left: 30px;">define service{<br />
use             remote-service<br />
host_name ВАШХОСТ<br />
service_description FTP LOGIN<br />
check_command   check_ftp_login!ftp.foobar.com!FTP_LOGIN!FTP_PASSWORD<br />
normal_check_interval       10<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2010/08/20/nagios-plugin-check-ftp-login/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Еще один способ отбиться от небольшого DDOS</title>
		<link>http://www.pentarh.com/wp/2010/08/11/%d0%95%d1%89%d0%b5-%d0%be%d0%b4%d0%b8%d0%bd-%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1-%d0%be%d1%82%d0%b1%d0%b8%d1%82%d1%8c%d1%81%d1%8f-%d0%be%d1%82-%d0%bd%d0%b5%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be%d0%b3/</link>
		<comments>http://www.pentarh.com/wp/2010/08/11/%d0%95%d1%89%d0%b5-%d0%be%d0%b4%d0%b8%d0%bd-%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1-%d0%be%d1%82%d0%b1%d0%b8%d1%82%d1%8c%d1%81%d1%8f-%d0%be%d1%82-%d0%bd%d0%b5%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be%d0%b3/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 17:20:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sysctl]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=190</guid>
		<description><![CDATA[Все нижеописанное относится к GNU/Linux 2.6.x. ДДОС совершенно тупой, разномастный: syn/tcp/udp/icmp flood тупо на все открытые порты, мегабит на 60. UDP срали вообще куда попало. Но основная атака конечно на HTTP. По этому, тушим сервисы и пишем&#8230;. Немного sysctl&#8230; 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 = [...]]]></description>
			<content:encoded><![CDATA[<p>Все нижеописанное относится к GNU/Linux 2.6.x. ДДОС совершенно тупой, разномастный: syn/tcp/udp/icmp flood тупо на все открытые порты, мегабит на 60. UDP срали вообще куда попало. Но основная атака конечно на HTTP. По этому, тушим сервисы и пишем&#8230;.</p>
<p><span id="more-190"></span></p>
<h3>Немного sysctl&#8230;</h3>
<p style="padding-left: 30px;">
<div id="_mcePaste" style="padding-left: 30px;">vm.min_free_kbytes=70000</div>
<div id="_mcePaste" style="padding-left: 30px;">net.core.somaxconn=65536</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_tw_reuse=1</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_tw_recycle=1</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.ip_local_port_range = 2000 61000</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_fin_timeout = 25</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_keepalive_time = 600</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_window_scaling = 0</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_timestamps = 0</div>
<div id="_mcePaste" style="padding-left: 30px;">net.core.rmem_max=16777216</div>
<div id="_mcePaste" style="padding-left: 30px;">net.core.wmem_max=32777216</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_no_metrics_save=0</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_rmem = 4096 87380 16777216</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_wmem = 4096 187380 32777216</div>
<div id="_mcePaste" style="padding-left: 30px;">net.core.netdev_max_backlog=16384</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.tcp_max_syn_backlog=4096</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.ip_conntrack_max=600000</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.icmp_echo_ignore_all=1</div>
<div id="_mcePaste" style="padding-left: 30px;">net.ipv4.netfilter.ip_conntrack_max=500000</div>
<div style="padding-left: 30px;">net.netfilter.nf_conntrack_max=500000</div>
<div></div>
<div>Не забываем перезапустить Network.</div>
<div></div>
<h3>Немного iptables&#8230;.</h3>
<div></div>
<div style="padding-left: 30px;"># Форвард нам нэ нада</div>
<div style="padding-left: 30px;">iptables -P FORWARD DROP</div>
<div style="padding-left: 30px;"># BAN &#8211; цепочка для помещения туда айпи хостов, ведущих себя не правильно ) Ну типа<br />
# iptables &#8211; I BAN -s 123.123.123.123 -j DROP</div>
<div style="padding-left: 30px;">iptables -N BAN</div>
<div style="padding-left: 30px;"># TRUSTED &#8211; цепочка для помещения туда правильных хостов и хостов откуда мы сидим в шелле. Типа<br />
# iptables -I TRUSTED -s 111.111.111.111 -j ACCEPT</div>
<div style="padding-left: 30px;">iptables -N TRUSTED</div>
<div style="padding-left: 30px;"># Стандартный заголовок, eth1 &#8211; наш интерфейс внешний</div>
<div style="padding-left: 30px;"># если есть еще интерфейсы, надо их тоже запрячь правилами разрешения как у lo</div>
<div style="padding-left: 30px;">iptables -A INPUT -i lo -j ACCEPT</div>
<div style="padding-left: 30px;">iptables -A INPUT -i eth1 -m state &#8211;state ESTABLISHED -j ACCEPT</div>
<div style="padding-left: 30px;">iptables -A INPUT -i eth1 -m state &#8211;state RELATED -j ACCEPT</div>
<div style="padding-left: 30px;"># Проход по белым и черным цепочкам</div>
<div style="padding-left: 30px;">iptables -A INPUT -i eth1 -j TRUSTED</div>
<div style="padding-left: 30px;">iptables -A INPUT -i eth1 -j BAN</div>
<div style="padding-left: 30px;"># У меня висит только сервис http, по этому здесь такая себе мини защита по данному порту</div>
<div style="padding-left: 30px;"># Насчет &#8211;seconds 10 &#8211;hitcount 10, курим маны, экспериментируем, ставим то, что подойдет.</div>
<div style="padding-left: 30px;"># Режем всех TCP на порту 80, которые за последние 10 секунд сделали 10 попыток открыть соединение</div>
<div style="padding-left: 30px;"># (кому то может не подойти!)</div>
<div style="padding-left: 30px;">iptables -A INPUT -p tcp -m tcp &#8211;dport 80 -m state &#8211;state NEW -m recent &#8211;update &#8211;seconds 10 &#8211;hitcount 10 &#8211;name httpd &#8211;rsource -j DROP</div>
<div style="padding-left: 30px;"># А остальных разрешаем</div>
<div style="padding-left: 30px;">iptables -A INPUT -i eth1 -p tcp -m tcp &#8211;dport 80 -j ACCEPT</div>
<div style="padding-left: 30px;"># Вот по этой теме ддосеры тоже затрахали, по этому был категоричен</div>
<div style="padding-left: 30px;">iptables -A OUTPUT -p udp -j DROP</div>
<div style="padding-left: 30px;">iptables -A OUTPUT -p icmp -j DROP</div>
<div style="padding-left: 30px;"># Здесь добавить разрешения на прочие порты, у меня прочих не было</div>
<div style="padding-left: 30px;"># &#8230;</div>
<div style="padding-left: 30px;"># Здесь добавить (!!!) свои айпи, с которых сидишь в шелле</div>
<div style="padding-left: 30px;">iptables -A TRUSTED -s 111.111.111.111 -j ACCEPT</div>
<div style="padding-left: 30px;"># Хорошо подумаем, покурим, затаим дыхание и напишем&#8230;.</div>
<div style="padding-left: 30px;">iptables -P INPUT DROP</div>
<div style="padding-left: 30px;"># Что означает зарезать все, что не разрешили на INPUT&#8217;е</div>
<div></div>
<div>А теперь запускаем nginx/httpd и прочую лабуду. Надеюсь заработает. У меня заработало, как будто ничего и не происходило <img src='http://www.pentarh.com/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2010/08/11/%d0%95%d1%89%d0%b5-%d0%be%d0%b4%d0%b8%d0%bd-%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1-%d0%be%d1%82%d0%b1%d0%b8%d1%82%d1%8c%d1%81%d1%8f-%d0%be%d1%82-%d0%bd%d0%b5%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be%d0%b3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Восстановление сбойного загрузочного диска в Linux RAID 1</title>
		<link>http://www.pentarh.com/wp/2009/11/13/failed-boot-disk-replace-linux-raid/</link>
		<comments>http://www.pentarh.com/wp/2009/11/13/failed-boot-disk-replace-linux-raid/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 13:07:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FixIT]]></category>
		<category><![CDATA[HOWTO]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=186</guid>
		<description><![CDATA[Наткнулся на хорошую статью по замене загрузочного диска в софтверном RAID Linux. Если кратко, то на второй уцелевший диск надо засетапать grub )]]></description>
			<content:encoded><![CDATA[<p>Наткнулся на <a href="http://www.anchor.com.au/hosting/support/Linux_Software_RAID_Repair" target="_blank">хорошую статью</a> по замене загрузочного диска в софтверном RAID Linux.</p>
<p>Если кратко, то на второй уцелевший диск надо засетапать grub )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2009/11/13/failed-boot-disk-replace-linux-raid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skype &#8211; скрытая угроза</title>
		<link>http://www.pentarh.com/wp/2009/07/28/skype/</link>
		<comments>http://www.pentarh.com/wp/2009/07/28/skype/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 09:09:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[skype]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=181</guid>
		<description><![CDATA[Встретил очень интересный боян с попыткой препарировать Skype-клиент и разъяснения что там к чему. http://www.insidepro.com/kk/176/176r.shtml]]></description>
			<content:encoded><![CDATA[<p>Встретил очень интересный боян с попыткой препарировать Skype-клиент и разъяснения что там к чему.</p>
<p>http://www.insidepro.com/kk/176/176r.shtml</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2009/07/28/skype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Удаленный мониторинг хардварного RAID DELL Perc 6/i (LSI) с помощью Nagios и SNMPd</title>
		<link>http://www.pentarh.com/wp/2009/07/22/hardware-raid-dell-perc-6-lsi-nagios-monitoring/</link>
		<comments>http://www.pentarh.com/wp/2009/07/22/hardware-raid-dell-perc-6-lsi-nagios-monitoring/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 12:10:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[lsi]]></category>
		<category><![CDATA[megacli]]></category>
		<category><![CDATA[megasas]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[snmpd]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=173</guid>
		<description><![CDATA[Здесь можно узнать, как мониторить удаленно хардварный RAID DELL Perc 6/i (чип LSI) с помощью утилиты MegaCLI, самописных скриптов, SNMPd и Nagios в Linux (CentOS). О том, как подготовить Nagios и SNMPd, рассказано в статье о мониторинге софтварного RAID. Туда добавить мне нечего, можно скопипастить инфу оттуда. А вот скрипт raid_status.pl несколько изменился. Для его [...]]]></description>
			<content:encoded><![CDATA[<p>Здесь можно узнать, как мониторить удаленно хардварный RAID <strong>DELL Perc 6/i</strong> (чип <strong>LSI</strong>) с помощью утилиты <strong>MegaCLI</strong>, самописных скриптов, <strong>SNMPd</strong> и <strong>Nagios</strong> в Linux (CentOS).</p>
<p>О том, как подготовить Nagios и SNMPd, рассказано в статье о <a href="http://www.pentarh.com/wp/2009/07/22/software-raid-linux-monitoring-nagios/" target="_blank">мониторинге софтварного RAID</a>. Туда добавить мне нечего, можно скопипастить инфу оттуда.</p>
<p>А вот скрипт <strong>raid_status.pl</strong> несколько изменился. Для его корректной работы нужно скачать утилитку <a href="http://www.lsi.com/storage_home/products_home/internal_raid/megaraid_sas/megaraid_sas_8480e/index.html?remote=1&amp;locale" target="_blank">LSI MegaCLI for Linux</a>. Так же я ставил симлинк /opt/MegaRAID/MegaCli/MegaCli64 -&gt; /usr/sbin/MegaCLI:</p>
<p style="padding-left: 30px;"># ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/sbin/MegaCli</p>
<p>Теперь надо подготовить два скрипта.</p>
<p><span id="more-173"></span></p>
<h2>1. Скрипт AWK для приведения выдачи утилиты MegaCLI в удобочитаемый формат.</h2>
<p>(С)одрал не помню откуда. Положить его в <strong>/root/scripts/analysis.awk</strong>:</p>
<p style="padding-left: 30px;"># This is a little AWK program that interprets MegaCLI output</p>
<p style="padding-left: 30px;">/Device Id/ { counter += 1; device[counter] = $3 }<br />
/Firmware state/ { state_drive[counter] = $3 }<br />
/Inquiry/ { name_drive[counter] = $3 &raquo; &raquo; $4 &raquo; &raquo; $5 &raquo; &raquo; $6 }<br />
END {<br />
for (i=1; i&lt;=counter; i+=1) printf ( &laquo;Device %02d (%s) status is: %s &lt;br/&gt;\n&raquo;, device[i], name_drive[i], state_drive[i]); }</p>
<h2>2. Скрипт парсинга вывода предыдущего скрипта <img src='http://www.pentarh.com/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </h2>
<p>Это уже писано лично ) Положить в <strong>/root/scripts/raid_status.pl</strong></p>
<p style="padding-left: 30px;">#!/usr/bin/perl</p>
<p style="padding-left: 30px;">open $f,&#8217;/usr/sbin/MegaCli -PDList -aALL | /bin/awk -f /root/scripts/analysis.awk |&#8217;;<br />
$numraid=0;<br />
$ok=1;<br />
%dev=();</p>
<p style="padding-left: 30px;">while (&lt;$f&gt;) {<br />
if (/^Device\s+(\d+)\s+\(([^)]+)\)\s+status is: (\w+)/) {<br />
($d,$m,$s)=($1,$2,$3);<br />
if ($s !~ /Online/i) {<br />
$ok=0;<br />
$dev{$d}=$s;<br />
}<br />
$numraid++;<br />
}<br />
}</p>
<p style="padding-left: 30px;">close $f;</p>
<p style="padding-left: 30px;">if ($numraid != 6) {<br />
print &laquo;FAILURE: numraid !=6&#8243;;<br />
exit;<br />
}</p>
<p style="padding-left: 30px;">if ($ok!=1) {<br />
$s=&raquo;;<br />
foreach (keys(%dev)) {<br />
$s.=&raquo;$_ : &laquo;.$dev{$_}.&#8217;; &#8216;;<br />
}<br />
print &laquo;FAILURE: $s&raquo;;<br />
exit;<br />
}</p>
<p style="padding-left: 30px;">print &laquo;OK&raquo;;</p>
<p>Убедиться что скрипт выдает ОК. Настроить nagios как указано в начале статьи.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2009/07/22/hardware-raid-dell-perc-6-lsi-nagios-monitoring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Мониторинг Software RAID в Linux с помощью Nagios</title>
		<link>http://www.pentarh.com/wp/2009/07/22/software-raid-linux-monitoring-nagios/</link>
		<comments>http://www.pentarh.com/wp/2009/07/22/software-raid-linux-monitoring-nagios/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 11:56:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[snmpd]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=167</guid>
		<description><![CDATA[Небольшой ликбез по удаленному мониторингу софтварного рейда в Linux с помощью Nagios и SNMPd. 1. Мониторинговый скрипт [ДАННЫЙ СКРИПТ НЕПРАВИЛЬНЫЙ, НО НЕТ ВРЕМЕНИ ПОФИКСИТЬ] Для начала подготовим перловый скрипт на машине, которую требуется мониторить. Скрипт  будет проверять рейд и выдавать &#171;OK&#187; или &#171;FAILED: описание&#187; в зависимости от статуса RAID. #!/usr/bin/perl open $f,&#8217;/proc/mdstat&#8217;; $numraid=0; $raids=5; $ok=1; [...]]]></description>
			<content:encoded><![CDATA[<p>Небольшой ликбез по удаленному мониторингу софтварного рейда в Linux с помощью <strong>Nagios</strong> и <strong>SNMPd</strong>.</p>
<h2>1. Мониторинговый скрипт</h2>
<p><em><strong>[ДАННЫЙ СКРИПТ НЕПРАВИЛЬНЫЙ, НО НЕТ ВРЕМЕНИ ПОФИКСИТЬ]</strong></em></p>
<p>Для начала подготовим перловый скрипт на машине, которую требуется мониторить. Скрипт  будет проверять рейд и выдавать &laquo;OK&raquo; или &laquo;FAILED: описание&raquo; в зависимости от статуса RAID.</p>
<p><span id="more-167"></span></p>
<p style="padding-left: 30px;">#!/usr/bin/perl<br />
open $f,&#8217;/proc/mdstat&#8217;;<br />
$numraid=0;<br />
$raids=5;<br />
$ok=1;</p>
<p style="padding-left: 30px;">%dev=();</p>
<p style="padding-left: 30px;">while (&lt;$f&gt;) {<br />
if (/^(md[0-9])\s*:\s*([a-zA-Z]+)/) {<br />
($d,$s)=($1,$2);<br />
if ($s !~ /active/i) {<br />
$ok=0;<br />
$dev{$d}=$s;<br />
}<br />
$numraid++;<br />
}<br />
}</p>
<p style="padding-left: 30px;">close $f;</p>
<p style="padding-left: 30px;">if ($numraid != $raids) {<br />
print &laquo;FAILURE: numraid !=$raids&raquo;;<br />
exit;<br />
}</p>
<p style="padding-left: 30px;">if ($ok!=1) {<br />
$s=&raquo;;<br />
foreach (keys(%dev)) {<br />
$s.=&raquo;$_ : &laquo;.$dev{$_}.&#8217;; &#8216;;<br />
}<br />
print &laquo;FAILURE: $s&raquo;;<br />
exit;<br />
}</p>
<p style="padding-left: 30px;">print &laquo;OK&raquo;;</p>
<p>В данном скрипте следует установить переменную $raids в значение общего числа софтварных рейд-массивов в вашей системе. Узнать сколько у вас рейдов можно командой &laquo;cat /proc/mdstat&raquo;.</p>
<p>Положите скрипт в /root/scripts/raid_status.pl</p>
<h2>2. Настраиваем SNMPd</h2>
<p><strong>/etc/snmp/snmpd.conf</strong>:</p>
<p style="padding-left: 30px;">syslocation  &laquo;Cool datacenter&raquo;<br />
syscontact  cool@admin.su<br />
sysservices 72</p>
<p style="padding-left: 30px;"># Здесь нужно перечислить айпишники, с которых позволено обращаться к SNMPd<br />
# secret_pass &#8211; пароль комунити</p>
<p style="padding-left: 30px;">com2sec nagios 1.2.3.4/32 secret_pass<br />
com2sec nagios 127.0.0.1 secret_pass</p>
<p style="padding-left: 30px;">group pgroup v2c nagios<br />
view all included  .1<br />
access pgroup &laquo;&raquo;      any       noauth    exact  all all  none</p>
<p style="padding-left: 30px;"># для мониторинга какого то процесса поставить &laquo;proc имя_процесса&raquo;<br />
# proc httpd<br />
# proc vsftpd<br />
# для мониторинга партишена поставить disk /partition<br />
# disk /<br />
# disk /var<br />
# Для мониторинга ЛА поставить load 15 10 10<br />
# load 15 10 10<br />
# Для мониторинга свапа поставить swap минимальное_своб_место_свапа_кб<br />
# swap 1500000</p>
<p style="padding-left: 30px;"># Собственно, наш скрипт мониторинга RAID<br />
exec raid_status /root/scripts/raid_status.pl</p>
<p style="padding-left: 30px;">master agentx<br />
AgentXSocket tcp:localhost:705</p>
<p><strong>/etc/sysconfig/snmpd.options</strong>:</p>
<p style="padding-left: 30px;">OPTIONS=&raquo;-Lf /var/log/snmpd.log&raquo;</p>
<p>Далее, стартуем snmpd и добавляем его в стартап:</p>
<p style="padding-left: 30px;"># /etc/init.d/snmpd start<br />
# chkconfig &#8211;level 3 snmpd on</p>
<h2>3. Конфигурация удаленного Nagios&#8217;a</h2>
<p>Задаем команду проверки RAID в commands.cfg:</p>
<p style="padding-left: 30px;">define command{<br />
command_name check_snmp_raid<br />
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 2c -o .1.3.6.1.4.1.2021.<br />
8.1.101.$ARG1$ -C $ARG2$ -r &laquo;OK&raquo;<br />
}</p>
<p>В конфигурации хоста ourhost.cfg:</p>
<p style="padding-left: 30px;"># Определяем удаленный хост; 1.1.1.1 &#8211; айпи удаленного хоста<br />
define host{<br />
use             server<br />
host_name       our_host<br />
alias           Remote Host with software RAID<br />
address         1.1.1.1<br />
check_command   check-host-alive<br />
}</p>
<p style="padding-left: 30px;">#&#8230; здесь всякие другие проверки ЛА, свапа, свободного места, процессов и пр.</p>
<p style="padding-left: 30px;"># Собсно мониторинг RAID, secret_pass &#8211; пароль комунити удаленного сервера</p>
<p style="padding-left: 30px;">define service{<br />
use             remote-service<br />
host_name       our_host<br />
service_description RAID status<br />
check_command   check_snmp_raid!1!secret_pass<br />
normal_check_interval       20<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2009/07/22/software-raid-linux-monitoring-nagios/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Патч pure-ftpd для корректной обработки докачки</title>
		<link>http://www.pentarh.com/wp/2009/06/02/pure-ftpd-resume-patch/</link>
		<comments>http://www.pentarh.com/wp/2009/06/02/pure-ftpd-resume-patch/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 16:14:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FixIT]]></category>
		<category><![CDATA[Виртуализация]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[pure-ftpd]]></category>
		<category><![CDATA[докачка]]></category>
		<category><![CDATA[обрыв связи]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=161</guid>
		<description><![CDATA[Наверно многим известна проблема, когда с pure-ftpd при обрыве соединения невозможно сделать докачку файла. По этому поводу было много разговоров в mailing list, но чето дела не нашел. На суд общественности предлагаю патч:  http://www.pentarh.com/files/patch-correct-resume.txt Патч добавляет опцию -7 к демону pure-ftpd, благодаря которой демон пишет контент передаваемого файла ПРЯМО в файл назначения, а не во [...]]]></description>
			<content:encoded><![CDATA[<p>Наверно многим известна проблема, когда с pure-ftpd при обрыве соединения невозможно сделать докачку файла.</p>
<p>По этому поводу было много разговоров в mailing list, но чето дела не нашел.</p>
<p>На суд общественности предлагаю патч:  <a href="http://www.pentarh.com/files/patch-correct-resume.txt" target="_blank">http://www.pentarh.com/files/patch-correct-resume.txt</a></p>
<p><span>Патч добавляет опцию -7 к демону pure-ftpd, благодаря которой демон пишет контент передаваемого файла ПРЯМО в файл назначения, а не во временный файл типа &laquo;.pureftpd-upload.XXX.YYY.ZZZ&raquo;. Так же он сохраняет обработку команды APPE.</span></p>
<p><span>Соответственно, в конфиге добавилась аналогичная опция:</span></p>
<p style="padding-left: 30px;"><span><strong>NoAtomicFile yes</strong><br />
</span></p>
<p>Благодаря этому становится возможным докачка файла после обрыва связи.</p>
<p>Интрукции при сборке из исходников:</p>
<p>1. Положить патч в корневой каталог исходников pure-ftpd 1.0.22<br />
2. patch -p0 &lt; patch-correct-resume.txt<br />
3. ./configure и все такое</p>
<p>Инструкции FreeBSD:</p>
<p>1. Положить файл в /usr/ports/ftp/pure-ftpd/files/<br />
2. make config, make install</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2009/06/02/pure-ftpd-resume-patch/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Отбил небольшой DDOS ;)</title>
		<link>http://www.pentarh.com/wp/2009/05/02/%d0%9e%d1%82%d0%b1%d0%b8%d0%bb-%d0%bd%d0%b5%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be%d0%b9-ddos/</link>
		<comments>http://www.pentarh.com/wp/2009/05/02/%d0%9e%d1%82%d0%b1%d0%b8%d0%bb-%d0%bd%d0%b5%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be%d0%b9-ddos/#comments</comments>
		<pubDate>Fri, 01 May 2009 21:28:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Происшествия]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[атака]]></category>
		<category><![CDATA[защита от ddos]]></category>
		<category><![CDATA[хакеры]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=155</guid>
		<description><![CDATA[DDOS на HTTP 20 Мбит входящего. Отбито софтварным костылем Конфигурация машины: Quad Core Xeon / 4G RAM, CentOS 5.3 x86_64 Сервисы: apache(back) + nginx(front) Sysctl: kernel.shmall = 4294967296 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=8388608 net.core.wmem_max=16777216 net.ipv4.tcp_no_metrics_save=0 net.ipv4.tcp_rmem = 4096 87380 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>DDOS </strong>на <strong>HTTP </strong>20 Мбит входящего. Отбито софтварным костылем <img src='http://www.pentarh.com/wp/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
<p>Конфигурация машины: Quad Core Xeon / 4G RAM, CentOS 5.3 x86_64</p>
<p>Сервисы: apache(back) + nginx(front)</p>
<p><span id="more-155"></span><strong>Sysctl</strong>:</p>
<p style="padding-left: 30px;">kernel.shmall = 4294967296<br />
vm.min_free_kbytes=70000<br />
net.core.somaxconn=65536<br />
net.ipv4.tcp_tw_reuse=1<br />
net.ipv4.tcp_tw_recycle=1<br />
net.ipv4.ip_local_port_range = 2000 61000<br />
net.ipv4.tcp_fin_timeout = 25<br />
net.ipv4.tcp_keepalive_time = 600<br />
net.ipv4.tcp_window_scaling = 0<br />
net.ipv4.tcp_timestamps = 0<br />
net.core.rmem_max=8388608<br />
net.core.wmem_max=16777216<br />
net.ipv4.tcp_no_metrics_save=0<br />
net.ipv4.tcp_rmem = 4096 87380 16777216<br />
net.ipv4.tcp_wmem = 4096 87380 16777216<br />
net.core.netdev_max_backlog=65536<br />
net.ipv4.tcp_max_syn_backlog=4096<br />
net.ipv4.ip_conntrack_max=300000</p>
<p><strong>nginx</strong>:</p>
<p style="padding-left: 30px;">worker_rlimit_nofile 80000;<br />
events {<br />
worker_connections  65536;<br />
use epoll;<br />
}</p>
<p style="padding-left: 30px;">http {<br />
gzip off; # <img src='http://www.pentarh.com/wp/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
keepalive_timeout  0;<br />
server_tokens off;<br />
reset_timedout_connection on;</p>
<p>server {<br />
listen x.x.x.x default deferred;<br />
log_format IP $remote_addr;<br />
location / {<br />
proxy_pass http://127.0.0.1/;<br />
&#8230;.<br />
<strong> access_log /var/log/nginx/ipban IP;</strong></p>
<p><strong>apache</strong>: ServerLimit и MaxClients установить так, чтобы не засрало более чем 80% памяти. (В top&#8217;е можно глянуть сколько памяти потребляет каждый процесс).</p>
<p>Собсно скрипт. Запускается по крону раз в минуту и банит нах айпи, которые за эту минуту обратились к скриптовой части более 20 раз.</p>
<p style="padding-left: 30px;">#!/usr/bin/perl</p>
<p>system(&#8216;mv /var/log/nginx/ipban /var/log/nginx/ipban.proc&#8217;);<br />
system(&#8216;touch /var/log/nginx/ipban&#8217;);<br />
system(&laquo;/etc/init.d/nginx reload&raquo;);</p>
<p>open $f,&#8217;/var/log/nginx/ipban.proc&#8217;;</p>
<p>%h=();</p>
<p>while(&lt;$f&gt;) {<br />
chomp;<br />
if (/\d+\.\d+\.\d+\.\d+/) {<br />
unless ($h{$_}) {<br />
$h{$_}=1;<br />
} else {<br />
$h{$_}++;<br />
}<br />
}<br />
}</p>
<p>close $f;</p>
<p>foreach $k (keys(%h)) {<br />
if ($h{$k} &gt; 20) {<br />
system(&laquo;iptables -I INPUT -s $k -j DROP&raquo;);<br />
print &laquo;$k banned\n&raquo;;<br />
}<br />
}</p>
<p>20 -число вычисленное в ходе проб и ошибок применительно к этому серверу и location&#8217;у nginx. После того как скрипт беспощадно побанил 2к хостов, сервер начал подавать внешние признаки жизни, после 3к забаненых зомби начала грузицца морда.</p>
<p>В процессе работы мой рабочий комп был дважды забанен в ходе экспериментов ))</p>
<p>Более серъезный DDOS конечно будет трудно отбивать тупой банилкой.</p>
<p><strong>АПДЕЙТ</strong>. Время шло, таблица бана росла, ддосеры не унимались.</p>
<p>Поставил вот эту хрень <a href="http://www.configserver.com/cp/csf.html">http://www.configserver.com/cp/csf.html</a></p>
<p>Софтина умеет вообще много чего. Но практически все что она умеет бесполезно. Кроме temporary ban ip address.</p>
<p>В конфигах отключил практически все, ибо оно (все) мешало. Мне надо было от этой проги только то, чтобы она банила айпи с TTL. Т.е. на время. И крон стал пускать раз в 5 минут.</p>
<p>Соответственно, в кроновом скрипте поменял</p>
<p style="padding-left: 30px;">if ($h{$k} &gt; 20) {<br />
system(&laquo;iptables -I INPUT -s $k -j DROP&raquo;);</p>
<p>На</p>
<p style="padding-left: 30px;">if ($h{$k} &gt; 60) {<br />
system(&laquo;/usr/sbin/csf &#8211;tempdeny $k 28800&#8243;);</p>
<p>Так же цель атаки &#8211; страницу, сделал статичной.  ДДОС просел, сайт ожил.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2009/05/02/%d0%9e%d1%82%d0%b1%d0%b8%d0%bb-%d0%bd%d0%b5%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be%d0%b9-ddos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>База сообщений ICQ Lite</title>
		<link>http://www.pentarh.com/wp/2009/04/21/icq-lite-base/</link>
		<comments>http://www.pentarh.com/wp/2009/04/21/icq-lite-base/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 14:22:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Очумелые ручки]]></category>
		<category><![CDATA[icq]]></category>
		<category><![CDATA[icq lite]]></category>
		<category><![CDATA[sqlite]]></category>
		<category><![CDATA[хак]]></category>

		<guid isPermaLink="false">http://www.pentarh.com/wp/?p=152</guid>
		<description><![CDATA[Потребовалось мне вытянуть сообщения из базы ICQ Lite. К моему удивлению это оказалось довольно просто, ибо база имеет формат SQLite3. База лежит в C:\Documents and Settings\Username\Application Data\ICQ\UIN\Messages.qdb Где Username &#8211; имя пользователя винды, UIN &#8211; числовой ICQ идентификатор. Качаем бинарник sqlite3.exe и копируем его в C:\Windows Пуск -&#62; Выполнить: cmd.exe Делаем CD в директорию базы, [...]]]></description>
			<content:encoded><![CDATA[<p>Потребовалось мне вытянуть сообщения из базы ICQ Lite. К моему удивлению это оказалось довольно просто, ибо база имеет формат SQLite3.</p>
<p>База лежит в C:\Documents and Settings\Username\Application Data\ICQ\UIN\Messages.qdb</p>
<p>Где Username &#8211; имя пользователя винды, UIN &#8211; числовой ICQ идентификатор.</p>
<p><span id="more-152"></span></p>
<p><a href="http://www.sqlite.org/download.html" target="_blank">Качаем бинарник sqlite3.exe</a> и копируем его в C:\Windows</p>
<p>Пуск -&gt; Выполнить: cmd.exe</p>
<p>Делаем CD в директорию базы, выполняем &laquo;sqlite3 Messages.qdb&raquo;.  Смотрим &laquo;.schema&raquo;. Все месаги содержатся в таблице Messages. Поле &laquo;fromUser&raquo; пустое если сообщение от вас и содержит идентификатор корреспондента, если сообщение шло к вам, то это поле содержит кто писал сообщение. Поле participantsHash это Foreighn Key на таблицу Participants, откуда джойном можно вытянуть к кому было направлено сообщение.</p>
<p>Поскольку сообщение может быть отправлено к нескольким людям, тут связь бесконечность-к-одному.</p>
<p>По этому следующий запрос вытянет все сообщения из БД</p>
<p style="padding-left: 30px;">sqlite&gt; select p.userId,m.* from Messages m inner join Participants p on m.participantsHash=p.participantsHash;</p>
<p>Можно вытянуть конкретную свою переписку с идентификатором 11111:</p>
<p style="padding-left: 30px;">sqlite&gt; select p.userId,m.* from Messages m inner join Participants p on m.participantsHash=p.participantsHash WHERE m.fromUser=111111 OR p.UserId=111111;</p>
<p>Однако база вообще в UTF-8 формате, по этому в командной строке вы увидите кучу говна. Советую экспортировать это в файл, а потом уже его читать редактором, понимающим UTF:</p>
<p style="padding-left: 30px;">C:\blah&gt; sqlite3 -html Messages.qdb &laquo;select p.userId,m.* from Messages m inner join Participants p on m.pa<br />
rticipantsHash=p.participantsHash WHERE m.fromUser=111111 OR p.UserId=111111&#8243; &gt; perepiska.html</p>
<p>Отредактируем perepiska.html, вставим в начало:</p>
<p style="padding-left: 30px;">&lt;html&gt;&lt;head&gt;&lt;META http-equiv=&raquo;Content-Type&raquo; content=&raquo;text/html; charset=utf-8&#8243;&gt;&lt;/head&gt;<br />
&lt;body&gt;&lt;table&gt;</p>
<p>И в конец:</p>
<p style="padding-left: 30px;">&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</p>
<p>Все. Читайте вашу переписку в деталях, охуевайте и сносите побыстрее ICQ Lite.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pentarh.com/wp/2009/04/21/icq-lite-base/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
