<?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>Всякие интересные штучки для WEB-разработчика &#187; FreeBSD/Linux</title>
	<atom:link href="http://iphp.com.ua/archives/category/freebsdlinux/feed" rel="self" type="application/rss+xml" />
	<link>http://iphp.com.ua</link>
	<description>блог о технологиях web-разработки // all your base are belong to us</description>
	<lastBuildDate>Thu, 17 Nov 2011 08:49:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Мониторинг системы под FreeBSD</title>
		<link>http://iphp.com.ua/archives/609</link>
		<comments>http://iphp.com.ua/archives/609#comments</comments>
		<pubDate>Sat, 05 Nov 2011 17:59:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=609</guid>
		<description><![CDATA[Системные команды, которыми можно проверить ресурсы системы: top -mio – показать I/O по процессам top -S – показать системные процессы в топе (по дефолту они не показываются) gstat – нагрузка на диски iostat -d -w1 -c7 – нагрузка на диски systat -io start 1 diskinfo -t da0 – тест на дисковую производительность tunefs -p /var/ [...]]]></description>
			<content:encoded><![CDATA[<p>Системные команды, которыми можно проверить ресурсы системы:</p>
<p><strong>top -mio</strong> – показать I/O по процессам<br />
<strong>top -S</strong> – показать системные процессы в топе (по дефолту они не показываются)<br />
<strong>gstat</strong> – нагрузка на диски<br />
<strong>iostat -d -w1 -c7</strong> – нагрузка на диски<br />
<strong>systat -io start 1</strong><br />
<strong>diskinfo -t da0</strong> – тест на дисковую производительность<br />
<strong>tunefs -p /var/</strong> – информация о настройках файловой системы<br />
<strong>vmstat -z</strong> чего не хватает<br />
<strong>vmstat -i</strong> прерывания по устройствам<br />
<strong>netstat -i</strong> ошибки на интерфейсах<br />
<strong>systat -ifstat</strong> – интенсивность передачи трафика<br />
<strong>netstat -inb</strong> – передано через интерфейс в байтах<br />
<strong>netstat -w1</strong> – количество пакетов/ошибок/байт на интерфейсе<br />
<strong>sysctl kern.ipc.numopensockets</strong> – количество открытых сокетов<br />
<strong>df -H</strong> – количество свободного места<br />
<strong>df -i</strong> – количество свободных инодов<br />
<strong>freecolor </strong> – очень симпатичная утилита для мониторинга использования памяти (ставится из портов)</p>
<p>Для детальной информации по расходу памяти:<br />
<strong><br />
fetch -o /usr/local/bin/free http://people.freebsd.org/~rse/dist/freebsd-memory<br />
chmod +x /usr/local/bin/free<br />
free<br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/609/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Тюнинг FreeBSD 7-8 (sysctl, loader.conf)</title>
		<link>http://iphp.com.ua/archives/606</link>
		<comments>http://iphp.com.ua/archives/606#comments</comments>
		<pubDate>Thu, 08 Sep 2011 09:27:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=606</guid>
		<description><![CDATA[Некоторые опции по тюнингу FreeBSD и описание к ним. Предупреждение: Бездумное копирование опций не всегда приводит к приросту производительности!!! /etc/sysctl.conf ###### Формат записей " параметр=значение # значение по умолчанию " NETWORK Запрет ответа при обращении на закрытые порты.  По стандарту, если на закрытый порт сервера приходит SYN-пакет, машина должна ответить RST-пакетом. Это упрощает сканирование портов, [...]]]></description>
			<content:encoded><![CDATA[<p>Некоторые опции по тюнингу FreeBSD и описание к ним.</p>
<p>Предупреждение: Бездумное копирование опций не всегда приводит к приросту производительности!!!<br />
<a name="more"></a><br />
<strong><span style="text-decoration: underline;">/etc/sysctl.conf</span></strong></p>
<pre><code> ###### Формат записей " параметр=значение # значение по умолчанию " </code></pre>
<p><strong><span style="text-decoration: underline;">NETWORK</span></strong><br />
<strong>Запрет ответа при обращении на закрытые порты. </strong><br />
По стандарту, если на закрытый порт сервера приходит SYN-пакет, машина должна ответить RST-пакетом.<br />
Это упрощает сканирование портов, а также дает достаточное количество информации (в виде ответов от сканируемого сервера) для определения версии ОС.<br />
&#171;Черные дыры&#187; заставляют FreeBSD быть предельно лаконичной, не отсылая ничего в ответ на запросы к закрытым портам.</p>
<pre><code> net.inet.tcp.blackhole=2 # 0 net.inet.udp.blackhole=1 # 0 </code></pre>
<p><strong>Увеличение размера очереди.</strong><br />
Защита очереди от SYN атак</p>
<pre><code> kern.ipc.somaxconn=4096 # 128 </code></pre>
<p>Чтобы сервер не стал жертвой DoS-атаки, можно включить <strong>механизм syncookies</strong>, который служит <strong>для защиты сервера от SYN-флуда. </strong><br />
Когда новое соединение не помещается в переполненный syncache, FreeBSD переходит в режим &#171;syncookies&#187; (<a rel="nofollow" href="http://iphp.com.ua/goto/http://www.protocols.ru/modules.php?name=News&amp;file=article&amp;sid=70"  rel="nofollow">TCP SYN cookies</a>).</p>
<p>При серьезной атаке может не менее серьезно выручить.</p>
<pre><code> net.inet.tcp.syncookies=1 # 1 <span id="more-606"></span> </code></pre>
<p><strong>Запрет ответа на широковещательный ECHO </strong><br />
Современная система не должна отвечать на широковещательные пинги, но и по сей день существуют сети, которые могут стать источником DoS-атаки.<br />
Чтобы не попасть в их список, выставляем:</p>
<pre><code> net.inet.icmp.bmcastecho=0 # 0 </code></pre>
<p><strong>Дропать все пакеты с флагами SYN+FIN.</strong><br />
Если не нужна поддержка смешного протокола T/TCP (TCP for Transactions), то пакеты с флагами SYN+FIN можно смело отбрасывать как неликвидные <img src='http://iphp.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
Протокол редко где используется, а потому это имеет смысл</p>
<pre><code> net.inet.tcp.drop_synfin=1 </code></pre>
<p><strong>Запрет ридеректов</strong></p>
<pre><code> net.inet.icmp.drop_redirect=1 # 1 net.inet.icmp.log_redirect=1 # 1 net.inet.ip.redirect=0 # 1 #net.inet6.ip6.redirect=0 #ipv6 disable in kernel </code></pre>
<p><strong>Очистка таблицы ARP </strong>через &#8230;. секунд</p>
<pre><code> net.link.ether.inet.max_age=1200 # 1200 </code></pre>
<p><strong>Запрет на &#171;прощупывание&#187; внутренней сети</strong></p>
<pre><code> net.inet.ip.sourceroute=0 # 0 net.inet.ip.accept_sourceroute=0 # 0 </code></pre>
<p><strong>Запрет запроса маски адреса, </strong><br />
<strong>запрет широковещательного запроса временного штампа (timestamp)</strong></p>
<pre><code> net.inet.icmp.maskrepl=0 # 0 </code></pre>
<p><strong>Максимальное количество пакетов ICMP</strong> &lt;&lt;Недостижимо&gt;&gt; <strong>(icmp type 3)</strong>, а также количество отсылок TCP RST пакетов в секунду.</p>
<pre><code> net.inet.icmp.icmplim=100 # 200 </code></pre>
<p><strong>Увеличение размера TCP-буферов</strong>, для оптимизации при большом потоке данных HTTP FTP.<br />
Но стоит помнить, что слишком объемные буферы быстро приведут к исчерпанию памяти при большом количестве подключений. Для веб-сервера, который принимает много коротких запросов и отправляет большие объемы данных, размер выходного буфера рекомендуется увеличить в ущерб входного.</p>
<pre><code> net.inet.tcp.sendspace=32768 # 32768 net.inet.tcp.recvspace=65536 # 65536</code></pre>
<p>Выставляет <strong>maximum segment lifetime</strong>.<br />
Определяет максимальное время жизни сегмента (Maximum Segment Life &#8212; MSL)<br />
После того как соединение закрывается сокет переходит в состояние TIME_WAIT<br />
Это максимальное количество времени ожидания ACK в ответ на SYN-ACK или FIN-ACK в миллисекундах<br />
В этом состоянии он может находится по умолчанию в течение 60 секунд.<br />
Время можно изменить через sysctl (в миллисекундах деленных на 2, 2 x 30000 MSL = 60 секунд)</p>
<pre><code> net.inet.tcp.msl=7500 # 30000 </code></pre>
<p>Во FreeBSD 6.2 <strong>TIME_WAIT сокеты</strong> обрабатываются отдельно (нужна лишь<br />
часть информации 48 байт из 1 Кб. Ограничение вне лимита kern.ipc.maxsockets)</p>
<pre><code> net.inet.tcp.maxtcptw=40960 # 40960 </code></pre>
<p>По умолчанию<strong> исходящие соединения </strong>инициируются<strong> с диапазона портов </strong>49152-65535 (16 тыс.). Во FreeBSD 8.1 &#8212; порты 10000 - 65535<br />
Их неплохо увеличить (1024-65535):</p>
<pre><code> net.inet.ip.portrange.first=1024 # 10000 net.inet.ip.portrange.last=65535 </code></pre>
<p><strong>Не менять ttl при транзите пакетов</strong></p>
<pre><code> net.inet.ip.stealth=0 # 0 </code></pre>
<p><strong>Включение пуллинга</strong></p>
<pre><code>kern.polling.enable=0 # 0 </code></pre>
<p><strong>Pooling</strong></p>
<pre><code> kern.polling.each_burst=5 # 5 kern.polling.burst_max=1000 # 150 </code></pre>
<p><strong>Установка значения ttl </strong>под Windows</p>
<pre><code> net.inet.ip.ttl=128 # 64 </code></pre>
<p><strong>Максимальаня длина приёмной очереди</strong>, при переполнении которой стек дропает входящие пакеты</p>
<pre><code> net.inet.ip.intr_queue_maxlen=4096 # 50 </code></pre>
<p>Увеличить <strong>максимальное число открытых сокетов</strong></p>
<pre><code> sysctl kern.ipc.maxsockets=204800 # 25600 </code></pre>
<p>Если машина обрабатывает несколько десятков тысяч соединений, то <strong>tcb hash</strong> позволяет быстро<br />
определять принадлежность пришедшего пакета к определенному соединению.</p>
<pre><code> net.inet.tcp.tcbhashsize=4096 # 4096</code></pre>
<p>Для <strong>использования портов по порядку</strong>, вместо случайной выборки (для исключения ошибки повторного коннекта с одного порта до отработки TIME_WAIT):</p>
<pre><code> net.inet.ip.portrange.randomized=0 # 1 </code></pre>
<p>Во FreeBSD 6.2 появилась возможность <strong>не создавать состояние TIME_WAIT для соединений в рамках localhost:</strong></p>
<pre><code> net.inet.tcp.nolocaltimewait=1 # 0 </code></pre>
<p><strong>DummyNET &#8212; шейпинг на IPFW</strong><br />
<strong>net.inet.ip.dummynet.io_fast</strong> &#8212; если трафик помещается в заданную полосу, не пропускать его через очередь и отдельный поток. Если нет необходимости эмулировать задержки и потери в канале &#8212; очень сильно сохраняет ресурсы. При использовании этой опции практически отпадает необходимость в распараллеливании dummynet</p>
<pre><code>net.inet.ip.dummynet.io_fast=1  </code></pre>
<p><strong> </strong><br />
<strong>net.inet.ip.intr_queue_maxlen, net.route.netisr_maxqlen</strong> &#8212; фактически &#8212; размеры входящей и исходящей очередей. При большой нагрузке в режиме маршрутизации есть смысл увеличивать эти значения. Непоместившийся пакет выбрасывается. Это условно спасет при кратковременных перегрузках (часть пакетов пролетит с большой задержкой), но совершенно не спасет при хроничеких.</p>
<p><strong>net.isr.direct</strong> &#8212; обрабатывать исходящие пакеты непосредственно при попытке отправки (в т.ч. прохождение ipfw на выходе). Т.е. не откладывать в очередь, которую в отдельном потоке разгребает netisr. Есть смысл включать, если количество ядер меньше или равно количеству сетевых карточек. Влияет на скорость ОТПРАВКИ пакетов. Для серверов это хорошо, для роутеров &#8212; не очень. Если нагрузка на сетевые карты неравномерная, или когда есть хотя бы одно хронически недогруженое ядро &#8212; выключать. При включеном net.inet.ip.fastforwarding будет еще 1 спецэффект.</p>
<p><strong>net.isr.direct_arp</strong> &#8212; обрабатывать исходящие ARP пакеты непосредственно при попытке отправки. Есть смысл держать включенным в большинстве случаев (разумного варианта, когда стоит отправлять такие запросы в очередь я придумать не могу). Добавлено для того, чтобы обработкой ARP система могла заниматься с бОльшим приоритетом даже при net.isr.direct=0</p>
<p><strong>net.isr.maxthreads</strong> &#8212; собственно, количество потоков, разгребающих очередь пакетов. Есть смысл ставить меньшим количества ядер в системе. Нужно прикинуть, сколько ресурсов съедается на обработке прерываний от сетевух и не только, сколько в пике потребляет прочий софт (БД, httpd, прочие демоны) и на оставшееся распределить роутинг. Если, к примеру, сетевухи потребляют по 80% с 2х ядер и софт еще до 100% одного ядра, а всего ядер 4, то остается 140% гарантированного времени. Т.е. полтора ядра <img src='http://iphp.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Тут можно смело ставить роутинг в 2 потока. Если нагрузки по софту кратковременные, а на роутинг с трудом хватает &#8212; можно даже попробовать 3.</p>
<p><strong>net.inet.ip.fastforwarding</strong> &#8212; обрабатывать входящие пакеты непосредственно в момент приема (в т.ч. прохождение ipfw на входе, до попадания в очередь netisr). Есть смысл включать, если количество ядер меньше или равно количеству сетевых карточек, так же как и net.isr.direct. Влияет на скорость ПРИЕМА пакетов. Обработка пакета происходит прямо в обработчике прерывания. Следует учесть, что не все сетевухи и не все драйвера нормально умеют складировать новые пакеты в очередь, пока обрабатывается текущий. При включеном net.inet.ip.fastforwarding будет еще 1 спецэффект &#8212; маршрутизация пакета и прохождение ipfw (оба раза) будут происходить в том же обработчике прерывания. Фактически, на время обработки входящего пакета сетевая карта будет заблокирована. Это неплохо смотрится при преобладающем входящем трафике и на однопроцессорных машинах.<strong> </strong></p>
<p><strong><span style="text-decoration: underline;">Файловая система</span></strong><br />
Запрет возможности монтирования файловых систем непривилегированными пользователями.</p>
<pre><code> vfs.usermount=0 # 0</code></pre>
<p><strong><span style="text-decoration: underline;"><br />
</span></strong><br />
<strong><span style="text-decoration: underline;">Ресурсы системы  </span></strong><br />
<strong>Увеличение числа mbuf кластеров</strong><br />
Можно увеличить до 262144<br />
(в loader.conf &#8212; vm.kmem_size=1G, в ядре options KVA_PAGES=512)</p>
<pre><code> kern.ipc.nmbclusters=65536 # 25600 </code></pre>
<p>Приложения работают не с сокетами, а с файлами. По этому для каждого<br />
сокета нужна структура, которая описывает файл.<br />
<strong>kern.maxfiles &#8212; всего файлов в системе</strong><br />
<strong>kern.maxfilesperproc &#8212; максимальное число файлов на один процесс.</strong></p>
<pre><code> kern.maxfiles=204800 kern.maxfilesperproc=200000 </code></pre>
<p>Можно динамически изменить параметры <strong>shared memory</strong></p>
<pre><code> sysctl -a | grep shm </code></pre>
<p>Вычисляется следующим образом:</p>
<pre><code> SHMMAX = SHMALL * PAGE_SIZE + 1 Где PAGE_SIZE равно 4096 Б для i386 SHMALL = k * RAM * 1024 / PAGE_SIZE Где RAM – физическая оперативная память в МБ; k – коэффициент, равный 0.5; PAGE_SIZE – размер одной страницы в КБ, PAGE_SIZE = 4 КБ для i386. </code></pre>
<p>Например, для машины с памятью 512 МБ,</p>
<pre><code> SHMALL = 0.5 * 512 * 1024 / 4 = 65536. </code></pre>
<p>В случае, если предполагается, что приложение будет работать на специально выделенном для этого сервере, и кроме него никаких других серьезных сервисов запущено не будет, то коэффициент k, можно увеличивать до 0.75, это 3/4 от физической оперативной памяти. Рекомендую также посмотреть утилиту  <strong>ipcs</strong>.<br />
Например для сервера <a rel="nofollow" href="http://iphp.com.ua/goto/http://postgresqlrussia.org/pgsqldocrus/doc/src/sgml/kernel-resources.html" >PostgreSQL</a> можно выставить следующие значения:</p>
<pre><code> kern.ipc.shmall=65536 <code>kern.ipc.shmmax=536870912 kern.ipc.semmap=256</code> </code></pre>
<p><strong><span style="text-decoration: underline;">/boot/loader.conf</span></strong> Увеличить лимита физической памяти, которую может использовать ядро (по умолчанию 320Мб). Увеличим до 1Гб:</p>
<pre><code> vm.kmem_size=1G </code></pre>
<p>для amd64 оказалось недостаточно указать vm.kmem_size_max=1G в /boot/loader.conf, (параметр был просто игнорирован) по-этому это надо сделать в файле конфигурации ядра:</p>
<pre><code> options VM_KMEM_SIZE=1073741824 options VM_KMEM_SIZE_MAX=1073741824 </code></pre>
<p>В /boot/loader.conf для обеих платформ нужно добавить vm.kmem_size_max=1G Увеличение syncache и syncookies( на этапе загрузки).</p>
<pre><code> net.inet.tcp.syncache.hashsize=1024 net.inet.tcp.syncache.bucketlimit=100 </code></pre>
<p>Задаем какой буфер использовать для сетевых карточек (должен быть реально)</p>
<pre><code>## Для карточек Intel с драйвером em hw.em.rxd=4096 hw.em.txd=4096 ## Для новых карточек Intel с драйвером igb hw.igb.rxd=4096 hw.igb.txd=4096 </code></pre>
<p><strong>Увеличение количества семафоров</strong></p>
<pre><code> kern.ipc.semmnu=256 kern.ipc.semmns=32000 kern.ipc.shmmni=4096 </code></pre>
<p><strong><span style="text-decoration: underline;">Опции ядра</span></strong> <strong>Увеличение адресного пространства ядра</strong>, которое на i386 платформе &#8212; 1Гб. Для увеличения до 2Гб. На платформе amd64 KVA всегда 2G.</p>
<pre><code> options KVA_PAGES=512 </code></pre>
<p>Данная опция в FreeBSD 8.x предназначена для ускорения маршрутизации. При больших потоках трафика проц вгоняется в полку, поэтому настоятельно рекомендую вырубать ее нафиг, чтоб не наблюдать , как ваш роутер уходит в нирвану&#8230;</p>
<pre><code> #options FLOWTABLE # per-cpu routing cache </code></pre>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/606/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Некоторые опции sysctl</title>
		<link>http://iphp.com.ua/archives/603</link>
		<comments>http://iphp.com.ua/archives/603#comments</comments>
		<pubDate>Fri, 05 Aug 2011 04:09:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=603</guid>
		<description><![CDATA[Озадачился собрать и попробовать всякие sysctl опции ядра, повышающие безопасность машины, и облегчающие её работу при попытках всяких атак и сканировании портов. А может, даже, просто те пункты, которые показались интересными и нужными &#8212; причём даже только начав, заметил одну вещщь &#8212; почти всё касается работы стека TCP/IP, что и неудивительно, ибо основное применение FreeBSD [...]]]></description>
			<content:encoded><![CDATA[<p>Озадачился собрать и попробовать всякие sysctl опции ядра, повышающие безопасность машины, и облегчающие её работу при попытках всяких атак и сканировании портов. А может, даже, просто те пункты, которые показались интересными и нужными &#8212; причём даже только начав, заметил одну вещщь &#8212; почти всё касается работы стека TCP/IP, что и неудивительно, ибо основное применение FreeBSD &#8212; это серверы. Порывшись в инете понял &#8212; 90% данных это скопированный друг у друга перевод какой-то буржуйской статьи. Собстно поэтому и начал ковыряться &#8212; остальные 10% &#8212; это далеко немало&#8230; Причина крайне проста &#8212; это самая недокументированная часть FreeBSD&#8230;</p>
<p>Следующие два пункта касаются поведения ОС при попытке подключиться на порты, которые не слушаются приложениями. При штатных настройках, в таком случае, система посылает пакет с флагом RST, и закрывет подключение. Удалённый хост получает примерно следующее (если пробовать telnet`ом подключиться): <em>Connection reset by peer</em>.<br />
<strong>net.inet.tcp.blackhole=2</strong> &#8212; данный пункт указывает, что происходит при получении TCP-пакета на закрытый порт (не слушаемый никакими приложениями)Если стоит &#171;1&#8243;, то SYN пакеты (пакет, устанавливающий соединение) на закрытый порт будут отклоняться без отсылки отправителю RST пакета (перезагрузка (соединения, не машины <img src='http://iphp.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )). При установке в &#171;2&#8243;, вообще все (а не только SYN) пакеты на закрытый порт отбрасываются без каких-либо действий. Данный пункт позволяет разгрузить ЦП, т.к. обработка пакетов не производится, и интернет-канал сервера &#8212; т.к. не надо слать ответных пакетов.</p>
<p><strong>net.inet.udp.blackhole=1</strong> &#8212; очень похож на предыдущий пункт, по результату, но для протокола UDP. Ввиду того, что протокол UDP работает без установки соединения, есть только два, а не три варианта установки, когда эта переменная установлена в 1, то отбрасываются все UDP пакеты, адресованые закрытым портам.</p>
<p><strong>kern.ipc.somaxconn=1024</strong> &#8212; увеличивает размер очереди для сокетов, чем помогает предотвратить SYN-атаку, когда очередь сокета переполняется некорректными попытками соединений. Конечно от мощной атаки это не спасёт, но от слабой и средней &#8212; должно помочь. Значение по дефолту &#8212; 128.</p>
<p>Следующие 4 пункта необходимы для невозможности удалённого изменения таблицы маршрутизации на Вашем хосте. Надо заметить, что установив эти пункты как указано, я столкнулся с проблемами в собственной сети &#8212; как оказалось между некоторыми подсетями маршрутизация была криво настроена (причём сам же знал, что криво, сам же криво и делал &#8212; быстрей, быстрей! &#8212; а потом всё недосуг было заняться) &#8212; соответственно клиентские компы начали терять некоторые сети. Пришлось сделать всё по-уму <img src='http://iphp.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>net.inet.icmp.drop_redirect=1</strong> &#8212; уничтожать icmp-датаграммы переадресации</p>
<p><strong>net.inet.icmp.log_redirect=1</strong> &#8212; записывать в журнал событий icmp-датаграммы с указанием переадресации</p>
<p><strong>net.inet.ip.redirect=0</strong> &#8212; может ли эта машина посылать дейтаграммы переадресации другим (вот из-за изменения этого пункта у меня сеть и плющщило, но менять его надо, просто надо сразу сетку корректно настраивать)</p>
<p><strong>net.inet6.ip6.redirect=0</strong> &#8212; предыдущий пункт, но для IPv6</p>
<p><span id="more-603"></span>Пара пунктов отвечающих за работу TCP. Общий смысл такой: ОСь не отвечет на каждый пакет, что он получен или неполучен сразу, а ждёт, пока придёт (или подготовится к отправке) некоторое количество инфы, а потом разом всё это отправляет. Тем самым удаётся разгрузить сеть, т.к. уменьшается общее число пересланных байт (меньше накладных расходов). Очень полезно при интенсивной нагрузке на сеть в одну сторону (HTTP, FTP, &amp; etc). Эти два параметра позволяют установить размер окна приёма и передачи соостветственно. Ограничение по RFC (RFC1323, RFC2018) составляет 64k, но реально можно поставить и больше &#8212; тока надо быть уверенным, что и с клиентской стороны подддерживается такое большое окно. Если поставить больше то могут возикнуть проблемы: клиент данные шлёт, а подтверждения не получает, по достижении 64k он думает, что, по неизветстным причинам пропали все пакеты и начинает слать их заново&#8230; А Ваш всё ждёт&#8230; <img src='http://iphp.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )) Дефолтовые значения современных FreeBSD &#8212; sendspace=32768 и recvspace=57344. (Насколько я понимаю, у старых было меньше 32k). Пробовал увеличить до 65536 &#8212; вроде косяков не заметил&#8230;</p>
<p><strong>net.inet.tcp.sendspace=65536</strong> &#8212; размер `окна` отправки</p>
<p><strong>net.inet.tcp.recvspace=65536</strong> &#8212; размер `окна` приёма</p>
<p><strong>net.link.ether.inet.max_age=1200</strong> &#8212; время устаревания записей ARP, в секундах. По истечении этого времени запись удаляется. Тоже помогает против соответствующего типа атаки &#8212; когда в таблице ARP создаётся много неверных записей. По дефолту оно 1200 и есть, но возможно, имеет смысл, уменьшить это значение.</p>
<p><strong>net.inet.ip.sourceroute=0</strong> и <strong>net.inet.ip.accept_sourceroute=0</strong> &#8212; При помощи маршрутизации отправителя (это когда в пакете, ещё и маршрут нарисован, по которому его надо дальше передавать) возможно прощупать вашу внутреннюю сеть снаружи (даже если это частная сеть!). Значения по-умолчанию (0) запрещают такое делать. Так что менять не надо.</p>
<p><strong>net.inet.icmp.bmcastecho=0</strong> &#8212; Установка в этого пункта в `0` (а по-умолчанию он так и стоит) зарубает ICMP-сообщения типов 0 и 8 (эхо-запрос и эхо-ответ) на широковещательном адресе.</p>
<p><strong>net.inet.icmp.maskrepl=0</strong> &#8212; Также, с помощью icmp можно запросить маску Вашей сети, и узнать её размер (не то, чтобы прям такая ценная инфа, но облегчать работу противника не надо ни в чём.).<br />
По умолчанию этот параметр в `0` &#8212; что запрещает такие запросы. Не надо его ставить в `1` <img src='http://iphp.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
# net.inet.tcp.msl=15000 &#8212; Есть такая феня, как максимальное время жизни сегмента (Maximum Segment Life &#8212; MSL) &#8212; максимальное время ожидания ASK в ответ на SYN-ACK или FIN-ACK (миллисекунд). По RFC 753 оно 120 секунд. Но это писалось в 1979 году и многое поменялось. В современных FreeBSD оно равно 30 секунд. Имеет смысл поставить его меньше.</p>
<p><strong>net.inet.icmp.icmplim=100</strong> &#8212; Для уменьшения урона от атак, при который генерится много ответных пакетов, можно поставить ограничение на количество ICMP тип 3 (адресат недостижим) и TCP RST (перезагрузка соединения). По дефолту оно стоит 200. Можно поставить меньше.</p>
<p><strong>security.bsd.see_other_uids=0</strong> и <strong>security.bsd.see_other_gids=0</strong> &#8212; Для увеличения безопасности машин, на которые есть шелл у других пользователей, можно сделать так, чтобы каждому пользователю показывались только его процессы, а чужие он невидел. На 4.11 такого пункта нет, в 6.0 есть. Пятую ветку надо проверять. По дефолту значение `1` &#8212; все всё видят. Если поставить `0` &#8212; то только свои процессы.</p>
<p><strong>security.bsd.conservative_signals=0</strong> &#8212; Запрет посылать сигналы, от непривелигированных процессов, процессам которые сменили свой uid/gid.</p>
<p><strong>security.bsd.unprivileged_proc_debug=0</strong> &#8212; Непривелигированные процесы могут использовать средства отладки процессов.</p>
<p><strong>security.bsd.unprivileged_read_msgbuf=0</strong> &#8212; непривелигированные процессы могут читать буфер сообщений ядра (dmesg).</p>
<p><strong>security.bsd.hardlink_check_uid=0</strong> &#8212; непривелигированные процессы не могут делать жёсткие ссылки на файлы других пользователей.</p>
<p><strong>security.bsd.hardlink_check_gid=0</strong> &#8212; непривелигированные процессы не могут делать жёсткие ссылки на файлы других групп.<br />
<strong>vfs.usermount=0</strong> &#8212; возможность непривелигированным пользователям монтировать и отмонтировать устройства (при условии соответсвующих прав на устройство и точку монтирования).</p>
<p><strong>net.inet.tcp.log_in_vain=0</strong> и <strong>net.inet.udp.log_in_vain=0</strong> &#8212; Логгирование всех попыток подключения к портам которые никто не слушает (в M$-сетях, чревато большим потоком логов&#8230; Да и в инете тоже..)</p>
<p><strong>net.inet.tcp.sack.enable=0</strong> &#8212; тюнинг сетевой подсистемы &#8212; при большой нагрузке на запрсы отвечатеся селективно.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/603/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Перенос FreeBSD на другой диск</title>
		<link>http://iphp.com.ua/archives/597</link>
		<comments>http://iphp.com.ua/archives/597#comments</comments>
		<pubDate>Fri, 15 Jul 2011 22:05:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=597</guid>
		<description><![CDATA[Если диск начал грязно ругаться в dmesg на ошибки чтения-записи, значит пора переезжать. Допустим у нас FreeBSD версии 7.0&#8230; Выключаемся, вставляем новый диск (у меня он ad2). Он у меня немного поменьше, потому внимательно смотрим - и думаем, какую файловую систему насколько можно ужать. Подумали &#8212; можно приступать. идем в меню Configure->Fdisk, в нем удаляем [...]]]></description>
			<content:encoded><![CDATA[<p>Если диск начал грязно ругаться в dmesg на ошибки чтения-записи, значит пора переезжать. Допустим у нас FreeBSD версии 7.0&#8230;</p>
<p>Выключаемся, вставляем новый диск (у меня он ad2). Он у меня немного поменьше, потому внимательно смотрим</p>
<pre class="brush: bash; title: ; notranslate">
$ df -m
</pre>
<p>- и думаем, какую файловую систему насколько можно ужать.<br />
Подумали &#8212; можно приступать.</p>
<pre class="brush: bash; title: ; notranslate">
# sysinstall
</pre>
<p>идем в меню <strong>Configure->Fdisk</strong>, в нем удаляем существующие партиции и создаем одну новую на весь диск. Сложностей никаких. Есть тонкость &#8212; выходить нужно по Q, не нажимая W. (Если в задумчивости нажали, катастрофы нет &#8212; но перед следующей операцией придется перегружаться).</p>
<p>На вопрос про Boot Manager отвечаем Standard.</p>
<p>Переходим в пункт меню Label.</p>
<p>Здесь нас поджидает еще одна тонкость. Будущий корневой раздел должен быть создан с меткой ad2s1a, но sysinstall не позволяет задавать метку вручную, а при указании точки монтирования отличной от / автоматически присваеват имя ad2s1d. У меня сработала такая последовательность: сперва создал раздел с точкой монтирования / &#8212; и он получил правильную метку, а потом нажал M &#8212; и изменил точку монтирования на /tmp/root.</p>
<p>Далее без каких-либо сложностей создаются раздел подкачки ad2s1b и файловые системы с точками монтирования /tmp/usr и /tmp/var (соотношение меток и точек монтирования сверяйте с вашим /etc/fstab &#8212; если, конечно, у вас нет охоты переделать все по-новому).<br />
Выход из Label нажатием W (появляется большое ругательное окно, с вопросом, понимаете ли вы, что творите. Нужно ответить Yes) и потом Q.</p>
<p>Выходим из sysinstall и смотрим на новые файловые системы:</p>
<pre class="brush: bash; title: ; notranslate">
$ mount
</pre>
<p>Теперь переносим на них содержимое старого диска:</p>
<pre class="brush: bash; title: ; notranslate">
# cd /
# find . -xdev -print | cpio -p -m /tmp/root
# cd /usr
# find . -xdev -print | cpio -p -m /tmp/usr
# cd /var
# find . -xdev -print | cpio -p -m /tmp/var
</pre>
<p>Чтобы веселее было ждать конца копирования, у cpio можно добавить опцию &#8212;verbose<br />
(команда копирования может быть и такой: </p>
<pre class="brush: bash; title: ; notranslate">
pax -rw -X -pe . /tmp/root
</pre>
<p> &#8212; так короче, но вариант find+cpio просто привычнее &#8212; и переносимее &#8212; кто-нибудь видел pax напр. под Linux? &#8212; про другие unix-like системы уже молчу).<br />
Вот и весь процесс. Выключаемся, ставим новый диск на место старого &#8212; и грузим систему.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/597/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Удобный конфиг для tcsh</title>
		<link>http://iphp.com.ua/archives/592</link>
		<comments>http://iphp.com.ua/archives/592#comments</comments>
		<pubDate>Tue, 12 Jul 2011 23:59:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=592</guid>
		<description><![CDATA[кладем в .tcshrc и радуемся Для того, что бы история сохранялась более надёжно (не только по команде exit) нужно добавить в файл .logout строчку]]></description>
			<content:encoded><![CDATA[<p>кладем в .tcshrc и радуемся</p>
<pre class="brush: bash; title: ; notranslate">
#
# File   : tcsh config for Frenzy 1.0
# Author : Sergei Mozhaisky (technix@frenzy.org.ua)
# 

setenv	EDITOR		vi
setenv	PAGER		more
setenv	BLOCKSIZE	K

set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

# if this is not interactive shell - exit
if ($?USER == 0 || $?prompt == 0) exit

set autocomplete
set autoexpand
set autolist
set filec
set ellipsis
#set nobeep
set listjobs
set rmstar
set prompt = &quot;%{&#92;&#48;33[31m%}%n@%m:%{&#92;&#48;33[34m%}%c02%{&#92;&#48;33[0m%}%# &quot;
set prompt2 = &quot;%R?&quot;
set history = 10000
set savehist = (10000 merge)
set inputmode = insert
set symlinks = chase
limit coredumpsize 0
unset autologout
        set mail = (/var/mail/$USER)
        if ( $?tcsh ) then
                bindkey &quot;^W&quot; backward-delete-word
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
        endif

## Alias section
alias today     &quot;date '+%Y%m%d'&quot;
alias mess      'clear ; tail -f /var/log/messages'
alias ff        'find . -name $*'
alias h		'history 25'
alias j 	'jobs -l'
alias la	'ls -a'
alias lf	'ls -FA'
alias ll	'ls -lA'

# enter command name and press F1 to see man on this prog
alias helpcommand man

## Bindkey section

# F1 : help on command currently typed(if 'ls passwd', help on 'ls').
bindkey ^[[M run-help
bindkey [OP  run-help

if ($term == &quot;xterm&quot; || $term == &quot;vt100&quot; || $term == &quot;vt102&quot; || $term !~ &quot;con*&quot;) then
# bind keypad keys for console, vt100, vt102, xterm
bindkey &quot;\e[1~&quot; beginning-of-line  # Home
bindkey &quot;\e[7~&quot; beginning-of-line  # Home rxvt
bindkey &quot;\e[2~&quot; overwrite-mode     # Ins
bindkey &quot;\e[3~&quot; delete-char        # Delete
bindkey &quot;\e[4~&quot; end-of-line        # End
bindkey &quot;\e[8~&quot; end-of-line        # End rxvt
else
# INSERT : toggles overwrite or insert mode.
bindkey ^[[L  overwrite-mode
bindkey ^[[2~ overwrite-mode        # for x
# DELETE : delete char at cursor position.
bindkey ^?    delete-char
bindkey ^[[3~ delete-char           # for x
# HOME : go to the beginning of the line.
bindkey ^[[H beginning-of-line
# END : go to the end of the line.
bindkey ^[[F end-of-line
endif
</pre>
<p>Для того, что бы история сохранялась более надёжно (не только по команде exit) нужно добавить в файл .logout строчку</p>
<pre class="brush: bash; title: ; notranslate">
history -S
</pre>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/592/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Управление портами в FreeBSD</title>
		<link>http://iphp.com.ua/archives/583</link>
		<comments>http://iphp.com.ua/archives/583#comments</comments>
		<pubDate>Thu, 20 Jan 2011 01:57:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=583</guid>
		<description><![CDATA[В системах FreeBSD, OpenBSD и NetBSD существует два подхода к установке дополнительного программного обеспечения, так называемых портов и пакетов, в данном руководстве я буду опираться лишь на подход в OS FreeBSD: ports, packages. Packages или пакеты, это уже собранные(binaries &#8212; исполняемый код) пакеты для того или иного FreeBSD RELEASE из портов для этих RELEASE. Порты [...]]]></description>
			<content:encoded><![CDATA[<p>В системах FreeBSD, OpenBSD и NetBSD существует два подхода к установке<br />
дополнительного программного обеспечения, так называемых портов и пакетов,<br />
в данном руководстве я буду опираться лишь на подход в OS FreeBSD:</p>
<p>ports, packages.</p>
<p>Packages или пакеты, это уже собранные(binaries &#8212; исполняемый код) пакеты<br />
для того или иного FreeBSD RELEASE из портов для этих RELEASE.</p>
<p>Порты постоянно обновляются, поэтому готовые пакеты собираются и проверяются<br />
только для выпускаемого RELEASE. Термин port &#8212; сокращение от portability,<br />
портабельность, существует много программного обеспечения Freeware или под<br />
лицензиями GPL (http://www.gnu.org/licenses/licenses.html) и &#171;AS IS&#187; BSD-лицензия (http://www.bsdnewsletter.com/bsd/license.html), команда разработчиков<br />
FreeBSD занимается адоптацией или портированием такого программного обеспечения<br />
для OS FreeBSD.<span id="more-583"></span></p>
<p>Это касательно портов, пакеты &#8212; это собранные порты за конкретную дату,<br />
те(то есть) порты для выпущенного FreeBSD RELEASE. Обычно собранные для RELEASE<br />
пакеты идут на 3 и 4&#8242;ом ISO-Images и доступны:</p>
<p>ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/X.Y[.Z]/</p>
<p>где X.Y[.Z] цифры соответствующие тому или иному релизу</p>
<p>или</p>
<p>ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-X.Y[.Z]-release/</p>
<p>в то время как полное дерево портов для каждого релиза можно взять:</p>
<p>ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/X.Y[.Z]-RELEASE/ports/ports.tgz</p>
<p>или используя cvsup:</p>
<p>- установить cvsupit из портов (/usr/ports/net/cvsupit/), а лучше взять<br />
готовый пакет: <a rel="nofollow" href="http://iphp.com.ua/goto/http://ftp.webmonster.de/jdp/s1g/" >cvsup16.1e</a><br />
советую брать без GUI, гораздо удобнее использовать командную строку и<br />
скрипты, например: <a rel="nofollow" href="http://iphp.com.ua/goto/http://unix1.jinr.ru/%7elavr/cvsup/" >скрипты cvsup</a></p>
<p><strong>Совет:</strong> всегда сохраняйте сперва предыдущую копию портов, на всякий случай</p>
<p>отдельные порты можно выкачивать, например bash2:</p>
<p>сохраняем на всякий случай старый порт<br />
# cd /usr/ports/shells<br />
# mv bash2 bash2.old</p>
<p>выкачиваем свежий порт<br />
# wget -Y off -t 0 -c -r -nH &#8212;cut-dirs=6 ftp://ftp.ru.freebsd.org/pub/FreeBSD/branches/-current/ports/shells/bash2/</p>
<p>когда выкачиваете отдельные порты, имейте ввиду что они могут требовать<br />
других свежих портов, ищите в Makefile&#8217;е интересующего вас порта<br />
ключевые слова DEPENDS, кроме этого могут изменяться *.mk файлы для утилиты<br />
make: /usr/ports/Mk/, из-за чего возникают ошибки при сборке портов на этапе<br />
разбора самого Makefile&#8217;а.</p>
<p>прим: чтобы не загружать основные сервера ftp.freebsd.org или cvsup.freebsd.org<br />
используйте ближайшие к вам географические зеркала:</p>
<p>http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html</p>
<p>man ports &#8212; всегда поможет и ответит на многие вопросы</p>
<p>дерево портов: /usr/ports/категория</p>
<p>конкретный порт: /usr/ports/категория/название_порта</p>
<p>содержимое директории порта:</p>
<p>/usr/ports/категория/название_порта/Makefile &#8212; файл сборки проекта<br />
/usr/ports/категория/название_порта/distinfo &#8212; md5 контрольные суммы дистрибутивов которые будут собраны<br />
/usr/ports/категория/название_порта/files &#8212; директория в которой содержатся freebsd-related патчи для данного программного продукта<br />
/usr/ports/категория/название_порта/scripts &#8212; директория со скриптами создания дополнительной конфигурации или зависимого Makefile.inc</p>
<p>файлы:</p>
<p>pkg-comment &#8212; краткое описание данного продукта<br />
pkg-desc &#8212; чуть более расширенное описание данного продукта<br />
pkg-plist &#8212; список всего что будет установлено в систему посредством make install<br />
pkg-message &#8212; важное сообщение которое будет выдано после make install<br />
pkg-install &#8212; обычно скрипт дополнительняющий набор необходимых действий при &#171;make install&#187;</p>
<p>терминология структуры портов:</p>
<p>/usr/ports &#8212; все дерево портов<br />
/usr/ports/INDEX &#8212; список всех портов<br />
/usr/ports/INDEX.db &#8212; база портов<br />
/usr/ports/README &#8212; прочти меня<br />
/usr/ports/distfiles &#8212; место куда будет затягиваться дистрибутив необходимый для сборки порта<br />
/usr/ports/Mk &#8212; необходимые make includes файлы для сборки портов в дополнение к /usr/share/mk</p>
<p>обычный или mini-port &#8212; обычный порт<br />
мета, meta-port &#8212; порт большого программного продукта, в реалии пустышка из нескольких mini-port&#8217;ов необходимых для сборки ПОЛНОГО meta-port&#8217;а.</p>
<p><strong>прим.:</strong> когда то вместо meta портов, были мега порты, которые удобней<br />
было собирать в отличие от мета портов, имейте ввиду что для сборки XFree86,<br />
mozilla, openoffice вам понадобится очень много free-space и возможно<br />
потребуется переопределить рабочую директорию через переменную WRKDIR.</p>
<p>Например:</p>
<p>/usr/ports/x11/XFree86-4 &#8212; это мета-порт объединяющий установку нескольких<br />
мини-портов необходимых для установки всего XFree86-4, список мини-портов<br />
указан в /usr/ports/x11/XFree86-4/Makefile</p>
<p><strong>прим.:</strong> если у вас уже установлен предыдущий порт XFree86-4, и вы скачали<br />
новый и хотите его установить, лучше удалить предыдущий XFree86 и все его<br />
depends, в этом случае проблем не будет.</p>
<p>Сборка:</p>
<p>1) cd /usr/ports/категория/название_порта</p>
<p>2) make</p>
<p>по команде make, будет просматриваться содержимое /usr/ports/distfiles<br />
на предмет наличия в нем дистрибутива[ов] cat distinfo, если таковые<br />
отсутствуют там, будет производиться скачивание данного дистрибутива<br />
с основного сайта: ftp.freebsd.org.</p>
<p>Управлять этим процессом можно определив ряд необходимых переменных<br />
в файле /etc/make.conf (который создается на основе /etc/defaults/make.conf)</p>
<p>MASTER_SITE_BACKUP?=   \<br />
ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/</p>
<p>закоментарим две верхние строчки и зададим ближайший к нам сайт с зеркалом<br />
distfiles, например:</p>
<p>#MASTER_SITE_BACKUP?=   \<br />
#       ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/<br />
#&#8212;lavr</p>
<p>MASTER_SITE_BACKUP?=    \<br />
ftp://ftp.ru.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/</p>
<p>MASTER_SITE_OVERRIDE?=  ${MASTER_SITE_BACKUP}</p>
<p>MASTER_SORT_REGEX?=     ^file: ^ftp://ftp\.FreeBSD\.org/pub/FreeBSD/ports/local-distfiles/ ://[^/]*\.ru/ ://[^/]*\.ru\.</p>
<p>если у нас выход в Internet через PROXY, определяем следующие переменные<br />
в том же файле, если PROXY с авторизацией, man 3 fetch:</p>
<p>FETCH_ENV=     FTP_PROXY=ftp://10.0.0.1:21<br />
FETCH_ENV=     HTTP_PROXY=http://10.0.0.1:80</p>
<p>При сборке портов можно использовать много полезных переменных среды,<br />
полезно в тех или иных случаях:</p>
<p># less /usr/share/mk/bsd.README<br />
# less /usr/ports/Mk/bsd.port.mk</p>
<p># man ports</p>
<p>некоторые наиболее полезные переменные:</p>
<p>- PORTSDIR<br />
- WRKDIR<br />
- DISTDIR<br />
- PREFIX<br />
- BATCH</p>
<p>с их помощью можно изменять директории структуры портов, местонахождения<br />
sources, рабочую директории для сборки, путь установки и тд и тп.<br />
При сборке порта, как уже было сказано, ищется дистрибутив, проверяется<br />
его контрольная сумма по md5:</p>
<p>имя дистрибутива обычно указыватся в файле distinfo, например, рассмотрим<br />
mpg123 из портов:</p>
<p>[alone]~ &gt; ls -la /usr/ports/audio/mpg123<br />
total 24<br />
drwxr-xr-x    3 root  wheel   512 Feb 11 12:21 .<br />
drwxr-xr-x  336 root  wheel  6656 Feb 12 12:04 ..<br />
-rw-r&#8212;r&#8212;    1 root  wheel  2662 Feb 11 12:21 Makefile<br />
-rw-r&#8212;r&#8212;    1 root  wheel   268 Apr 10  2001 distinfo<br />
drwxr-xr-x    2 root  wheel   512 Feb 11 12:21 files<br />
-rw-r&#8212;r&#8212;    1 root  wheel    52 Jul 10  1997 pkg-comment<br />
-rw-r&#8212;r&#8212;    1 root  wheel   242 Aug  5  1999 pkg-descr<br />
-rw-r&#8212;r&#8212;    1 root  wheel    11 Aug 17  1998 pkg-plist<br />
[alone]~ &gt;</p>
<p>Makefile &#8212; проект сборки<br />
distinfo &#8212; файл содержаший md5 контрольные суммы дистрибутива, той или иной<br />
версии, патчи и другие необходимые sources:</p>
<p>[alone]~ &gt; cat /usr/ports/audio/mpg123/distinfo<br />
MD5 (mpg123-0.59r-pl1.tar.gz) = 2648708fac9203ef58292adf5e54e4ba<br />
MD5 (mpg123-059r-v6-20000713b.diff.gz) = b830cefc8805c8ad827f73985c03d27f<br />
MD5 (l3.diff.gz) = b8749f4709ed1a9df8a00d51c4a02dd5<br />
MD5 (mpg123-059r-recode-20010410.diff.gz) = 8f9e18cf27f9e048c5369cf3b78b6b11<br />
[alone]~ &gt;</p>
<p>files &#8212; если в порту есть такая директория, она обычно содержит патчи и<br />
дополнительные файлы конфигурации данного порта</p>
<p>pkg-comment и pkg-descr &#8212; файлы описания данного порта-продукта, короткое<br />
описание и более полное</p>
<p>pkg-plist &#8212; это список всех файлов которые будут установлены в систему<br />
относительно пути в PREFIX и некоторые дополнительные действия которые<br />
будут произведены при `make install`</p>
<p>3) make install</p>
<p>после успешной сборки п.2, произвести установку собранного продукта в<br />
систему, обычно: PREFIX=/usr/local, где /usr/local &#8212; альтернативная<br />
структура базовой системы: &#171;/&#187;, &#171;/etc&#187;, &#171;/bin&#187;, &#171;/sbin&#187;, &#171;/usr/lib&#187; и тд</p>
<p>4) make clean</p>
<p>удалить все что осталось после сборки, обычно директорию work в данном<br />
продукте и всех зависимостях которые были собраны и автоматически установлены при сборке данного продукта</p>
<p>Удалить установленные порты или пакеты можно:</p>
<p># make de-install или man pkg_delete</p>
<p>при сборке порта, в пункте 2)</p>
<p>make &#8212; производит несколько операций, скачивание, накладывание патчей,<br />
конфигурирование проекта перед сборкой и саму сборку, при необходимости,<br />
мы можем выполнять по шагам вместо make:</p>
<p>make fetch<br />
make checksum<br />
make depends<br />
make extract<br />
make patch<br />
make configure<br />
make build</p>
<p>все вышеуказанные действия могут быть выполнены самостоятельно и по шагам,<br />
допустим мы хотим поправить некий порт под себя, шаги:</p>
<p>- скачиваем порт:<br />
# make fetch<br />
- проверка контрольной суммы дистрибутива:<br />
# make checksum<br />
- разврачиваем дистрибутив в рабочую директорию, у большинства портов это<br />
директория /usr/ports/category/portname/work<br />
# make extract<br />
- если используется многоплатформенный гнушный конфигуратор configure<br />
# make configure</p>
<p>теперь мы можем наложить свои патчи, затем при помощи команды diff создать<br />
нужные нам правки: файлы patch-xy, где xy &#8212; это буквы aa/ab/ac/&#8230; и тд и тп<br />
и положить их в директорию files &#8212; все порт с нашими правками готов, теперь<br />
можно его очистить:<br />
# make clean<br />
и собрать по шагам, чтобы убедиться что нет ошибок или затратить меньше<br />
времени на их исправления, все &#8212; наш порт, порт с нашими правками готов.</p>
<p>чтобы в реалии не выполнять make, а лишь посмотреть что будет сделано:</p>
<p># make -n [install|или другие опции]</p>
<p>иногда удобно в командной строке задать все необходимые команды (см. используемый вами SHELL):</p>
<p># cd /usr/ports/категория/название_порта<br />
# make &amp;&amp; make install &amp;&amp; make clean</p>
<p>однако некоторые порты требуют интерактивного вмешательства, чтобы<br />
этого не произошло, необходимо посмотреть Makefile, записать все<br />
необходимые опции с которыми мы будем собирать данный порт и выполнить:</p>
<p>make WITH_ИМЯОПЦИИ=yes WITHOUT_ИМЯОПЦИИ=yes BATCH=yes install &amp;&amp; make clean</p>
<p>BATCH=yes обеспечивает пакетную сборку порта.</p>
<p>Материал для изучения:</p>
<p>http://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/index.html</p>
<p>http://www.FreeBSD.org.ua/porters-handbook/ &#8212; на русском</p>
<p>прим.: конечно можно и нужно удалять то что осталось после сборки портов,<br />
глобально:</p>
<p># cd /usr/ports<br />
# make clean</p>
<p>можно для каждой категории:</p>
<p># cd /usr/ports/category<br />
# make clean</p>
<p>зависимости тоже будут удалены, но все это очень долгая история, лично мне<br />
удобнее прежде посмотреть, что не было очищено после установки того или иного<br />
порта:</p>
<p># find /usr/ports/ -name &#171;work&#187; -print<br />
или<br />
# find /usr/ports/ -name &#171;.instal*&#187; -print</p>
<p>после чего без всякий `make clean` &#8212; это ну очень долго, использовать:</p>
<p># find /usr/ports/ -name &#171;work&#187; -exec rm -rf {} \;</p>
<p>все что нужно удалено, быстро и удобно.</p>
<p>После установки портов и пакетов, в директории /var/db ведется база<br />
установленных пакетов и портов (для последних можно использовать переменную</p>
<p>FORCE_PKG_REGISTER=    YES</p>
<p>в файле /etc/make.conf, это очень удобно.</p>
<p>в директории /var/db/pkg &#8212; можно найти весь список портов, это директории<br />
с именами: /var/db/pkg/PortName-Version, внутри которых есть несколько<br />
информативных файлов, например:</p>
<p>[alone]~ &gt; ls -la /var/db/pkg/mpg123-esound-0.59r_8/<br />
total 28<br />
-rw-r&#8212;r&#8212;    1 root  wheel    52 Feb 11 12:05 +COMMENT<br />
-rw-r&#8212;r&#8212;    1 root  wheel   660 Feb 11 12:05 +CONTENTS<br />
-rw-r&#8212;r&#8212;    1 root  wheel   242 Feb 11 12:05 +DESC<br />
-r&#8212;r&#8212;r&#8212;    1 root  wheel  7457 Feb 11 12:05 +MTREE_DIRS<br />
-rw-r&#8212;r&#8212;    1 root  wheel    14 Feb 16 21:28 +REQUIRED_BY<br />
drwxr-xr-x    2 root  wheel   512 Feb 16 21:28 .<br />
drwxr-xr-x  371 root  wheel  9728 May 22 15:47 ..<br />
[alone]~ &gt;</p>
<p>если вспомнить описанную ранее структуру порта:</p>
<p>+COMMENT &#8212; комментарий (pkg-comment)<br />
+CONTENTS &#8212; то что было установлено в систему (pkg-plist)<br />
+DESC &#8212; описание (pkg-descr)<br />
+MTREE_DIRS &#8212; дерево с указанием владельца и режимов файлов и директорий<br />
+REQUIRED_BY &#8212; если есть, то для какого порта или пакета, данный програмный<br />
продукт был зависимостью</p>
<p>Packages &#8212; пакеты.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/583/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Шпионам за чужой консолью</title>
		<link>http://iphp.com.ua/archives/575</link>
		<comments>http://iphp.com.ua/archives/575#comments</comments>
		<pubDate>Mon, 25 Oct 2010 17:39:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=575</guid>
		<description><![CDATA[В стандартный состав FreeBSD входит замечательная программа watch(8), которая позволяет подсматривать за чужой консолью. Всё, что ей для этого необходимо это snp модуль, который достаточно собрать из сурцов а программа сама его подгрузит: Теперь выбираем цель: И подсматриваем за интересной нам консолью(TTY).]]></description>
			<content:encoded><![CDATA[<p>В стандартный состав FreeBSD входит замечательная программа watch(8), которая позволяет подсматривать за чужой консолью.</p>
<p>Всё, что ей для этого необходимо это snp модуль, который достаточно собрать из сурцов а программа сама его подгрузит:</p>
<pre class="brush: bash; title: ; notranslate">
# cd /usr/src/sys/modules/snp/
# make &amp;&amp; make install
</pre>
<p>Теперь выбираем цель:</p>
<pre class="brush: bash; title: ; notranslate">
# w
9:16PM up 55 days, 52 mins, 2 users, load averages: 0.08, 0.06, 0.00
USER TTY FROM LOGIN@ IDLE WHAT
nlo1 p0 nlo.habr.ru 9:06PM - w
nlo2 p1 nlo.habr.ru 9:16PM - -bash (bash)
</pre>
<p>И подсматриваем за интересной нам консолью(TTY).</p>
<pre class="brush: bash; title: ; notranslate">
# watch p1
</pre>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/575/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH-туннелинг или замена VPN</title>
		<link>http://iphp.com.ua/archives/482</link>
		<comments>http://iphp.com.ua/archives/482#comments</comments>
		<pubDate>Wed, 21 Oct 2009 19:31:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[Soft/Tools]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=482</guid>
		<description><![CDATA[В последнее время довольно большое распространение получила технология VPN (Virtual Private Networks). В большинстве случаев ее используют люди для шифрования передаваемой информации через локальную сеть (защита от снифанья трафика, что довольно легко осуществить в сети, даже на свичах) и/или последующей передачи информации через Интернет (тут уже целями будет скрытие своего IP-адреса, защита от глобального снифа [...]]]></description>
			<content:encoded><![CDATA[<p>В последнее время довольно большое распространение получила технология VPN (Virtual Private Networks). В большинстве случаев ее используют люди для шифрования передаваемой информации через локальную сеть (защита от снифанья трафика, что довольно легко осуществить в сети, даже на свичах) и/или последующей передачи информации через Интернет (тут уже целями будет скрытие своего IP-адреса, защита от глобального снифа трафика всей страны (aka СОРМ, он же нынешний СОРМ2) и.д.). Многие уже давно используют данную технологию VPN, но не многие знают об ее более дешевой и мобильной альтернативе. А называется это &#8212; SSH-туннелинг.</p>
<p>Принцип данной реализации следующий. Весь сетевой софт на компе (ну или не весь) форвардится на назначенный порт (вашего локалхоста), на котором висит сервис, соединенный по SSH с сервером (а как мы знаем, соединение по SSH протоколу шифруется) и туннелирующий все запросы; далее, весь ваш трафик (уже не в зашифрованном виде) может форвардится с нашего сервера на прокси (поддерживающий туннерирование) или сокс, который передают весь трафик к необходимым адресам. Наличие прокси или сокса не обязательно, но если нам нужна полнейшая конспирация, то мы можем организовать данный сервис (proxy/socks) на другом сервере (данная схема нужна для создания цепочки адресов), но об этом позже.</p>
<p>Теперь давайте разберемся с минимальным набором инструментов и сервисов необходимых для организации данного процесса. В первую очередь нам нужна программа для организации туннеля по SSH-протоколу. Для этой задачи мы можем применить VanDyke Entunnel (http://www.vandyke.com/products/entunnel/) или Putty (http://www.web-hack.ru/download/info.php?go=35) (вкладка Connection\SSH\Tunnels). В наших примерах я буду использовать оба клиента. Далее мы можем вручную прописывать в каждой программе работу через прокси или использовать специализированную программу для перенаправления запросов, такую как ProxyCap (http://proxylabs.netwu.com), SocksCap (http://www.socks.nec.com), FreeCap (http://www.freecap.ru) и т.п. В нашем примере будет использоваться ProxyCap, как наиболее удобная софтина (кстати, через ProxyCap мы сможем сделать туннерирование даже WebMoney, которая известна защитой от такого вида софта, для скрытия IP). Так же нам понадобится SSH-аккаунт (на сервере желательно расположенном за пределами вашей страны =), который можно без проблем достать (например, я покупаю VPS-хостинг для этого) и socks`ы.</p>
<p>Первым делом создаем SSH-аккаунт. Далее, я предлагаю вам использовать socks-сервер, а не proxy, т.к. не все прокси поддерживают туннелирование. Также может оказаться, что сегодня прокси анонимный, а завтра уже и не нет (если, конечно, не вы сами отвечаете за него). Кстати, проверить свою анонимность можно здесь (http://ip.xss.ru). Как я уж говорил, мы можем использовать сокс на удаленной машине (для большей безопасности). Для примера я покажу, как установить сокс-демон. Наиболее популярные и продвинутые демоны под никсы это socks5 от Permeo/NEC (http://freeware.sgi.com/source/socks5/), Dante (http://www.inet.no/dante/) и отечественный продукт 3proxy (http://www.security.nnov.ru/soft/3proxy/). Для примера я выбрал классический демон на FreeBSD &#8212; socks5.</p>
<p>Для тестирования использовалась FreeBSD 5-ой ветки. Я устанавливал socks5 из портов (/usr/ports/net/socks5/), но и из сорцов под фряхой тоже все хорошо собирается и ставится:</p>
<pre class="brush: php; title: ; notranslate">
cd /usr/ports/net/socks5/
make install clean
rehash
</pre>
<p>Для нормальной работы демона необходим конфиг к демону socks5.conf и файл паролей socks5.passwd (если необходима аутификация к сокс-серверу по паролю):</p>
<pre class="brush: php; title: ; notranslate">
touch /usr/local/etc/socks5.conf
touch /usr/local/etc/socks5.passwd
</pre>
<p>Далее добавляем в конфиг следующие строчки:</p>
<pre class="brush: php; title: ; notranslate">
auth - - u
permit u - - - - -
SET SOCKS5_BINDINTFC 1.2.3.4:8080
SET SOCKS5_CONFFILE /usr/local/etc/socks5.conf
SET SOCKS5_PWDFILE /usr/local/etc/socks5.passwd
SET SOCKS5_MAXCHILD 128
SET SOCKS5_NOIDENT
SET SOCKS5_NOREVERSEMAP
SET SOCKS5_NOSERVICENAME
SET SOCKS5_V4SUPPORT
SET SOCKS5_ENCRYPT
SET SOCKS5_FORCE_ENCRYPT
SET SOCKS5_UDPPORTRANGE 1023-5000
</pre>
<p>Первые две строчки указывают, что необходима аутификация по логин/пароль. SOCKS5_BINDINTFC указывает на какой IP (если у сервера несколько алиасов) и порт повесить демон. SOCKS5_MAXCHILD по умолчанию 64, я советую увеличить до 128, чтобы всем юзерам (если их много) хватило потоков. Далее, идут строчки для ускорения работы демона. SOCKS5_V4SUPPORT &#8212; поддержка 4-ой версии протокола. SOCKS5_ENCRYPT и SOCKS5_FORCE_ENCRYPT поддержка шифрования, если клиент это поддерживает. За более подробной информацией по установка обращайтесь к файлам README и INSTALL, а за информацией по настройке к манам socks5(1) и socks5.conf(5).</p>
<p>Далее, заполняем файл паролей. Он имеет обычный текстовый формат и login/password разделяются в нем пробелами:</p>
<pre class="brush: php; title: ; notranslate">
user password
root toor
</pre>
<p>Теперь можно запускать демон и приступить к настройке клиентского софта:</p>
<pre class="brush: php; title: ; notranslate">
/usr/local/bin/socks5
</pre>
<p>Запускам ProxyCap (http://forum.web-hack.ru/index.php?showtopic=29262), кликаем правой кнопкой мыши на значке в трее, Preferences. На вкладке &#171;Proxies&#187; вписываем 127.0.0.1:8080 и устанавливаем в &#171;Require Authorization&#187; наш login/password на сокс. На вкладке &#171;Rules&#187; добавляем сначала правило для Entunnel, указав в &#171;Rule Type&#187; &#8212; Force direct connetion. Далее, создаем правило, для всего остального софта, трафик от которого будет шифроваться и туннелироваться через сокс. В правиле указываем &#171;All Programs&#187;, &#171;Tunnel through proxy&#187; и в выпадающем меню наш сокс. Так же можно создать правило не для всего софта, а только выборочный софт пускать через туннель или наоборот, создать правило для всего софта, но для некоторого софта сделать прямой доступ в инет (Force direct connetion). В качестве дополнения могу сказать, что если ваша сетевая программа поддерживает работу через сокс/прокси (и нет необходимости пускать сразу весь сетевой софт через туннель), то в качестве настроек прокси вы можете указать забинденный Entunnel`ем адрес и порт &#8212; 127.0.0.1:8080.</p>
<p>Запускаем Entunnel и создаем в нем новое соединение по SSH. Далее, в свойствах соединения (Port Forwarding) добавляем наш сокс. В категории &#171;Local&#187; вписываем 127.0.0.1:8080, а в категории &#171;Remote&#187; вписываем IP и порт нашего сокс-сервера. Настройка закончена! Если что-то не работает, то еще раз перечитайте все пункты настройки.</p>
<p>В случае, если вы хотите использовать SSH-аккаунт, как конечную точку (т.е. не юзать соксы или прокси), то ваши настройки должны быть следующие (на примере для Putty): на вкладке Connection\SSH\Tunnels в строке &#171;Source port&#187; указываем порт, на который Putty забиндится на локалхосте (например, 8080), далее ставим влажок на &#171;Dynamic&#187; и идем на вкладку &#171;Session&#187; прописывать адрес и порт сервера с SSH. Коннектимся&#8230;</p>
<p>Какие плюсы данной системы:</p>
<p>1. Для организации данной схемы не нужно устанавливать серверный софт (т.к. SSH-аккаунт и сокс можно без проблем достать в инете);<br />
2. Т.к. при SSH-соединении трафик шифруется и сжимается, то мы получаем небольшой прирост скорости работы в инете (это верно, когда сокс-демон находится на том же сервере);<br />
3. В случае, когда сокс-сервер находится на другом хосте, то мы получаем дополнительную цепочку серверов, которые повышают нам безопасность и анонимность;</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/482/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx+Php-Fpm+Eaccelerator = Perfect Linux Server !</title>
		<link>http://iphp.com.ua/archives/470</link>
		<comments>http://iphp.com.ua/archives/470#comments</comments>
		<pubDate>Tue, 18 Aug 2009 20:43:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[LAMP]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=470</guid>
		<description><![CDATA[Цель: Построить быстрый и надёжный сервер, способный обслуживать несколько больших динамичных вебсайтов основанных на современных CMS (системах управления содержанием) и базе данных MySQL Cредства; 1, Достаточно мощный компьютер: &#8212; процессор+оперативная память+обьёмный винчестер+сетевая карта = должны быть хорошими по характеристикам и достаточно современными, 2, Постоянное соединение с быстрым интернетом, 3. Зарегестрированное имя домена и наличие DNS [...]]]></description>
			<content:encoded><![CDATA[<p>Цель: Построить быстрый и надёжный сервер, способный обслуживать несколько больших динамичных вебсайтов основанных на современных CMS (системах управления содержанием) и базе данных MySQL</p>
<p>Cредства; 1, Достаточно мощный компьютер: &#8212; процессор+оперативная память+обьёмный винчестер+сетевая карта = должны быть хорошими по характеристикам и достаточно современными, 2, Постоянное соединение с быстрым интернетом, 3. Зарегестрированное имя домена и наличие DNS (Domain Name Server). на котором этот домен припаркован,</p>
<p>Начали: Грузим OS http://www.ubuntu.com/getubuntu/download Здесь надо выбрать OS соответствующую архитектуре железа: x86 или AMD64. Я буду писать для AMD64, что впрочем подходит с небольшими изменениями и для x86 После того, как файл загрузился, надо записать его в том же формате т.е. .iso, чтобы с него можено было запускать компьютер.</p>
<p>Надеюсь всё прошло хорошо и сомпьютер запустился с СДишки. Предупреждаю, компьютер должен быть отведен специально для цели служить СЕРВЕРОМ. Т.е. всё, что было в нём прежде, будет утрачено !!!</p>
<p>Ubuntu установить очень просто, достаточно выбрать язык установки и следовать указаниям. Важно сделать правильную разметку диска. Для root или &#171;/&#187; достаточно 8 ГБ , swap расчитывается по формуле active RAM x 2. т.е. если общий размер оперативной памяти составляет 1 ГБ, то swap должен быть не меньше 2 ГБ. Остальное пространство отдадим /home. Там будет сидеть всё хозяйство сервера.</p>
<p>После того как система задышала и ты в неё вошёл первым делом добавь терминал на панель. Ну и понеслись: (Я буду писать коды для терминала, тебе надо их скопировать, вставить и нажать &#171;enter&#187;. Свои пояснения я буду отделять запятыми, скобками или кавычками, чтобы программа их не распознала, даже если ты их по ошибке и введешь)</p>
<p>sudo apt-get update</p>
<p>sudo apt-get upgrade</p>
<p>(процесс получения обновлений, надо будет ввести пароль)</p>
<p>sudo aptitude install mysql-server</p>
<p>(ждём пока установится)</p>
<p>sudo mysql_secure_installation</p>
<p>(на все вопросы &#8212; yes и устанавливаем пароль, очень важно его не забыть и сделать достаточно сложныи)</p>
<p>(Установим дополнительные библиотеки)</p>
<p>sudo aptitude install build-essential libtool libltdl3-dev libgd-dev libmcrypt-dev libxml2-dev libmysqlclient15-dev flex m4 awk automake autoconf bison make libbz2-dev libpcre3-dev libssl-dev zlib1g-dev vim re2c libjpeg-dev libpng-dev</p>
<p>(Мы будем собирать PHP с PHP-FPM заплаткой из источника.)</p>
<p>cd /usr/local/src</p>
<p>wget http://us.php.net/get/php-5.2.10.tar.gz/from/ru.php.net/mirror</p>
<p> tar xzvf php-5..10.tar.gz</p>
<p>wget php-fpm.org/downloads/php-5.2.10-fpm-0.5.13.diff.gz</p>
<p> gzip -cd php-5.2.10-fpm-0.5.13.diff.gz | patch -d php-5.2.10 -p1</p>
<p> cd php-5.2.10</p>
<p>./configure &#8212;enable-fastcgi &#8212;enable-fpm &#8212;enable-exif &#8212;with-mcrypt &#8212;with-zlib &#8212;enable-mbstring &#8212;with-openssl &#8212;with-mysql &#8212;with-mysql-sock &#8212;with-gd &#8212;with-gettext &#8212;with-jpeg-dir=/usr/lib &#8212;enable-gd-native-ttf &#8212;without-sqlite &#8212;disable-pdo &#8212;disable-reflection &#8212;with-libdir=lib64 &#8212;with-pgsql=/usr/lib/pgsql &#8212;with-mysql=/usr/lib64/mysql</p>
<p>(Если сборка будет жаловаться, что не хватает чего то, то можно будет найти и установить недостающее через Synaptic)</p>
<p>make all install</p>
<p>strip /usr/local/bin/php-cgi</p>
<p>( Теперь отрегулируем PHP-FPM, о котором хочу сказать особо. Php-fpm &#8212; это продукт напряжённого бескорыстного труда нашего соотечественника Андрея Нигматулина, И этим продуктом, как и NGINXом от Игоря Сысоева, уже пользуются миллионы админов по всему миру, несмотря на то, что мало кто из из них говорит и понимает по русски и что отсутствует подробная документация. Золото видно издалека &#8230;. И цена его понятна на любых языкахMoney mouth )</p>
<p>sudo gedit /usr/local/etc/php-fpm.conf</p>
<p>(линия 63 убрать стрелки и тире перед и за кодом и поменять nobody на)</p>
<p>www-data</p>
<p>( то же самое для линии 66)</p>
<p>www-data</p>
<p>(Устанавливаем NGINX web server)</p>
<p>cd /usr/local/src</p>
<p>wget sysoev.ru/nginx/nginx-0.7.61.tar.gz</p>
<p>tar xzvf nginx-0.7.61.tar.gz</p>
<p>cd nginx-0.7.61</p>
<p>(нам не нужны почтовые функции NGINX потому, что мы будем использовать внешний почтовый агент чтобы не нагружать сервер)</p>
<p>./configure &#8212;sbin-path=/usr/local/sbin &#8212;with-http_ssl_module &#8212;without-mail_pop3_module &#8212;without-mail_imap_module &#8212;without-mail_smtp_module</p>
<p>make</p>
<p>make install</p>
<p>(настроим NGINX)</p>
<p>sudo gedit /usr/local/nginx/conf/nginx.conf</p>
<p>(см. прикрерплённый файл)</p>
<p>http://vkimo.org/files/nginx.txt</p>
<p>(Обрати внимание на &#171;root /home/TVOI FOLDER/$host;&#187; &#8212; здесь надо указать путь к папке, где будет сидеть всё содержание сайта. &#171;$host&#187; это абсолютное значение, которое вытащит и опубликует любой сайт если он зарегестрирован, находится на работающем домайн найм сервере и сидит в отдельной папке в твоей домашней папке &#171;TVOI FOLDER&#187; под названием твоего сайта т.е. &#171;moisite.com&#187;. А также на &#171;server_name &#187; Символ &#187; _ &#187; &#8212; это Изумительное по простоте и удобству решение автора NGINX Игоря Сысоева http://sysoev.ru/nginx/ способа адресовать виртуальные хосты. Apache и даже Lighttpd здесь отдыхают плотно.</p>
<p>Теперь создадим место для содержимого нашего вебсайта и изменим соответственно /home/TVOI FOLDER/$host</p>
<p>sudo mkdir /home/www</p>
<p>sudo mkdir /home/www/точное название твоего сайта (мойсайт.ru)</p>
<p>sudo chmod -R tvoeimya:tvoeimya /home/www/moisite.ru (tvoeimya надо поменять на имя пользователя, под которым ты работаешь в своём сервере, Это даст тебе возможность управлять содержимым папки сайта без необходимости входить в сервер под привелегированным пользователем &#8212; root.</p>
<p>(Создадим также два файла внутри папки сайта)</p>
<p>gedit /home/www/moi site.ru/index.html</p>
<p>(вставить в пустой файл что-нибудь вроде &#8212; Это мой первый сайт !!! )</p>
<p>gedit /home/www/moisite.ru/info.php</p>
<p>(Вставить этот код в пустой файл сохранить и закрыть)</p>
<p><?php<br />
phpinfo();<br />
?></p>
<p>Продолжаем: надо отрегулировать fastcgi_params)</p>
<p>sudo gedit /usr/local/nginx/conf/fastcgi_params</p>
<p>(и в самый верх добавляем)</p>
<p>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</p>
<p>(а также выключаем, ставим &#171;#&#187; перед #fastcgi_param REDIRECT_STATUS 200; примочку для арача потому что мы его здесь не имеем )</p>
<p>(Полируем PHP код)</p>
<p>sudo gedit /usr/local/lib/php.ini</p>
<p>(вставить это в пустой файл)</p>
<p>_________________________________________________________________________________________</p>
<p>magic_quotes_gpc=0<br />
[xcache-common]<br />
#zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xcache.so<br />
[xcache]<br />
#xcache.shm_scheme = &#171;mmap&#187;<br />
#xcache.size = 64M<br />
default_charset = “utf-8″<br />
[memcache]<br />
#extension = memcache.so<br />
#memcache.hash_strategy=&#187;consistent&#187;<br />
[memcache]<br />
[suhosin]<br />
#extension = suhosin.so<br />
#extension = apc.so<br />
#apc.shm_size = 48<br />
[suhosin]<br />
; For Unix only. You may supply arguments as well (default: &#171;sendmail -t -i&#187;).<br />
sendmail_path = /usr/sbin/sendmail -i -t<br />
upload_max_filesize=8M<br />
[eaccelerator]<br />
#zend_extension=&#187;/usr/local/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so&#187;<br />
#eaccelerator.shm_size=&#187;16&#8243;<br />
#eaccelerator.cache_dir=&#187;/tmp/eaccelerator&#187;<br />
#eaccelerator.enable=&#187;1&#8243;<br />
#eaccelerator.optimizer=&#187;1&#8243;<br />
#eaccelerator.check_mtime=&#187;1&#8243;<br />
#eaccelerator.debug=&#187;0&#8243;<br />
#eaccelerator.filter=&#187;"<br />
#eaccelerator.shm_max=&#187;0&#8243;<br />
#eaccelerator.shm_ttl=&#187;0&#8243;<br />
#eaccelerator.shm_prune_period=&#187;0&#8243;<br />
#eaccelerator.shm_only=&#187;0&#8243;<br />
#eaccelerator.compress=&#187;1&#8243;<br />
#eaccelerator.compress_level=&#187;9&#8243;<br />
[eaccelerator]</p>
<p>_________________________________________________________________________________________</p>
<p>(Как видно, большинство примочек выключено. Это на потом, потому что ни одна из тех примочек ещё у тебя не установлена. Мы это сделаем позже)</p>
<p>(Надо попробовать стартануть php-fpm)</p>
<p>php-fpm start</p>
<p>(Теперь NGINX)</p>
<p>nginx</p>
<p>(Если ошибок нет &#8212; будь горд собой !!!)</p>
<p>(Надо теперь сделать так чтобы оба сервиса запускались автоматически вместе с запуском сервера)</p>
<p>cd /etc/init.d/</p>
<p>ln -s /usr/local/sbin/php-fpm php-fpm</p>
<p>/usr/sbin/update-rc.d -f php-fpm defaults</p>
<p>(Это было просто для php-fpm, немного сложнее для NGINX)</p>
<p>sudo kill `cat /usr/local/nginx/logs/nginx.pid`<br />
sudo gedit /etc/init.d/nginx<br />
(и вставить этот код в пустой файл)</p>
<p>_________________________________________________________________________________________</p>
<p>### BEGIN INIT INFO<br />
# Provides: nginx<br />
# Required-Start: $all<br />
# Required-Stop: $all<br />
# Default-Start: 2 3 4 5<br />
# Default-Stop: 0 1 6<br />
# Short-Description: starts the nginx web server<br />
# Description: starts nginx using start-stop-daemon<br />
### END INIT INFO</p>
<p>PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin<br />
DAEMON=/usr/local/sbin/nginx<br />
NAME=nginx<br />
DESC=nginx</p>
<p>test -x $DAEMON || exit 0</p>
<p># Include nginx defaults if available<br />
if [ -f /etc/default/nginx ] ; then<br />
. /etc/default/nginx<br />
fi</p>
<p>set -e</p>
<p>case &#171;$1&#8243; in<br />
start)<br />
echo -n &#171;Starting $DESC: &#187;<br />
start-stop-daemon &#8212;start &#8212;quiet &#8212;pidfile /usr/local/nginx/logs/nginx.pid \<br />
&#8212;exec $DAEMON &#8212; $DAEMON_OPTS<br />
echo &#171;$NAME.&#187;<br />
;;<br />
stop)<br />
echo -n &#171;Stopping $DESC: &#187;<br />
start-stop-daemon &#8212;stop &#8212;quiet &#8212;pidfile /usr/local/nginx/logs/nginx.pid \<br />
&#8212;exec $DAEMON<br />
echo &#171;$NAME.&#187;<br />
;;<br />
restart|force-reload)<br />
echo -n &#171;Restarting $DESC: &#187;<br />
start-stop-daemon &#8212;stop &#8212;quiet &#8212;pidfile \<br />
/usr/local/nginx/logs/nginx.pid &#8212;exec $DAEMON<br />
sleep 1<br />
start-stop-daemon &#8212;start &#8212;quiet &#8212;pidfile \<br />
/usr/local/nginx/logs/nginx.pid &#8212;exec $DAEMON &#8212; $DAEMON_OPTS<br />
echo &#171;$NAME.&#187;<br />
;;<br />
reload)<br />
echo -n &#171;Reloading $DESC configuration: &#187;<br />
start-stop-daemon &#8212;stop &#8212;signal HUP &#8212;quiet &#8212;pidfile /usr/local/nginx/logs/nginx.pid \<br />
&#8212;exec $DAEMON<br />
echo &#171;$NAME.&#187;<br />
;;<br />
*)<br />
N=/etc/init.d/$NAME<br />
echo &#171;Usage: $N {start|stop|restart|force-reload}&#187; >&#038;2<br />
exit 1<br />
;;<br />
esac<br />
exit 0</p>
<p>_________________________________________________________________________________________</p>
<p>(разумеется его надо сохранить, закрыть и сделать исполняемым)</p>
<p>sudo chmod +x /etc/init.d/nginx<br />
sudo /usr/sbin/update-rc.d -f nginx defaults</p>
<p>(Увидишь примерно такой выход):</p>
<p>Adding system startup for /etc/init.d/nginx &#8230;<br />
/etc/rc0.d/K20nginx -> ../init.d/nginx<br />
/etc/rc1.d/K20nginx -> ../init.d/nginx<br />
/etc/rc6.d/K20nginx -> ../init.d/nginx<br />
/etc/rc2.d/S20nginx -> ../init.d/nginx<br />
/etc/rc3.d/S20nginx -> ../init.d/nginx<br />
/etc/rc4.d/S20nginx -> ../init.d/nginx<br />
/etc/rc5.d/S20nginx -> ../init.d/nginx</p>
<p>(Последнее в этом уроке:</p>
<p>Если мы ожидаем хорошее движение на сайте, то необходимо создать файл для logrotate, который автоматически будет сжимать и удалять старые файлы и давать нам возможность контролировать кто бывал на нашем сайте)<br />
sudo gedit /etc/logrotate.d/nginx</p>
<p>(вставить это в пустой файл и сохранить)</p>
<p>_________________________________________________________________________________________</p>
<p>/usr/local/nginx/logs/*.log {<br />
daily<br />
missingok<br />
rotate 9<br />
compress<br />
delaycompress<br />
notifempty<br />
postrotate<br />
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`<br />
endscript<br />
} </p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/470/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Настройка безпарольной аутентификации по ssh</title>
		<link>http://iphp.com.ua/archives/466</link>
		<comments>http://iphp.com.ua/archives/466#comments</comments>
		<pubDate>Tue, 18 Aug 2009 14:35:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[Soft/Tools]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=466</guid>
		<description><![CDATA[Допустим, вам необходимо настроить безпарольный вход по ssh (scp и sftp тоже) на удаленный сервер remote.org.ua под пользователем user. Если ваш имя вашего локального пользователя совпадает с удаленным, то user@ везде можно опустить. 1) создаем открытый и закрытый ключ нашей локальной системы $ ssh-keygen -t rsa жмем энтер отказываясь от ключевой фразы 2) если в [...]]]></description>
			<content:encoded><![CDATA[<p>Допустим, вам необходимо настроить безпарольный вход по ssh (scp и sftp тоже) на удаленный сервер remote.org.ua под пользователем user.<br />
Если ваш имя вашего локального пользователя совпадает с удаленным, то user@ везде можно опустить.</p>
<p>1) создаем открытый и закрытый ключ нашей локальной системы<br />
$ ssh-keygen -t rsa<br />
жмем энтер отказываясь от ключевой фразы</p>
<p>2) если в системе есть программа ssh-copy-id, то настраиваем удаленную систему на то, что бы оно авторизировало ssh по открытому ключу<br />
$ ssh-copy-id -i ~/.ssh/id_rsa user@remote.org.ua<br />
переходим к шагу 4)</p>
<p>3) если ssh-copy-id нет то можно сделать это ручками. вот последовательность действий с объяснениями</p>
<p>3.1) копируем открытый ключ на удаленную систему<br />
$ scp ~/.ssh/id_rsa.pub user@remote.org.ua:~ незабываем ввести пароль. ведь мы еще не настроили беспарольный вход Ж:-)</p>
<p>3.2) логинимся на удаленный сервер<br />
$ ssh user@remoute.org.ua</p>
<p>3.3) заносим открытый ключ нашей локальный системы в авторизированые ключи удаленной системы, устанавливаем правильные права и убираем за собой мусор:<br />
remote$ [ -d ~/.ssh ] || (mkdir ~/.ssh; chmod 711 ~/.ssh) # создадим ~/.ssh директорию если ее нет и дадим нужные права<br />
remote$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys # добавляем открытый ключ к авторизированым ключам<br />
remote$ chmod 600 ~/.ssh/authorized_keys # и делаем правильные права(иначе ssh откажется брать отсюда ключи)<br />
remote$ rm ~/id_rsa.pub # удаляем ненужное</p>
<p>4) проверяем что все работает. запускаем на локальном хосту<br />
$ ssh user@remoute.org.ua<br />
или например<br />
$ scp .zshrc user@remoute.org.ua:~<br />
должно сработать без пароля.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/466/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

