tag:blogger.com,1999:blog-92054521242566167162024-03-13T23:22:52.478+03:00freeBSDlogБольшие мануалы и мелкие закорючки на память о различных аспектах использования и администрирования FreeBSD.Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.comBlogger23125tag:blogger.com,1999:blog-9205452124256616716.post-31168315890307927632012-08-11T18:31:00.000+04:002012-08-11T18:39:20.192+04:00Ezjail - легкое управление клетками в FreeBSD<b>Плюсы ezjail:</b><br />
<br />
<ul>
<li>экономия места за счет создания базовой клетки на основе которой создаются все остальные (к примеру, директория basejail занимает 1,1 гигабайта, а вновь созданная клетка до запуска - 3 мегабайта), </li>
<li>возможность легкого обновления клеток за счет обновления базовой клетки,</li>
<li>возможность базовой конфигурации новых клеток за счет использования шаблонов flavours,</li>
<li>автоматическое создание клеток в виртуальных дисках,</li>
<li>облегчение административных задач.</li>
</ul>
<br />
<b>Пошаговая инструкция по запуску клеток с помощью ezjail:</b><br />
<br />
1. Обновляем базовую систему из исходников. Кроме того, необходимо все возможные сервисы повесить на конкретные IP-адреса чтобы в будущем не было конфликтов сервисов запущенных в базовой системе и в клетках. Такими сервисами могут быть ftpd, sshd, dhcpd, syslogd, natd и прочие.<br />
<br />
2. Устанавливаем ezjail из портов.<br />
<blockquote class="tr_bq">
cd /usr/ports/sysutils/ezjail<br />
make && make install</blockquote>
3. Создаем шаблон из которого будут создаваться клетки.<br />
<a name='more'></a><br />
Тут есть два способа: скачать систему в виде бинарников или использовать, собранный в процессе обновления базовой системы, мир.<br />
<br />
<i>Способ первый:</i><br />
<blockquote class="tr_bq">
ezjail-admin install -pm</blockquote>
Скачаются бинарники с FTP и будет создана базовая клетка, в том числе система портов (-p) и страницы man (-m).<br />
<br />
<i>Способ второй:</i><br />
<blockquote class="tr_bq">
ezjail-admin update -pi</blockquote>
Базовая клетка будет создана с помощью "make installworld". Это возможно в случае, если в базовой системе предварительно была выполнена команда "make buildworld", к примеру, в процессе обновления. Если же требуется собрать мир заново, то следует указать опцию -b.<br />
<br />
Базовая клетка будет создана в директории /usr/jails/basejail/<br />
<br />
4. Создаем необходимые клетки.<br />
<br />
Минимальным набором параметров для создания клетки является имя клетки и IP-адрес. Клетка создается в директории с именем совпадающем с именем клетки в директории /usr/jails/. Также при создании производится проверка, добавлен ли указанный IP в систему. Используется команда вида:<br />
<blockquote class="tr_bq">
ezjail-admin create name ip</blockquote>
К примеру:<br />
<blockquote class="tr_bq">
ezjail-admin create japache 192.168.0.101</blockquote>
5. Запускаем систему jail.<br />
<br />
Для автоматического старта после перезапуска добавляем необходимую строку в rc.conf:<br />
<blockquote class="tr_bq">
echo 'ezjail_enable="YES"' >> /etc/rc.conf</blockquote>
После этого запускаем службу следующей командой:<br />
<blockquote class="tr_bq">
/usr/local/etc/rc.d/ezjail start</blockquote>
Также мы можем запустить конкретную клетку:<br />
<blockquote class="tr_bq">
/usr/local/etc/rc.d/ezjail start japache</blockquote>
Также остановить/перезапустить командами stop/restart.<br />
<br />
Узнать список запущенных клеток можно командой <b>jls</b>. Подключиться к клетке - командой<b> jexec jid csh</b>.<br />
<br />
Вот и всё, что нужно для старта клетки. Однако есть ряд других возможностей.<br />
<br />
<b>Удаление клеток.</b><br />
<blockquote class="tr_bq">
ezjail-admin delete [-w] name</blockquote>
Если Вы просто удаляете клетку, то её файлы сохраняются. Это можно использовать для того, чтобы пересоздать клетку с другим именем или IP-адресом, к примеру.<br />
<br />
Параметр -w не обязательный, его необходимо использовать если вы хотите удалить клетку безвозвратно вместе с файлами.<br />
<br />
Для того, чтобы пересоздать клетку с имеющимися файлами, используйте команду вида:<br />
<blockquote class="tr_bq">
ezjail-admin create -x [-r jaildir] name ip</blockquote>
Параметр -x говорит о том, что клетку нужно пересоздать с заданными параметрами.<br />
<br />
Параметр -r jaildir не обязательный. Его можно использовать, если вы хотите создать пересоздать клетку с новым именем в старой директории. jaildir - имя директории, содержащей клетку, в директории /usr/jails/ (по умолчанию).<br />
<br />
<b>Flavours.</b><br />
<br />
Данная система позволяет при создании клетки добавить в неё конфигурационные файлы из заранее созданного шаблона в директории /usr/jails/flavours. Шаблон представляет собой набор директорий и файлов, которые будут добавлены в клетку. Также можно создать файл ezjail.flavours который запустится при первом запуске клетки и произведет некоторые действия, к примеру, добавит нужных пользователей или установить нужные пакеты. Почерпнуть информацию о нем можно в файле-примере, который располагается в директории /usr/jails/flavours/example/etc/rc.d<br />
<br />
Чтобы применить flavour при создании клетки необхоимо использовать параметр -f flavour<br />
<br />
<b>Что ещё.</b><br />
<br />
Файлы конфигураций клеток, созданных ezjail, хранятся в директории /usr/local/etc/ezjail<br />
<br />
Ezjail позволяет создавать клетки на основе виртуальных дисков заданного объема.<br />
<br />
Ezjail позволяет использовать файловую систему ZFS для каждой клетки в отдельности.<br />
<br />
Существует конфигурационный файл ezjail.conf в директории /usr/local/etc/ в котором содержатся основные настройки системы ezjail.<br />
<br />
Смотрите также остальные статьи про <b>jail</b>:<br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail.html">Создание и настройка jail окружения в FeeBSD</a><br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail-freebsd.html">Настройка и управление jail в FreeBSD.</a><br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail-freebsd_18.html">Ограничение ресурсов jail в FreeBSD (память, процессор, жесткий диск)</a>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-68231141394273227102012-08-11T00:36:00.000+04:002012-08-11T00:36:23.008+04:00Просмотр списка жестких дисков в FreeBSDМеня довольно долго волновал вопрос, как узнать какие физические жесткие диски установлены в системе, но еще не смонтированы и ответ никак не находился, но недавно нужная информация случайно попала мне в руки и, как всегда, оказалось, что все просто.<br />
<br />
Просмотреть список жестких дисков установленных в системе в ОС FreeBSD можно командой:<br />
<blockquote class="tr_bq">
fdisk -s</blockquote>
Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com1tag:blogger.com,1999:blog-9205452124256616716.post-51952690316541573052012-06-24T16:26:00.000+04:002012-06-27T03:52:12.760+04:00Как включить вывод ошибок в phpЛучший способ - включить вывод ошибок php с помощью файла .htaccess. Простой вариант:<br />
<blockquote class="tr_bq">php_value display_errors on<br />
php_value display_startup_errors on<br />
</blockquote>Расширенный вариант:<br />
<blockquote class="tr_bq">php_flag ignore_repeated_errors off<br />
php_flag ignore_repeated_source off<br />
php_flag track_errors on<br />
php_flag display_errors on<br />
php_flag display_startup_errors on<br />
php_flag log_errors on<br />
php_flag mysql.trace_mode on<br />
php_value error_reporting -1<br />
php_value error_log /path/to/site/<span style="background-color: white;">php-errors.log</span></blockquote>Таким образом ошибки php будут выводиться на экран, а также логироваться в файл <span style="background-color: white;">php-errors.log</span><br />
<br />
Кроме того, можно включить вывод ошибок прямо из php скрипта:<br />
<a name='more'></a><br />
<blockquote class="tr_bq">ini_set("display_errors","1");<br />
ini_set("display_startup_errors","1");<br />
ini_set('error_reporting', E_ALL);</blockquote>Либо можно поступить кардинальным образом. Если у Вас есть доступ к изменению php.ini, то внесите в него нужные строки:<br />
<blockquote class="tr_bq">error_reporting = E_ALL<br />
display_errors = On<br />
display_startup_errors = On<br />
log_errors = On<br />
log_errors_max_len = 1024<br />
error_log = /var/log/php-errors.log</blockquote> Прочитать более подробную информацию о параметрах, связанных с выводом ошибок в php можно прочитать в <a href="http://www.php.net/manual/ru/errorfunc.configuration.php">официальной справке по php</a>.<br />
<blockquote class="tr_bq"></blockquote>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-24231513817311549232012-06-24T11:37:00.000+04:002012-07-01T00:25:09.815+04:00Как изменить командную оболочкуУзнать, какая сейчас используется командная оболочка можно командой:<br />
<blockquote class="tr_bq">
echo $SHELL</blockquote>
Изменить текущую оболочку можно с помощью команды <b>vipw</b>. Данная команда открывает содержимое файла passwd в редакторе vi. Для перехода в режим правки нужно нажать клавишу с символом <b>i</b>. Затем внести правку. К примеру, в строке вида:<br />
<blockquote class="tr_bq">
root:$1$faKI$/PhoNgxjbCibJ3/:0:0::0:0:Charlie &:/root:/bin/сsh</blockquote>
изменить последний параметр на путь к необходимой оболочке. К примеру: /usr/local/bin/bash.<br />
<br />
После этого необходимо сохранить изменения, для этого нажмите клавишу Esc, затем наберите с клавиатуры<b> :wq</b> и нажмите клавишу Enter.<br />
<br />
Также можно использовать команду вида:<br />
<blockquote class="tr_bq">
chpass <i>username</i></blockquote>
которая откроет тот же vi, но парметры будут снабжены комментариями и не будет отображатся информация, относящаяся к другим пользователям. То есть информация выдается в более удобоваримом и безопасном виде. Также можно использовать команду <b>chpass</b> без параметров, тогда откроются параметры для текущего пользователя.<br />
<br />
Но, наиболее простым способом изменить командную оболочку, на мой взгляд, является следующая команда:<br />
<blockquote class="tr_bq">
pw user mod <i>username</i> -s <i>/usr/local/bin/bash</i></blockquote>
То есть не нужно мучаться с vi и напрямую указать на какой путь необходимо изменить путь к оболочке и для какого пользователя. Вообще говоря, команда <b>pw</b> достойна отдельной статьи, но она дает не плохие подсказки в процессе использования.<br />
<br />
Теперь при повторном входе в систему будет запущена новая, указанная вами, оболочка.<br />
<br />
P. S. Менять оболочку пользователю root не рекомендуется, во избежание ошибок и последующей невозможности войти в систему. Если Вы хотите иметь привилегии пользователя root, но пользоваться другой оболочкой в FreeBSD предусмотрен пользователь toor. По умолчанию он отключен. Чтобы активировать пользователя toor, зайдите под пользователя root и выполните команду <b>passwd toor</b> и задайте пароль.Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-39787713239381145362012-06-18T23:50:00.001+04:002012-08-11T18:40:56.589+04:00Ограничение ресурсов jail в FreeBSD (память, процессор, жесткий диск)<span style="background-color: white;">При использовании нескольких </span><a href="http://freebsdlog.blogspot.com/2012/06/jail.html" style="background-color: white;">jail</a><span style="background-color: white;"> вам может понадобиться ограничить доступные им ресурсы, к примеру, при оказании услуг VDS-хостинга.</span><br />
<br />
Ранее не было встроенных механизмов ограничения доступных частоты процессора и оперативной памяти. В версии FreeBSD версии 9.0 появился механизм управления ресурсами RCTL (Hierarchical Resource Limits). Эта система позволяет ограничивать ресурсы как отдельным пользователям и процессам, так и целым jail.<br />
<br />
По умолчанию, rctl не работает. Протестировать это можно командой:<br />
<blockquote class="tr_bq">
/usr/bin/rctl ; echo $?</blockquote>
<br />
Результатом будет:<br />
<br />
<blockquote class="tr_bq">
rctl: rctl_get_rules: Function not implemented<br />
1</blockquote>
<br />
Для работы rctl требуется <a href="http://freebsdlog.blogspot.com/2011/07/polling-freebsd.html">перекомпилировать ядро</a> с определенными опциями:<br />
<br />
<blockquote class="tr_bq">
options RACCT<br />
options RCTL</blockquote>
<br />
<span style="background-color: white;">После того, как система начнет работать с модифицированным ядром будет запущен демон racctd. Та же команда будет выводить результат 0, что будет означать, что функция работоспособна.</span><br />
<br />
Для управления правилами используется утилита rctl. Когда она выполняется без опций, то результатом будет вывод текущих правил на стандартный выход. Существуют следующие параметры команды rctl:<br />
<a name='more'></a><b style="background-color: white;">-a rule</b><span style="background-color: white;"> - Добавляет правило в базу данных RCTL.</span><br />
<b>-l filter</b> - Отображает правила применяемые к процессу, подпадающему под фильтр.<br />
<b>-r filter</b> - Удаляет правила подпадающие под фильтры из базы данных RCTL.<br />
<b>-u filter</b> - Отображает ресурсы используемые объектом (процесс, пользователь, класс логинов или jail) подпадающим под фильтр.<br />
<b>-h</b> - "человекопонятный" вывод. Использует суффиксы: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte.<br />
<b>-n</b> - Отображать ID пользователей численно, а не конвертировать их в имена пользователей.<br />
<br />
<b>Синтаксис правил.</b><br />
<br />
Правила записываются строками вида subject:subject-id:resource:action=amount/per.<br />
<br />
<b>subject</b> определяет тип объекта к которому применяется правило. Это может быть процесс, пользователь, login class или jail.<br />
<br />
<b>subject-id</b> определяет объект. Это может быть имя пользователя, числовой ID пользователя, имя login class или имя jail.<br />
<br />
<b>resource</b> определяет ресурс, которым управляет данное правило.<br />
<br />
<b>action</b> определяет что произойдет когда процесс превысит лимит (amount).<br />
<br />
<b>amount</b> определяет сколько ресурсов процесс может использовать прежде чем сработает указанное действие (action).<br />
<br />
Поле per определяет что к какому объекту применяется указанный лимит (amount). К примеру, правило "loginclass:users:vmem:deny=100M/process" означает, что каждый процесс любого пользователя, входящего в класс логинов "users", может использовать до 100 мегабайт виртуальной памяти. Правило "loginclass:users:vmem:deny=100M/user" будет значить, что для каждого пользователя, входящего в класс логинов "users", сумма виртуальной памяти используемой всеми процессами данного пользователя не будет превышать 100 мегабайт. Правило "loginclass:users:vmem:deny=100M/loginclass" будет значить, что сумма виртуальной памяти используемой всеми процессами всех пользователей, входящих в класс логинов "users", не будет превышать 100 мегабайт.<br />
<br />
Валидное правило обязательно должно иметь значения всех этих полей, кроме per, которое, по умолчанию, имеет значение равное объекту (subject).<br />
<br />
Фильтр - это правило, в котором одно или несколько полей оставлено пустым (кроме per). Например, фильтр, который удовлетворяет всем правилам должен быть записан как ":::=/" или, короче, ":". Фильтр, который удовлетворяем всем классам логинов, должен быть записан как "loginclass:". Фильтры, который соответствует всем правилам для ресурса nproc будет выглядеть как "::nproc".<br />
<br />
<b>Виды ресурсов (resource):</b><br />
<br />
<b>cputime</b> процессорное время в секундах<br />
<b>datasize</b> размер данных, в байтах<br />
<b>stacksize </b> размер стэка, в байтах<br />
<b>coredumpsize</b> размер core dump, в байтах<br />
<b>memoryuse </b> количество используемой памяти, в байтах<br />
<b>memorylocked </b> заблокированная память, в байтах<br />
<b>maxproc</b> количество процессов<br />
<b>openfiles </b> размер таблицы описаний файлов<br />
<b>vmemoryuse</b> ограничение адресного пространства, в байтах<br />
<b>pseudoterminals </b> количество терминалов<br />
<b>swapuse</b> использование подкачки, в байтах<br />
<b>nthr </b> количество потоков<br />
<b>msgqqueued </b> количество сообщений SysV в очереди<br />
<b>msgqsize</b> размер очереди сообщений SysV, в байтах<br />
<b>nmsgq</b> количество очередей сообщений SysV<br />
<b>nsem </b> количество семафоров SysV<br />
<b>nsemop </b> кол-во семафоров SysV измененных в одном вызове semop(2)<br />
<b>nshm </b> количество сегментов разделенной (shared) памяти SysV<br />
<b>shmsize </b> размер разделенной памяти SysV, в байтах<br />
<b>wallclock</b> время wallclock, в секундах<br />
<br />
<b>Виды действий (action):</b><br />
<br />
<b>deny </b>- отказать в выделении ресурса, не поддерживается для cputime (то есть, нет возможности ограничить ресурсы процессора, можно только залогировать их) и wallclock<br />
<b>log </b>- вывести лог на консоль<br />
<b>devctl </b>- отправить предупреждение в devd (демон, который позволяет запускать программы, когда происходят определенные события ядра)<br />
<b>sig*</b> - отправить сигнал соответствующему процессу, к примеру SIGTERM.<br />
<br />
<b>Примеры сигналов:</b><br />
<br />
SIGTERM - сигнал остановки программы, может быть обработан или проигнорирован.<br />
SIGKILL - убить программу, вызывает немедленное её завершение.<br />
SIGSTOP - приостановить процесс, работу которого позже можно будет восстановить сигналом SIGCONT.<br />
<br />
<b>Примеры использования утилиты rctl:</b><br />
<br />
rctl -a user:joe:vmemoryuse:deny=1g - запрещает пользователю joe использовать больше 1 ГБ виртуальной памяти<br />
<br />
rctl -r: - удаляет все правила<br />
<br />
rctl -hu jail:www - показывает информацию об использовании ресурсов jail с именем www. Так должно быть, но выяснилось, что преобразование имен jail в id не работает, поэтому нужно с помощью команды jls узнать id jail и писать, к примеру, rctl -hu jail:1<br />
<br />
rctl -l process:512 - показывает все правила, применяемые к процессу с PID 512.<br />
<br />
Примеры ограничения ресурсов jail:<br />
<br />
rctl -a jail:1:memoryuse:deny=1g - запрещает jail с id 1 использовать более 1 гигабайта памяти.<br />
<br />
rctl -a jail:1:cputime:log=1 - при использовании jail с id 1 более чем одной секунды процессорного времени в логе /var/log/messages появится соответствующая запись:<br />
<br />
<blockquote class="tr_bq">
Jun 4 17:43:00 gate kernel: rctl: rule "jail:1:cputime:log=1" matched by pid 2406 (cron), uid 0, jail 1</blockquote>
<br />
Если необходимо применять правила автоматически после перезагрузки системы, то их необходимо сохранить в файле /etc/rctl.conf, который прочитывается при переходе в многопользовательский режим. В файле можно оставлять комментарии, предваряя их символом #.<br />
<br />
К сожалению, в FreeBSD 9.0 нет возможности резделить ресурсы процессора между несколькими jail в процентном соотношении.<br />
<br />
<b>Ограничения на использование процессора.</b><br />
<br />
К сожалению, не удалось найти адекватных средств для ограничения максимально доступной нагрузки на процессор для jail. Единственное, что нашлось - это утилита cpuset, которая позволяет назначить определенные процессоры или ядра для использования конкретной jail. К примеру:<br />
<br />
<blockquote class="tr_bq">
cpuset -l 0,2 -j 3</blockquote>
<br />
Данная команда заставляет jail с id 3 использовать первый и третий процессоры.<br />
<br />
<b>Ограничение на использование жёсткого диска.</b><br />
<br />
Опять же, не удалось найти адекватный способ ограничения использования жесткого диска тюрьмами. Всё, что удалось найти - это создание виртуального жесткого диска заданного объема. Такой диск можно примонтировать в директорию и уже туда установить jail.<br />
<br />
Cоздаем файл состоящий из 4 миллионов блоков (count) по 1 килобайту (bs) и забитый нулевыми байтами. Итого, 4 гигабайта. Для изменения количества гигабайт, достаточно поменять параметр count.<br />
<br />
<blockquote class="tr_bq">
dd if=/dev/zero of=jail.file bs=1k count=4m</blockquote>
<br />
Проверяем создался ли файл и его размер:<br />
<br />
<blockquote class="tr_bq">
ls -lh jail.file</blockquote>
<br />
Результат:<br />
<br />
<blockquote class="tr_bq">
-rw-r--r-- 1 root wheel 4.0G Jun 13 00:15 jail.file</blockquote>
<br />
В систему подключается виртуальный диск из указанного файла:<br />
<br />
<blockquote class="tr_bq">
mdconfig -a -t vnode -f jail.file</blockquote>
<br />
Результат:<br />
<br />
<blockquote class="tr_bq">
md0</blockquote>
<br />
На устройстве md0 создается файловая система UFS с включенными мягкими обновлениями:<br />
<br />
<blockquote class="tr_bq">
newfs -U /dev/md0</blockquote>
<br />
Результат:<br />
<br />
<blockquote class="tr_bq">
/dev/md0: 4096.0MB (8388608 sectors) block size 32768, fragment size 4096<br />
using 6 cylinder groups of 740.00MB, 23680 blks, 47360 inodes.<br />
with soft updates<br />
super-block backups (for fsck -b #) at:<br />
192, 1515712, 3031232, 4546752, 6062272, 7577792</blockquote>
<br />
Монтируем диск в директорию /mnt (либо любую другую, в которой располагаются диски ваших jail):<br />
<br />
<blockquote class="tr_bq">
mount /dev/md0 /mnt</blockquote>
<br />
Готово. Теперь в данную директорию можно установить jail и её размер будет ограничен размером созданного файла.<br />
<br />
Смотрите также остальные статьи про <b>jail</b>:<br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail.html">Создание и настройка jail окружения в FeeBSD</a><br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail-freebsd.html">Настройка и управление jail в FreeBSD.</a><br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/08/ezjail-freebsd.html">Ezjail - легкое управление клетками в FreeBSD</a>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-10099882051471167802012-06-15T23:11:00.000+04:002012-08-11T18:41:58.757+04:00Настройка и управление jail в FreeBSD.В файле /etc/sysctl.conf можно задать ряд параметров связаных с jail:<br />
<br />
<ul>
<li>security.jail.set_hostname_allowed - разрешает менять имя хоста внутри jail, если задано реальное DNS имя, то лучше запретить,</li>
<li>security.jail.socket_unixiproute_only - позволяет создвавать сокеты в jail только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;</li>
<li>security.jail.sysvipc_allowed - позволяет получить доступ к глобальному System V IPC;</li>
<li>security.jail.getfsstatroot_only - если установлена 1, то в jail можно получить информацию (df) только о той файловой системе на которой создан jail;</li>
<li>security.jail.allow_raw_sockets - разрешает создавать raw sockets, что позволяет использовать ping и некоторые другие сетевые утилиты;</li>
<li>security.jail.chflags_allow - если задана 1, то в jail появляется возможность модифицировать флаги ФС, если запретить, то можно создавать неизменяемые и неудаляемые файлы.</li>
</ul>
<br />
Все эти параметры могут принимать значения 0 или 1 и записываются, к примеру, так: security.jail.chflags_allow=0.<br />
<br />
<b>Параметры команды jail.</b><br />
<br />
Чувствую, тут требуется полный перевод man jail, но мы сделаем лишь частичный:<br />
<br />
<i>Start translation mode.</i><br />
<br />
Утилита jail создает новую клетку или меняет существующую, дополнительно заключая в тюрьму текущий процесс внутри неё.<br />
<br />
Доступные опции:<br />
<br />
-d - разрешает делать изменения в разрушающейся клетке<br />
<a name='more'></a><br />
-h - разрешает параметр host.hostname (или hostname) и добавляет все возвращенные IP-адреса в список IP-адресов для этой клетки. Это может повлиять на выбор адреса по умолчанию для исходящих соединений IPv4 данной jail. Первый возвращенный резолвером адрес будет использоваться как освновной адрес.<br />
<br />
-i - выводить идентификатор jail вновь созданной клетки.<br />
<br />
-n jailname - устанавливает имя jail. Этот параметр не рекомендуется к использованию и эквивалентен установке параметра name.<br />
<br />
-J jid-file - создавать файл jid_file, содержащий идентификатор клетки, путь, хостнейм, IP и команду, использованную для старта клетки.<br />
<br />
-l - запустить программу в чистом окружении. Окружение отбрасывается за исключением HOME, SHELL, TERM и USER. HOME и SHELL устанавливаются в значения по умолчанию для целевого логина. Значение USER устанавливается в целевой логин. TERM импортируется из текущего окружения. Переменные окружения также устанавливаются из базы данных возможностей класса login для целевого логина. (Знать бы что это всё значит.)<br />
<br />
-s securelevel - устанавливает запись kern.securelevel MIB в заданное значение внутри вновь созданной jail. Этот параметр не рекомендуется к использованию и эквивалентен установке параметра securelevel.<br />
<br />
-u username - имя пользователя из базового окружения, от которого должна быть выполнена команда.<br />
<br />
-U username - имя пользователя из окружения jail, от которого должна быть выполнена команда.<br />
<br />
-c - создать новую клетку. Параметы jid и name (если указаны), не должны совпадать с уже существующими.<br />
<br />
-m - изменить текущую клетку. Один из параметров jid и name должны существовать и вести к существующей jail.<br />
<br />
-cm - создать клетку если она ещё не существует или изменить уже существующую.<br />
<br />
-r - остановить jail по параметрам jid или name. Все процессы в jail убиваются и все потомки этой клетки тоже останавливаются.<br />
<br />
По крайней мере один из параметров -c, -m или -r должен быть указан.<br />
<br />
<i>Stop translation mode.</i><br />
<br />
<b>Старт клетки командой jail:</b><br />
<br />
<blockquote class="tr_bq">
jail /usr/jail/base base.jail 192.168.0.101 /bin/sh</blockquote>
<br />
то есть для старта клетки с минимальными параметрами требуется указать путь к директории, где располагаются файлы клетки, хостнейм, IP-адрес и команду для старта оболочки.<br />
<br />
<b>Утилиты для упрвления клетками.</b><br />
<br />
Можно установить из /usr/ports/sysutils/jailutils. После этого в системе появляется несколько утилит. Опишем их.<br />
<br />
<b>injail</b> - позволяет определить, запущена в jail или нет. Полезна только для скриптов. Возвращает следующие значения:<br />
<br />
0 - процесс запущен в jail,<br />
1 - процесс запущен вне jail,<br />
2 - ошибка определения.<br />
<br />
<b>jails</b> - выводит список запущенных клеток. Фактически аналогично системной утилите jls. Дополнительных параметров не предусмотрено.<br />
<br />
<b>jid</b> - переводит идентификаторы jail в имена хостов и наоборот. Может пригодиться в скриптах. Стоит отметить что jls выводит как идентификатор, так и имя хоста для каждой jail.<br />
<br />
<b>jkill</b> - останавливает одну или несколько клеток, выполняя скрипты останова в клетках и затем убивая оставшиеся процессы. Имеет некоторое количество параметров:<br />
<br />
-f - заставляет процессы закрыться. Если процесс остается после отправки ему сигнала SIGTERM, он закрывается силой, для чего подается сигнал SIGKILL.<br />
<br />
-k - не вызывать завершающие скрипты, просто убить процессы.<br />
<br />
-q - подавляет вывод предупреждений.<br />
<br />
-r - после выключения, перезапустить jail с помощью стартовых скриптов из /etc/rc<br />
<br />
-t timeout - указать максимальное время ожидания после запуска завершающих скриптов и между отправками различных убивающих сигналов. По умолчанию, 3 секунды.<br />
<br />
-v - включает подробный вывод сообщений о всех событиях.<br />
<br />
jail - может быть как идентификатором, так и именем хоста клетки.<br />
<br />
К примеру:<br />
<blockquote class="tr_bq">
jkill -r 1</blockquote>
<b>jps</b> - выводит список процессов, запущенных в заданной jail. Вывод сделан в стиле утилиты ps, даже поддерживаются её параметры. Единственный параметр -i позволяет отображать только идентификаторы процессов.<br />
<br />
<b>jstart</b> - более безопасная замена для команды jail. Используются следующие параметры:<br />
<br />
-i - отобращает идентификатор вновь созданной jail.<br />
<br />
path - путь к директории, где создана клетка.<br />
<br />
hostname - имя хоста jail.<br />
<br />
ip-number - IP-адрес jail.<br />
<br />
command - опциональные команды, которые должны быть выполнены внутри клетки. По умолчанию используется /bin/sh /etc/rc.<br />
<br />
<b>Другие порты для работы с jail.</b><br />
<br />
<ul>
<li>ports-mgmt/jailaudit. Позволяет мониторить установлены ли в клетках порты имеющие уязвимости в безопасности. Основана на утилите portaudit.</li>
<li>sysutils/ezjail. Отличная штука для создания большого количества клеток на основе монтирования директорий из базовой системы.</li>
<li>sysutils/jailadmin. Облегчает управление несколькими jail одновременно.</li>
<li>sysutils/jailctl. Создание, удаление и резервное копирование jail.</li>
<li>sysutils/jailer. Устанавливается внутри клетки и управляет остановом и перезапуском.</li>
<li>sysutils/jailutils. Порт с несколькими программами для манипулирования тюрьмами.</li>
<li>sysutils/jailme - позволяет обычным пользователям получать доступ к jail.</li>
<li>sysutils/jailrc - продвинутый вариант стартового скрипта /etc/rc.d/jail</li>
</ul>
<br />
<b>Как назначить несколько IP-адресов клетке?</b><br />
<br />
Для этого нужно создать несколько алиасов для реального интерфейса, затем перечислить несколько IP-адресов в параметре jail_example_ip в rc.conf через запятую, где example - имя клетки. Пример:<br />
<br />
<blockquote class="tr_bq">
jail_example_ip="192.0.2.10,2001:db8::17"</blockquote>
<br />
Смотрите также остальные статьи про <b>jail</b>:<br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail.html">Создание и настройка jail окружения в FeeBSD</a><br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail-freebsd_18.html">Ограничение ресурсов jail в FreeBSD (память, процессор, жесткий диск)</a><br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/08/ezjail-freebsd.html">Ezjail - легкое управление клетками в FreeBSD</a>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-60368121037920774872012-06-13T21:31:00.000+04:002012-08-11T18:37:11.070+04:00Создание и настройка jail окружения в FeeBSD<b>1. Создание jail.</b><br />
<br />
Дабы виртуальная система была чистой и никак не зависела от основной, то создавать её мы будем из исходных текстов, что может занять довольно продолжительное время:<br />
<br />
<blockquote class="tr_bq">
setenv D /usr/jails/base<br />
mkdir -p $D<br />
cd /usr/src<br />
make buildworld<br />
make installworld DESTDIR=$D<br />
make distribution DESTDIR=$D<br />
mount -t devfs devfs $D/dev</blockquote>
<br />
То есть переходим в каталог с исходниками, в качестве значения переменной JAIL указываем путь к директории, где будет располагаться jail. Далее создаем эту директорию, создаем "мир", устанавливаем его куда нужно, затем монтируем туда же файловую систему dev. Этот вариант хорош тем, что собрав "мир" один раз, мы можем достаточно быстро установить его в несколько директорий, если будет нужно создать несколько jail.<br />
<br />
<b>2. Настройка сети в корневой системе</b><br />
<br />
Необходимо создать алиас сетевого интерфейса корневой системы, на котором будет работать jail. Каждой jail необходим свой алиас.<br />
<a name='more'></a><br />
<br />
Если у вас есть несколько внешних IP-адресов, то можно сделать <a href="http://freebsdlog.blogspot.com/2012/05/freebsd.html">алиасы для интерфейса</a>, смотрящего наружу. Тогда можно будет подключаться к jail напрямую.<br />
<br />
Если у вас только один внешний IP, то придется делать проброс портов.<br />
<br />
К примеру, возьмем второй вариант. Создаем алиас:<br />
<br />
<blockquote class="tr_bq">
ifconfig em0 inet alias 192.168.0.101 netmask 255.255.255.0</blockquote>
<br />
Добавляем в ipfw правило:<br />
<br />
<blockquote class="tr_bq">
ipfw add fwd 192.168.0.101,22 tcp from any to 10.78.43.93 1022</blockquote>
<b><br />
</b> <b>3. Настройка jail.</b><br />
<br />
Так как jail - это почти отдельная ОС, то внутри неё необходимо сделать ряд настроек. Входим в jail:<br />
<br />
<blockquote class="tr_bq">
jail /usr/jail/base base.jail 192.168.0.101 /bin/sh</blockquote>
<br />
<ul>
<li>Создаем пустой fstab (touch /etc/fstab)</li>
<li>Устанавливаем пароль пользователю root (passwd root) и создаем дополнительного пользователя (adduser), которого включаем в группу wheel.</li>
<li>Если собираемся использовать sendmail, то перестраиваем базу псевдонимов для почты (newaliases).</li>
<li>Создаем файл /etc/resolv.conf, чтобы сервисы внутри jail могли выполнять резолвинг имен DNS.</li>
</ul>
<br />
В /etc/rc.conf добавляем следующее:<br />
<br />
<blockquote class="tr_bq">
hostname="base.jail"<br />
// Отключаем конфигурирование сетевых интерфейсов (они виртуальные)<br />
network_interfaces=""<br />
// Включаем/отключаем необходимые сервисы<br />
sendmail_enable="NO"<br />
sendmail_submit_enable="NO"<br />
sendmail_outbound_enable="NO"<br />
sendmail_msp_queue_enable="NO"<br />
sshd_enable="YES"</blockquote>
<br />
Выйти из jail окружения можно командой exit или сочетанием клавиш Ctrl+D.<br />
<br />
Eсли в jail не установлен какой-то софт, то его можно установить из базовой системы командами вида:<br />
<br />
<blockquote class="tr_bq">
make PREFIX=/usr/jail/base make install clean<br />
pkg_add -P /usr/jail/base packet-1.0.0.tbz<br />
PREFIX=/usr/jail/base portinstall -P packet</blockquote>
<br />
Для того, чтобы дать пользователем jail самостоятельно устанавливать необходимые программы, проще всего примонтировать дерево портов:<br />
<br />
<blockquote class="tr_bq">
mount_unionfs /usr/ports /usr/jail/base/usr/ports</blockquote>
<br />
либо<br />
<br />
<blockquote class="tr_bq">
mount_nullfs /usr/ports /usr/jail/base/usr/ports</blockquote>
<br />
<b>4. Запуск jail-окружения</b><br />
<br />
После того, как вся подготовительная работа выполнена, можно запускать jail-сервер. Для этого добавляем в /etc/rc.conf необходимые строки:<br />
<br />
<blockquote class="tr_bq">
jail_enable="YES"<br />
jail_list="base" // Здесь перечисляем имена всех jail через пробел.<br />
// Далее описываем минимально необходимые строки для запуска jail. Для каждой jail.<br />
jail_base_rootdir="/usr/jail/base"<br />
jail_base_hostname="base.jail"<br />
jail_base_ip="192.168.0.1"<br />
jail_base_interface="de0"<br />
// Прописываем команды запуска и остановки<br />
jail_base_exec_start="/bin/sh /etc/rc"<br />
jail_base_exec_stop="/bin/sh /etc/rc.shutdown"<br />
// Указываем какие ФС монтировать.<br />
jail_base_devfs_enable="YES"<br />
jail_base_fdescfs_enable="NO"<br />
jail_base_procfs_enable="NO"</blockquote>
<br />
и запускаем jail:<br />
<br />
<blockquote class="tr_bq">
/etc/rc.d/jail start</blockquote>
<br />
либо если хотим запустить только конкретную jail, то указываем её имя:<br />
<br />
<blockquote class="tr_bq">
/etc/rc.d/jail start base</blockquote>
<br />
Список уже запущенных jail-окружений можно узнать с помощью команды jls. Войти в jail из коневой системы можно командой:<br />
<br />
<blockquote class="tr_bq">
jexec 1 tcsh</blockquote>
<br />
Полезные ссылки:<br />
<br />
<a href="http://www.xakep.ru/post/48311/">http://www.xakep.ru/post/48311/</a><br />
<br />
<a href="http://wiki.lissyara.su/wiki/FreeBSD_%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F:_%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_15_Jails_%28%D0%9A%D0%BB%D0%B5%D1%82%D0%BA%D0%B8%29">http://wiki.lissyara.su/wiki/FreeBSD_%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F:_%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_15_Jails_%28%D0%9A%D0%BB%D0%B5%D1%82%D0%BA%D0%B8%29</a><br />
<a href="http://draft.blogger.com/goog_1945537092"><br />
</a> <a href="http://house.hcn-strela.ru/BSDCert/BSDA-course/ch02s11.html">http://house.hcn-strela.ru/BSDCert/BSDA-course/ch02s11.html</a><br />
<br />
Смотрите также остальные статьи про jail:<br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail-freebsd.html">Настройка и управление jail в FreeBSD.</a><br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/06/jail-freebsd_18.html">Ограничение ресурсов jail в FreeBSD (память, процессор, жесткий диск)</a><br />
<br />
<a href="http://freebsdlog.blogspot.com/2012/08/ezjail-freebsd.html">Ezjail - легкое управление клетками в FreeBSD</a>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-10756229716524912792012-05-22T00:57:00.000+04:002012-06-15T23:00:56.967+04:00Утилита screen или как запустить процесс в фоне.Если у вас когда-нибудь отваливалась консоль в процессе компиляции ядра или какой-нибудь толстой программы, то мысль о том, как бы запустить процесс на сервере без привязки к удаленному соединению обязательно вас посещала.<br />
<br />
Пожалуй, самое популярное решение - утилита screen. Screen имеет широкий функционал, но даже при использовании по минимуму может принести много пользы. Итак, устанавливаем:<br />
<br />
<blockquote class="tr_bq">
cd /usr/ports/sysutils/screen<br />
make config && make && make install</blockquote>
<br />
Утилита готова к использованию:<br />
<br />
<blockquote class="tr_bq">
screen<br />
[Enter]</blockquote>
<br />
Всё, вот ваша заскриненая консоль. Можно запустить процесс, к примеру, компиляции, затем нажать <b>Ctrl+a</b>, затем <b>d</b>. И запущенный процесс будет идти в фоне на сервере, без привязки к удаленной консоли и даже если она отвалится работа не остановится. Вернуться в screen можно командой:<br />
<a name='more'></a><br />
<blockquote class="tr_bq">
screen -r</blockquote>
<br />
По идее этого достаточно, но утилита позволяет делать более интересные вещи. Например, можно создать множество виртуальных консолей со своими именами:<br />
<br />
<blockquote class="tr_bq">
screen -S testing</blockquote>
<br />
Возврат:<br />
<br />
<blockquote class="tr_bq">
screen -r testing</blockquote>
<br />
Посмотреть список виртуальных консолей:<br />
<br />
<blockquote class="tr_bq">
screen -ls</blockquote>
<br />
Если скрин умер (в списке показывается с пометкой dead), то его можно убить командой:<br />
<br />
<blockquote class="tr_bq">
screen -wipe</blockquote>
<br />
В каждом скрине можно создать дополнительные окна. Вот управляющие клавиши (предварительно следует нажать <b>Ctrl+a</b>):<br />
<br />
c - создать окно,<br />
n - следующее окно,<br />
p - предыдущее окно,<br />
" - двойная ковычка, позволяет увидеть список окон и переключиться между ними,<br />
' - одинарная кавычка, открывает поле ввода номера окна для переключения<br />
? - вызвать список всех команд.<br />
<br />
Выход из окна - команда <b>exit</b>.<br />
<br />
Это лишь малая часть возможностей утилиты screen. С помощью неё можно с ходу запускать программы в свернутом экране, она может сообщать о завершенном процессе, настройки утилиты могут отличаться для каждого пользователя, есть возможность выводить дополнительную информацию в строке состояния и так далее.<br />
<br />Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-34350067105902785302012-05-19T20:36:00.002+04:002012-05-19T21:38:31.666+04:00Быстрое обновление FreeBSDЕсли нет желания <a href="http://freebsdlog.blogspot.com/2011/06/freebsd-82.html">перекомпилировать все компоненты системы</a>, долго ждать и совершать много операций, то можно провести быстрое бинарное обновление системы, то существует волшебная утилита freebsd-update.<br />
<br />
Действуем:<br />
<br />
<blockquote class="tr_bq">
freebsd-update fetch<br />
freebsd-update -r 9.0-RELEASE upgrade</blockquote>
<br />
Система проинформирует о том, что будет обновлено. Нужно будет согласиться с предложением.<br />
<br />
<blockquote class="tr_bq">
freebsd-update install</blockquote>
<br />
Затем требуется перезагрузка для установки нового ядра. Ставится новое GENERIC ядро. Как следствие, внесенных вами изменений в нем не будет, то есть, может отвалиться файрволл, поллинг и прочее. Это может быть особенно неприятно, если вы используете сервер в качестве роутера. В этом случае в сетке не будет интернета, хорошо если вообще останется удаленный доступ к серверу. Будьте осторожны.<br />
<blockquote class="tr_bq">
<br />
reboot<br />
freebsd-update install</blockquote>
<br />
Далее, при необходимости пересобираем ядро:<br />
<br />
Добавляем необходимые параметры в файл /usr/src/sys/amd64/conf/GENERIC (для 64 разрядной версии, для 32 разрядной: меняем amd64 на i386), затем:<br />
<br />
<blockquote class="tr_bq">
cd /usr/src<br />
make -j4 buildkernel<br />
make installkernel<br />
reboot </blockquote>
<br />
Если обновление прошло не так, как вам хотелось бы, то можно откатиться к предыдущему состоянию:<br />
<br />
<blockquote class="tr_bq">
freebsd-update rollback</blockquote>
<br />
Последнее замечание. Система использует конфигурационный файл /etc/freebsd-update.conf<br />
В нем можно указать, что конкретно вы хотите обновлять, где хранить файлы и ещё ряд параметров.Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-22051047644965334132012-05-08T16:56:00.000+04:002012-05-08T16:56:56.649+04:00FreeBSD управление алиасами сетевых интерфейсовЧтобы добавить алиас сетевого интерфейса используйте команду вида:<br />
<br />
<blockquote class="tr_bq">
ifconfig em0 inet alias 192.168.0.101 netmask 255.255.255.0</blockquote>
<br />
Чтобы удалить алиас:<br />
<br />
<blockquote class="tr_bq">
ifconfig em0 -alias 192.168.0.101</blockquote>
<br />
Чтобы алиасы сетевых интерфейсов создавались автоматически при старте системы, добавьте в /etc/rc.conf строки вида:<br />
<br />
<blockquote class="tr_bq">
ifconfig_em0_alias0="inet 192.168.0.101 netmask 255.255.255.0"<br />
ifconfig_em0_alias1="inet 192.168.0.102 netmask 255.255.255.0"</blockquote>
<br />Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-82392372898196073232011-07-04T18:20:00.001+04:002011-07-04T18:22:32.860+04:00Настройка polling во FreeBSDНе буду распространятся сильно о том, что такое <a href="http://www.freebsd.org/cgi/man.cgi?query=polling&apropos=0&sektion=0&manpath=FreeBSD+4.11-RELEASE&format=html">polling</a>, просто скажу о приносимой им пользе.<br />
<br />
Основное - это снижение нагрузки на центральный процессор. Как следствие высвобождаются ресурсы на другие задачи, кроме обработки трафика через сетевые карты либо повышается пропускная способность сетевой системы при большой загрузке, так как процессор сможет обработать больше пакетов.<br />
<br />
Для работы polling требуется его поддержка ядром FreeBSD. По умолчанию она отключена, поэтому необходимо перекомпилирвать ядро со следующими параметрами:<br />
<br />
<blockquote>options DEVICE_POLLING<br />
options HZ=1000</blockquote><br />
Второй параметр, в общем-то, не обязателен.<br />
<br />
Итак, справка для тех, кто не умеет компилировать ядро FreeBSD. Идем в директорию /usr/src/sys/i386/conf и правим там файл с именем GENERIC добавляя нужные нам параметры. Затем идем в директорию /usr/src/ и выполняем команды:<br />
<br />
<blockquote>make -j4 buildkernel<br />
make installkernel<br />
reboot</blockquote><br />
После перезагрузки можно включить polling для определенных интерфейсов командой вида (для последних версий FreeBSD):<br />
<br />
<blockquote>ifconfig re0 polling</blockquote><br />
Соответственно, стоит добавить параметр polling в настройки сетевых интерфейсов в файле /etc/rc.conf чтобы поллинг автоматически включался после перезагрузки.<br />
<br />
На моем стареньком селероне это дало снижение нагрузки по обработке прерываний с примерно 40 процентов до примерно одного. Довольно ощутимо.Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-29478734742924795392011-06-13T15:19:00.000+04:002012-05-08T16:43:42.881+04:00Как узнать сколько свободного места на жестком диске?<div dir="ltr" style="text-align: left;" trbidi="on">Я нашел единственный способ узнать сколько свободного места осталось на жестких дисках. Это команда <b>df -H</b><br />
<br />
Если у вас несколько жестких дисков и вы хотите узнать сколько суммарно свободного места осталось, то выполните команду с параметром "-c", то есть <b>df -Hc</b></div>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-27072043607554279992011-06-10T11:14:00.001+04:002011-06-10T11:17:07.946+04:00FreeBSD обновление программ<div dir="ltr" style="text-align: left;" trbidi="on">Прежде всего следует <a href="http://freebsdlog.blogspot.com/2009/07/blog-post.html">обновить дерево портов</a>.<br />
<br />
Затем можно сравнить версии установленный пакетов с последними версиями из портов. Делается это командой:<br />
<br />
<blockquote>pkg_version -v | grep need</blockquote><br />
Чтобы обновить программу с помощью встроенных средств, необходимо вначале удалить её и все связанные с ней пакеты командой вида:<br />
<br />
<blockquote>pkg_deinstall -r mc</blockquote><br />
Однако это может не сработать и придется удалять все связанные программы по отдельности. После удаления можно установить программу заново командой<br />
<br />
<blockquote>pkg_add -r mc</blockquote><br />
с параметром -r эта команда скачивает необходимый пакет с сервера и устанавливает его.<br />
<br />
Если вам нужно установить определенную программу не заморачиваясь на зависимости, то это можно сделать из портов предварительно выполнив команду <b>make deinstall</b>.<br />
<br />
Кроме того, существует возможность автоматически обновить все необходимые программы. Сделать это вам поможет пакет portupgrade, который обновляет программы из портов. Устанавливаем:<br />
<br />
<blockquote>cd /usr/ports/ports-mgmt/portupgrade<br />
make && make install</blockquote><br />
Теперь можно автоматически обновить все программы сразу:<br />
<br />
<blockquote>portupgrade -a</blockquote><br />
Чтобы система спрашивала вашего согласия на установку очередной программы добавьте параметр "-i". </div>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-3996091941654411802011-06-09T21:50:00.001+04:002011-06-10T11:20:26.850+04:00Обновление FreeBSD до 8.2<div dir="ltr" style="text-align: left;" trbidi="on">Обновление происходит из исходных кодов, поэтому прежде всего нам нужно получить необходимую версию исходников. Для этого используется утилита cvsup. Установить её можно из порта /usr/ports/net/cvsup-without-gui классической командой make && make install<br />
<br />
Теперь следует создать конфигурационный файл supfile. В общем случае он требует минимум настроек:<br />
<br />
<blockquote>*default host=cvsup5.ru.FreeBSD.org <br />
*default base=/var/db<br />
*default prefix=/usr<br />
*default release=cvs tag=RELENG_8_2_0_RELEASE<br />
*default delete use-rel-suffix compress<br />
src-all</blockquote><br />
Первая строка определяет сервер с которого будет производится загрузка исходных кодов. Также важен параметр tag= находящийся в четвертой строке. Он определяет исходники какой версии будут загружены. Варианты значений этого параметра можно <a href="http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/cvs-tags.html">найти здесь</a>. Более подробно о параметрах конфигурационного файла можно <a href="http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/cvsup.html">почитать в хэндбуке</a>.<br />
<br />
Запуск cvsup осуществляется командой вида:<br />
<br />
<blockquote>cvsup -L 2 supfile</blockquote><br />
После того, как обновятся исходники, можно приступать к обновлению "мира" и ядра.<br />
<br />
Вначале команды в необходимой последовательности, а потом комментарии к ним.<br />
<br />
<br />
<blockquote>cd /usr/src<br />
make -j4 buildkernel<br />
make -j4 buildworld<br />
make installkernel<br />
reboot<br />
shutdown now<br />
mergemaster -p<br />
cd /usr/src<br />
make installworld<br />
mergemaster<br />
reboot</blockquote><br />
То есть мы компилируем ядро и "мир", устанавливаем ядро, перезагружаемся, переходим однопользовательский режим (также можно сразу загрузиться в этот режим выбрав single user), запускаем утилиту mergemaster чтобы сохранить конфиги, устанавливаем "мир", восстанавливаем конфиги, перезагружаемся.<br />
<br />
Что касается однопользовательского режима. Понятно, что если вы делаете обновление удаленно, то перейдя в этот режим, вы потеряете доступ к серверу. Поэтому можно рискнуть пропустить этот пункт. На просторах интернета говорят, что риск не велик.<br />
<br />
Далее, утилита mergemaster. Она копирует все конфигурационные файлы измененные пользователем и просто важные в указанный каталог. В процессе выполнения показывается имя конфига и отличающиеся строки в новом и старом конфигах. Можно или установить рекомендуемый кнопкой "i" или сравнить построчно оба варианта клавишей "m". Тогда экран разделится на две части, где будут отображаться два варианта конфига. После этого можно будет выбрать какой из них использовать. Придется обработать довольно большое количество файлов и это может быть занудно, поэтом можно выполнить команду <b>mergemaster -iU</b>, что позволит автоматически установить недостающие конфиги и заменит не измененные пользователем.<br />
<br />
<i><i></i></i> Думается, что можно руками скопировать нужные конфиги и после обновления вернуть их обратно, но тогда, возможно работающие сервисы временно приостановят свою работу.<br />
<br />
Чтобы убедиться в успешности обновления <a href="http://freebsdlog.blogspot.com/2011/06/freebsd.html">узнайте текущую версию FreeBSD</a>.<br />
<br />
После обновления системы можно <a href="http://freebsdlog.blogspot.com/2011/06/freebsd_10.html">обновить установленные программы</a>.</div>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-15844016930056624972011-06-06T12:13:00.000+04:002011-06-06T12:13:41.596+04:00Настройка dhcp клиента dhclient в FreeBSD<div dir="ltr" style="text-align: left;" trbidi="on">DHClient в FreeBSD включен по умолчанию. Чтобы начать его использовать, следует прописать в файле /etc/rc.conf строку следующего вида:<br />
<br />
<blockquote><br />
ifconfig_fxp0="DHCP"</blockquote><br />
и так для каждого интерфейса, настройки которого вы планируете получать от DHCP сервера. Обычно этого достаточно и настройки DHCP клиента по умолчанию достаточно хороши в большинстве случаев. Однако существует еще несколько параметров, которые можно прописать для использования во время загрузки:<br />
<br />
<blockquote>dhcp_program="/sbin/dhclient"<br />
dhcp_flags=""</blockquote><br />
Также существует ряд параметров командной строки:<br />
<br />
<br />
<b>-b</b> Заставляет dhclient перейти в режим фоновой работы.<br />
<b>-c file</b> Определяет альтернативное положение конфигурационного файла.<br />
<b>-d</b> Заставляет dhclient всегда работать на переднем плане.<br />
<b>-l file</b> Определяет альтернативное положение файла с данными о предыдущих полученных конфигурациях.<br />
<b>-q</b> Заставляет dhclient быть менее многословным при загрузке.<br />
<b>-u</b> Заставляет dhclient не принимать конфигурации с неизвестными параметрами в них. По умолчанию, DHCP клиент принимает такие конфигурации.<br />
<br />
Напомню, что настройки клиента по умолчанию находится в файле /etc/dhclient.conf А предыдущие полученные настройки сетевых интерфейсов в файлах /var/db/dhclient.leases.IFNAME, где IFNAME - имя интерфейса. <br />
<br />
Более подробно о параметрах файла dhclient.conf можно прочитать в мане<tt class="FILENAME"> </tt><a href="http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&sektion=5"><span class="CITEREFENTRY"><span class="REFENTRYTITLE">dhclient.conf</span>(5)</span></a>.<br />
<br />
Можете обратить своё внимание на мой пост про <a href="http://freebsdlog.blogspot.com/2011/06/dhcp-freebsd.html">настройку DHCP сервера в FreeBSD</a>.</div>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-11372795307715365602011-06-05T14:27:00.000+04:002011-06-05T14:27:23.676+04:00Изменение mac адреса в FreeBSD<div dir="ltr" style="text-align: left;" trbidi="on">Для того чтобы изменить mac адрес сетевой карты я всегда прописывал команду<br />
<blockquote>ifconfig re0 ether 00-00-00-00-00-01 </blockquote>в какой-нибудь стартовый скрипт, к примеру в /etc/rc.d/ipnat<br />
<br />
Но оказалось все проще, можно задавать этот параметр прямо из /etc/rc.conf следующим образом<br />
<blockquote>ifconfig_re0="ether 00:00:00:00:00:01"</blockquote></div>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-46950776498445872192011-06-05T00:30:00.001+04:002011-06-05T00:32:36.041+04:00Настройка dhcp сервера freebsd<div dir="ltr" style="text-align: left;" trbidi="on">Если вы давно ничего не устанавливали, то прежде всего стоит обновить порты.<br />
<br />
После этого переходим в каталог /usr/ports/net/isc-dhcp41-server (последняя версия на момент написания заметки) и выполняем классическую команду:<br />
<br />
<blockquote>make && make install</blockquote><br />
После того, как процесс установки dhcp сервера закончится, необходимо перейти к его конфигурации. Для этого правим файл /usr/local/etc/dhcpd.conf<br />
Стоит закомментировать все строки и сконфигурировать сеть с нуля. Выглядит это все примерно так:<br />
<br />
<blockquote>subnet 192.168.0.0 netmask 255.255.255.0 {<br />
range 192.168.0.100 192.168.0.200;<br />
option routers 192.168.0.55;<br />
option domain-name-servers 172.16.1.40, 172.16.1.41;<br />
default-lease-time 36000;<br />
max-lease-time 72000;<br />
} </blockquote><br />
То есть вы указываете подсеть, маску, диапазон адресов, роутер(ы) по умолчанию, DNS сервера, время, на которое выдается адрес хосту.<br />
<br />
Кроме того, можно осуществить привязку IP адреса к MAC адресу, чтобы у хоста всегда был один и тот же IP. Для этого пропишите следующие строки: <br />
<br />
<blockquote>host username {<br />
hardware ethernet 00:00:00:00:00:00;<br />
fixed-address 192.168.0.11;<br />
}</blockquote><br />
Узнать MAC интерфейсов компьютера можно с помощью команды <i>ifconfig</i>. А если вы хотите определить MAC другой системы в сети, то зная её IP можно обратиться к команде <i>arp -a</i>.<br />
<br />
После того, как все закончили правку конфигурационного файла, пропишем пару строк в файл /etc/rc.conf<br />
<br />
<blockquote>dhcpd_enable="YES"<br />
dhcpd_ifaces="dc0"</blockquote><br />
Вторая строка определяет на каком интерфейсе будет раздавать адреса наш DHCP сервер.<br />
<br />
Наконец, стартуем:<br />
<br />
<blockquote>/usr/local/etc/rc.d/isc-dhcpd start</blockquote><br />
Вот и все. Успешной работы! </div>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-67340942275434402052011-06-04T18:51:00.001+04:002012-05-08T16:43:42.883+04:00Как узнать версию freebsd?<div dir="ltr" style="text-align: left;" trbidi="on">Чтобы узнать версию установленной операционной системы FreeBSD можно воспользоваться командой:<br />
<br />
<blockquote>uname -a </blockquote>Это может пригодится, к примеру, при обновлении ОС или для установки патчей.<br />
<br />
</div>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-61685409786381448872009-12-24T16:35:00.004+03:002010-03-08T17:45:07.466+03:00freebsd отключить sendmailСобственно проблемма в том, что на моем сервере sendmail не нужен, а он ставится на фряху по умолчанию и мне хотелось бы его выключить, чтобы не валил кучу лишних уведомлений. Также может понадобиться отключить sendmail если вы хотите установить другой MTA, например postfix.<br /><br />Итак, как написано в руководстве по freebsd, необходимо прописать следующие строки в файле /etc/rc.conf<br /><pre class="PROGRAMLISTING">sendmail_enable="NO"<br />sendmail_submit_enable="NO"<br />sendmail_outbound_enable="NO"<br />sendmail_msp_queue_enable="NO"</pre>ежели вы хотите использовать sendmail только для исходящей почты и не принимать входящую, то достаточно поставить только строку<br /><pre class="PROGRAMLISTING">sendmail_enable="NO"<br /></pre>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-66253007746523200342009-11-19T14:10:00.003+03:002009-11-19T15:57:08.546+03:00Настройка виртуальных хостов на одном айпи с использованием связки apache и nginxУ меня настроена связка Апача и Nginx на системе с одним выделенным айпи адресом, где Апач обрабатывает динамику, а Nginx выдает статику, то есть Нгиникс проксирует данные для Апача. Подробнее о <a href="http://freebsdlog.blogspot.com/2009/08/blog-post.html">настройке веб сервера</a> вы можете прочитать в соответствующей статье в этом блоге. Требовалось завести в системе пачку хостов с различием по доменным именам, например, host.ru, host2.ru и так далее.<br /><br />Порывшись в интернете не нашел адекватно простых способов сделать это. Оказалось все еще проще простого. Для выполнения задачи необходимо завести виртуальные хосты как в апаче, так и в нгниксе. Каждый хост имеет относящуюся к нему директорию на жестком диске, для определения принадлежности, хосты различаются по имени (а не по айпи).<br /><br />Настройка виртуальных хостов в Nginx.<br /><br /> server { <br /> listen 85.249.???.???:80; <br /> server_name host.spb.ru www.host.spb.ru; <br /> location / { <br /> proxy_pass http://85.249.???.???:8080/; <br /> proxy_set_header Host $host; <br /> proxy_set_header X-Real-IP $remote_addr; <br /> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br /> } <br /> location ~* \.(html|jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {<br /> root /usr/local/www/apache22/data/host.spb.ru;<br /> }<br /><br />Как видно, у нас прописан адрес и порт, на котором будет слушать нгиникс, имя хоста и имя хоста с www, это необходимо для корректного индексирования сайта поисковиками (по крайней мере, это верно для моей системы). Далее идут настройки для связки с Апачем. В строчке location указываются расширения файлов, которые будет выдавать Nginx, строка root указывает путь до директории, где хронятся файлы, относящиеся к данному хосту.<br /><br />Настройка виртуальных хостов в Апаче.<br /><br /> <virtualhost> <br /> DocumentRoot "/usr/local/www/apache22/data/host.spb.ru/"<br /> ServerName host.spb.ru <br /> ServerAlias www.host.spb.ru <br /> </virtualhost><br /><br />Прописываем сетевой адрес, на котором будет слушать Апач, директорию на винчестере, где лежат файлы хоста, имя сервера и алиас к нему (имя сервера с www).<br /><br />И не забудьте, до в днс записи для доменного имени должна быть строчка вида:<br /><br />www.host.spb.ru CNAME host.spb.ru<br /><br />Чтобы запросы с www отправлялись на этот же сервер.<br /><br />Если вы нигде не ошиблись, то все должно работать! :-) Удачи!Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-42461475056133034362009-08-12T16:45:00.002+04:002009-08-12T16:49:51.929+04:00Установка и базовая настройка веб-сервера24.07.2009<br />установка apache+nginx+mod_rpaf+mysql+php+eAccelerator<br /><br />Вначале просто установим все необходимые компоненты. Естественно из портов. На всякий случай напомню нужные команды:<br /><br />make<br />make install<br /><br />Итак, вот список путей до портов, которые будем устанавливать:<br /><br />/usr/ports/www/apache22 (текущая версия 2.2.11)<br />/usr/ports/www/nginx (0.7.61)<br />/usr/ports/www/mod_rpaf/ (видимо 0.6)<br />/usr/ports/databases/mysql50-server/ (5.0.83, уже существуют более поздние версии, ищите рядом)<br />/usr/ports/lang/php5/ (5.2.10)<br />/usr/porst/lang/php5-extension (следует выбрать необходимые пункты, не забыв про модуль для mysql)<br />/usr/ports/www/eaccelerator/(0.9.5.3)<br /><br />Также может понадобиться:<br /><br />/usr/ports/databases/mysql50-client/<br /><br />Стоит установить и вот это тоже:<br /><br />/usr/ports/databases/mysql50-scripts/<br /><br />eAccelerator - система, которая ускоряет выполнение php скриптов вплоть до 10 раз за счет их компилирования и хранения в памяти.<br /><br />mod_rpaf - так как у нас nginx стоит фронтэндом для apache, то запросы приходящие на апач имеют айпи адрес такой же как у самого сервера, что не позволяет нормально вести статистику посещений (например). mod_rpaf исправляет данную неприятность.<br /><br />После установки, которая не должна вызвать проблем перейдем к настройке. Начнем с mysql:<br /><br />1. Создаем конфигурационный файл для mysql на основе одного из типовых:<br /><br />cp /usr/locale/share/mysql/my-small.cnf /etc/my.cnf<br /><br />2. Добавляем в него строки для настройки ведения логов и в целях безоасности привязываем мускуль к локальному хосту:<br /><br />[mysqld]<br />log=/var/log/mysql.log<br />bind-address=127.0.0.1<br /><br />3. Создаем файл для лога и выставляем ему права:<br /><br />touch /var/log/mysql.log<br />chown mysql:mysql /var/log/mysql.log<br /><br />4. Стартуем MySQL:<br /><br />/usr/local/etc/rc.d/mysql-server start<br /><br />5. Используем скрипт для настройки безопасности мускуля:<br /><br />/usr/local/bin/mysql_secure_installation<br /><br />Все, mysql подвергнут базовой настройке и запущен. В случае возникновения проблем, ответы следует искать в логе, а затем в Яндексе.<br /><br />Теперь перейдем к настройке mod_rpaf. Собственно, настраивать тут нечего, просто нужно добавить несколько строчек в конфигурационный файл апача:<br /><br />1. Открываем файл /usr/local/etc/apache22/httpd.conf и дописываем в соответствующий раздел строку:<br /><br />LoadModule rpaf_module libexec/apache22/mod_rpaf.so<br /><br />не забываем проверить нет ли уже такой страки в конфиге.<br /><br />2. Там же, чуть ниже вписываем следующее:<br /><br />RPAFenable On<br />RPAFsethostname On<br />RPAFproxy_ips 84.238.71.16 # IP нужно сменить на адрес вашего сервера<br />RPAFheader X-Forwarded-For<br /><br />С mod_rpaf покончено, переходим к PHP. Тут и того меньше, просто нужно создать файл /usr/local/etc/php.ini из файла /usr/local/etc/php.ini-recommended c помощью команды:<br /><br />cp /usr/local/etc/php.ini-recommended /usr/local/etc/php.ini<br /><br />На очереди у нас стоит eAccelerator.<br /><br />1. Для того, чтобы он заработал, в только что созданый php.ini добавляем следующие строки:<br /><br />extension="eaccelerator.so"<br />eaccelerator.shm_size = "160"<br />eaccelerator.cache_dir = "/var/cache/php-eaccelerator"<br />eaccelerator.enable = "1"<br />eaccelerator.optimizer = "1"<br />eaccelerator.debug = 0<br />eaccelerator.log_file = "/var/log/eaccelerator_log"<br />eaccelerator.name_space = ""<br />eaccelerator.check_mtime = "1"<br />eaccelerator.filter = ""<br />eaccelerator.shm_max = "0"<br />eaccelerator.shm_ttl = "3600"<br />eaccelerator.shm_prune_period = "0"<br />eaccelerator.shm_only = "0"<br />eaccelerator.compress = "1"<br />eaccelerator.compress_level = "9"<br />eaccelerator.keys = "none"<br />eaccelerator.sessions = "none"<br />eaccelerator.content = "none"<br />eaccelerator.allowed_admin_path = ""<br /><br />2. Создаем директорию для кэша и выставляем ей права:<br /><br />mkdir /var/cache/php-eaccelerator<br />chmod 777 /var/cache/php-eaccelerator<br /><br />Теперь настроим главных виновников торжества - nginx и apache. Начнем с апача. Как вам уже известно, его конфигурационный файл можно найти в директории /usr/local/etc/apache22/ и называется он httpd.conf. Нам необходимо добиться того, чтобы апач правильно понимал что делать с php-скриптами, а также повесить его на нестандартный порт, например на порт 8080. Итак, приступим:<br /><br />1. Находим строку, начинающуюся с Listen и приводим её к следующему виду:<br /><br />Listen 84.238.71.16:8080 # необходимо исправить на айпи-айдрес вашего сервера<br /><br />2. Находим раздел начинающийся с <ifmodule> и вставляем туда следующее:<br /><br />AddType application/x-httpd-php .php<br />AddType application/x-httpd-php-source .phps<br /><br />3. Находим раздел <ifmodule> и добавляем к строке начинающейся с DirectoryIndex следующее: index.php index.phps<br /><br />Все, начальная настройка апача закончена. Остался только nginx. Нужно выполнить следующие шаги:<br /><br />1. Находим раздел server, в нем правим строки listen и server_name:<br /><br />listen 84.238.71.16:80; # ip адрес вашего сервера и стандартный http порт 80<br />server_name gesundes.org.ru www.gesundes.org.ru; # ваш домен с www и без<br /><br />2. Находим (или создаем) подраздел location (находится внутри раздела server) и вставляем туда:<br /><br />location / {<br />proxy_pass http://84.238.71.16:8080/; # не забываем менять ip-адрес<br />proxy_set_header Host $host;<br />proxy_set_header X-Real-IP $remote_addr;<br />proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br />}<br /><br />3. Добавляем еще один подраздел:<br /><br />location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {<br />root /usr/local/www/apache22/data/; }<br /><br />в первой строке указываем расширения файлов, которые будет обрабатывать nginx, остальные файлы будет обрабатывать апач. Во второй строке указывается путь до корневой директории, в которой хранятся файлы, относящиеся к вашему сайту. По умолчанию, апач использует директорию /usr/local/www/apache22/data/ поэтому в для nginx нужно указать такуюже.<br /><br />Осталось только запустить все необходимые сервисы. MySQL уже запущен, теперь нужно позаботиться о apache и nginx. Выполним следующие команды:<br /><br />/usr/local/sbin/apachectl start<br />/usr/local/etc/rc.d/nginx start<br /><br />Стоит помнить, то апач пишет логи в файлы httpd-error.log и httpd-access.log в директории /var/log/. Nginx использует файлы nginx-error.log и nginx-access.log в той же директории.<br /><br />Для того, чтобы при перезагрузке все установленые сервисы поднимались автоматически, в файл /etc/rc.conf нужно внести изменения:<br /><br />mysql_enable="YES"<br />apache22_enable="YES"<br />nginx_enable="YES"<br /><br />Веб-сервер установлен и готов к работе.Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-84477758040427805772009-07-03T23:37:00.004+04:002009-07-04T01:41:52.495+04:00Настройка сетиЯ оказался непоследователен описав в предыдущем посте как работать с портами, не рассказав как настроить работу сети, а без этого работа с портами врят ли возможна. Конечно, можно использовать исходники поставляемые в составе дистирбутива FreeBSD, но врят ли они будут последних версий.<br /><br />Ежели вы устанавливали ось с использованием сетевого загрузчика (что в современных условиях часто оправдано), то как минимум один интерфейс у вас должен быть уже сконфигурирован. Вообще говоря, настройки сетевых карт, которые подхватываются при загрузке находятся в файле /etc/rc.conf и выглядят примерно таким образом:<br /><br />ifconfig_fxp0="inet 84.246.77.15 netmask 255.255.255.0"<br />ifconfig_rl0="inet 192.168.0.55 netmask 255.255.255.0"<br /><br />гду fxp0 - внешний интерфейс, rl0 - внутренний. В данном примере сервер является шлюзом между сетью интернет и внутренней сетью. Поэтому для того, чтобы внутренние пользователи могли получить доступ к сети Интернет, на сервере необходимо сконфигурировать службу NAT. Для этого в rc.conf необходимо добавить следующие строки:<br /><br />defaultrouter="84.246.77.1" - указываем роутер для отправки пакетов в инет (выдается провайдером)<br />gateway_enable="YES" - указываем, что наш сервер является шлюзом<br /><br />ipnat_enable="YES" - включаем систему натирования, которая будет автоматически загружаться<br />ipnat_program="/sbin/ipnat -CF -f" - флаги -CF очищают таблицу правил NAT, а -f указывает, чт нужно загрузить правила из файла<br />ipnat_rules="/etc/ipnat.rules" - путь к файлу с правилами<br />ipnat_flags=""<br /><br />Теперь при перезагрузке системы NAT будет подниматься автоматически. Осталось составить таблицу правил натирования и сохранить её в файл /etc/ipnat.rules. В простейшем случае она будет состоять из одной строки:<br /><br />map fxp0 192.168.0.0/24 ->85.249.77.16/32<br /><br />то есть при запросах из подсети 192.168.0.0/24 в интернет пакетам будет присваиваться адрес отправителя 85.249.77.16/32. Конечно же будет производиться и обратная трансляция адресов.<br /><br />Если необходимо чтобы при коннекте из внешней сети на определенный порт внешнего интерфейса можно было попасть на определенный порт какой-то конкретной машины во внутренней сети, то можно организовать проброс порта строкой следующего вида:<br /><br />rdr fxp0 0.0.0.0/0 port 26000 -> 192.168.0.10 port 26000 tcp<br /><br />Более подробно про составление правил можно почитать в файлах из папки /usr/share/examples/ipfilter/. Осталось только стартануть ipnat командой<br /><br />/etc/rc.d/ipnat start<br /><br />и при необходимости после этого использовать команду<br /><br />/sbin/ipnat -CF -f /etc/ipnat.rules<br /><br />Все, система работает. Однако, в случае если у вашего провайдера идет привязка сетевых карт по MAC-адресу, а вам необходимо её заменить, то установить MAC-адрес на сетевой карте програмным путем можно с помощью команды вида:<br /><br />ifconfig fxp0 ether 10-0F-3D-1A-E3-45<br /><br />На этом вроде все.Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0tag:blogger.com,1999:blog-9205452124256616716.post-30076523471077941212009-07-03T06:10:00.001+04:002009-07-04T01:42:42.454+04:00НачалоОписывать процесс установки особого желания нет, так как он элементарен, но поделиться тем где можно эту самую FreeBSD вполне себе хочется. Кроме <a href="http://www.freebsd.org/">официального сайта</a>, дистриб фряхи можно найти в разделе яндекса <a href="http://mirror.yandex.ru/">mirror</a>. Яндекс меня приятно удивил коллекцией дистрибутивов и скоростью их раздачи.<br /><br />А теперь пару слов о том, что можно сделать сразу после установки новой системы. Лично я прежде чем что-либо устанавливать, предпочитаю обновить порты (коллекция программ, оптимизированых для FreeBSD). Для этого можно использовать команды:<br /><pre>portsnap fetch</pre> - загружает дерево портов в заархивированном виде,<br /><pre>portsnap extract</pre> - распаковывает и переписывает дерево портов.<br />В первую очередь стоит устанавливать файловый менеджер Midnight Commandeer (mc). Чтобы узнать где находится соответствующий порт, можно выполнить команду<br /><pre>whereis mc</pre><br />однако, с большой долей вероятности, он окажется в директории /usr/ports/misc/mc. Переходим в эту директорию и выполняем команду<br /><pre>make</pre><br />появится окошко с настройками, где все можно оставить по умолчанию. После того как вы выбирете OK, mc скомпилируется. Для окончательной установки нужно выполнить команду<br /><pre>make install</pre><br />и немного подождать. Когда инсталляция закончится, этот удобный файловый менеджер можно будет запускать простой командой <pre>mc</pre>Gesundeshttp://www.blogger.com/profile/02766834589967855413noreply@blogger.com0