<?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>Mick - Информационный ресурс &#187; kernel</title>
	<atom:link href="https://mick.in.ua/tag/kernel/feed/" rel="self" type="application/rss+xml" />
	<link>https://mick.in.ua</link>
	<description>Практический опыт системного администратора</description>
	<lastBuildDate>Tue, 23 Sep 2025 12:49:35 +0000</lastBuildDate>
	<language>ru-RU</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>В Установка, настройка небольшого интернет сервера на FreeBSD 9.2</title>
		<link>https://mick.in.ua/2013-09-11/freebsd_server/</link>
		<comments>https://mick.in.ua/2013-09-11/freebsd_server/#comments</comments>
		<pubDate>Wed, 11 Sep 2013 13:18:00 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Моя работа]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://mick.in.ua/?p=577</guid>
		<description><![CDATA[В прошлых статьях я описал по отдельность настройки некоторого софта для конкретных целей. Статьи касались 5 и 6 версии FreeBSD, сейчас уже выпущена 9-я и 10-я версия.  Поэтому я решил собрать всю информацию вместе и систематизировать. ТЗ. Нам нужен сервер, который будет выступать интернет шлюзом.  В сервере 2 сетевых карты, к первой подключен эзернет от [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>В прошлых статьях я описал по отдельность настройки некоторого софта для конкретных целей. Статьи касались 5 и 6 версии FreeBSD, сейчас уже выпущена 9-я и 10-я версия.  Поэтому я решил собрать всю информацию вместе и систематизировать. <span id="more-577"></span><strong>ТЗ.</strong> Нам нужен сервер, который будет выступать интернет шлюзом.  В сервере 2 сетевых карты, к первой подключен эзернет от модема провайдера, вторая соединена со свичем, к которому подключены пользователи. Сервер будет выдавать динамически ip-адреса, на нем будет установлен фаервол, котрый будет резать ненужный входящий и исходящий трафик по просьбе руководства( world of tanks, countre strike,&#8230;).  Весь веб трафик будет завернут на веб-сервер и на основании его логов будет построена статистика кто какие ресурсы посещал. Также сервер будет выполнять несколько несвойственным ему функций, нужных именно мне <img src="https://mick.in.ua/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /></p>
<h3><strong>1. Установка и обновление системы.</strong></h3>
<p>Скачиваем установочный образ FreeBSD-9.2-RC3-i386 с ftp7.ua.freebsd.org, устанавливаем. Описывать установку не буду, т.к. она подробно описана в хенбуке. В приведенных ниже ссылках указаны лишь параметры, которые нужно добавить, все остальное убрано для компактности. Для начала проверяем ДНС сервера, если пусто &#8211; вводим:</p>
<blockquote><p><strong>root@inet:/usr/home/mick # cat /etc/resolv.conf</strong><br />
<strong> nameserver 195.64.225.197</strong><br />
<strong> nameserver 195.64.225.199</strong></p></blockquote>
<p>При установке какого-либо софта из портов запросы на дистрибутив идет по умолчанию на freebsd.org, мы же укажем системе пусть сначала ищет на украинских зеркалах, находящихся в сети ua-ix. Ранее когда инет по ua-ix был бесплатен, а за зарубежный трафик платили за мегабайты, эта опция была актуальна, сейчас трафик неограниченный, выиграш разве что в скорости.</p>
<blockquote><p><strong>root@inet:/usr/home/mick # cat /etc/make.conf</strong><strong></strong><strong></strong><br />
<strong>MASTER_SITE_BACKUP?= \</strong><br />
<strong>ftp://ftp7.ua.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \</strong><br />
<strong>ftp://ftp5.ua.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \</strong><br />
<strong>ftp://ftp3.ua.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \</strong><br />
<strong>ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/</strong><br />
<strong>MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}</strong></p></blockquote>
<p>Теперь сделаем локализацию системы, укажем системе, что язык наш русский и кодировка по умолчанию KOI8-R. Локализацию можно делать на уровне всей системы или только для конкретного юзера. Делаем для всей системы. Устанавливаем переменные окружения <strong>LANG</strong> и <strong>MM_CHARSET</strong> в инициализационных файлах оболочки.</p>
<blockquote><p><strong>root@inet:/usr/home/mick # cat /etc/profile</strong><br />
<strong> LANG=ru_RU.KOI8-R; export LANG</strong><br />
<strong> MM_CHARSET=KOI8-R; export MM_CHARSET</strong></p>
<p><strong>root@inet:/usr/home/mick # cat /etc//usr/share/skel/dot.profile</strong><br />
<strong> LANG=ru_RU.KOI8-R; export LANG</strong><br />
<strong> MM_CHARSET=KOI8-R; export MM_CHARSET</strong></p></blockquote>
<p>Или:</p>
<blockquote><p><strong>root@inet:/usr/home/mick # cat /etc/csh.login</strong><br />
<strong>setenv LANG ru_RU.KOI8-R</strong><br />
<strong>setenv MM_CHARSET KOI8-R</strong></p>
<p><strong>root@inet:/usr/home/mick # cat /usr/share/skel/dot.login</strong><br />
<strong>setenv LANG ru_RU.KOI8-R</strong><br />
<strong>setenv MM_CHARSET KOI8-R</strong></p></blockquote>
<p>Добавляем в /etc/rc.conf  указываем местоположение кодовой таблицы (keymaps), консольных шрифтов для русского языка и кнопки переключения языка клавиатуры (правый shift):</p>
<blockquote><p><strong>root@inet:/usr/share/syscons/fonts # cat /etc/rc.conf</strong><br />
<strong>#RU</strong><br />
<strong>keymap=&#8221;/usr/share/syscons/keymaps/ru.koi8-r&#8221;</strong><br />
<strong>keychange=&#8221;61 ^[[K&#8221;</strong><br />
<strong>scrnmap=&#8221;koi8-r2cp866&#8243;</strong><br />
<strong>font8x8=&#8221;/usr/share/syscons/fonts/cp866-8.8.fnt&#8221;</strong><br />
<strong>font8x14=&#8221;/usr/share/syscons/fonts/cp866-8.14.fnt&#8221;</strong><br />
<strong>font8x16=&#8221;/usr/share/syscons/fonts/cp866-8.16.fnt&#8221;</strong><br />
<strong>root@inet:/usr/share/syscons/fonts #</strong></p></blockquote>
<p>Еще нужно установить тип терминала вместо xtrem &#8211; cons25r:</p>
<blockquote><p><strong>root@inet:/usr/home/mick # cat /etc/ttys </strong><br />
<strong>ttyv0   &#8220;/usr/libexec/getty Pc&#8221;         cons25r on  secure</strong></p></blockquote>
<p>Перелогиниваемся, нажимаем паравый Shift и в консоли можем писать по русски. Для наглядости запустим <strong>mc </strong>(у кого нет ставим из портов /usr/ports/misc/mc) и видим, что менюшки все на русском языке.</p>
<p>Ну вот сделали небольшой тюнинг, перейдем к обновлению системы (мир и ядро).  После выхода релиза накапливаются некоторые патчи, изменения, которые со временем входят в следующий релиз. Обновление мира состоит закачке исходников, компиляции и установки из них свежих бинарных файлов пользовательских програм (grep, cat, vi,..). Поскольку  релиз 9.2 вышел 2 недели назад, то мне нет смысла пересобирать мир, но я ниже укажу порядок действий как это делать. Для начала нужно закачать исходники. Можно использовать <strong>CVS</strong> или <strong>SVN </strong>репозитории. SVN более новая разработки, которая имеет широкие возможности, но я буду использовать CVS, т.к. он не требует установить большое количество дополнительного ПО как SVN и для небольшого сервера он вполне подойдет. В системе установлена программа <strong>csup</strong>, можно установить из портов <strong>cvsup: net cvsup-without-gui</strong> (без GUI интерфейса, консольная версия). Принцип действия у их одинаковый, разница в том, что csup написана на C. Конфиг берем отсюда /usr/share/examples/cvsup/ и редактируем под собственные потребности. Директива <strong>*default release=cvs tag=RELENG_9</strong> говорит о том, что исходники будут обновлены до 9-й версии STABLE.<code></code></p>
<blockquote><p><strong>root@inet:/etc/my_config # cat stable-supfile</strong><br />
<strong> *default host=cvsup6.ua.FreeBSD.org</strong><br />
<strong> *default base=/var/db</strong><br />
<strong> *default prefix=/usr</strong><br />
<strong> *default release=cvs tag=RELENG_9</strong><br />
<strong> *default delete use-rel-suffix</strong><br />
<strong> *default compress</strong><br />
<strong> src-all</strong></p></blockquote>
<p>Конфиг готов, я положил его в /etc/my_my_config, запускаем. Ключ -g указывает запускать без GUI, L2 &#8211; максимальный уровень вывода на экран &#8211; будет выводиться все действия:</p>
<p><strong>root@inet:~ #  csup -g -L 2 /etc/my_config/stable-supfile</strong></p>
<p>После запуска мы увидим процесс закачки обновлений, займет около получаса при хорошей скорости Интернета. Смотрим размер du -h /usr/src 820M. Исходники закачались.</p>
<p><strong>Собираем World (мир).</strong> Рекомендуется вернуть дефолтный /etc/make.conf. Порядок действий:</p>
<ol>
<li><strong>cd /usr/src</strong></li>
<li><strong>rm -R /usr/obj ( удаляем все /usr/obj &#8211; тут хранятся компиллированные файлы из которых потом инсталлирует мир)</strong></li>
<li><strong>make cleandir &amp;&amp; make cleandir ( рекмендуют делать именно 2 раза)</strong></li>
<li><strong>make -sj4 buildworld</strong></li>
</ol>
<p>Перед сборкой желательно зайти в однопользовательский режим.</p>
<ol>
<li><strong>mount -u /</strong></li>
<li><strong>mount -a</strong></li>
<li><strong>/usr/src/usr.sbin/mergemaster -p</strong></li>
<li><strong>cd /usr/src</strong></li>
<li><strong>make installworld</strong></li>
<li><strong>mergemaster</strong></li>
<li><strong>reboot</strong></li>
<li><strong>cd /usr/src</strong></li>
<li><strong>make delete-old</strong></li>
</ol>
<p>В процессе инсталляции рекомендуется запускать программу mergemaster. Она сравнивает текущие конфигурационные файлы /etc с /usr/src/etc и если есть разница предлагает на выбор или оставить старый или новый или объединить. Желательно использовать новые файлы, но если работает какое-либо ПО, то нужно проанализировать новые изменения на предмет работоспособности.  По хорошему старый /etc желательно  сохранить.</p>
<p><strong>Сборка ядра.</strong> В ядре хранятся модули программ и поддержка аппаратных устройств. Программы, встроенные в ядро работают быстрее, чем подгружаемые модули. По умолчанию в системе используется ядро GENERIC, местоположение /usr/src/sys/i386/conf. Но хранить там собственное ядро нежелательно, поскольку может быть удалено при последующих обновлениях. Мы создадим свою папку с файлами конфигураций/etc/my_config , скопируем сюда GENERIC, переименуем его и добавим нужные нам опции.</p>
<p><strong>#mkdir /etc/my_config</strong><br />
<strong> # cd /usr/src/sys/i386/conf</strong><br />
<strong> #cp GENERIC /etc/my_config/</strong><br />
<strong> # mv /etc/my_config/GENERIC /etc/my_config/MICKIPFW</strong><br />
<strong> #ln -s /etc/my_config/MICKIPFW </strong>(создаем символическую ссылку на файл /etc/my_config/MICKIPFW)</p>
<p>В файл ядра добавляем следующие опции:</p>
<p><strong>ident           MICKIPFW</strong><br />
<strong>#</strong><br />
<strong>options IPFIREWALL</strong><br />
<strong>options IPFIREWALL_VERBOSE</strong><br />
<strong>options IPFIREWALL_VERBOSE_LIMIT=100</strong><br />
<strong>options IPFIREWALL_DEFAULT_TO_ACCEPT</strong><br />
<strong>options IPFIREWALL_FORWARD</strong><br />
<strong>options IPDIVERT</strong><br />
<strong>options DUMMYNET</strong><br />
<strong>options IPFILTER</strong><br />
<strong>options IPFILTER_LOG</strong><br />
<strong></strong></p>
<p>Эти опции для работы нужны для работы фаервола, о котором речь пойдет позже.</p>
<ol>
<li><strong>cd /usr/src</strong></li>
<li><strong>rm -R /usr/obj<br />
</strong></li>
<li><strong>make cleandir &amp;&amp; make cleandir<br />
</strong></li>
<li><strong>make -sj4 builkernel KERNCONF=MICKIPFW<br />
</strong></li>
<li><strong>make  installkernel KERNCONF=MICKIPFW</strong></li>
<li><strong>reboot</strong></li>
</ol>
<p>Если в процессе сборки и установки никаких ошибок не возникло после ребута командой uname -a увидим, что новое ядро работает. При инсталяции /boot/kernel переименовывается в /boot/kernel.old. Если после инсталяции система не грузится можно при загрузке указать грузиться с /boot/kernel.old и стартанет старое ядро.</p>
<p><strong>Обновление портов.</strong></p>
<p>Обновлять порты можно с пмощью <strong>cvsup </strong>или <strong>portsnap. </strong>Будем использовать второй вариант, поскольку cvsup утсаревшее ПО. При первом запуске:</p>
<blockquote><p><strong>root@inet:/usr/home/mick # portsnap fetch</strong><br />
Looking up portsnap.FreeBSD.org mirrors&#8230; 7 mirrors found.<br />
Fetching public key from ec2-eu-west-1.portsnap.freebsd.org&#8230; done.<br />
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org&#8230; done.<br />
Fetching snapshot metadata&#8230; done.<br />
Fetching snapshot generated at Fri Sep 13 03:04:34 EEST 2013:<br />
ced2dfabe1a0a7ca68bedad7f042f8d1c0a9ac7882e963 26% of   69 MB  181 kBps 05m47s<br />
<strong>root@inet:/usr/home/mick # portsnap extract</strong></p></blockquote>
<p>В дальнейшем:</p>
<blockquote><p><strong>root@inet:/usr/home/mick # portsnap fetch</strong><br />
<strong> root@inet:/usr/home/mick # portsnap update</strong></p></blockquote>
<p>Можно в крондобавить раз в неделю запускать portsnap fetch &amp;&amp; portsnap update. Есть еще хорошая програмка <strong>portupgrade(/usr/ports/ports-mgmt/portupgrade)</strong>, которая может обновлять порты до последних версий.</p>
<p>Команда <strong>pkg_version -v</strong> показывает какие установлены программы и нужно ли их обновлять.</p>
<p><strong><code>portupgrade -nr port_name</code></strong> &#8211; информация о будущей установки пакета и какие зависимости будут установлены.</p>
<p><strong><code>portupgrade -ir port_name</code></strong> &#8211; опция -i &#8211; указывает спрашивать пользователя, если есть выбор при установке, опция -r &#8211; обновлять все зависимости при установке.</p>
<p>Есть еще интерессная программа portdowngrade, которая позволяет инсталлировать прошлые версии программ.</p>
<h3><strong>2.Установка и настройка DHCP-сервера.</strong></h3>
<p>Наш сервер будет выдавать динамически IP-адреса для пользователей. Для этих целей устанавливает порт /usr/ports/net/isc-dhcp42-server/. Дефолтный конфиг нам не подходит, там много лишнего, вот мой конфиг, лежит /usr/local/etc/dhcp.conf:</p>
<p>option domain-name-servers 195.64.225.197,195.64.225.199; # определяем ДНС сервера провайдера<br />
default-lease-time 43200;#время аренд ip адреса<br />
max-lease-time 43200;#максимальное время аренд ip адреса<br />
authoritative; # наш сервер является авторизованных главным сервером для нашей сети<br />
log-facility local7; # куда пишем логи<br />
subnet 192.168.210.0 netmask 255.255.255.0 {<br />
range 192.168.210.100 192.168.210.200;<br />
option routers 192.168.210.1;<br />
option broadcast-address 192.168.210.255;<br />
}#Тут определяем нашу подсети, диапазон выделяемых ip,щлюз, бродкаст, эти все данные сервер будет выдавать пользователям.<br />
host Xerox_sekretar {hardware ethernet 9c:93:4e:08:1b:83; fixed-address 192.168.210.2;}<br />
host dlink2 {hardware ethernet 00:17:9a:83:3f:5e; fixed-address 192.168.210.3;}<br />
host 1C {hardware ethernet 20:cf:30:8a:d5:2c; fixed-address 192.168.210.6;}<br />
host icc-bd {hardware ethernet 8c:89:a5:68:85:13; fixed-address 192.168.210.7;}<br />
host Admin {hardware ethernet 48:5b:39:d2:a7:58; fixed-address 192.168.210.8;}<br />
host Sekretar {hardware ethernet 00:0d:87:d4:c9:2f; fixed-address 192.168.210.10;}<br />
host Kosiuk {hardware ethernet 00:22:15:8e:72:1f; fixed-address 192.168.210.11;}<br />
host Lytkina {hardware ethernet 00:1e:68:fb:7a:4a;fixed-address 192.168.210.12;}<br />
host Suprunyuk {hardware ethernet 00:30:67:3e:c6:11;fixed-address 192.168.210.13;}<br />
host Novohatska {hardware ethernet c8:60:00:d0:0a:dd;fixed-address 192.168.210.14;}<br />
host Tarnavska {hardware ethernet 00:0a:48:0d:33:5a;fixed-address 192.168.210.15;}<br />
host Xerox_lytkina {hardware ethernet 00:00:aa:cc:91:74;fixed-address 192.168.210.16;}<br />
host Xerox_bugalt {hardware ethernet 00:00:aa:cc:26:22;fixed-address 192.168.210.17;}<br />
host Pasechnik {hardware ethernet 00:23:08:b7:57:47;fixed-address 192.168.210.18;}<br />
host Zavhoz {hardware ethernet 00:50:8d:68:cc:3b;fixed-address 192.168.210.19;}<br />
host Tereshkovich {hardware ethernet 20:16:d8:85:61:c5;fixed-address 192.168.210.20;}<br />
host Khalak {hardware ethernet 8c:89:a5:d9:ca:a7;fixed-address 192.168.210.21;}<br />
host Dlink1 {hardware ethernet 00:17:9a:75:a0:f5;fixed-address 192.168.210.22;}<br />
host Stepnyk {hardware ethernet 00:15:af:45:5a:11;fixed-address 192.168.210.23;}<br />
host Suhareva {hardware ethernet 50:46:5d:73:4f:dd;fixed-address 192.168.210.25;}<br />
host Gorbatsevich {hardware ethernet 00:15:af:59:a7:40;fixed-address 192.168.210.26;}<br />
host Kabanets {hardware ethernet c8:60:00:d0:09:da;fixed-address 192.168.210.27;}</p>
<p>В директиве host указывается какой ip назачать для конкретного mac-адреса сетевой. Это нам нужно в дальнейшем, когда будет строиться статистика по использованию веб-траффика по каждому сотруднику. Конфин настроили, добавляем в /etc/rc.conf:</p>
<blockquote><p><strong>#DHCP</strong><br />
<strong>#ifconfig_re1=&#8221;DHCP&#8221;</strong><br />
<strong>dhcpd_enable=&#8221;YES&#8221;                          # dhcpd enabled?</strong><br />
<strong>dhcpd_flags=&#8221;-q&#8221;                            # command option(s)</strong><br />
<strong>dhcpd_conf=&#8221;/usr/local/etc/dhcpd.conf&#8221;      # configuration file</strong><br />
<strong>dhcpd_ifaces=&#8221;re1&#8243;                             # ethernet interface(s)</strong><br />
<strong>dhcpd_withumask=&#8221;022&#8243;                       # file creation mask</strong></p></blockquote>
<p>Добавляем в /etc/syslog.conf нижеуказанные строчки и создаем файл var/log/dhcpd.log.</p>
<blockquote><p><strong>local7.*                                         /var/log/dhcpd.log</strong></p></blockquote>
<p><strong></strong>Ребутим машину или рестартим службу /etc/syslogd restart &amp;&amp; /usr/local/etc/rc.d/isc-dhcpd start. На клиентах должен повиться ip, в логах /var/log/dhcp.log:</p>
<blockquote><p>Sep 13 22:36:17 inet dhcpd: DHCPREQUEST for 192.168.210.11 from 00:22:15:8e:72:1f via re1<br />
Sep 13 22:36:17 inet dhcpd: DHCPACK on 192.168.210.11 to 00:22:15:8e:72:1f via re1<br />
Sep 13 22:37:53 inet dhcpd: DHCPINFORM from 192.168.210.11 via re1<br />
Sep 13 22:37:53 inet dhcpd: DHCPACK to 192.168.210.11 (00:22:15:8e:72:1f) via re1</p></blockquote>
<p>В /var/db/dhcpd/dhcpd.leases:</p>
<blockquote><p>lease 192.168.210.11 {<br />
starts 2 2013/09/10 11:48:41;<br />
ends 2 2013/09/10 14:12:41;<br />
cltt 2 2013/09/10 11:48:41;<br />
binding state active;<br />
next binding state free;<br />
rewind binding state free;<br />
hardware ethernet 00:22:15:8e:72:1f;<br />
uid &#8220;\001\310`\000\320\012\335&#8243;;<br />
client-hostname &#8220;Novohatska&#8221;;</p></blockquote>
<h3>3<strong>. Настройка IPNAT и IPFW.</strong></h3>
<p>Ранее, когда мы обирали вое ядро были включены в ядро IPFW и IPFILTER. Ели этого не делать работать будет как модуль, но скорость будет ниже. Итак, что мы включили в ядро:</p>
<p>PFIREWALL – включение в ядро ipfw;<br />
IPFIREWALL_VERBOSE – ведение логов ipfw;<br />
IPFIREWALL_VERBOSE_LIMIT=100 – максимальное количество записей в секунду в логах;<br />
IPFIREWALL_DEFAULT_TO_ACCEPT – если нет правил – пакеты все проходят;<br />
IPFIREWALL_FORWARD – для настройки форварда пакетов (необходим для transparent squid);<br />
IPDIVERT – включение natd в ядро;<br />
DUMMYNET – системное средство применяется для регулирования трафика, шейпера;<br />
IPFILTER – включение в ядро ipfilter;<br />
options IPFILTER_LOG – включение записи логов.</p>
<p>Для того, чтобы пользователь смогли выходить в интернет нужно пробрасывать пакеты с внутреннего интерфейса на внешний. Сделать это можно посредством опции DIVERT демона NATD или IPNAT. Я использую IPNAT. Прописываем в /etc/rc.conf следующее:</p>
<blockquote><p>gateway_enable=&#8221;YES&#8221;<br />
firewall_enable=&#8221;YES&#8221;<br />
firewall_script=&#8221;/etc/my_config/ipfw.rules&#8221;<br />
firewall_quiet=&#8221;NO&#8221;<br />
firewall_logging=&#8221;YES&#8221;<br />
ipnat_enable=&#8221;YES&#8221;<br />
ipnat_rules=&#8221;/etc/ipnat.rules&#8221;<br />
ipmon_enable=&#8221;YES&#8221;<br />
ipmon_flags=&#8221;-Dva /var/log/ipmon.log&#8221;<br />
#natd_enable=&#8221;YES&#8221;<br />
#natd_interface=&#8221;re0&#8243;<br />
#natd_flags=&#8221;&#8221;</p></blockquote>
<p>Тут gateway_enable=&#8221;YES&#8221; указывает серверу быть шлюзом интернета, эта запись меня меняет значение с 0 на 1 параметра  ip.fw net.inet.ip.fw.enable.</p>
<blockquote><p>root@inet:/var/log # sysctl -a | grep net.inet.ip.fw.enable:<br />
net.inet.ip.fw.enable: 1</p></blockquote>
<p>Далее в rc.conf прописан запуск IPFW со списком правил /etc/my_config/ipfw.rules. Стартует IPNAT с конфигом /etc/ipnat.rules, IPMON, который пишет логи в /var/log/ipmon.log (нужно создать вкучную). В /etc/ipnat.rules прописаны правила:</p>
<blockquote><p>root@inet:/var/log # cat /etc/ipnat.rules<br />
map re0 192.168.210.0/24 -&gt; 195.64.226.196/32 portmap tcp/udp 40000:60000</p></blockquote>
<p>Тут указано, что пакеты пришедшие на внешний интерфейс re0 с подсети внутренней сети 192.168.210.0/24 перенаправлять на внешний ip при этом порты подменяются на высокие в диапазоне 40000-60000. Если пользователь в браузере введет какой-либо сайт его запрос обратиться на шлюз по умолчанию ,IPNAT увидит, что пакет хочет на внешний интерфейс, подменит адрес внутренний ip отправителя на внешний ip сервера и подменит порт на из высокого диапазона. IPMON все эти действия запишет в   /var/log/ipmon.log. Если использовать natd, то нужно раскомментировать его в /etc/rc.cong и добавить в правилах фаервола директивой DIVERT форвард пакетов на внешний интерфейс.</p>
<p>Теперь рассмотрим правила /etc/my_config/ipfw.rules. Идея следующая &#8211; сначала разрешаем нужные нам сервисы, все остальное запрещаем.</p>
<blockquote><p>#!/bin/sh<br />
#Назначаем переменные, путь к ipfw, внешний,внутренний интерфейс,  внешний,внутренний ip, список ip, которым разрешен доступ на SSH.<br />
cmd=&#8221;/sbin/ipfw&#8221;<br />
if_ext=&#8221;re0&#8243;<br />
if_int=&#8221;re1&#8243;<br />
ip_ext=&#8221;195.64.226.196&#8243;<br />
ip_int=&#8221;192.168.210.1&#8243;<br />
sshpass=&#8221;178.137.X.X,195.238.X.X&#8221;</p>
<p>${cmd} 1 add allow ip from 178.137.X.X to any<br />
${cmd} 2 add allow ip from any to 178.137.X.X</p>
<p># Проверяем &#8211; соответствует ли пакет динамическим правилам:<br />
${cmd} 3 add check-state</p>
<p># Разрешаем весь траффик по внутреннему интерфейсу (петле)<br />
${cmd} 10 add allow ip from any to any via lo0<br />
${cmd} 11 add deny ip from any to 127.0.0.0/8<br />
${cmd} 12 add deny ip from 127.0.0.0/8 to any</p>
<p># запреты:<br />
# режем частные сети на внешнем интерфейсе<br />
${cmd} 20 add deny ip from any to 10.0.0.0/8 in via ${if_ext}<br />
${cmd} 21 add deny ip from any to 172.16.0.0/12 in via ${if_ext}<br />
${cmd} 22 add deny ip from any to 192.168.0.0/16 in via ${if_ext}<br />
${cmd} 23 add deny ip from any to 0.0.0.0/8 in via ${if_ext}<br />
# рубим траффик к частным сетям через внешний интерфейс<br />
# заметтьте &#8211; эти правила отличаются от тех что были выше!<br />
${cmd} 24 add deny ip from 10.0.0.0/8 to any out via ${if_ext}<br />
${cmd} 25 add deny ip from 172.16.0.0/12 to any out via ${if_ext}<br />
${cmd} 26add deny ip from 192.168.0.0/16 to any out via ${if_ext}<br />
${cmd} 27 add deny ip from 0.0.0.0/8 to any out via ${if_ext}</p>
<p># рубим автоконфигуреную частную сеть<br />
${cmd} 30 add deny ip from any to 169.254.0.0/16 in via ${if_ext}<br />
${cmd} 31 add deny ip from 169.254.0.0/16 to any out via ${if_ext}</p>
<p># рубаем мультикастовые рассылки<br />
${cmd} 40 add deny ip from any to 240.0.0.0/4 in via ${if_ext}<br />
${cmd} 41 add deny ip from 224.0.0.0/4 to any out via ${if_extt}</p>
<p># рубим фрагментированные icmp<br />
${cmd} 50 add deny icmp from any to any frag<br />
# рубим широковещательные icmp на внешнем интерфейсе<br />
${cmd} 51 add deny log icmp from any to 255.255.255.255 in via ${if_ext}<br />
${cmd} 52 add deny log icmp from any to 255.255.255.255 out via ${if_ext}</p>
<p># разрешаем все установленные соединения (если они установились &#8211;<br />
# значит по каким-то правилам они проходили:)<br />
${cmd} 60 add allow tcp from any to any established</p>
<p># разрешаем весь исходящий траффик (серверу-то в инет можно? :))<br />
${cmd} 70 add allow ip from ${ip_ext} to any out xmit ${if_ext}</p>
<p># разрешаем DNS снаружи (нам же надо узнавать IP по именам машин?)<br />
${cmd} 80 add allow udp from any 53 to any via ${if_ext}</p>
<p># разрешаем UDP (для синхронизации времени &#8211; 123 порт)<br />
${cmd} 90 add allow udp from any to any 123 via ${if_ext}</p>
<p># разрешаем ftp снаружи (оба правила &#8211; для пасивного режима)<br />
# для узнавания портранджа по которому будет работать, лезем в<br />
#/usr/home/lissyara/&gt;sysctl net.inet.ip.portrange.first<br />
# net.inet.ip.portrange.first: 49152<br />
# /usr/home/lissyara/&gt;sysctl net.inet.ip.portrange.last<br />
# net.inet.ip.portrange.last: 65535<br />
${cmd} 100 add allow tcp from any to ${ip_ext} 21 via ${if_ext}</p>
<p># разрешаем некоторые типы ICMP траффика &#8211; эхо-запрос,<br />
# эхо-ответ и время жизни пакета истекло<br />
${cmd} 110 add allow icmp from any to any icmptypes 0,8,11</p>
<p># открываем снаружи SSH порт &#8211; если надо будет ходить на машину по ssh<br />
${cmd} 120 add allow tcp from ${sshpass} to ${ip_ext} 443 via ${if_ext}</p>
<p>#Разрешено все внутри сети<br />
${cmd} 130 add allow ip from any to any via ${if_int}</p>
<p>#Запрещено весь отальной траффик<br />
${cmd} 900 add deny ip from any to any 137,138,30311<br />
${cmd} 901 add deny udp tcp from any to any<br />
${cmd} 902 add deny log logamount 10000 tcp from any to any</p></blockquote>
<p>В самом конфиге все прозрачно описано, был взят с сайта <a href="http://www.lissyara.su/" target="_blank">www.lissyara.su</a>.  В первом правиле я разрешил все для своего домашнего ip. Далее режем на внешнем интерфейсе что не должно появиться, разрешаем все внутри сети, снаружи ДНС, сиснхронизацию времени, FTP, SSH. В 900 правиле режутся порты,137,139,30311, в 901 udp пакеты &#8211; те, которые я не хочу видеть в логах. Все остальное пишется в логи, при этом игнорируется значение, указанное в ядре IPFIREWALL_VERBOSE_LIMIT=100 &#8211; 100 строк в логе. Опция logamount 10000разрешает 10000 записей. Когда идет атака на сервер записи в логах могу разростись до больших значений и когда достигнут значения 100( указано в ядре) данные не пишутся. В кроне прописываем:</p>
<blockquote><p>root@inet:/var/log # cat /etc/crontab | grep ipfw<br />
*     */3       *       *       *       root    &#8220;/sbin/ipfw zero&#8221;</p></blockquote>
<p>Опция zero обнулит счетчик ipfw, тогда в логи снова будут писать данные. Сделано на всякий случай, если количество записей после последнего обнуления достигнут 10000.   Пропишем ротацию логов:</p>
<blockquote><p>root@inet:/var/log # cat /etc/newsyslog.conf  | grep security<br />
/var/log/security                       600  10    500  *     JC</p></blockquote>
<p>Логи ipfw пишутся в /var/log/security, в  /etc/newsyslog.conf указываем, что хранить не 10 файлов, при достижении размера файла 500 кб архивировать. Рестартуем сервер или службы /etc/rc.d/ipfw restart, /etc/rc.d/syslogd restart, /etc/rc.d/syslogd restart. Влогах может появиться запись <code>last <span style="color: teal;">message</span> repeated <b><span style="color: darkblue;">45</span></b> times</code>. Это определяется строкой в ядре IPFIREWALL_VERBOSE_LIMIT=100. При получении одинаковых 145 сообщений 100 запишется и в конце <code>last message repeated <b>45</b> times.</code></p>
<h3><strong>4.Установка и настройка прокси-сервера SQUID.</strong></h3>
<p>Для того, чтобы собирать статистику по веб-трафику пользователей, нужно все запросы на 80 и 443 порт пропускать через прокси-сервер, далее анализатором логом парсить данные в таблицы и черз http просматривать. В качестве прокси используем /usr/ports/www/squid. При установке выбираем с какими опциями собран порт.  Мы используем IPNAT для редиректа портов, поэтому обязательно нужно собирать с опцией IPFILTER. У меня собрано с такими опциями:</p>
<blockquote><p>root@inet:/usr/ports/www/squid # make showconfig<br />
===&gt; The following configuration options are available for squid-2.7.9_4:<br />
ARP_ACL=off: Enable ACLs based on ethernet address<br />
AUFS=off: Enable the aufs storage scheme<br />
CACHE_DIGESTS=off: Enable cache digests<br />
CARP=on: Enable CARP support<br />
COSS=off: Enable the COSS storage scheme<br />
DELAY_POOLS=on: Enable delay pools<br />
DNS_HELPER=off: Use the old &#8216;dnsserver&#8217; helper<br />
FOLLOW_XFF=off: Follow X-Forwarded-For headers<br />
HTCP=on: Enable HTCP support<br />
IDENT=on: Enable ident (RFC 931) lookups<br />
IPFILTER=on: Enable transp. proxying with IPFilter<br />
KERB_AUTH=on: Install Kerberos authentication helpers<br />
KQUEUE=on: Use kqueue(2) instead of poll(2)<br />
LARGEFILE=off: Support log and cache files &gt;2GB<br />
LDAP_AUTH=off: Install LDAP authentication helpers<br />
NIS_AUTH=on: Install NIS/YP authentication helpers<br />
PF=off: Enable transparent proxying with PF<br />
PINGER=on: Install the icmp helper<br />
REFERER_LOG=off: Enable Referer-header logging<br />
SASL_AUTH=on: Install SASL authentication helpers<br />
SNMP=off: Enable SNMP support<br />
SSL=off: Enable SSL support for reverse proxies<br />
STACKTRACES=off: Create backtraces on fatal errors<br />
STRUCT_HTTP=off<br />
USERAGENT_LOG=off: Enable User-Agent-header logging<br />
VIA_DB=off: Enable forward/via database<br />
WCCP=on: Enable Web Cache Coordination Prot. v1<br />
WCCPV2=off: Enable Web Cache Coordination Prot. v2<br />
===&gt; Use &#8216;make config&#8217; to modify these settings</p></blockquote>
<p>Опции сборки порта также можно посмотреть в файле /var/db/ports/www_squid/options или /usr/ports/www/squid сделать make config. Добавляем squid_enable=&#8221;YES&#8221; в /etc/rc.conf. Настраиваем конфиг /usr/local/etc/squid/squid.conf:</p>
<blockquote><p> #2013-09-18_http://www.lissyara.su/articles/freebsd/programms/squid+ad/<br />
http_port 192.168.210.1:8080 transparent<br />
error_directory /usr/local/etc/squid/errors/Russian-1251<br />
# список слов, которые будучи обнаруженными в URL вызывают обработку без кэширования<br />
hierarchy_stoplist cgi-bin ?<br />
# список ACL которые вызывают несовпадение с кэшем,<br />
# и, запрос с ответом кэшироваться не будут<br />
acl QUERY urlpath_regex cgi-bin \?<br />
# собственно &#8211; правило что не кэшируем<br />
no_cache deny QUERY<br />
# сколько отдаём ему памяти (реально пожрёт втрое больше)<br />
cache_mem 512 MB<br />
# Директория для кэша, числа &#8211; размер кэша в Mb,<br />
# число директорий первого уровня, число директорий второго уровня в каждой директории первого.<br />
cache_dir ufs /var/squid/cache 3000 16 256<br />
# лог доступа<br />
cache_access_log /var/squid/logs/access.log squid<br />
cache_log /var/squid/logs/cache.log<br />
# лог активности менеджера хранилища. Показывает, какие<br />
# объекты были сохранениы/удалены из кэша и как долго.<br />
# мне он не нужен, а места занимает прилично.<br />
cache_store_log none<br />
pinger_program /usr/local/libexec/squid/pinger<br />
cache_swap_high 95<br />
cache_swap_low 90<br />
maximum_object_size 4096 KB<br />
minimum_object_size 0 KB<br />
cache_mgr admin@medigran.com.ua<br />
visible_hostname medigran.com.ua<br />
tcp_outgoing_address 195.64.226.196<br />
udp_outgoing_address 195.64.226.196<br />
#ACL<br />
acl all src 0.0.0.0/0.0.0.0<br />
acl localhost src 127.0.0.1/255.255.255.255<br />
acl office src 192.168.210.0/24<br />
acl manager proto cache_object<br />
acl shaper src 192.168.210.200<br />
acl admins src 192.168.210.8<br />
acl SSL_ports port 443 563 5190<br />
acl Safe_ports port 80 # http<br />
acl Safe_ports port 21 # ftp<br />
acl Safe_ports port 443 563 # https, snews<br />
acl Safe_ports port 70 # gopher<br />
acl Safe_ports port 210 # wais<br />
acl Safe_ports port 1025-65535 # unregistered ports<br />
acl Safe_ports port 280 # http-mgmt<br />
acl Safe_ports port 488 # gss-http<br />
acl Safe_ports port 591 # filemaker<br />
acl Safe_ports port 777 # multiling http<br />
acl CONNECT method CONNECT<br />
acl access_denied dstdomain &#8220;/usr/local/etc/squid/access_denied&#8221;<br />
http_access deny access_denied all<br />
http_access allow manager localhost<br />
http_access deny manager<br />
http_access deny !Safe_ports<br />
http_access deny CONNECT !SSL_ports<br />
http_access allow admins all<br />
http_access allow office all<br />
http_access deny all<br />
#<br />
#Delay Pool<br />
#Задаем количество пулов -2<br />
delay_pools 2<br />
# задется сначала номер пула(2), потом клас его клас 1<br />
delay_class 1 1<br />
#первое значение &#8211; сколько байт скачается на максимальной скорости,второе &#8211; скорость последующая в байтах 1Мбит=128кбайт=131072 байт<br />
#delay_parameters 1 -1/-1 снятие всех ограничений<br />
#Класы: 1. Ограничение общей скорости для всех хостов из группы.Самій распространенный, его и используем.<br />
#2.Общая скорсоть для всей сети и конкретно по каждому пользователю<br />
#3. Ограничивает общая скорость для сети, для группы ipи на конкретный ip<br />
delay_parameters 1 1000/131072<br />
#доступ или запрет по конкретному пулу<br />
delay_access 1 allow shaper<br />
delay_access 1 deny all<br />
#<br />
delay_class 2 1<br />
delay_parameters 2 1310720/1310720<br />
delay_access 2 allow office<br />
delay_access 2 deny all</p></blockquote>
<p>В конфиге указано, что логи будут складываться в /var/squid/logs/access.log , через прокси разрешен доступ на некоторые порты (safe_ports), в файле /usr/local/etc/squid/access_denied описывается список запрещенных сайтов, создано 2 пула для ограничения скорости для конкретных пользователей. Для создания кеша в консоли выполняем <strong>squid -z . </strong>В /etc/rc.conf пишем squid_enable=&#8221;YES&#8221;. Ребутаем или стартуем /usr/local/etc/rc.d/squid start. Если мы в свойствах обозревателя укажем наш прокси мы попадем в интернет и в логах отобразится запись. Но нам нужно сделать прозрачный без прописывания прокси, для этого IPNAT будет форвардить весть http траффик  на 8080 порт нашего прокси сервера:</p>
<blockquote><p><strong>root@inet:/ # cat /etc/ipnat.rules</strong><br />
<strong>map re0 192.168.210.0/24 -&gt; 195.64.226.196/32 portmap tcp/udp 40000:60000</strong><br />
<strong>rdr re1 0/0 port 80 -&gt; 192.168.210.1 port 8080 tcp</strong><br />
<strong>root@inet:/ # /etc/rc.d/ipnat reload</strong><br />
<strong> 787 entries flushed from NAT table</strong><br />
<strong> 2 entries flushed from NAT list</strong></p></blockquote>
<h3><strong>5.Установка и настройка анализатора логов Lightsquid и веб-сервера  Apache.</strong></h3>
<p>Для анализа логов устанавливаем /usr/ports/www/lightsquid/. Порт не собирался и выдавал ошибку. Смотрим в .usr/ports/UPDATING, там указано &#8220;20130612:Please rebuild all Perl ports and all ports that depend on it&#8221;. Поменялась конфигурация perl, его нужно переустановить. Делаем portupgrade -rf perl, после чего lightsquid успешно установился.Открываем конфиг /usr/local/etc/lightsquid/lightsquid.cfg и правим:</p>
<blockquote><p>#!/usr/bin/perl<br />
# &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; GLOBAL VARIABLES  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>#где находятся cfg<br />
$cfgpath             =&#8221;/usr/local/etc/lightsquid&#8221;;<br />
#где находятся шаблоны<br />
$tplpath             =&#8221;/usr/local/www/lightsquid/tpl&#8221;;<br />
#где смотреть языки<br />
$langpath            =&#8221;/usr/local/share/lightsquid/lang&#8221;;<br />
#куда будет слаживаться статистика<br />
$reportpath          =&#8221;/usr/local/www/lightsquid/report&#8221;;<br />
#откуда парсить<br />
$logpath             =&#8221;/var/squid/logs&#8221;;<br />
#где брать данные о предобразовании ip в имена<br />
$ip2namepath         =&#8221;/usr/local/libexec/lightsquid&#8221;;</p>
<p>#path to `lockfile` <img src="https://mick.in.ua/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /><br />
$lockpath            =$reportpath;</p>
<p>#удалить старый лок-файл, если он старше $maxlocktime second<br />
$maxlocktime         = 30*60;</p>
<p>#if 1 &#8211; lightparser generate some statistic<br />
$debug               = 0;<br />
#if 1 &#8211; lightparser generate skip details, 2 &#8230;, 3 &#8230;, &#8230;.<br />
$debug2              = 0;</p>
<p># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; LightParser VARIABLES  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
#тип логов, 0 -родной, 1 &#8211; httpd<br />
$squidlogtype        = 0;</p>
<p>#не учитывать указанные сайты в статистике<br />
#$skipurl             = &#8216;zdd\.com|192\.168\.1\.|cnn\.com';<br />
$skipurl             = &#8216;zzz\.zzz';</p>
<p>#ip2name использовать шаблон /usr/local/libexec/lightsquid/ip2name.list. В єтом файле указываем my $ipfile = &#8220;/etc/hosts&#8221;.Преобразовывать ip в имена<br />
$ip2name=&#8221;list&#8221;;</p>
<p>#Если нужно &#8211; преобразование text в число<br />
%month2dec = ( Jan =&gt; 1, Feb =&gt; 2, Mar =&gt; 3, Apr =&gt; 4, May =&gt; 5,Jun =&gt; 6,<br />
Jul =&gt; 7, Aug =&gt; 8, Sep =&gt; 9, Oct =&gt; 10, Nov =&gt; 11,Dec =&gt; 12);</p>
<p># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; Common (Parser &amp; Web) VARIABLES  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
#create &amp; use time report statistic (logsize = logsize*2) ;-))<br />
$timereport          = 1;</p>
<p># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; WEB VARIABLES  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>#язык интерфейса &#8211; bg,eng,fr,hu,it,pt_br,ru,sp<br />
$lang                =&#8221;ru&#8221;;</p>
<p>#имя шаблона, смотреть `tpl/$templatename/`<br />
$templatename        =&#8221;base&#8221;;<br />
#$templatename        =&#8221;ric&#8221;;<br />
#$templatename        =&#8221;base.css&#8221;;</p>
<p>#define type of decimal output<br />
#fine  123456789 -&gt; 123,456,789<br />
#class 123456789 -&gt;       117.7 G<br />
$DecOutType=&#8221;class&#8221;;</p>
<p># define delimiter for thousands (in `fine` mode)<br />
# = &#8221; &#8221; -&gt; 12 345 678<br />
# = &#8220;,&#8221; -&gt; 12,345,678<br />
# = &#8220;&#8221;  -&gt;   12345678<br />
$decdelimiter        = &#8221; &#8220;;</p>
<p>#if you dont need Group mode, do =0<br />
$showgrouplink       = 1;</p>
<p>#if not zero, groups look like &#8220;01. Group1&#8243;, if zero &#8211; &#8220;Group1&#8243;<br />
$showgroupid         = 1;<br />
$showoversizelink    = 1;</p>
<p>#show how many data user send to internet<br />
$showputpost         = 0;<br />
#if putpost higer this variable (in percent), highlight it<br />
$putpostwarninglevel =15;</p>
<p>#использование .realname files<br />
$userealname         = 1;</p>
<p>#большие файлы 2Mб<br />
$bigfilelimit        = 2*1024*1024;</p>
<p>#Лимит трафик для пользователя( в статистике показано &#8211; превысил)<br />
$perusertrafficlimit = 1000*1024*1024;</p>
<p># недельный режим отображения<br />
$weekendmode=&#8221;both&#8221;;</p>
<p>#сколько сайтов показывать в Top<br />
$topsiteslimit       = 500;</p>
<p>#сколько сайтов показывать в .pthcrjq cnfnbcnbrt<br />
$usertimelimit       = 200;</p>
<p>#if you want user traffic GRAPHIC report, set it in 1<br />
#WARNING !!!, need libgd, GD.PM &amp; other external modules !!!<br />
#please run check-setup.pl for check library !!!!<br />
$graphreport         = 1;</p>
<p>#Максимальное значение в графическом отчете<br />
# for user month report (0.05*(&#8230;) = 50mb)<br />
$graphmaxuser=0.05*(1024*1024*1024);<br />
# for all user month report (1.05*(&#8230;) = 1 Gb)<br />
$graphmaxall =0.80*(1024*1024*1024);</p>
<p>#Тема для графиков, бывает &#8220;orange&#8221;,&#8221;blue&#8221;,&#8221;green&#8221;,&#8221;yellow&#8221;,&#8221;brown&#8221;,&#8221;red&#8221;<br />
$barcolor=&#8221;orange&#8221;;</p></blockquote>
<p>После всех изменений парсим:</p>
<blockquote><p>14:25 mick@[/usr/ports]# /usr/local/www/lightsquid/lightparser.pl<br />
14:25 mick@[/usr/ports]# cd /usr/local/www/lightsquid/ &amp;&amp; ./check-setup.pl<br />
LightSquid Config Checker, (c) 2005-9 Sergey Erokhin GNU GPL</p>
<p>LogPath   : /var/squid/logs<br />
reportpath: /usr/local/www/lightsquid/report<br />
Lang      : /usr/local/share/lightsquid/lang/ru<br />
Template  : /usr/local/www/lightsquid/tpl/base<br />
Ip2Name   : /usr/local/libexec/lightsquid/ip2name.list</p>
<p>all check passed, now try access to cgi part in browser</p></blockquote>
<p>Заносим в /etc/crontab:</p>
<blockquote><p>14:27 mick@[/usr/local/www/lightsquid]# cat /etc/crontab | grep light<br />
#Squid &amp; lightsquid<br />
*/10    *       *       *       *       root    /usr/local/www/lightsquid/lightparser.pl<br />
1       0       *       *       *       root    /usr/local/www/lightsquid/lightparser.pl &amp;&amp; /usr/local/sbin/squid -k rotate</p></blockquote>
<p>Тут каждые 10 минут lightparser.pl парсит лог сквида, в 00:01 парсится лог сквида, создается новый файл текущего дня и заносится статистика за период 00:00-00:01 после выполнения ротируется лог сквида. Если ротацию производить например утром в 08.00, то парсер увидит, что в логе данные начинаются с 08:00 и старые данные затрет и статистика начнется с 08.00, т.е. потеряем данные. Статистика у нас есть, теперь мы должны ее визуально увидеть черед браузер. Для этого установим веб-сервер /usr/ports/www/apache22. В /etc/rc.conf добавляем apache22_enable=&#8221;YES&#8221;. Открываем конфиг апача  /usr/local/etc/apache22/httpd.conf и правим конфиг. Ниже укажу только те строки которые меняем, остальное остается по умолчанию без изменений:</p>
<blockquote><p>Listen *:80 &#8211; слушать 80 порт на всех интерфейсах, если нужно на конкретном , то пишем IP:80</p>
<p>ServerName www.stat.medigran.com:80 &#8211; указываем имя сервера, без этого служба не стартует</p>
<p>&lt;Directory /&gt;<br />
AllowOverride None<br />
Order deny,allow<br />
#    Deny from all                  # комментируем мы, строка по умолчанию раскомментирована.<br />
&lt;/Directory&gt;</p>
<p>Alias /lightsquid/ &#8220;/usr/local/www/lightsquid/&#8221;<br />
&lt;Directory &#8220;/usr/local/www/lightsquid&#8221;&gt;<br />
AddHandler cgi-script .cgi<br />
AllowOverride All<br />
&lt;/Directory&gt;</p></blockquote>
<p>Последний блок &#8211; мы прописываем алиас /lightsquid по которому будет доступна статистика.Стартуем веб-сервер, открываем в браузере http://IP/lightsquid и смотрим статистику.</p>
<p><strong>© mick, 2013.</strong></p>
]]></content:encoded>
			<wfw:commentRss>https://mick.in.ua/2013-09-11/freebsd_server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сборка и установка своего ядра системы FreeBSD</title>
		<link>https://mick.in.ua/2011-11-30/install_kernel/</link>
		<comments>https://mick.in.ua/2011-11-30/install_kernel/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 14:47:09 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Моя работа]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://test.icc-ukraine.com.ua/?p=76</guid>
		<description><![CDATA[Ядро по умолчанию, которое ставится при первой установке системы находится здесь /usr/src/sys/i386/conf/GENERIC ( для платформы i386). Если же нет каталога /usr/src, значит не установлены исходые файлы системы, проще всего это сделать через sysinstall: Запускаем sysinstall от имени root; Выбираем Configure; Выбираем Distribution; Отмечаем галочками src, потом sys. Далее копируем GENERIC в свой файл с другим [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ядро по умолчанию, которое ставится при первой установке системы находится здесь /<strong>usr/src/sys/i386/conf/GENERIC</strong> ( для платформы i386). Если же нет каталога /usr/src, значит не установлены исходые файлы системы, проще всего это сделать через sysinstall:<br />
Запускаем sysinstall от имени root;<br />
Выбираем Configure;<br />
Выбираем Distribution;<br />
Отмечаем галочками src, потом sys.<br />
<span id="more-76"></span><br />
Далее копируем GENERIC в свой файл с другим именем:</p>
<p><strong>#cd /usr/src/sys/i386/conf</strong><br />
<strong> #cp GENERIC MYKERNEL</strong></p>
<p>Можно, конечно, и отредактировать GENERIC под свои нужды, но следует помнить, что при последующем обновлении системы GENERIC может быть заменен новым файлом. Я предпочитаю держать все конфиги в одном месте /usr/my_config, поэтому ядро копирую сюда и создаю символическую ссылку на него:</p>
<p><strong># cd /usr/src/sys/i386/conf</strong><br />
<strong> # cp GENERIC /usr/my_config/MYKERNEL</strong><br />
<strong> # ln -s /usr_my_config/MYKERNEL</strong></p>
<p>Открываем /usr_my_config/MYKERNEL любым текстовым редактором ee, vim,&#8230; и редактируем файл. Почитать описание опций можно в справочном руководстве. Сохраним старое(работающее) ядро на всякий случай. Если новое окажется неработоспособным можно будет загрузиться со старого.</p>
<p><strong># cp -Rp /boot/kernel /boot/kernel.good</strong></p>
<p>Теперь собираем ядро:</p>
<p><strong>#cd /usr/src</strong><br />
<strong> #make buildkernel KERNCONF=MYKERNEL &amp;&amp; make installkernel KERNCONF=MYKERNEL</strong></p>
<p>Новое ядро копируется в <strong>/boot/kernel/kernel</strong>, старое перемещается в <strong>/boot/kernel.old/kernel</strong>. После успешной сборки необходимо перезагрузить ядро, чтобы использовать новое ядро. Если система не загрузилась или система не обнаруживает некоторые устройства, необходимо перезагрузить систему и выбрать 6-й пункт стартового меню (&#8221;Escape to a loader prompt&#8221;), ввести команду unload kernel и набрать boot /boot/kernel.old/kernel или же свое сохраненное ядро. После загрузки необходимо просмотреть /var/log/messages, выявить причину неудачной загрузки, внести изменения в файл ядра и заново пересобрать его. Также необходимо переместить каталог содержащий работающее ядро в /boot/kernel, т.к. некоторые команды могут не работать или работать некорректно:</p>
<p><strong># mv /boot/kernel /boot/kernel.bad</strong><br />
<strong> # mv /boot/kernel.good /boot/kernel</strong></p>
<p>Источник информации:<br />
<a href="http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig-building.html" target="_blank">http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig-building.html</a></p>
<p><strong>© mick, 2006.</strong></p>
]]></content:encoded>
			<wfw:commentRss>https://mick.in.ua/2011-11-30/install_kernel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обновление OS FreeBSD до актуального состояния</title>
		<link>https://mick.in.ua/2011-11-30/update_system/</link>
		<comments>https://mick.in.ua/2011-11-30/update_system/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 12:37:00 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Моя работа]]></category>
		<category><![CDATA[cvsup]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[обновление]]></category>

		<guid isPermaLink="false">http://test.icc-ukraine.com.ua/?p=18</guid>
		<description><![CDATA[Есть установленная с CD FreeBSD 6.1 RELEASE. Обновлять будем до версии STABLE. Для начала проверим установлены ли исходные коды в системе, они находятся в /usr/src/sys. Если такого каталога нет или он пустой, необходимо исходники доустановить. Правильно это делается из sysinstall: Запускаем sysinstall от имени root; Выбираем Configure; Выбираем Distribution; Отмечаем галочками src, потом sys. Или [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Есть установленная с CD FreeBSD 6.1 RELEASE. Обновлять будем до версии <strong>STABLE</strong>. Для начала проверим установлены ли исходные коды в системе, они находятся в /usr/src/sys. Если такого каталога нет или он пустой, необходимо исходники доустановить. Правильно это делается из sysinstall:<br />
Запускаем <strong>sysinstall</strong> от имени <strong>root</strong>;<br />
<span id="more-18"></span><br />
Выбираем Configure;<br />
Выбираем Distribution;<br />
Отмечаем галочками src, потом sys.</p>
<p>Или так:</p>
<p><strong>#mount /mnt/cdrom</strong><br />
<strong> #cd /mnt/cdrom/src</strong><br />
<strong> #./install.sh all</strong></p>
<p>Перед обновлением системы сохраним старое (работающее) ядро на всякий случай. Если новое окажется неработоспособным можно будет загрузиться со старого.</p>
<p><strong># cp -Rp /boot/kernel /boot/kernel.good</strong></p>
<p>Теперь имея исходники, будем их обновлять. Для это воспользуемся системой <strong>CVSup</strong>. Она связывается с указаным в конфиге CVSup-сервером, сравнивает файлы, имеющиеся в системе с теми, что выложены на CVSup-сервере и закачает изменения. Сам процесс может длиться несколько часов, однако закачивает немного по трафику. Проверить установлена ли данная программа в системе можно с помощью which:</p>
<p><strong>#which cvsup</strong></p>
<p>Если она установлена система покажет путь к ней /usr/local/bin/cvsup, если нет &#8211; command no found. Устанавливаем ее из портов:</p>
<p><strong>#cd /usr/ports/net/cvsup-without-gui</strong><br />
<strong> #make install clean</strong></p>
<p>При работе под X-ми, необходимо устанавливать из /usr/ports/net/cvsup. Установили программу, настраиваем конфиг. Примеры берем отсюда /usr/share/examples/cvsup. Нам нужен stable-supfile для обновления до версии STABLE, standart-supfile используется для обновления до CURRENT-версии. Копируем stable-supfile в свою выбранную папку, например /usr/my_config. Отредактируем /usr/my_config/stable-supfile:</p>
<p><strong>*default host=cvsup7.ua.freebsd.org # Имя CVSup-сервера, откуда будем тянуть обновления.</strong><br />
<strong> *default base=/var/db # Тут хранится история обновлений.</strong><br />
<strong> *default prefix=/usr # Размещение полученных обновлений в папке /usr/src.</strong><br />
<strong> *default release=cvs tag=RELENG_6 # Обновляется 6-я версия (тег ревизии)с главного CVS-сервера.</strong><br />
<strong> *default delete use-rel-suffix # delete &#8211; удалить ненужные (старые) файлы, use-rel-suffix &#8211; нужно указать, но зачем, не знаю(man).</strong><br />
<strong> *default compress # Использование компрессии при передачи данных.</strong><br />
<strong> src-all # Получение всего дерева исходников.</strong></p>
<p>Следует заметить, что cvsup работает на высоких портах (1024-65535), поэтому, если работает firewall, необходимо в его конфиг внести соответствующее правило. Конфиг есть, теперь запускаем из под root процесс обновления:</p>
<p><strong>#cvsup -g -L 2 /usr/my_config/stable-supfile</strong></p>
<p>Ждем пока все загрузится ( &#8220;Shutting down connection to server Finished successfully&#8221; ). В /usr/src находятся обновленные исходники, которые можно скопировать на аналогичную машину и с них обновлять систему. Заходим в /usr/src и перестраиваем бинарные файлы:</p>
<p><strong>#cd /usr/src</strong><br />
<strong> #make buildworld</strong></p>
<p>Эта команда полностью строит новое дерево в /usr/obj. Процесс компиляции будет длиться от часа до двух в зависимости от мощности компьютера. Если что-то пойдет не так всегда можно загрузиться со старой версии, нажав любую клавишу, кроме Enter и набрать в командной строке boot /boot/kernel.old .</p>
<p>После компиляции пересобираем ядро системы. Рекомендуется устанавливать ядро GENERIC, т.к. это будет проверкой на правильность работы новой системы. Также можно на этом этапе установить и собственное ядро, кому как нравится. Процесс устаноки собственного ядра описан здесь.</p>
<p><strong>#cd /usr/src</strong><br />
<strong> #make buildkernel KERNCONF=GENERIC &amp;&amp; make installkernel KERNCONF=GENERIC</strong></p>
<p>После установки ядра переходим в однопользовательский режим, дав команду shutdown now или выбрав Single mode после перезагрузки сиситемы. Далее:</p>
<p><strong>#fsck -p</strong><br />
<strong> #mount -u /</strong><br />
<strong> #mount -a -t ufs</strong><br />
<strong> #swapon -a</strong></p>
<p>Эти команды проверяют файловые системы, повторно монтируют /, монтируют файлове системы из /etc/fstab и включают подкачку.</p>
<p><strong>#cd /usr/src</strong><br />
<strong> #make installworld</strong></p>
<p>Теперь бинарные файлы будут заменены новыми. В новой версии могут измениться конфигурационные файлы в /etc и записи устройств /dev. Вручную сравниваться измения неудобно, для этого служит программа mergemaster &#8211; это скрипт, который сравнивает файлы настроек, например из /etc/. При запуске создается папка /var/tmp/temproot, в которой будут расположено дерево новых настроечных файлов, они будут сравниваться с теми, что в /etc. На всякий случай необходимо сохранить все файлы из /etc:</p>
<p><strong>#cp -Rp /etc /etc.old</strong></p>
<p>Запускаем mergemaster в автоматическом режиме, однако оставляем файлы, которые правили нетронутыми &#8211; mergemaster -a -p, в результате получаем папку /var/tmp/temproot с файлами, которые не были установлены в автоматическом режие. Далее запускаем mergemaster -p получаем результат сравнения, возможные действия:<br />
<strong>i &#8211; подтвердить установку новой версии файла</strong><br />
<strong> d &#8211; оставить старый вариант</strong><br />
<strong> m &#8211; объединить(склеить) новый и старый вариант ( не рекомендую)</strong></p>
<p>В ходе работы mergemaster -p может быть вариант, когда в новой системе отсутствуют файлы, которые были в старой. Если эти файлы не редактировались, их можно смело удалять. Если ситема новая и нет редактируемых ранее конфигурационных файлов, можно запустить mergemaster c опцией -i, будут автоматически установлены новые версии файлов.</p>
<p><strong>Источники информации:</strong><br />
1. <a href="http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/makeworld.html" target="_blank">http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/makeworld.html</a><br />
2. <a href="http://www.kazna.spb.ru/~Annie/tips/free-renew.html" target="_blank">http://www.kazna.spb.ru/~Annie/tips/free-renew.html</a><br />
3. <a href="http://web.opennet.ru/docs/BSD/cvsup_makeworld/index.html" target="_blank">http://web.opennet.ru/docs/BSD/cvsup_makeworld/index.html</a></p>
<p><strong>© mick, 2006.</strong></p>
]]></content:encoded>
			<wfw:commentRss>https://mick.in.ua/2011-11-30/update_system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
