<?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://sysadmin.softgen.ge/feed/" rel="self" type="application/rss+xml" />
	<link>http://sysadmin.softgen.ge</link>
	<description>Übermensch</description>
	<lastBuildDate>Thu, 01 Dec 2011 15:27:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3-aortic-dissection</generator>
		<item>
		<title>SQUID &#8211; multiple origin servers</title>
		<link>http://sysadmin.softgen.ge/2011/12/squid-multiple-origin-servers/</link>
		<comments>http://sysadmin.softgen.ge/2011/12/squid-multiple-origin-servers/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 15:24:59 +0000</pubDate>
		<dc:creator>frrrredo</dc:creator>
				<category><![CDATA[revers-proxy]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[SQUID]]></category>

		<guid isPermaLink="false">http://sysadmin.softgen.ge/?p=630</guid>
		<description><![CDATA[ვებ-აქსელერატორის როლში სქვიდი გვაძლევს საშუალებას დავჰოსტოდ სხავდასხვა დომენები ერთ რევერს პროქსიზე და სერვერზე შემოსულ მოთხოვნებს სქვიდი გადაამისამართებს საწყის(origin) სერვერზე, ამის გარდა შესაძლებელია გვქონდეს რამოდენიმე საწყისი(origin) სერვერები და მოთხოვნები დომენებზე გადავამისამართოთ განსაზღვრულ საწყის სერვერებეზე მაგ. როდესაც გვინდა მოთხოვნა saite.ge, app.site.ge და kuku.ge-ზე მისდიოდეს 192.168.1.10- სერვერს და მოთხოვნა: secondiste.ge, dev.secondsite.ge და other.ge -ზე&#160; მისდიოდეს &#8211; 192.168.1.11 სერვერს. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2011/11/squid_light.jpg"><img class="alignleft size-medium wp-image-632" style="margin: 5px 10px; border: 0pt none;" title="squid" src="http://sysadmin.softgen.ge/wp-content/uploads/2011/11/squid_light-300x225.jpg" alt="" width="300" height="225" /></a><br />
ვებ-აქსელერატორის როლში სქვიდი გვაძლევს საშუალებას დავჰოსტოდ სხავდასხვა დომენები ერთ რევერს პროქსიზე და სერვერზე შემოსულ მოთხოვნებს სქვიდი გადაამისამართებს საწყის(origin) სერვერზე, ამის გარდა შესაძლებელია გვქონდეს რამოდენიმე საწყისი(origin) სერვერები და მოთხოვნები დომენებზე გადავამისამართოთ განსაზღვრულ საწყის სერვერებეზე მაგ. როდესაც გვინდა მოთხოვნა saite.ge, app.site.ge და kuku.ge-ზე მისდიოდეს 192.168.1.10- სერვერს და მოთხოვნა: secondiste.ge, dev.secondsite.ge და other.ge -ზე&nbsp; მისდიოდეს &#8211; 192.168.1.11 სერვერს. ან სიტუაცია, როდესაც 1 საწისი სერვერი ემსახურება ASP.net ფარმს და მეორე PHP/Java-ს, მაგრამ ყველა სერვისი &#8216;პაბლიშდება; ერთი რევერს პროქსით. ამისათვის საჭიროა დაიწეროს წესები რვაფეხასთვის.<span id="more-630"></span><br />
მივყვეთ დეტალურად,&nbsp; მეორე სტრიქონზე, (აქედან იწყება ჩვენი კონფიგი) ავღწეროთ რა მისამართს და პორტს უსმენს სქვიდი, შემდეგ რა რეჟიმში მუშაობს და რა სახელით დაუბრუნდება კლიენტს response header-ი. visible_hostname &#8211; განაპირობებს რა სახელით გამოჩნდეს სერვერი შეცდომის გვერდებზე (403, 400 , 500 &#8230;/etc)</p>
<p style="text-align: left;"><a href="http://sysadmin.softgen.ge/wp-content/uploads/2011/11/squid-multiple-origin4.png"><img class="aligncenter size-full wp-image-650" style="border: 0pt none;" title="SQUID multiple origin servers" src="http://sysadmin.softgen.ge/wp-content/uploads/2011/11/squid-multiple-origin4.png" alt="SQUID multiple origin servers" width="605" height="345" /></a></p>
<p><em>ასეთ მნიშვნელობას მიიღებთ თუ firebug-ით ნახახავთ GET / მოთხოვნის პასუხს.</em></p>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>X-Cache</td>
<td>MISS from accel.anydomain.ge</td>
</tr>
<tr>
<td>X-Cache-Lookup</td>
<td>HIT from accel.anydomain.ge:80</td>
</tr>
</tbody>
</table>
<p>მეხუთე სქტრიონზე ავღწეროთ 80 პორტი,&nbsp;წეს დავარქვათ &#8220;<strong>http</strong>&#8220;, შემდეგ დაგვჭირდება წვდომის გასაწერად. ავღწეროთ <strong>cache_peer,</strong>მივანიჭოთ შიდა მისამართი და გავუკეთოთ ჭდე &#8220;<strong>name</strong>&#8220;, ამ შემთხვევაში&nbsp;<strong>windows_srvs</strong> და <strong>linux_srvs</strong>. შემდეგ ავღწეროთ რომელი საიტები შედის <strong>linux_sites</strong>-ის ჯგუფში, ჩვენს შემთხვევაში ეს არის ცალკე ფაილი, საიტები შეგვიძლია ნებისმიერ დროს დავამატოთ აღნიშნულ ფაილში (/etc/squid/linux_sites), ისე, რომ სქვიდის კონფიგურაციას არ შევეხოთ ახალი საიტის დამატებისას, ამის შემდეგ როდესაც საიტები, http პორტი და საწყისი სერვერები აღწერილი გვაქ, ვწერთ მარტივ წესს: <!--DEVFMTCODE-->
<pre class="devcodeblock" title="SQUID configuration">
<div class="devcodeoverflow">
<div id="devfmt_ajax_1_630">
<ol>
<li>cache_peer_access linux_srvs allow http linux_sites</li>
</ol>
</div>
</div>
</pre>
<p><!--END_DEVFMTCODE--><script> devfmt_addAjaxBuffer(1, 630); </script>, ამ წესის მიხედვით ის საიტები, როემლებიც გვიწერია <strong>/etc/squid/linux_sites</strong> &#8211; ფაილში მოხვდება მხოლოდ <strong>linux_srvs</strong> -სერვერზე, რომლის IP მისამართია: 192.168.1.11. ანალოგირად ვაკთებთ windows-საიტებისთვის.</p>
<p><!--DEVFMTCODE-->
<pre class="devcodeblock" title="SQUID configuration">
<div class="devcodeoverflow">
<div id="devfmt_ajax_2_630">
<ol>
<li>
</li>
<li>http_port 91.212.213.2:80 accel defaultsite=accel.anydomain.ge vhost
</li>
<li>visible_hostname accel.anydomain.ge
</li>
<li>
</li>
<li>acl http myport 80 # &aacute;&aacute;&nbsp; &aacute;&aacute;&aacute;&aacute;&aacute;&aacute;&nbsp;&aacute;&yen;&aacute;&aacute;&aacute; &aacute;&iexcl;&aacute;&aacute;&reg;&aacute;&aacute;&aacute; myport-&aacute;&iexcl; &aacute;&aacute;&iexcl; &aacute;&copy;&aacute;&aacute;&uml;&aacute;&aacute;&aacute;&aacute;&aacute;&pound;&aacute;&aacute; &aacute;&ordf;&aacute;&aacute;&aacute;&aacute;&aacute;&aacute;.
</li>
<li>
</li>
<li>cache_peer 192.168.1.10&nbsp;&nbsp;parent 80 0 no-query originserver login=PASS name=windows_srvs
</li>
<li>cache_peer 192.168.1.11&nbsp;&nbsp;parent 80 0 no-query originserver login=PASS name=linux_srvs
</li>
<li>
</li>
<li>acl linux_sites dstdomain url_regex -i &quot;/etc/squid/linux_sites&quot;
</li>
<li>cache_peer_access linux_srvs allow http linux_sites
</li>
<li>
</li>
<li>acl win_sites dstdomain url_regex -i &quot;/etc/squid/win_sites&quot;
</li>
<li>cache_peer_access windows_srvs allow http win_sites
</li>
<li></li>
</ol>
</div>
</div>
</pre>
<p><!--END_DEVFMTCODE--><script> devfmt_addAjaxBuffer(2, 630); </script></p>
<p>ყურადღება: ამ პოსტში განხილული იყო მხოლოდ HTTP ტრაფიკის გამიჯვნა საწყისი სერვერების მიხედვით, თუ თქვენ აპირებთ HTTPS ტრაფიკის &#8220;დაპროსქსვას&#8221; ამ შემთხვევაში გაითვალისწინეთ, რომ ორივე სერტიფიკატი (public &amp; private) უნდა დაყენედეს რევერს პროქსიზე, სხვანაირად უბრალოდ არ იმუშავებს.</p>
<p><em>პ.ს. https-ის თემას დავუბრონდებით მომდევნო პოსტებსში.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sysadmin.softgen.ge/2011/12/squid-multiple-origin-servers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Network security part.1 &#8211; syn* attack</title>
		<link>http://sysadmin.softgen.ge/2011/03/network-security-part-1-syn-attack/</link>
		<comments>http://sysadmin.softgen.ge/2011/03/network-security-part-1-syn-attack/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 21:44:47 +0000</pubDate>
		<dc:creator>frrrredo</dc:creator>
				<category><![CDATA[attacks]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[networking]]></category>

		<guid isPermaLink="false">http://sysadmin.softgen.ge/?p=483</guid>
		<description><![CDATA[პოსტის მიზანია დავიცვათ საკუთარი ვებ სერვერი syn flood პირდაპირი შეტევებისგან, (iptables-ის  დონეზე) და რამოდენიმე რჩევა syn spoofing ის დროს ასეთი შეტევების ძირითადი მიზანია Dos -ის მიღწევა. ეს შეტევა დაფუძვნებულია TCP კავშირის დამყარების პრინციპზე, როდესაც თქვენ შედიხართ ბროუზერით ვებ-გვერდზე &#8211; თქვენ აგზავნით SYN (synchronize) პაკეტს სერვერზე, სერვერი კი ამ დროს იმყოფება Listening რეჟიმში და უსმენს კონკრეტულ [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Synflooding" href="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/synsending.png"><img class="size-full wp-image-489 alignleft" style="border: 0pt none;" title="synsending" src="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/synsending.png" alt="" width="388" height="252" /></a>პოსტის მიზანია დავიცვათ საკუთარი ვებ სერვერი <a title="Synflood" href="http://en.wikipedia.org/wiki/SYN_flood" target="_blank" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/SYN_flood?referer=');">syn flood</a> პირდაპირი შეტევებისგან, (iptables-ის  დონეზე) და რამოდენიმე რჩევა <a title="Address Spoofing" href="http://en.wikipedia.org/wiki/IP_address_spoofing" target="_blank" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/IP_address_spoofing?referer=');">syn spoofing</a> ის დროს ასეთი შეტევების ძირითადი მიზანია <a title="DoS" href="http://en.wikipedia.org/wiki/Denial-of-service_attack" target="_blank" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Denial-of-service_attack?referer=');">Dos </a>-ის მიღწევა.</p>
<p>ეს შეტევა დაფუძვნებულია <strong>TCP </strong>კავშირის დამყარების პრინციპზე, როდესაც თქვენ შედიხართ ბროუზერით ვებ-გვერდზე &#8211; თქვენ აგზავნით <strong>SYN</strong> (synchronize) პაკეტს სერვერზე, სერვერი კი ამ დროს იმყოფება Listening რეჟიმში და უსმენს კონკრეტულ პორტს, როდესაც სერვერი მიიღებს თქვენს <strong>SYN </strong>პაკეტს ის პასუხობს <strong>SYN-ACK</strong> (synchronize acknowledged) პაკეტით და გიგზავნით ისევ თქვენ, რაც ნიშნავს, რომ მოთხოვნა სინქრონიზაციაზე მიღებულია, ამის შემდეგ თქვენ აგზავნით პროცედურის დამასრულებელ პაკეტს &#8211; <strong>ACK </strong>(acknowledge) სერვერთან და ნანატრი TCP კავშირი დგება თქვენს და დაშორებულ სერვერს შორის, სინამდვილეში ეს ისე სწრაფად ხდება, რომ თქვენ გაანალიზებას ვერ ასწრებთ გვერდი ისე იტვირთება თქვენს ბოუზერში. სწორედ ამას ეწოდება &#8220;<span style="text-decoration: underline;">TCP 3-Way Handshake</span>&#8221; კავშირი ან ქართულად &#8220;<span style="text-decoration: underline;">სამგზის კავშირი</span>&#8221; :), ამ სამგიზს კავშირიდან თითოეული პროცესი ექვემდებარება გარკვეულ კრიტრერიუმებს მაგ: განსაზღვრულია კავშირის ვადა (time-out).<span id="more-483"></span></p>
<p>1. <strong>client</strong><span style="color: #008000;">&#8212;&#8212;-syn&#8212;&#8212;-&gt;&gt;</span><strong>web server</strong><br />
2. <strong>client</strong><span style="color: #008000;">&lt;&lt;&#8212;syn-ack&#8212;&#8211;</span><strong>web server</strong><br />
3. <strong>client</strong><span style="color: #008000;">&#8212;&#8212;-syn&#8212;&#8212;&gt;&gt;</span> <strong>web server</strong></p>
<p>SYN შეტევებში არსებობს  2 ტიპის შეტევა syn-flooding, როდესაც სერვერს ვალოდინებთ პასუხის გაცემაზე და syn-spoofing ამ დროს პასუხის მიღებისას &#8220;ვემალებით&#8221; სერვერს. ანუ ვცვლით სორს მისამართს და აგონიაში მყოფი სერვერი აგზავნის პაკეტებს არარსებულ იპ მისამართებზე.</p>
<h2>I syn-flooding (direct attack)</h2>
<p>განვიხილოთ ჩვეულებრივი syn-flood-ის სცენარი. (შედარებით მარტივი განსახორციელებელია)<br />
წარმოიდგინეთ რა მოხდება თუ გავუგზავნით სერვერს  SYN პაკეტს შემდეგ სერევრი გამოგიგზავნით  SYN-ACK -ს და თქვენ აღარ გაუგზავნით დამასრულებელ ACK, ამ დროს ამოქმედდება პარამეტრი fin_timeout რომელიც დაელოდება მინიჭებულ მიშვნელობას მაგ 60 და 60 წამის გასვლის შემდეგ დახურავს ნახევრად ღია კავშირს. აქ კიდევ ერთი ფაქტორია დასაზუსტებელი, კავშირის დამყარების დროს ხდება ამ კავშირის მიერ TCP ბუფერის მეხსიერების რაღაც გარკველული ნაწილის დაკავება. ეხლა უფრო კონკრეტულად შეგვიძლია წარმოვიდგინოთ თუ რა მოხდება როდესაც უამრავ ასეთ ნახევრად-ღია კავშირებს დავამყარებთ? საბოლოოდ გადაივსება backlog, somaxconn, max_syn_backlog  კერნელის პარამეტრები და სერვერი ახალი კავშირის მოთხოვნებს (connection requests) ან რიგში ჩააყენებს (TIME_WAIT) ან სერთოდ ვერ უპასუხებს (Connect TIME_OUT() ).<br />
მაგ: შემტევი ჯუმბერი და მისი მეგობრები აგზავნიან სერვერთან ძალიან დიდი რაოდენობით SYN კავშირებს სანამ არ გადაივსება კერნელის პარამეტრი backlog -ი (ეს პარამეტრი უზრუნველყოფს &#8220;ნახევრად-ღია&#8221; half-opened კავშირების რიგში ჩაყენებას), როდესაც backlog სავსეა (მას მეხსიერების რაღაც ზომა აქვს გამოყოფილი და ეს პარამეტრი &#8220;ტუნინგს&#8221; ექვემდებარება და ამას ქვევით განვიხილავთ ) ის სერვერი ვეღარ უმკლავდება ახალ კავშირებს თუნდაც ნორმალურს, შემდეგ უკვე გააჩნია სერვერის კონფიგურაციას, შესაძლებელია კერნელის ქრეშიც, httpd პროცესის გარდაცვალება, ან საიტის დროებით გაჩერება სანამ ნახევრად-ღია კავშირებს ვადა არ გაუვა.</p>
<h2>II syn-spoofing</h2>
<p>როგორც ზემოთ ავღნიშნეთ ამ დროს სერვერს ეგზავნება syn პაკეტი არარსებული იპ მისამართიდან და სერვერიც ცდილობას უპასუხოს ამ მისამართს, მაგრამ მათ შორის ეს ინტიმური კავშირი არასდროს დამყარდება. ასე რომ კიდევ გარკვეული დროის მონაკვეთი და გარკვეული რესურსის დაკავებით წინ მიიწევს შემტევი ჯუმბერი სანამ სერვერზე არ მოხდება რესურსების გადავსება და შემდეგ მისი თანმხლები პროცესები. ეს არის ყველაზე პრობლემური შეტევა და საკამოდ რთულად განსახორციელებელიც, არსებობს რამოდენიმე მათემატიკური პრობლემა პრობლემა TCP პაკეტის ფორმირებაში და სწორედ ეს არის სორსის &#8220;სპუfინგის&#8221; არსებობსის გამართლება. თუმცა გამოსავალი ყველაფრიდან არსებოს, syn-spoofing-ის შემთხვევაში ცოტა რთულია software firewall სთხოვო დაგიცვას :) ეფექტურ გამოსავლად შეიძლება ჩაითვალოს უკუღმართი პროქსი :D არ დაიბნეთ revers-proxy -ის თარგმანი გავიფიქრე ხმამაღლა. თუ გავითვალისწინებთ იმას, რომ რევერს პროქსის შეუძლია TCP კავშირი შუაზე &#8220;გახლიჩოს&#8221;  და ერთი კავშირისგან მიიღოს ორი, ანუ კლიენტს ცალკე კავშირით ელაპარაკოს და სერვერს ცალკე TCP კავშირით; გამოდის, რომ იტისკება პქოქსი &#8211; და რა ვებ სერვერი, ეს ნორმალურია TCP კავშირების ჩავვარდნაზე პროქსის 90 პროცენტით ნაკლები რესური ეხარჯება ვიდრე დაუშვად HTTPD სერვერს თავისი თრედებით, შვილობილი პროცესებით და ზარმაცი პროგრამერების გამო მიბმული php ზოოპარკით.<br />
თვალი გადაავლედ შემდეგ მაგალითს და მიხვდებით რა სასარგებლო საქმის გაკეთება შეუძლია რევერს პროქსის content caching ის გარდა, სერვერამდე ვერ აღწევს ვერცერთი spoofed პაკეტი:</p>
<p><strong>attcker</strong><span style="color: #008000;">&#8212;&#8211;spoofed-syn&#8212;&#8212;&#8212;-&gt;&gt;</span><strong>proxy</strong><br />
<strong>|უსასრულობა|</strong><span style="color: #ff0000;">&lt;&lt;&#8212;-syn-ack&#8212;&#8211;</span><strong>proxy</strong><span style="color: #008000;">&#8212;&#8212;-syn&#8212;&#8212;-&gt;&gt;</span><strong>web server</strong><br />
<span style="color: #ffffff;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span><strong>proxy</strong><span style="color: #008000;">&lt;&lt;&#8212;syn-ack&#8212;&#8211;</span><strong>web server</strong><br />
<span style="color: #ffffff;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span><strong>proxy</strong><span style="color: #008000;">&#8212;&#8212;-ack&#8212;&#8212;-&gt;&gt;</span><strong>web server</strong></p>
<p><em>პრინციპში ჩემი აზრით რევერს პროქსი ყველა ვარიანტში გამართლებული საშუალებაა ვებისთვის.</em></p>
<p><em>თუ გავითვალისწინებთ რომ spoofing-ის დროს ხდება ლოკლარი IP  მისამართების გამოყენება , შესაძლებელია წინასწარ განვსაზღვროთ ასეთი დაპაზონები (ძირითადად ესენია ლოკალრი ქსელის მისამართები და სერვერის IP  -ის დიაპაზონიდან) და დავბლოკოთ ნაგულისხმევად მათგან წამოსული ნებისმიერი პაკეტი. ასევე რთული განსახორციელებელია სპუფინგი, როდესაც სერვერი NAT-ის უკან დგას.</em></p>
<h2>როგორ გავიგო შეტევა ?</h2>
<p>გავიგოთ კავშირების რაოდენობა 80-ე პორტზე, განურჩევლად მისი მდგომარეობისა:</p>
<p>
<pre class="brush: bash; title: ; notranslate"> netstat -n | grep :80 | wc -l
</pre>
<p><script> devfmt_addAjaxBuffer(1, 483); </script></p>
<p>გავიგოთ <span style="color: #ff6600;"><strong>SYN_RECV</strong></span> მდგომარეობაში მყოფი კავშირების რაოდენობა, ეს მნიშვნელოვანია ამ მდგომარეობაში არ უნდა იყვეს ბევრი კავშირი, მაგ:  1000  კლიენტის ერთდროული შემოსვლის დროს ეს პარამეტრი არ უნდა იყვეს 10 ზე მეტი 1 წთ განმავლობაში.</p>
<p>
<pre class="brush: bash; title: ; notranslate"> netstat -n -p | grep SYN_RECV | wc -l </pre>
<p><script> devfmt_addAjaxBuffer(2, 483); </script></p>
<p>თუ გვინდა ვუყუროთ  ასეთი კავშირების ცვლილებას რეალურ დროში :</p>
<p>
<pre class="brush: bash; title: ; notranslate"> watch -n0 &quot;netstat -n -p | grep SYN_RECV | wc -l&quot; </pre>
<p><script> devfmt_addAjaxBuffer(3, 483); </script></p>
<p>თუ გვინდა ვნახოთ, რომელ IP მისამართს რამდენი კავშირი აქვს გახსნილი სერვერთან აკრიფეთ შემდეგი:</p>
<p>
<pre class="brush: bash; title: ; notranslate"> netstat -ntu | tail -n +3 | awk '{print $5}' | sed -e 's/::ffff://g' \
|cut -d: -f1 | sort | uniq -c | sort -n </pre>
<p><script> devfmt_addAjaxBuffer(4, 483); </script></p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/IMG_2890.png"><img class="size-full wp-image-485  alignleft" style="margin: 5px 15px;" title="nstats" src="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/IMG_2890.png" alt="syn flood ing" width="300" height="451" /></a><strong>ყურადღება მიაქციეთ თითოეულ IP მისამართზე კავშირების რაიოდენობას</strong>, არ უნდა იყვეს საეჭვოზე მეტი, როგორც მარცხნივ სურათზეა ნაჩვენები, 1 IP მისამართისთვის 5610 კავშირი ძალიან ბევრია, თუ თქვენ ვებ გვერდს არ სტუმრობს, რომელიღაც პატარა ჩინური კორპორციის პროქსი სერვერი, რომლის უკან 5000 შრომისმოყვარე ცინელს, რატომღაც ერთდროულად გაუჩნდა თქვენი ვებ გვერდის მონახულების სურვილი. :P</p>
<h2>SYN cookies (დაცვა ბირთვის დონეზე)</h2>
<p>არსებობს რამოდენიმე დაცვა 2.6.xx კერნელში, რომლებიც გვიცავს ასეთი შეტევებისგან მაგალითად ერთ-ერთი SYN cookies. მისი იდეა მდგომარეობს შემდეგში: როდესაც კლინტი აგზავნის SYN პაკეტს სერვერთან, სერვერი უგავნის SYN + cookies, ანუ პლიუს კიდევ ერთ cookies პაკეტს, და გაგზავნისთანავე წყვეტს კავშირს კლინტთან, შედეგად აღარ არსებობს ნახევრად ღია კავშირები სერვერზე) ანუ აღარ ელოდება შემდეგ საფეხურებს კილინტისგან კავშირის დასამყარებლად. დამატებითი cookies პაკეტი წარმოადგენს, კლინტის მისამართს, კლინტის პორტს, კლინტის თანმიმდევრობას*, სერვერის მისამართს, სერვერის პორტს და + საიდუმლო ჰეშს.</p>
<p>თუ ამის შემდეგ კლინტი გამოაგზავნის ACK პაკეტს, სერვერი თავიდან გამოითვლის cookies მიმდევრობებს  და შეადრებს ემთხვევა თუ არა ძველ გაგაზავნილ SYN-ACK მოთხოვნას. თუ ემთხვევა კავშირი დადგება. რეალურად როგოც ჟღეს ისე ვერ ამართლებს ეს მეთოდი, ამ გამოთვლებსაც ჭირდება cpu რესურსები, და დრო, ბევრ Linux დისტროში ეს პარამეტრი გამორთულია, მაგრამ Feddora 1x -ში ნაგულისხმევად ჩართულია, თუ გადაწყვეტთ ამ პარამეტრის ჩართვას, მოახდინეთ შემდეგი ცვლილებები:</p>
<p>
<pre class="brush: bash; title: ; notranslate">echo &quot;1&quot; &gt; /proc/sys/net/ipv4/tcp_syncookies </pre>
<p><script> devfmt_addAjaxBuffer(5, 483); </script></p>
<p>#დროებითი ჩართვა,</p>
<p>ან დაამატეთ ჩანაწერი /etc/sysctl.conf #მუდმივი ჩართვა<br />
net.ipv4.tcp_syncookies = 1</p>
<h2>თავდაცვა I -  network tuning</h2>
<p>ნაგულსიხმევად კერნელის კონფიგურაციაში არის  უამრავი პარამეტრი, რომლებიც ტუნინგს ანუ ქართულად რომ ვთქვათ მომართვას ექვემდებარებიან.  ქვემოთ ჩამოთვლილი იქნება რამოდენიმე პარამეტრი, რომლეთა მნიშვნელობა უნდა განსაზღვროთ თქვენი აპარატურული შესაძლებლობების მიხევით, ამ პარამეტრების მნიშვენლობები არ წარმოადგენს მაგიურ ციფრებს, თუ სწორად მოვმართავთ რამოდენიმე Newtork პარამეტრს შესაძელბელია :</p>
<p>1.ნახევრად ღია კავშირების რაოდენობის გაზრდა;<br />
2.ESTABLISHED მდგომარეობაში მყოფი კავშირებსი გაზრდა;<br />
3.ნახევრად-ღია კავშირების ადრე დახურვა; (time-out შემცირება);<br />
4.ლოკალური პორტების დიაპაზონის გაზრდა;<br />
5.TCP ნაკადის მეხსიერბეის ბუფერის გაზრდა;</p>
<p>ვხსნით საყვარელ ტექსტურ რედაქტორში ფაილს: /etc/sysctl.conf<br />
შეგვყავს ქვემოთ ჩამოთვლილი პარამეტრები, ვანიჭებთ სასურველ მნიშვნელობას ან ვტოვებთ უცვლელად.<br />
<em>(ეს პარამეტრები ოპტიმიზირებულია სერვერისთვის, რომლის მეხსიერბა არის 8GB და CPU არის 8-ბირთვიანი)</em></p>
<pre class="brush: bash; title: ; notranslate">

net.ipv4.ip_local_port_range = 1024 61000
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.ipv4.tcp_fin_timeout = 40
net.core.netdev_max_backlog = 5000
net.core.somaxconn = 10000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 6144
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_sack = 0
net.ipv4.tcp_syncookies = 0</pre>
<p><script> devfmt_addAjaxBuffer(6, 483); </script></p>
<p>ვინახავთ და თუ არ გვსურს გადატვირთვა ვუშვებთ ბრძანებას:<br />
sysctl -p<br />
ამის შემდეგ ახალი მნიშვნელობები შევა ძალაში.</p>
<h2>თავდაცვა II -  iptables rules</h2>
<p>syn-flooding  პირდაპირი შეტევების  დროს,  როდესაც რეალური სორსიდან ცდილობენ შეტევას ამ შეთხვევაში ძალიან ეფექტურია  iptables  თავისი recent და hashlimit მოდულებით, იდეა შემდეგია: თუ შემტევი დაამაყარებს 200 კავშირს სერვერთან ერთი წამის განმავლობაში, მაქსიმალური საწყისი პაკეტების რაოდენობა, რომლებიც დაემთხვევა ამ წესს და ტოლი იქნება 4-ის  დაიდროპება 15 წუთის განმავლობაში, ასევე დალოგირდება შემტევის IP მისამართები.</p>
<p>
<pre class="brush: bash; title: ; notranslate">iptables -N LOGDROP
iptables -A LOGDROP -j LOG --log-prefix &quot;SYN Flood Detected:&quot;  --log-level 7
iptables -A LOGDROP -j DROP
iptables -A INPUT -i eth0  -m recent --name blacklist --rcheck --seconds 900 -j DROP
iptables -A INPUT -i eth0 -p tcp --syn  -m hashlimit  --hashlimit 200/sec \
--hashlimit-burst 4 --hashlimit-htable-expire 300000 --hashlimit-mode srcip \
--hashlimit-name testlimit -j ACCEPT
iptables -A INPUT -i eth0 -m recent --name blacklist --set -j LOGDROP</pre>
<p><script> devfmt_addAjaxBuffer(7, 483); </script></p>
<p>ამ დროს იბლიოკება მხოლოდ ის IP მისამართები საიდანაც შეტევის მცდელობები იყო განხორციელებული, ჩვეულებრივი IP  მისამართებისთვის სერვერი განაგრძობს მომსახურებას შეუფერხებლად.</p>
<h2>დასკვნა</h2>
<p>რეალურად თავდაცვის პირველი სცენარიდან გამომდინარე ჩვენ ვზრდით ქსელის გამტარუნარიანობას სერვერზე და შესაბამისად საჭიროა უფრიო მეტი შემტევი რესურსი სერვერის გასაჩერებლად, მეორე ვარიანტი არის თავდაცვა პროგრამული ფაირვოლის დონეზე, რომლიც იმახსოვრებს შემტევის მისამართებს და ბლოკავს მათ გარკვეული ვადით. იყო კიდევ მესამე ვარიანტი &#8211; რევერს პროქსი, რომელიც არანაკლებე ეფექტურია spoofing -ის დროს, არ შეიძლება ვინმემ ზუსტად თქვას რომელი ვარინატი ჯობია, ისინი ერთმანეთს არ გამორიცხავენ &#8211; შესაძლელებლია სამივე ვარიანტის კომბინაცია და თუ ეს ყველაფერი მძლავს ქსელურ აპარატურასთანა ჰარმონიაში ასეთ შემთხვევაში თქვენ შეგიძლიათ უფრო ეფექტურად გაუმკლავდეთ ამგავარ შეტევებს და გქონდეთ ნაკლები downtime-ი.</p>
]]></content:encoded>
			<wfw:commentRss>http://sysadmin.softgen.ge/2011/03/network-security-part-1-syn-attack/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Public Key Cryptography</title>
		<link>http://sysadmin.softgen.ge/2011/02/public-key-cryptography/</link>
		<comments>http://sysadmin.softgen.ge/2011/02/public-key-cryptography/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 15:22:06 +0000</pubDate>
		<dc:creator>frrrredo</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[public key]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://sysadmin.softgen.ge/?p=388</guid>
		<description><![CDATA[ამ პოსტის სათაურად ვაპირებდი რომ ყოფილოყო &#8220;საჯარო გასაღების კრიპტოგრაფია&#8221;, მაგრამ ქართულად სამწუხაროდ არაკეთილხმოვნად  ჟღერს, თანაც ცოტათი დაგაბნევდათ ამ სიტყვების კომბინაცია,  არადა აშკარად საჭიროა ასეთი &#8220;IT სიტყვების&#8221; ლოკალიზაცია თორემ მერე მივიღებთ &#8220;პაჩემნიკის&#8221; ანალოგებს. მცირე პროლოგის მიწურულს,  ვინც თვლის რომ ეს პოსტი მისთვისაა  და აინტერესებს რა კეთილ საქმეში შეიძლება მისი გამოყენება ვსქროლავთ ქვევით. Public key cryptography ეს [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/pbks.png"><img class="size-full wp-image-394 alignleft" style="border: 0pt none; margin-top: 10px; margin-bottom: 10px;" title="pbks300" src="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/pbks.png" alt="" width="270" height="335" /></a>ამ პოსტის სათაურად ვაპირებდი რომ ყოფილოყო <strong>&#8220;საჯარო გასაღების კრიპტოგრაფია&#8221;, </strong>მაგრამ ქართულად სამწუხაროდ არაკეთილხმოვნად  ჟღერს, თანაც ცოტათი დაგაბნევდათ ამ სიტყვების კომბინაცია,  არადა აშკარად საჭიროა ასეთი &#8220;IT სიტყვების&#8221; ლოკალიზაცია თორემ მერე მივიღებთ &#8220;პაჩემნიკის&#8221; ანალოგებს. მცირე პროლოგის მიწურულს,  ვინც თვლის რომ ეს პოსტი მისთვისაა  და აინტერესებს რა კეთილ საქმეში შეიძლება მისი გამოყენება ვსქროლავთ ქვევით.</p>
<p><a href="http://en.wikipedia.org/wiki/Public-key_cryptography" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Public-key_cryptography?referer=');"><strong>Public key cryptography</strong></a> ეს არის ასიმეტრიული ალგორითმების ნაკრები (ცალმხრივი შიფრაციის მათემატიკური მოდელები). გასული საუკუნის 70-იან  წლებში აქტიურად დაიწყო ამ ალგორითმების ციფრულ სამყაროში ინტეგრაცია და დღეისთვის ინფორმაციის დაშიფვრის ყველაზე გავრცელებულ და გამართლებულ მეთოდად ითვლება.  Public key cryptography ყოველთვის შედგება წყვილი, საჯარო და პირადი (public &amp; private) გასაღებებისგან.</p>
<p>როგორი იქნებოდა public key cryptography-ის გამოყენება ჩვეულებრივ ცხოვრებაში? წარმოვიდგინოთ მაგალითი: გამოჩენილი ამერიკელი &#8220;წყვილის&#8221; ელისის და ბობის მაგალითზე ( Alice &amp; Bob. ამ &#8220;წყვილის&#8221; სამეცნიერიო ტესტირებაში გამოყენება იმდენად გავრცელებულია, რომ ქართული ანალოგის შექმნა ზედმეტი იქნებოდა).</p>
<p>ელისი უგზავნის ბობს წერილს, რომელსაც ათავსებს ყუთში და ადებს თავის ბოქლომს (public), რომლის გასაღებიც მხოლოდ ელისს გააჩნია, ყუთს კი უგზავნის ბობს ფოსტის მეშვეობით. როდესაც ბობი მიიღებს ყუთს ისიც დაადებს თავის ბოქლომს  და უკან გაუგზავნის ელისს. როდესაც ელისი მიიღებს ყუთს ორი ბოქლომით, მოხსნის თავის ბოქლომს და კვლავ გადაუგზავნის ბობს. ბოლოს კი როდესაც ბობი მიიღებს ყუთს მხოლოდ თავისი ბოქლომით, მას შეუძლია გახსნას ის თავისი გასაღებით და წაკითხოს წერილი ელისისგან.  ამ &#8220;ჰეფი ენდს&#8221; ალტერნატიული ფინალიც ააქვს რომელსაც ქვია: მელორი, ანუ  ამ სცენარის ერთადერთი სისუტე      <span id="more-388"></span> &#8211; მესამე პირი რომელიც შეიძლება ბობს და ელისს შორის ჩადგეს.  დიახ, დიახ, ბოროტ მელორის შეუძლია ჩადგეს გასაღებების დაგზავნის შუამავლად მაგ: <strong>ელისი&gt;&gt;მელორი&gt;&gt;ბობი </strong>და  <strong>ბობი&gt;&gt;მელორი &gt;&gt;ელისი</strong>. ისე რომ ელისმა და ბობმა ეს ვერ გაიგონ .  მელორის ასეთ  სქციელს ეწოდება  <a href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack" target="_blank" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Man-in-the-middle_attack?referer=');">Man-in-the-middle attack</a>, თუმცა შესაძლებელია ამის თავიდან აცილება certificate authority იგივე (CA) გამოყენებით (მესამე მხარე რომლიც გადაამოწმებს გამგზავნის და მიმღების იდენტურობას). საჯარო გასაღებებს კიდევ რამოდენიმე სისუსტე გააჩნია, მაგრამ ისინი ისეთი უმნიშვნელო და უწყინარია რომ ამ პოსტში არ განვიხილათ.</p>
<p><strong>ძირითადი მახასიათებლები:</strong></p>
<p>1. public key cryptography ყოველთვის შედგება წყვილი გასაღებებისგან: public, private (საჯარო, პირადი)<br />
2. public key ყველასთვის ხელმისაწვდომია.<br />
3. private key ხელმისაწვდიომია მხოლოდ მფლობელისთვის.<br />
4. public key დაშიფრული ინფორმაციის გაშიფვრა შეუძლია მხოლოდ მის შესაბამის private key-ს და პირიქით.<br />
5. public key მათემატიკურად დაკავშირებულია private key-სთან, მაგარამ პირველიდან მეორეს მღება შეუძლებელია.</p>
<p>ქვემთ მოცემულ სურათში განვიხილოთ შიფრაციის სქემა:</p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/set12.jpg"><img class="alignnone size-full wp-image-464" style="border: 0pt none;" title="set1" src="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/set12.jpg" alt="" width="630" height="344" /></a></p>
<p>ამ სურათის მიხედვით ბობი უგზავნის  ელისს  ბანალურ შეტყობინებას, რომელიც იშიფრება ელისის საჯარო გასაღებით და მიღებული შეტყობინების გაშიფვრას ელისი ახდენს პირადი გასაღების საშულებთ. ტექსტის დასაშიფრად ამ შემთხვევაში გამოყენებულია <a href="http://en.wikipedia.org/wiki/Digital_Signature_Algorithm" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Digital_Signature_Algorithm?referer=');">DSA</a> 2048 &#8211; ბიტიანი ალგორითმი. განვიხილოთ მეორე შემთხვევა, როდესაც ელისი უკან უგზავნის პასუხს ბობს.</p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/set23.jpg"><img class="alignnone size-full wp-image-466" style="border: 0pt none;" title="set2" src="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/set23.jpg" alt="" width="630" height="344" /></a></p>
<p>აქვე ვგებულობთ, რომ შეტყობინების დაშიფვრა აგრეთვე შესაძლებელი ყოფილა პირადი გასაღებით, რომლის გახსნა მხოლოდ საჯარო გასაღებს შეუძლია. შესაბამისად ბობი ბანალურ მიმართვაზე ბანალურ პასუხს ღებულობს და ორივე ბედნიერია.</p>
<p><strong> </strong></p>
<p><strong>გამოყენება </strong></p>
<p>როგორც იქნა მივედით უფრო საინტერესო ნაწილამდე, რასაც ამ ყველაფრის რეალიზაცია ქვია. ამ მეთოდს პლანეტრაული გამოყენება აქვს, მაგრამ ჩვენ დღეს განვიხილავთ როგორ გამოვიყენოთ იგი 2 ან n კომპიურტერის ერთმანეტში <strong>უპაროლო ავტორიზაციისთვის SSH_ის გამოყენებით</strong>, ზოგადად მიჩნეულია და მეც ვეთანხხმები, რომ ასეთი მეთოდით ავტორიზაცია უფრო უსაფრთხოა ვიდრე პაროლის გამოყენება, ყველაფერს რომ თავი დავანებოთ ძალიან აადვილებს და მოსახერხებელს ხდის  წვდომას დაშორებულ კომპიუტერამდე ავტორიზაციის თავიდან აცილების გზით.</p>
<p>ნაგულისხმევად ssh ავტორიზაციის ფაილები და პარამეტრები ინახება მიმდინარე მომხმარებლის დირექტორიაში ~/.ssh , თუ ეს მისამართი თქვენთან არ არსებობს არაუშავს ssh-keygen უტილიტა მას თავისთ დააგენერირებს და საჭირო წვდომის უფლებებსაც მიანიჭებს. დავაყენეოთ openssh კლიენტი და სერვერი ან განვაახლოთ თუ უკვე გვაქვს და დავაგენერიროთ public key წყვილი:</p>
<p>
<pre class="brush: bash; title: ; notranslate">yum -y install openssh openssh-clients openssh-server
ls -l  ~/.ssh
yes | ssh-keygen -t rsa</pre>
<p><script> devfmt_addAjaxBuffer(1, 388); </script></p>
<p>გამოვა შეტყობინება: &#8220;Enter passphrase (empty for no passphrase):&#8221;  ვაწვებით ენთერს. პაროლი არ გვჭირდება.</p>
<p>ოპერაციის დასრულების შემდეგ გამოვა რაღაც ამდაგვარი  ბინარულ &#8211; აბტრაქციონისტური შემოქმედება და გვახარებს წყვილი გასაღების გენერირებას.</p>
<p>The key fingerprint is:<br />
f3:96:01:e8:6f:64:01:53:27:d2:58:a1:0b:a6:2c:e1 user@hostname.ge<br />
The key&#8217;s randomart image is:</p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/Screenshot.png"><img class="size-full wp-image-444 alignnone" style="border: 0pt none;" title="bin-art" src="http://sysadmin.softgen.ge/wp-content/uploads/2011/02/Screenshot.png" alt="" width="157" height="192" /></a></p>
<p>ვნახოთ რა შექმნა წინა ბრძანებამ:</p>
<p>
<pre class="brush: bash; highlight: [4]; title: ; notranslate">ls -la ~/.ssh
drwx------  2 user group 4096 2011-02-04 16:19 .
drwx------ 28 user group 4096 2011-02-04 15:14 ..
-rw-------  1 user group 1675 2011-02-04 02:18 id_rsa
-rw-r--r--  1 user group  393 2011-02-04 02:18 id_rsa.pub
-rw-r--r--  1 user group  391 2011-02-04 16:19 known_hosts
</pre>
<p><script> devfmt_addAjaxBuffer(2, 388); </script></p>
<p>ვნახავთ ორ ახალ ფაილს:  id_rsa  და  id_rsa.pub</p>
<p><span style="color: #ff0000;"><strong>ყურადრება:</strong></span> ფაილი id_rsa წარმოადგენს თქვენს პირად გასაღებს! მის სხვისთვის გაზიერება იგივეა რაც პაროლის გაზიარება,  ან სეიფის გასაღების გაზიარება, ამიტომ მაქსილამურად დაცული იქონიეთ.  ვაკოპირებთ <strong>id_rsa.pub </strong>სამიზნე  კომპზე (სამიზნე კომპზეც უნდა იყვეს დირექტორია  ~/.ssh)</p>
<p>
<pre class="brush: bash; title: ; notranslate">scp ~/.ssh/id_rsa.pub user@hostname.ge:.ssh/authorized_keys2</pre>
<p><script> devfmt_addAjaxBuffer(3, 388); </script></p>
<p>თქვენს შემთხვევაში hostname.ge შეიძლება იყვეს სერვერის IP. ეხლა შევცვალოთ შემდეგი პარამეტრები  /etc/ssh/sshd_config, _ში უსაფრთხოების გაძლიერების მიზნით, ვეძებთ შემდეგ სტრიქონებს კონფიგ ფაილში ვუშლით კომენტარებს (კომენტარი = #) და ვუცვლით მნიშვნელობებს შემდეგზე:</p>
<p>
<pre class="brush: bash; title: ; notranslate">PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
PrintMotd no
UseLogin no
UseDNS no</pre>
<p><script> devfmt_addAjaxBuffer(4, 388); </script></p>
<p>გადავტვირთოდ sshd სერვისი სერვერზე :</p>
<p>
<pre class="brush: bash; title: ; notranslate">ssh root@hostname.ge &quot;service sshd restart&quot;</pre>
<p><script> devfmt_addAjaxBuffer(5, 388); </script></p>
<p>თუ თქვენ ჯეეეერ ვერაფერს მიხვდით მაშინ მოსინჯეთ სერვერზე შესვლა შემდეგნაირად :) :</p>
<p>
<pre class="brush: bash; title: ; notranslate">ssh hostname.ge</pre>
<p><script> devfmt_addAjaxBuffer(6, 388); </script></p>
<p>დიახ! თქვენ უკვე აღარ გჭირდებათ მომხმარებლის სახელის და პაროლის შეყვანა ავტორიზაციის გასავლელად.</p>
]]></content:encoded>
			<wfw:commentRss>http://sysadmin.softgen.ge/2011/02/public-key-cryptography/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ვზრდით ext3/ext4 დანაყოფებს (partition)</title>
		<link>http://sysadmin.softgen.ge/2010/11/%e1%83%95%e1%83%96%e1%83%a0%e1%83%93%e1%83%98%e1%83%97-ext3ext4-%e1%83%93%e1%83%90%e1%83%9c%e1%83%90%e1%83%a7%e1%83%9d%e1%83%a4%e1%83%94%e1%83%91%e1%83%a1-partition/</link>
		<comments>http://sysadmin.softgen.ge/2010/11/%e1%83%95%e1%83%96%e1%83%a0%e1%83%93%e1%83%98%e1%83%97-ext3ext4-%e1%83%93%e1%83%90%e1%83%9c%e1%83%90%e1%83%a7%e1%83%9d%e1%83%a4%e1%83%94%e1%83%91%e1%83%a1-partition/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 09:42:42 +0000</pubDate>
		<dc:creator>frrrredo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[partitioning]]></category>

		<guid isPermaLink="false">http://sysadmin.softgen.ge/?p=288</guid>
		<description><![CDATA[Linux ოპერაციულ სისტემებში შესაძლებელია partition-ის შემდგომში &#8220;დანაყოფი&#8221; (დროა ქართულადაც ვიცოდეთ ამ სიტყვების მნიშვნელობები :z ) მოხერხებული-ადვილი-გრაფიკული მართვა, მაგ. ზომის გაზრდა/შემცირება, parttition tables შექმნა, შემოწმება შეცდომებზე და სხვა მრავალი სასარგებლო ოპერაციის გაკეთება commandline-ის გარეშე, მააგრამ linux ჯერ-ჯერობით რჩება სერვერ ოპერაციულ სისტემად და შესაბამისად ხშირად სერვერებზე გრაფიკული გარსი არ არის გაშვებული (99.99% არც არის საჭირო). პოსტი მოიცავს [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-328   " style="border: 0pt none;" title="ვიზუალური დანაყოფები" src="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/hdd-22.png" alt="ვიზუალური დანაყოფები" width="600" height="406" /></p>
<p><strong><a href="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/tux-icon.png"><img class="alignleft size-full wp-image-367" style="border: 0pt none;" title="ტუქსი" src="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/tux-icon.png" alt="ტუქსი" width="48" height="48" /></a>Linux</strong> ოპერაციულ სისტემებში შესაძლებელია partition-ის შემდგომში &#8220;<strong>დანაყოფი</strong>&#8221; (დროა ქართულადაც ვიცოდეთ ამ სიტყვების მნიშვნელობები :z ) მოხერხებული-ადვილი-გრაფიკული მართვა, მაგ. ზომის გაზრდა/შემცირება, parttition tables შექმნა, შემოწმება შეცდომებზე და სხვა მრავალი სასარგებლო ოპერაციის გაკეთება commandline-ის გარეშე, მააგრამ linux ჯერ-ჯერობით რჩება სერვერ ოპერაციულ სისტემად და შესაბამისად ხშირად სერვერებზე გრაფიკული გარსი არ არის გაშვებული (99.99% არც არის საჭირო).<span id="more-288"></span></p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/dialog-information1.png"><img class="alignleft size-full wp-image-312" style="border: 0pt none;" title="პოსტი მოიცავს" src="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/dialog-information1.png" alt="პოსტი მოიცავს" width="48" height="48" /></a><strong>პოსტი მოიცავს</strong> ნებისმიერი linux ოპერაციულ სისტემის ქვეშ მყოფი ext3/ext4 დისკების გაზრდა/შემცირებას, რომლებიც არ არის LVM/LVM2 ან RAID შემადგენლობაში და არის სტანდარტული partittion-ები.</p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/dialog-warning.png"><img class="alignleft size-full wp-image-303" style="border: 0pt none;" title="გაფრთხილება" src="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/dialog-warning.png" alt="გაფრთხილება" width="48" height="48" /></a><strong>გაფრთხილება:</strong> აუცილებლად &#8220;&lt;&lt;დაა-backup-ეთ&gt;&gt;&#8221; პაციენტი. ბექაფის გარეშე აღნიშნული ოპერაციის ჩატარებამ შეიძლება მიგვიყვანის სავალალო შედეგებამდე. ბექაფის არსებობის შემთხვევაში თამამად გადავდივართ შემდეგ საფეხურებზე.</p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/task-due.png"><img class="alignleft size-full wp-image-334" style="border: 0pt none;" title="პრობლემა" src="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/task-due.png" alt="გაფრთხილება" width="48" height="48" /></a><strong>პრობლემა:</strong> გვაქ ლინუქს სერვერი რომელზეც გადაგვევსო /var <em><span style="color: #888888;">(თქვენს შემთხვევაში ეს შეიძლება იყოს ნებისმიერი /,  /opt, /u01, /xxx, ან /home)</span> </em> დანაყოფი რომელიც დამონტაჟებულია (არ დაიბნეთ mounts  ვგულისხმობ) /dev/sdd1 დისკზე, რომლის მოცულობა არის 30 გბ. მაგ: /dev/sdd1 /var</p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/preferences-other.png"><img class="alignleft size-full wp-image-307" style="border: 0pt none;" title="საჭირო ინსტრუმენტები" src="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/preferences-other.png" alt="საჭირო ინსტრუმენტები" width="48" height="48" /></a><strong>საჭირო ინსტრუმენტები:</strong> <a href="http://linux.die.net/man/8/fdisk" target="_blank" onclick="pageTracker._trackPageview('/outgoing/linux.die.net/man/8/fdisk?referer=');">fdisk</a>, <a href="http://linux.die.net/man/8/tune2fs" target="_blank" onclick="pageTracker._trackPageview('/outgoing/linux.die.net/man/8/tune2fs?referer=');">tune2fs</a>, <a href="http://linux.die.net/man/8/e2fsck" target="_blank" onclick="pageTracker._trackPageview('/outgoing/linux.die.net/man/8/e2fsck?referer=');">e2fsck</a>, <a href="http://linux.die.net/man/8/resize2fs" target="_blank" onclick="pageTracker._trackPageview('/outgoing/linux.die.net/man/8/resize2fs?referer=');">resize2fs</a>, <a href="http://linux.die.net/man/8/fsck" target="_blank" onclick="pageTracker._trackPageview('/outgoing/linux.die.net/man/8/fsck?referer=');">fsck</a> (სტანდარტულად ეს ბრძანებები ნაგულისხმევად განისვენებს  /sbin დირექტორიაში ყველა linux დისტრიბუტივზე.)</p>
<p>დისკის მოცულობა შეიძლება გავზარდოთ არსებული დანაყოფის შემცირების ან საერთოდ წაშლის ხარჯზე, მაგრამ ვირტუალიზაციის შემთხვევაში ეს გაცილებით მარტივია, უბრალოდ უმატებთ სასურველ ზომას. დავუშვათ მოუმატეთ სასურველი ზომა არსებულ დისკს, <span style="color: #888888;"><em>(თუ რა გზით ეს ეს ინდივიდუალურია)</em></span> იმისთვის რომ ოპერაციულმა სისტემამ აღიქვას ახალი ზომა, ამისთვის საჭიროა შემდეგი ცვლილებები:</p>
<p>1.   ვაკეთებთ  დისკის დემონტაჟს, (unmount partition),</p>
<p>
<pre class="brush: bash; title: ; notranslate">umount /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(1, 288); </script></p>
<p>ხშირია შემთხვევები როდესაც დისკი დაკავებულია და დემონტაჟი წარუმატებლად სრულდება, გამოდის ამდაგვარი შეტყობინება: &#8220;Device or resource busy&#8221;  ასეთ შემთხვევაში შესაძლებელია -l სვიჩის გამოყენება და დემონტაჟის ძალებით გაკეთება (force).</p>
<p>
<pre class="brush: bash; title: ; notranslate">umount -l /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(2, 288); </script></p>
<p>ყურადღება! არავითარ შემთხვევაში არ შეეცადოთ იმ დანაყოფის დემონტაჟს რომელზეც  წერს მონაცემთა ბაზები (MySQL, Oracle, PostgreSQL, etc). ამ შემთხვევაში თქვენ შეიძლება დაკარგოთ ინფორმაცია, ან დააზიანოთ მონაცემთა ბაზის სტრუქტურა (მონაცემთა ბაზებს შეუძლიათ data-ფაილის ექსკლუზიურ რეჟიმში გახსნა/წაკითხვა, იყენებენ  სისტემურ გამოძახებებს (syscall) მაგალითთად fopen() ფუნქციას პარამეტრად გადეცემა O_EXCL და ფაილი გაიხსნება ექსკლუზიაურად. ექსკლუზიური გახნს კი იმას ნიშნავს რომ  სანამ ფაილი არ &#8220;დაიხურება&#8221;  fclose(), დანაყოფის დემონტაჟს აზრი არ ააქვს, მოხდება მხოლოდ &#8220;ფსევდო დემონტაჟი&#8221; სინამდვილეში ფაილური სისტემა კვლავ დაკავებული იქნება I/O ოპერაციებით). ჩვენ არ გვაწყობს არანაირი I/O აქტივობა ჩვენს დიკზე, როდესაც დავიწყებთ მისი მოცულობის გაზრდა/შემცირებას, ამიტომ საკუეთესო გამოსავალი იქნება თუ ჩვენ ჩავიტვირთებით singe-user რეჟიმში (ამ დროს არ არსებობს ქსელი, არ იტვირთება დემონები/სერვისები და სისტემაში შესასვლედად არ არის საჭირო ავტორიზაცია).  თუ გვინდა root დანაყოფის ( / ) გაზრდა  ამ შემთხვევაში ვიტვირთებით რომელიმე linux-based ჩამტვირთავი დისკიდან <em><span style="color: #808080;">(რადგანაც ჩართულ სსისტემას თავის თავის დემონტაჟს ვერ მოვთხოვთ, არა ეს შესაძელბელეია, მაგრამ ამ შემთხვევაში მიუწვდომელი იქნება /sbin დირექტორია და შესაბამისად საჭირო ბრძანებებს ვეღარ გამოვიძახებთ)</span></em>. <a href="http://en.wikipedia.org/wiki/List_of_live_CDs#Linux-based" target="_self" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/List_of_live_CDs_Linux-based?referer=');">ასეთები კი ბევრია</a> და თავისუფლად გადავდივართ შემდეგ საფეხურზე.</p>
<p>2.   ვამოწმებთ ფაილური სისტემის შეცდომებზე არსებულ დანაყოფს:</p>
<p>
<pre class="brush: bash; title: ; notranslate">fsck -n /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(3, 288); </script></p>
<p>3.   ვშლით ჟურნალს ფაილური სისტემიდან და ვაქცევთ მას მარტივ ext2 ფაილურ სისტემად (ext3/4 ფაილური სისტემების ext2-გან განსხვავებით გააჩნიათ ჟურნალირების საშუალება, მაგრამ ჟურნალირებად ფაილურ სისტემაზე ამგვარ ცვლილებებს ვერ მოვახდენთ, ამიტომ დროებით ვუთიშავთ მას ამ ფუნქციას).</p>
<p>
<pre class="brush: bash; title: ; notranslate">tune2fs -O ^has_journal /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(4, 288); </script></p>
<p>4.   ვხსნით მთელ დისკს fdisk უტილიტით /dev/sdd  <em>(და არა ცალკეულ დანაყოფს sdd1.)</em></p>
<p>
<pre class="brush: bash; title: ; notranslate">fdisk /dev/sdd</pre>
<p><script> devfmt_addAjaxBuffer(5, 288); </script></p>
<p>გამოვა ინტერაქტიული მენიუ:</p>
<p>
<pre class="brush: bash; title: ; notranslate">Command (m for help): </pre>
<p><script> devfmt_addAjaxBuffer(6, 288); </script></p>
<p>4.1.   დააჭირეთ p ღილაკს, გამოიტანს ინფორმაციას დისკზე და გვაჩვენებს მის დანაყოფებს (ეს კარგი პრაქტიკაა, კიდევ ერთხელ გადახედავთ, რომ დანაყოფები არ აგერიოთ)</p>
<p>
<pre class="brush: bash; title: ; notranslate">Command (m for help): p</pre>
<p><script> devfmt_addAjaxBuffer(7, 288); </script></p>
<p>4.2.   ვშლით დანაყოფს, ჩვენს შემთხვევაში ეს არის /dev/sdd1, ეს ავტომატურად მონიშნულია ამიტომ უბრალოდ დააჭირეთ d-ს და შემდეგ enter-ს) არ ინერვიულოთ ამ დროს არ წაიშლება თქვენი ინფორმაცია, უბრალოდ წაიშლება ძველი partition table.</p>
<p>
<pre class="brush: bash; title: ; notranslate">Command (m for help): d</pre>
<p><script> devfmt_addAjaxBuffer(8, 288); </script></p>
<p>გამოვა შეტყობინება:</p>
<p>
<pre class="brush: plain; title: ; notranslate">&gt;Selected partition 1</pre>
<p><script> devfmt_addAjaxBuffer(9, 288); </script></p>
<p>4.3.   ვქმინით ახალ partition table&#8217;ს &#8211; n.</p>
<p>
<pre class="brush: bash; title: ; notranslate">Command (m for help): n </pre>
<p><script> devfmt_addAjaxBuffer(10, 288); </script></p>
<p>4.4.   ვირჩევთ პირველად დანაყოფს (Primary Partition).</p>
<p>
<pre class="brush: bash; title: ; notranslate">Command (m for help): p</pre>
<p><script> devfmt_addAjaxBuffer(11, 288); </script></p>
<p>4.5.   Linux-ში შეგვიძლია 1 დისკზე გვქონდეს 4 პირველადი დანაყოფი, ჩვენ არ გვაქ არცერთი /dev/sdd დისკისთვის  ამიტომ ვირჩვთ 1-ს.</p>
<p>
<pre class="brush: bash; title: ; notranslate">Command (m for help): 1</pre>
<p><script> devfmt_addAjaxBuffer(12, 288); </script></p>
<p>4.6.   ამის შემდეგ გამოვა ორი ინტერაქტიული კითხვა სადაც გვკითხავს პირველი და ბოლო ცილინდრის მნიშვნელობებს, ეს ნაგულისხმევი მნიშვნელობებია და ამიტომ მათ მნიშვნელობას  არ ვცვლით, უბრალოდ 2-ჯერ დააჭირეთ enter-ს.</p>
<p>
<pre class="brush: bash; title: ; notranslate">Partition number (1-4): &lt;Enter&gt;
Last cylinder, +cylinders or +size{K,M,G} (1-xxxx, default xxxx): &lt;Enter&gt;</pre>
<p><script> devfmt_addAjaxBuffer(13, 288); </script></p>
<p>4.7.   ჩვენ შევქმენით ახალი  partition table, რომელმაც უკვე იცის თუ რა ზომის იქნება ახალი დანაყოფი (შეიცვალა ბოლო ცილინდრის მნიშვნელობა),<br />
შევინახოთ ცვლილებები &#8211; w.</p>
<p>
<pre class="brush: bash; title: ; notranslate">Command (m for help): w</pre>
<p><script> devfmt_addAjaxBuffer(14, 288); </script></p>
<p>5.   ვამოწმებთ ახალ ext2 ფაილურ სისტემას შეცდომებზე:</p>
<p>
<pre class="brush: bash; title: ; notranslate">e2fsck -f /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(15, 288); </script></p>
<p>6.   ვზრდით/ვამცირებთ ფაილური სისტემის ზომას, resize2fs-ის საშუალებით შეგვიძლია გავზარდოთ ან შევამციროთ ფაილური სისტემის ზომა  ონლაინ რეჟიმში, შეგვიძლია პარამეტრად გადავცეთ სასურველი ზომა, მაგრამ თუ ზომა მითითებული არ იქმნება ჩვენს მიერ ამ შემთხვევაში resize2fs ნაგულსხმევად აიღებს მაქსიმალურ მნიშვნელონბას partition table -დან, <em>(ეს ჩვენ უკვე გავაკეთეთ fdisk-ის გამოყენებით)</em>, რაც ძალიან მოსახერხეხბელია.</p>
<p>
<pre class="brush: bash; title: ; notranslate">resize2fs /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(16, 288); </script></p>
<p>7.   კვლავ ვამოწმებთ ზომაშეცვლილ დანაყოფს</p>
<p>
<pre class="brush: bash; title: ; notranslate">fsck -n /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(17, 288); </script></p>
<p>8.   შემდეგი ბრძანებით ჩავურთავთ ჟურნალირებას და მივიღებთ ისევ სრულყოფილი ext3/4  დანაყოფს.</p>
<p>
<pre class="brush: bash; title: ; notranslate">tune2fs -j /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(18, 288); </script></p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/drive-harddisk.png"><img class="alignleft size-full wp-image-361" style="border: 0pt none;" title="მყარი-დისკი" src="http://sysadmin.softgen.ge/wp-content/uploads/2010/11/drive-harddisk.png" alt="მყარი-დისკი" width="48" height="48" /></a></p>
<p>სასურველია გადავტვირთოთ OS 4-ე საფეხურის დასრულებისთანავე და შემდეგ გადავიდეთ დანარჩენ საფეხურებზე, მთლიანი პროცედურის დამთავრების შემდეგ აკრიფეთ შემდეგი ბრძანება ზომის ცვლილების სანახავად:</p>
<p>
<pre class="brush: bash; title: ; notranslate">df -h /dev/sdd1</pre>
<p><script> devfmt_addAjaxBuffer(19, 288); </script></p>
]]></content:encoded>
			<wfw:commentRss>http://sysadmin.softgen.ge/2010/11/%e1%83%95%e1%83%96%e1%83%a0%e1%83%93%e1%83%98%e1%83%97-ext3ext4-%e1%83%93%e1%83%90%e1%83%9c%e1%83%90%e1%83%a7%e1%83%9d%e1%83%a4%e1%83%94%e1%83%91%e1%83%a1-partition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ვუმკლავდებით SSH შეტევებს</title>
		<link>http://sysadmin.softgen.ge/2010/10/%e1%83%95%e1%83%a3%e1%83%9b%e1%83%99%e1%83%9a%e1%83%90%e1%83%95%e1%83%93%e1%83%94%e1%83%91%e1%83%98%e1%83%97-ssh-%e1%83%a8%e1%83%94%e1%83%a2%e1%83%94%e1%83%95%e1%83%94%e1%83%91%e1%83%a1/</link>
		<comments>http://sysadmin.softgen.ge/2010/10/%e1%83%95%e1%83%a3%e1%83%9b%e1%83%99%e1%83%9a%e1%83%90%e1%83%95%e1%83%93%e1%83%94%e1%83%91%e1%83%98%e1%83%97-ssh-%e1%83%a8%e1%83%94%e1%83%a2%e1%83%94%e1%83%95%e1%83%94%e1%83%91%e1%83%a1/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 14:33:26 +0000</pubDate>
		<dc:creator>frrrredo</dc:creator>
				<category><![CDATA[iptables]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://sysadmin.softgen.ge/?p=206</guid>
		<description><![CDATA[საიტების უმრავლესობა არ ტყდება SQL Injection, XSS, XMLRPC, ან HTTP სერვერის ბაგების გამო, ისინი ტყდება მარტივი გადასინჯვის მეთოდით ftp სერვერზე, ssh-ზე (&#8220;ტუპოი პერებორით&#8221;). სცენარი მარტივია: ირჩევა სამიზნე საიტები, ეშვება პაროლების გადასინჯვის პროგრამა  &#8220;შემტევის&#8221; ლოკალურ კომპიუტერზე ან რომელიმე გატეხილ სერვზე, ციკლი აგენერირებს მომხმარებლის სახელებს და პაროლებს და სინჯავს -უგზავნის მათ სამიზნე სერვერს სანამ არ მოხდება პაროლის [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2010/10/ssh_brute.png"><img class="alignleft size-full wp-image-211" title="Dictionary Attack " src="http://sysadmin.softgen.ge/wp-content/uploads/2010/10/ssh_brute.png" alt="Dictionary Attack " width="250" height="251" /></a>საიტების უმრავლესობა არ ტყდება SQL Injection, XSS, XMLRPC, ან HTTP სერვერის ბაგების გამო, ისინი ტყდება მარტივი <a href="http://en.wikipedia.org/wiki/Dictionary_attack" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Dictionary_attack?referer=');">გადასინჯვის მეთოდით </a> ftp სერვერზე, ssh-ზე (&#8220;ტუპოი პერებორით&#8221;). სცენარი მარტივია: ირჩევა სამიზნე საიტები, ეშვება პაროლების გადასინჯვის პროგრამა  &#8220;შემტევის&#8221;  ლოკალურ კომპიუტერზე ან რომელიმე გატეხილ სერვზე, ციკლი აგენერირებს მომხმარებლის სახელებს და პაროლებს და სინჯავს -უგზავნის მათ სამიზნე სერვერს სანამ არ მოხდება პაროლის დამთხვევა. ეს ციკლი შეძლება რამოდენიმე დღე გრძელდებოდეს წამში 10 ან მეტი გადასინჯვის ინტრევალით.</p>
<p>ქართული web რეალობა: <em>ტყდება რამოდენიმე საიტი, მერე კიდევ მათი გარკვეული რაოდენობა, შემდეგ კიდევ რამოდენიმე და ცოტა ხანში ირკვევა, რომ გატეხილა ჰოსტინგი და არა უშუალოდ საიტები</em>. ამის შემდეგ &#8220;შემტევს&#8221; ანუ ადამიანს ვინც ეს მარტივი ციკლი გაუშვა აქვს ტოტალური კონტროლი ყველა საიტზე რაც ამ ჰოსტინგზეა განთავსებული. მარტივი და ეფექტური გამოსავალი ასეთ სიტუაციში არის iptables გამოყენება. Iptables -ს საშუალებით შეგვიძლია შევზღუდოთ კავშირების რაოდენობა დროის მიხედვით (შეტევის მცდელობების რაოდენობა). ჩავწეროთ ლოგებში შეტევის მცდელობები და სამუდამოდ ავკრძალოთ წვდომა შემტევის IP მისამართი(ები)დან.<span id="more-206"></span></p>
<p><em>პოსტი  მოიცავს  iptables და  (r)syslog სერვერის  კონფიგურაციას RHEL/Centos/Fedora/ დისტრიბუტივებისთვის, მაგრამ  აღნიშნული კონფუგურაციის მორგება თავისუფლად არის შესაძლებელი ნებისმიერი წარმოშობის  ლინუქსისთვის.</em></p>
<p>ყურადღება <strong>iptables</strong> სცენარი:</p>
<p>
<pre class="brush: bash; highlight: [7]; title: ; notranslate">iptables -N SSH_CHECK
iptables -N SSH_ATTACKED
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j SSH_ATTACKED
iptables -A SSH_CHECK -j ACCEPT
iptables -A SSH_ATTACKED -j LOG --log-prefix &quot;SSH Attack Detected:&quot; --log-level 7
iptables -A SSH_ATTACKED -j DROP</pre>
<p><script> devfmt_addAjaxBuffer(2, 206); </script></p>
<p>განვიხილოთ დეტაულრად:</p>
<p>1.  ვქმნით ორ ახალ <strong>iptable</strong> ჯაჭვს (chain) სახელად <strong>SSH_CHEK</strong> და <strong>SSH_ATTACKED</strong>.</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> iptables -N SSH_CHECK</pre>
<p><script> devfmt_addAjaxBuffer(3, 206); </script></p>
<p>2.  ვამოწმებთ ყოველ ახალ კავშირს, რომელიც გაივლის შემდეგ წეს და თუ ემთხვევა 22-ე პორტს და  ახალი TCP კავშირია &#8211; ვარდება <strong>SSH_CHEK</strong> ჯაჭვში.</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK</pre>
<p><script> devfmt_addAjaxBuffer(4, 206); </script></p>
<p>3. <strong>iptables</strong> გვაძლევს საშუალებას შევქმნათ დროებითი ცხრილები (recent match) და  დავაფიქსიროთ ერთნაირი  source IP-ები, რომლითაც შეგვეძლება მათი &#8220;დაჭერა&#8221; და შემდეგ მათთვის წესების გაწერაც. კონკრეტული ბრძანებით ჩვენს დროებით ცხრილს ვანიჭებთ სახელს &#8220;<strong>SSH</strong>&#8220;.</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> iptables -A SSH_CHECK -m recent --set --name SSH</pre>
<p><script> devfmt_addAjaxBuffer(5, 206); </script></p>
<p>4. ქვედა ბრძანებით ვაყალიბებთ შემდეგ პირობას/წესს: თუ SSH დროებით ცხრილში მყოფი IP დაამყარებს სამ ახალ კავშირს &#8211; გადავა ჯაჭვში &#8220;<strong>SSH_ATTACKED</strong>&#8221;   1 წუთის განმავლობაში.</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j SSH_ATTACKED</pre>
<p><script> devfmt_addAjaxBuffer(6, 206); </script></p>
<p>5. თუ  <strong>SSH_CHECK</strong> ჯაჭვში არსებული კავშირი(ები) არ ემთხვევა წინა წესს მაშინ კავშირი 22-ე პორტზე დაშვებულია.</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> iptables -A SSH_CHECK -j ACCEPT</pre>
<p><script> devfmt_addAjaxBuffer(7, 206); </script></p>
<p>6. ვალოგირებთ კავშირებს რომლებიც მოხვდნენ  <strong>SSH_ATTACKED</strong> ჯაჭვში, ვუგზავნით მათ (r)syslog სერვერს პრიორიტეტით 7 (ლოგირებას განვიხილავთ ქვევით):</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> iptables -A SSH_ATTACKED -j LOG --log-prefix &quot;SSH Attack Detected:&quot; --log-level 7</pre>
<p><script> devfmt_addAjaxBuffer(8, 206); </script></p>
<p>7. ვაჭრით მთლიანად <strong>SSH_ATTACKED</strong> ჯაჭვში არსებულ კვაშირებს და ვბლოკავთ ახალ კავშირს იგივე IP მისამართიდან 60 წამის განმავლობაში.</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> iptables -A SSH_ATTACKED -j DROP</pre>
<p><script> devfmt_addAjaxBuffer(9, 206); </script></p>
<p>ამის შემდეგ ვინახავთ ცვლილებებს ბრძანებით:</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> service iptables save</pre>
<p><script> devfmt_addAjaxBuffer(10, 206); </script></p>
<p>გადავტვირთოთ სერვისი ბრაძანებით:</p>
<p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate"> service iptables restart</pre>
<p><script> devfmt_addAjaxBuffer(11, 206); </script></p>
<p>iptable მუშაობს სტრიქონის რიგითობის მიხედვით, განვიხილოთ შემდეგი მაგალითი:<br />
<strong>1.  iptables -A INPUT -p tcp -m state -m tcp &#8211;dport 22 &#8211;state NEW -j DROP</strong><br />
<strong>2.  iptables -A INPUT -p tcp -m state -m tcp &#8211;dport 22 &#8211;state NEW -j ACCEPT</strong><br />
მოცემულ შემთხვევაში  პირველი წესი ბლოკავს 22-ე პორტს და მეორე წესი აღებს აღნიშნულს<br />
ამ შემთხვევაში 22-ე პორტზე შემოსული მოთხოვნა ჯერ გაივლის პირველ  წესს  და აღარ გადავა მომდევნო წესზე, რადგან იგი  პირველივე წესზე დაიბლოკება, იმისთვის რომ ჩვენმა SSH წესმა (<span style="color: #2803a9;">chain SSH_CHECK</span>) გამართულად იმუშაოს საჭიროა ის იყოს რიგობრივად უფრო მაღლა ვიდრე &#8220;<span style="color: #00b700;">ACCEPT <span style="color: #000000;">22</span> </span>&#8221;  (ეს წესი ნაგულისხმევად არსებოსბს iptables-ში, რათა თქვენ შეძლოთ ssh ით სერვერზე შესვლა).</p>
<p><a href="http://sysadmin.softgen.ge/wp-content/uploads/2010/10/iptables-ssh.png"><img class="alignleft size-full wp-image-249" title="iptables-ssh" src="http://sysadmin.softgen.ge/wp-content/uploads/2010/10/iptables-ssh6-e1287423112465.png" alt="" width="645" height="191" /></a><br />
<em>სურათზე მეტი თვალსაჩონოებისთვის ნაჩვენებია <a href="http://www.webmin.com/" onclick="pageTracker._trackPageview('/outgoing/www.webmin.com/?referer=');">webmin</a> პროგრამული უზრუნველყოფის ეკრანის ანაბეჭდი <span style="color: #808080;">(აღნიშნული  საშუალებას </span></em><span style="color: #888888;"><em>გვაძლევს</em></span><em><span style="color: #808080;"> გრაფიკულ რეჟიმში  სინტაქსის ცოდნის გარეშე ვმართოთ iptables წესები.)</span></em></p>
<p><span style="color: #808080;"><strong><span style="color: #000000;">ლოგირება</span></strong></span></p>
<p><span style="color: #808080;"><span style="color: #000000;">რაც შეეხება ლოგირებას, მნიშვნელობა არა აქვს რა log სერვერს იყენებთ, <em>(კონკრეტული შემთხვევა აღწერილი იქნება rsyslog სერევრიუს მაგალითზე)</em> iptables-მა გადასცა შეტყობინებები  სისტემის ბირთვს (kernel) პრიორიტეტით 7  , აღნუიშნული პრიორიტეტი, სტანდარტულ კონფიგურაციაში არ  არის გამიჯნული და გაწერილია როგორც ნაგულისხმევი (kern.*) , ჩვენ ორი არჩევანი გვაქ :  ჩავწეროთ kern.7-ზე შემოსული ლოგები და მათ შორის iptables შეტყობინებები /var/log/firewall.log ფაილში ან დავიჭიროთ ლოგის პრეფიქსის მიხედვით  და ცალკეული iptables წესისთვის ინდივიდუალური ლოგ ფაილები შევქმნათ. </span></span></p>
<p><span style="color: #808080;"><span style="color: #000000;">პირველის შემთხვევაში ლოგ ფაილში მოხვდება არამარტო </span></span>iptables შეტყობინებები არამედ ყველა ის სერვისიბი/დემონები რომლებიც აგზავნაინ შეტყობინებებს პრიორიტეტით  7. შედეგად მივიღებთ ფართო დიაპაზონის ლოგ ფაილს სადაც კითხვადობა იქნება გაძლნელებული.</p>
<p>
<pre class="brush: bash; title: ; notranslate"> kern.7  /var/log/firewall.log</pre>
<p><script> devfmt_addAjaxBuffer(12, 206); </script></p>
<p><span style="color: #808080;"><span style="color: #000000;">მეორე პარამეტრი უფრო მოხერხებულია გვაძლევს რა &#8220;წმინდა ლოგებს &#8221; :) ამიტომ ჩვენი არჩევანიც მასზე შეჩერდება. სტანდარტულად (r)syslog კონფიგურაციის ფაილი ინახება /etc/rsyslog.conf ვარედაქტირებთ ფაილს და ბოლოში ვამატებთ: </span></span></p>
<p>
<pre class="brush: bash; title: ; notranslate"> :msg, contains, &quot;SSH Attack Detected&quot; -/var/log/iptables-ssh.log
&amp; ~</pre>
<p><script> devfmt_addAjaxBuffer(13, 206); </script></p>
<p><span style="color: #808080;"><span style="color: #000000;">ვინახავთ და ვტვირთავთ ლოგ სერვერს ცვლილებების მისაღებად:</span></span></p>
<p><span style="color: #808080;"><span style="color: #000000;"> </span></span></p>
<p>
<pre class="brush: bash; title: ; notranslate">service rsyslog restart</pre>
<p><script> devfmt_addAjaxBuffer(14, 206); </script></p>
<p><span style="color: #808080;"><span style="color: #000000;">მოვახდინოთ ssh შეტევის სიმულაცია მეზობელი კომპიუტერიდან რომლის IP მისამართი დავუშვათ არის: 192.168.1.4 (1 წუთის განმავლობაში 4 ჯერ სცადეთ დაკავშირება თქვენ სერევრთან აღნიშნული IP დან SSH ზე არასწორი პაროლით). მეოთხე ცდა წარუმატრებელი იქნება თქვენთვის და ვეღარ შეძლებთ დაკავშირებას სერვერთან 1 წუთის განმავლობაში, დროა შეამოწმოთ </span></span>/var/log/iptables-ssh.log ფაილი, მას ექნება მსგავსი შიგთავსი:</p>
<pre>Oct 15 15:15:33 sysadmin.softgen.ge kernel: SSH Attack Detected:IN=lo OUT= MAC=D8:D3:85:7E:8F:B7
<span style="color: #ff0000;"><strong>SRC=192.168.1.4</strong></span> DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=10378 DF PROTO=TCP
SPT=50061 DPT=22 WINDOW=32792 RES=0x00 SYN URGP=0</pre>
<p><script> devfmt_addAjaxBuffer(15, 206); </script><br />
<strong>სასჯელ აღსრულება</strong></p>
<p>ვბლოკავთ შემტევის IP  მისამართ(ებს) სამუდამოდ :)</p>
<p><code>iptables -A INPUT -s 192.168.1.4  -j DROP</code><script> devfmt_addAjaxBuffer(1, 206); </script></p>
<p>ზემოთ აღნიშნული გადაწყვეტილება:  1) მნიშვნელოვანად ამცირებს  მსხვერპლად ყოფნის საფრთხეს;  2) გვაძლევს ინფორმაციას  შემტევზე; 3) შეგვიძლია სერევრის  სრული ისზოლირება შეტევებისაგან.</p>
]]></content:encoded>
			<wfw:commentRss>http://sysadmin.softgen.ge/2010/10/%e1%83%95%e1%83%a3%e1%83%9b%e1%83%99%e1%83%9a%e1%83%90%e1%83%95%e1%83%93%e1%83%94%e1%83%91%e1%83%98%e1%83%97-ssh-%e1%83%a8%e1%83%94%e1%83%a2%e1%83%94%e1%83%95%e1%83%94%e1%83%91%e1%83%a1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>chmod კალკულატორი</title>
		<link>http://sysadmin.softgen.ge/2010/08/chmod-%e1%83%99%e1%83%90%e1%83%9a%e1%83%99%e1%83%a3%e1%83%9a%e1%83%90%e1%83%a2%e1%83%9d%e1%83%a0%e1%83%98/</link>
		<comments>http://sysadmin.softgen.ge/2010/08/chmod-%e1%83%99%e1%83%90%e1%83%9a%e1%83%99%e1%83%a3%e1%83%9a%e1%83%90%e1%83%a2%e1%83%9d%e1%83%a0%e1%83%98/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 16:02:26 +0000</pubDate>
		<dc:creator>frrrredo</dc:creator>
				<category><![CDATA[Sys Tools]]></category>

		<guid isPermaLink="false">http://sysadmin.softgen.ge/?p=198</guid>
		<description><![CDATA[chmod კალკულატორი Permissions:&#160; &#160; owner group other read write execute]]></description>
			<content:encoded><![CDATA[<p>        <script type="text/javascript">
<!--</p>
<p>function octalchange() 
{
	var val = document.chmod.t_total.value;
	var ownerbin = parseInt(val.charAt(0)).toString(2);
	while (ownerbin.length<3) { ownerbin="0"+ownerbin; };
	var groupbin = parseInt(val.charAt(1)).toString(2);
	while (groupbin.length<3) { groupbin="0"+groupbin; };
	var otherbin = parseInt(val.charAt(2)).toString(2);
	while (otherbin.length<3) { otherbin="0"+otherbin; };
	document.chmod.owner4.checked = parseInt(ownerbin.charAt(0)); 
	document.chmod.owner2.checked = parseInt(ownerbin.charAt(1));
	document.chmod.owner1.checked = parseInt(ownerbin.charAt(2));
	document.chmod.group4.checked = parseInt(groupbin.charAt(0)); 
	document.chmod.group2.checked = parseInt(groupbin.charAt(1));
	document.chmod.group1.checked = parseInt(groupbin.charAt(2));
	document.chmod.other4.checked = parseInt(otherbin.charAt(0)); 
	document.chmod.other2.checked = parseInt(otherbin.charAt(1));
	document.chmod.other1.checked = parseInt(otherbin.charAt(2));
	calc_chmod(1);
};</p>
<p>function calc_chmod(nototals)
{
  var users = new Array("owner", "group", "other");
  var totals = new Array("","","");
  var syms = new Array("","","");</p>
<p>	for (var i=0; i<users.length; i++)
	{
	  var user=users[i];
		var field4 = user + "4";
		var field2 = user + "2";
		var field1 = user + "1";
		//var total = "t_" + user;
		var symbolic = "sym_" + user;
		var number = 0;
		var sym_string = "";</p>
<p>		if (document.chmod[field4].checked == true) { number += 4; }
		if (document.chmod[field2].checked == true) { number += 2; }
		if (document.chmod[field1].checked == true) { number += 1; }</p>
<p>		if (document.chmod[field4].checked == true) {
			sym_string += "r";
		} else {
			sym_string += "-";
		}
		if (document.chmod[field2].checked == true) {
			sym_string += "w";
		} else {
			sym_string += "-";
		}
		if (document.chmod[field1].checked == true) {
			sym_string += "x";
		} else {
			sym_string += "-";
		}</p>
<p>		//if (number == 0) { number = ""; }
	  //document.chmod[total].value = 
		totals[i] = totals[i]+number;
		syms[i] =  syms[i]+sym_string;</p>
<p>  };
	if (!nototals) document.chmod.t_total.value = totals[0] + totals[1] + totals[2];
	document.chmod.sym_total.value = "-" + syms[0] + syms[1] + syms[2];
}
window.onload=octalchange
//-->
      </script></p>
<table cellspacing="0" cellpadding="0" border="0" width="420">
<tbody>
<tr>
<td style="border-right: 3px solid rgb(60, 108, 146); border-bottom: 3px solid rgb(60, 108, 146); padding: 20px;">
<form name="chmod">
<p style="font-family: helvetica,arial,sans-serif; font-weight: bold; font-style: normal; text-decoration: none; background: none repeat scroll 0% 0% rgb(60, 108, 146); color: rgb(255, 255, 255); font-size: 20px; text-align: center; padding-top: 8px; padding-bottom: 8px;"> <img align="left" vspace="0" hspace="0" alt="Raid კალკულატორი" src="http://softgen.ge/imgs/filelock.png" style="margin: -24px -30px; background: none repeat scroll 0% 0% transparent; border: medium none;"><br />
<rel style="color: rgb(255, 255, 255);" href="#" title="RAID Calculator">chmod კალკულატორი</rel>  </p>
<table width="390" cellspacing="0" cellpadding="4" border="0" align="center" ;="" style="font: 12px Verdana;">
<tbody>
<tr align="LEFT" valign="MIDDLE">
<td>Permissions:&nbsp; </td>
<td>
<input type="text" onkeyup="octalchange()" size="4" value="751" name="t_total">
                  </td>
<td>&nbsp; </p>
<input type="text" style="border: 0px none;" readonly="1" size="12" value="-rwxr-x--x" name="sym_total">
                  </td>
</tr>
</tbody>
</table>
<p></p>
<table widht="400" cellspacing="0" cellpadding="4" align="center" style="font: 12px Verdana; border: 1px solid;" class="datatable">
<tbody>
<tr bgcolor="#3c6c92">
<td align="left" width="90"> </td>
<td align="center" width="65" style="color: white; "><b>owner<br />
 </b></td>
<td align="center" width="65" style="color: white;"><b>group<br />
 </b></td>
<td align="center" width="65" style="color: white;"><b>other<br />
 </b></td>
</tr>
<tr bgcolor="#dddddd">
<td bgcolor="#ffffff" align="left" width="90" nowrap="nowrap">read</td>
<td bgcolor="#eeeeee" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="4" name="owner4" checked="checked">
                  </td>
<td bgcolor="#ffffff" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="4" name="group4" checked="checked">
                  </td>
<td bgcolor="#eeeeee" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="4" name="other4">
                  </td>
</tr>
<tr bgcolor="#dddddd">
<td bgcolor="#ffffff" align="left" width="90" nowrap="nowrap">write</td>
<td bgcolor="#eeeeee" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="2" name="owner2" checked="checked">
                  </td>
<td bgcolor="#ffffff" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="2" name="group2">
                  </td>
<td bgcolor="#eeeeee" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="2" name="other2">
                  </td>
</tr>
<tr bgcolor="#dddddd">
<td bgcolor="#ffffff" align="left" width="90" nowrap="nowrap">execute</td>
<td bgcolor="#eeeeee" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="1" name="owner1" checked="checked">
                  </td>
<td bgcolor="#ffffff" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="1" name="group1" checked="checked">
                  </td>
<td bgcolor="#eeeeee" align="center" width="65">
<input type="checkbox" onclick="calc_chmod()" value="1" name="other1" checked="checked">
                  </td>
</tr>
</tbody>
</table></form>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://sysadmin.softgen.ge/2010/08/chmod-%e1%83%99%e1%83%90%e1%83%9a%e1%83%99%e1%83%a3%e1%83%9a%e1%83%90%e1%83%a2%e1%83%9d%e1%83%a0%e1%83%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Raid კალკულატორი</title>
		<link>http://sysadmin.softgen.ge/2010/08/raid-%e1%83%99%e1%83%90%e1%83%9a%e1%83%99%e1%83%a3%e1%83%9a%e1%83%90%e1%83%a2%e1%83%9d%e1%83%a0%e1%83%98/</link>
		<comments>http://sysadmin.softgen.ge/2010/08/raid-%e1%83%99%e1%83%90%e1%83%9a%e1%83%99%e1%83%a3%e1%83%9a%e1%83%90%e1%83%a2%e1%83%9d%e1%83%a0%e1%83%98/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 19:48:56 +0000</pubDate>
		<dc:creator>frrrredo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sys Tools]]></category>

		<guid isPermaLink="false">http://sysadmin.softgen.ge/?p=139</guid>
		<description><![CDATA[RAID კალკულატორი დისკების რაოდენობა: დისკის მოცულობა: გიგაბაიტებში აირჩიე RAID კონფიგურაცია Raid 0 &#8212; სეგმენტებად დაყოფა Raid 1 &#8212; მხოლოდ 2 დისკი Raid 10 &#8212; ან 0+1 მინიმუმ 4 დისკი Raid 5 &#8212; მინიმუმ 3 დისკი Raid 6 &#8212; მინიმუმ 4 დისკი Raid 50 &#8212; მინიმუმ 6 დისკი Raid 60 &#8212; მინიმუმ 8 დისკი მთლიანი ასათვისებელი [...]]]></description>
			<content:encoded><![CDATA[
<p><script language="JavaScript"> 
<!--</p>
<p>function CalculateRaid()
{
	NumberOfDisks = parseInt(document.FORM_Raid.txtNumberOfDisks.value);
	//alert(NumberOfDisks);
	SpaceOnDrives = parseFloat(document.FORM_Raid.txtSpaceofDrives.value);
	DiskSpace = NumberOfDisks*SpaceOnDrives;</p>
<p>	//alert(document.FORM_Raid.txtDiskSpace.value);
	strTitle = "";
	strDef = "";
	strRedundancy = "";
	strPerformance = "";
	strUtilization = "";
	strDrawbacks = "";</p>
<p>  if (document.FORM_Raid.txtNumberOfDisks.value == "" || document.FORM_Raid.txtSpaceofDrives.value == "")
  {</p>
<p>  }
  else
  {	
	for (i=0;i<document.FORM_Raid.rRAIDTYPE.length;i++)
	{
		if (document.FORM_Raid.rRAIDTYPE[i].checked)
		{
			strRaidType = document.FORM_Raid.rRAIDTYPE[i].value; 
		}</p>
<p>	}</p>
<p>	//alert (strRaidType);
	if (parseInt(document.FORM_Raid.txtNumberOfDisks.value) != 2 &#038;&#038; strRaidType == "RAID1")
	{
		strRaidType = "XRAID1";
	}
	if (parseInt(document.FORM_Raid.txtNumberOfDisks.value)%2 != 0 &#038;&#038; strRaidType == "RAID01")
	{
		strRaidType = "XVALUE2";
	}
	if (document.FORM_Raid.txtSpaceofDrives.value == "" || document.FORM_Raid.txtNumberOfDisks.value == "")
	{
		strRaidType = "XVALUE";	
	}
	switch(strRaidType)
	{
		case "XVALUE2":
			strString = "";
			strString = strString + "შეცდომა \n";
			strString = strString + "You must enter a multiple of '2' for the Number Of Disks.";
			document.FORM_Raid.txtDiskSpace.value = "შეცდომა";
			break;
		case "XRAID1":
			strString = "";
			strString = strString + "შეცდომა \n";
			strString = strString + "You must enter '2' for the Number Of Disks.";
			document.FORM_Raid.txtDiskSpace.value = "შეცდომა";
			break;
		case "XVALUE":
			document.FORM_Raid.txtDiskSpace.value = "შეცდომა";	
			break;
		case "RAID0":
			strUtilization = DiskSpace ;
			document.FORM_Raid.txtDiskSpace.value = parseInt(strUtilization*100)/100;
			break;
		case "RAID1":
			strUtilization = DiskSpace/2 ;
			document.FORM_Raid.txtDiskSpace.value = parseInt(strUtilization*100)/100;
			break;
		case "RAID01":
			strUtilization = DiskSpace/2 ;
			document.FORM_Raid.txtDiskSpace.value = parseInt(strUtilization*100)/100;</p>
<p>			break;
		case "RAID5":
			strUtilization = (DiskSpace * ((parseInt(((NumberOfDisks-1)/NumberOfDisks)*10000)/100)/100)) ;
			document.FORM_Raid.txtDiskSpace.value = parseInt(strUtilization*100)/100;
			break;</p>
<p>		case "RAID6":
			strUtilization = (DiskSpace * ((parseInt(((NumberOfDisks-2)/NumberOfDisks)*10000)/100)/100)) ;
			document.FORM_Raid.txtDiskSpace.value = parseInt(strUtilization*100)/100;
			break;</p>
<p>		case "RAID50":
			strUtilization = (DiskSpace * ((parseInt(((NumberOfDisks-2)/NumberOfDisks)*10000)/100)/100)) ;
			document.FORM_Raid.txtDiskSpace.value = parseInt(strUtilization*100)/100;
			break;</p>
<p>		case "RAID60":
			strUtilization = (DiskSpace * ((parseInt(((NumberOfDisks-4)/NumberOfDisks)*10000)/100)/100)) ;
			document.FORM_Raid.txtDiskSpace.value = parseInt(strUtilization*100)/100;
			break;
	}
  }</p>
<p>}
function openStatic()
{
	document.FORM_Raid.txtCALC.value = "    შეიყვნაეთ თქვენი ინფორმაცია და აირჩიეთ სასურველი RAID კონფიგურაცია.";
}</p>
<p>//-->
</script> </p>
<p>
<rel   onLoad="openStatic();"> </p>
<table border="0"  cellpadding="0" cellspacing="0" width="720">
<tr>
<td style="border-bottom: 3px solid #3c6c92; border-right: 3px solid #3c6c92;  bordercolor:#3c6c92; padding-left:5px; padding-right:5px;">
<form name="FORM_Raid">
<p style="font-family: helvetica, arial, sans-serif; font-weight:bold;   font-style:normal; text-decoration:none; background: #3c6c92; color:#ffffff; font-size:20px; text-align:center; padding-top:8px; padding-bottom:8px;"> <img  align="left" alt="Raid კალკულატორი" src="http://softgen.ge/imgs/a1.png" vspace="0" hspace="0" style="margin-top:-68; margin: -18px  -16px; background:none; border:none"><br />
<rel style="color:#ffffff;" href="#"  title="RAID Calculator">RAID კალკულატორი</rel> </span> </p>
<p>
		<span>დისკების რაოდენობა:</span> </p>
<input type="text" name="txtNumberOfDisks" value size="5" onBlur="CalculateRaid();" style="margin-left:17px"> <br />
		<span>დისკის მოცულობა:</span> </p>
<input type="text" value name="txtSpaceofDrives" size="5"  onBlur="CalculateRaid();" style="margin-left:34px"><span style="font-style:italic; font-size:12px; color:grey;" >  გიგაბაიტებში</span></p>
<p><span>აირჩიე RAID კონფიგურაცია</span></p>
<input type="radio" name="rRAIDTYPE" value="RAID0" onClick="CalculateRaid();" CHECKED>
<p><span style="font-weight:bold; font-size:1em; font-family:verdana;">Raid 0 </span><span style="color:grey; font-style:italic; font-size:12px; font-weight:bold;">   &#8212; სეგმენტებად დაყოფა</span>  </p>
<input type="radio" name="rRAIDTYPE" value="RAID1" onClick="CalculateRaid();">
<span style="font-weight:bold; font-size:1em; font-family:verdana;">Raid 1  <span style="color:grey; font-style:italic; font-size:12px;">   &#8212; მხოლოდ 2 დისკი</span>  </p>
<input type="radio" name="rRAIDTYPE" value="RAID01" onClick="CalculateRaid();">
<span style="font-weight:bold; font-size:1em; font-family:verdana;">Raid 10 <span style="color:grey; font-style:italic; font-size:12px;">   &#8212;    ან 0+1  მინიმუმ 4 დისკი</span>  </p>
<input type="radio" name="rRAIDTYPE" value="RAID5" onClick="CalculateRaid();">
<span style="font-weight:bold; font-size:1em; font-family:verdana;">Raid 5<span style="color:grey; font-style:italic; font-size:12px;">   &#8212; მინიმუმ 3 დისკი</span>  </p>
<input type="radio" name="rRAIDTYPE" value="RAID6" onClick="CalculateRaid();">
<span style="font-weight:bold; font-size:1em; font-family:verdana;">Raid 6 <span style="color:grey; font-style:italic; font-size:12px;">   &#8212; მინიმუმ 4 დისკი</span>  </p>
<input type="radio" name="rRAIDTYPE" value="RAID50" onClick="CalculateRaid();">
<span style="font-weight:bold; font-size:1em; font-family:verdana;">Raid 50 <span style="color:grey; font-style:italic; font-size:12px;">  &#8212; მინიმუმ 6 დისკი</span>  </p>
<input type="radio" name="rRAIDTYPE" value="RAID60" onClick="CalculateRaid();">
<span style="font-weight:bold; font-size:1em; font-family:verdana;">Raid 60 <span style="color:grey; font-style:italic; font-size:12px;">   &#8212; მინიმუმ 8 დისკი </span> </p>
<p style="background:#edeceb;">
<p>		<span style="font-size:12px;">მთლიანი ასათვისებელი მოცულობა:</span></p>
<input type="text" value name="txtDiskSpace" size="6"   style="font-size:30px;  border:3px #edeceb solid; background:#edeceb;  font-weight:bold; text-align: right; font-family:verdana; color:#3c6c92;" ><span style="font-size:22px; color:#3c6c92;" > გბ</span>
</p>
</p></form>
</td>
<td width="230">
</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://sysadmin.softgen.ge/2010/08/raid-%e1%83%99%e1%83%90%e1%83%9a%e1%83%99%e1%83%a3%e1%83%9a%e1%83%90%e1%83%a2%e1%83%9d%e1%83%a0%e1%83%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EIGRP Metric Calculator</title>
		<link>http://sysadmin.softgen.ge/2010/07/eigr/</link>
		<comments>http://sysadmin.softgen.ge/2010/07/eigr/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 13:27:22 +0000</pubDate>
		<dc:creator>frrrredo</dc:creator>
				<category><![CDATA[Net Tools]]></category>
		<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://sysadmin.softgen.ge/?p=43</guid>
		<description><![CDATA[Bandwith: Delay: &#160;&#160; &#160;&#160; Bandwith: Delay: Metric: Bandwith + delay = function $G(id){ return document.getElementById(id);} function metric_calculation() { var bandw=2560000000 / parseInt($G("fbandwith").value); var delay=256 * parseInt($G("fdelay").value); $G("bandwith").innerHTML=bandw; $G("delay").innerHTML=delay; $G("met_cal").innerHTML=bandw+delay; return false; }]]></description>
			<content:encoded><![CDATA[<table>
<tbody>
<tr>
<td>
<form name="metric_calc" action="javascript:void(null)" onSubmit="metric_calculation();">Bandwith:</td>
<td>
<input id="fbandwith" name="fbandwith" type="text" /></td>
</tr>
<tr>
<td>Delay:</td>
<td>
<input id="fdelay" name="fdelay" type="text" /></td>
</tr>
<tr>
<td>&nbsp;&nbsp;</td>
<td>&nbsp;&nbsp;</td>
</tr>
<tr>
<td>
<input type="submit" value=" გამოთვლა " /></td>
</tr>
</tbody>
</table>
<p>Bandwith: <span id="bandwith" ></span><br />
Delay: <span id="delay" ></span></p>
<h4>Metric: Bandwith + delay = <span id="met_cal" ></span></h4>
<p><script type="text/javascript">
function $G(id){ return document.getElementById(id);}
function metric_calculation()
{
var bandw=2560000000 / parseInt($G("fbandwith").value);
var delay=256 * parseInt($G("fdelay").value);
$G("bandwith").innerHTML=bandw;
$G("delay").innerHTML=delay;
$G("met_cal").innerHTML=bandw+delay;
return false;
}
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://sysadmin.softgen.ge/2010/07/eigr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

