ставим с портов trafshow
trafshow -p -i rl0 dst port 25
Имеем:
From Address To Address Proto Bytes CPS===================================================================daemony..2675 mail.server.net..smtp tcp 128 9
Работает так же конструкция dst host
**********************************************************************************
trafshow -p -i rl0 src host имя_или_ip_адрес_подозреваемого dst port 25
понедельник, 29 декабря 2008 г.
IPFW
Собираем ядро с опциямы для фаервола
options IPFIREWALL # встраиваем поддержку файрволла в ядро
options IPFIREWALL_VERBOSE # проходящие пакеты записываются в лог-файл, при использовании опции log в правилах
options IPFIREWALL_VERBOSE_LIMIT=100 # ограничение, чтоб весь /var логами не забили (количества записей в лог-файл по одному правилу, в правилах IPFW значение можно изменить через опцию logamount)
options IPFIREWALL_FORWARD # включаем поддержку перенаправления чтобы можно было сделать позрачный прокси-сервер TCP пакетов ядром( одновременно работает IPFW и прокси-сервер (например SQUID или FROX)
options IPDIVERT # поддержка IP-маскарадинга (natd)
options DUMMYNET # поддержка DUMMYNET (искуственное ограничение пропускной способности сети
allow ip from any to any- если включена опция
options IPFIREWALL_DEFAULT_TO_ACCEPT
либо, deny ip from any to any- если отсутствует.
/etc/rc.conf пишем
firewall_enable="YES"
firewall_script="/usr/local/etc/ipfw.rules" путь к файлу с правилами
natd_enable="YES"
natd_interface="de0" на каком интерфейсе будет nat
natd_flags="-same_ports"
Пример набора правил для IPFW (находится в “/etc/rc.firewall”)
IPFW составлен из семи компонентов,
1. первичный компонент - брэндмауэр управляющий списком правил на уровне ядра и интегрированная в него возможность пакетного учета,
2. возможность ведения логов,
3. "divert" правила которые взаимодействуют с NAT, и улучшенные специальные средства,
4. траффик dummynet, возможность шейпинга,
5. возможность перенаправления "fwd rule",
6. возможность бриджа,
7. возможность ipstealth.
Можна и не включать поддержку IPFW в ядро, пока вам не потребуется включить функцию NAT.
на сервере лучше включать.
------------------------------------------------------------------------------------------------------------------
ipfw list - показывает список правил
ipfw show - тоже показывает список правил, но вместе с числом пакетов и байт, что попали под эти правила. Очень удобно при отдладке - смотрим на чём зарубаются пакеты.
sysctl -a | grep ip.fw
ipfw zero - обнуление всех счётчиков. Если вести в виде ipfw zero №_правила то будет обнулён только счётчик правила с этим номером.
Чтобы применилось внесенное правилу - нужно перегрузить скрипт с правилами
синтаксис правил
CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL
где
CMD............add | del
RULE_NUMBER....00001
ACTION.........allow | accept | pass | permit | check-state | deny | drop
LOGGING........log или logamount (в логе с именем SECURITY)
SELECTION......udp | tcp | icmp или любые имена протоколов, из /etc/protocols
STATEFUL.......from откуда to куда
-------------------------------------------------------------------------------------------------------------------
from и to используются для сопоставления с IP адресом. Правила должны быть определены для обоих параметров, источника и приемника. any специально ключевое слово, которое совпадает с IP адресом. me - специальное ключевое слово которое совпадает с любым IP адресом заданным на интерфейсе вашей FreeBSD для представления PC где запущен файрволл (то есть как коробки) как "от меня к любому" или от "от любого ко мне", или "от 0.0.0.0/0 к любому" или "от 0.0.0.0/0 ко мне", или "от 0.0.0.0 к любому" или "от 0.0.0.0 ко мне", IP адреса определены как адреса через точку, цифровая форма/длина маски или как один IP адрес без маски. Это обязательное требование.
port number
Для протоколов которые поддерживают номера (такие как TCP или UDP). Обязательно нужно написать номер порта сервиса для совпадения. Имена сервисов (из “/etc/services”) могут использоваться вместо значений номеров портов. in | out
Совпадения для входящих или исходящих пакетов соответственно. in и out - ключевые слова и обязательное написание одного или другого как часть критерия совпадения.via IF(интерфейс)
Совпадающие пакеты проходящие через определенное имя интерфейса интерфейс. via - ключевое слово которое означает интерфейс который будет всегда проверяться как часть процесса совпадения.setup
Обязательное ключевое слово, которое распознает запрос о начале сессии для TCP пакетов.keep-state
Обязательное ключевое слово. После совпадения файрволл создаст динамическое правило, чье поведение по умолчанию состоит в том, что бы было совпадение двунаправленного траффика между IP адресом или портом источника и приемника по тому же самому протоколу.limit {src-addr | src-port | dst-addr | dst-port}
Файрволл будет позволять только N соединений с тем же набором параметров, какие определены в правилах. Один или больше исходных и приемных адрессов может быть определено. "limit" и "keep-state" не могут быть использованы в том же правиле. "limit" дает ту же самую функцию состояния как и "keep-state" плюс собственные функции.
примеры правил
ipfw add deny icmp from me to ukr.net #закрывает пинг от меня на укр.нет
ipfw add deny tcp from site.ua to site.ru telnet #отвергает перенаправление текущим хостом всех tcp-пакетов от хоста site.ua на порт telnet хоста site.ru
ipfw add deny ip from 123.45.67.0/24 to my.host.org#запрещает любое подключение из сети взломщиков к моему хосту
ipfw divert 5000 ip from 192.168.2.0/24 to any in #перенаправляет все входящие пакеты от 192.168.2.0/24 на порт 5000:
00600 allow tcp from any to any 80 out via bge0 setup keep-state
00601 allow tcp from any to any 110 out via bge0 setup keep-state
00602 allow tcp from any to any 143 out via bge0 setup keep-state
00603 allow tcp from any to any 25 out via bge0 setup keep-state
правила 600-603 позволяют вам работать только с WWW (порт 80) и e-mail (порты 25, 110, 143)
00700 allow tcp from any to XX.XX.XX.XX 53 out via bge0 setup keep-state
00701 allow udp from any to XX.XX.XX.XX 53 out via bge0 keep-state
00702 allow tcp from any to YY.YY.YY.YY 53 out via bge0 setup keep-state
00703 allow udp from any to YY.YY.YY.YY 53 out via bge0 keep-state
Правила 700-703 аналогичны предыдущим, они позволяют вам работать с DNS, причём только с легальными DNS вашего провайдера. Замените XX.XX.XX.XX и YY.YY.YY.YY на адреса ваших DNS
ipfw add 510 divert natd ip from any to any via em0 - роздает инет на подсети
Как известно после перезагрузки системы правила в ipfw сбрасываются
Поэтому необходимо эти самые правила где-то хранить, что бы при загрузке системы происходила настройка фаервола
Это достигается следующими вариантами
************************************************************************************************************
1)Используя /etc/rc.conf и /etc/ipfw.rules - метод №1
1.1) В /etc/rc.conf пишем:
firewall_enable="YES"
firewall_type="/etc/ipfw.rules"
1.2) Создаём /etc/ipfw.rules:
# ee /etc/ipfw.rules
1.3) Вписываем в /etc/ipfw.rules нужные нам правила:
1.4) Перезагружаемся.
Замечание: прописывать в /etc/rc.conf строку firewall_enable="YES" - ОБЯЗАТЕЛЬНО, даже если ядро собиралось с поддежкой IPFW.
*************************************************************************************************************
2) Используя /etc/rc.conf и /etc/ipfw.rules - метод №2
2.1) В /etc/rc.conf пишем:
firewall_enable="YES"
firewall_script="/etc/ipfw.script"
2.2) Создаём /etc/ipfw.script
# ee /etc/ipfw.script
2.3) Вписываем в/etc/ipfw.script нужное нам содержание:
#!/bin/sh
……..
2.4) Даём право на запуск /etc/ipfw.script:
# chmod +x /etc/ipfw.script
2.5) Перезагружаемся.
*****************************************************************************************************
3) Используя /etc/rc.d/ipfwrules метод 3
3.1) Создаём файл /etc/rc.d/ipfwrules:
# ee /etc/rc.d/ipfwrules
3.2) Даём право на запуск /etc/rc.d/ipfwrules:
# chmod +x /etc/rc.d/ipfwrules
3.3) Вписываем нужное нам содержимое в /etc/rc.d/ipfwrules:
……..
3.4) Перезагружаемся.
******************************************************************************************************
4) Используя /usr/local/etc/rc.d/ipfw.sh метод 4
4.1) Создаём файл /usr/local/etc/rc.d/ipfw.sh:
# ee /usr/local/etc/rc.d/ipfw.sh
4.2) Даём право на запуск /usr/local/etc/rc.d/ipfw.sh:
# chmod +x /usr/local/etc/rc.d/ipfw.sh
4.3) Вписываем нужное нам содержимое в /usr/local/etc/rc.d/ipfw.sh:
……..
4.4) Перезагружаемся.
**************************************************************************************************************
делаем /etc/rc.d/ipfw start и смотрим что и в какой строке не так.
А вот то, что следует вписать в конфигурационном файле: (я использую 2-й способ)
#!/bin/sh
# Создание переменных
ipfw="/sbin/ipfw"
lan_out="rl0"
lan_in="rl1"
#Создание pipe
${ipfw} pipe 1 config bw 384Kbit/s
${ipfw} pipe 2 config bw 128Kbit/s
#Сброс всех существующих правил
${ipfw} -f flush
#Проверка на соответствие дирамическим правилам
${ipfw} add check-state
#Разрешение работать через петлю
${ipfw} add allow ip from any to any via lo0
#Запрет на принятие/отправку пакетов петли
${ipfw} add deny ip from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any
#Запрет принятия пакетов с частных сетей
${ipfw} add deny ip from any to 0.0.0.0/8 in via ${lan_out}
${ipfw} add deny ip from any to 10.0.0.0/8 in via ${lan_out}
${ipfw} add deny ip from any to 172.16.0.0/16 in via ${lan_out}
${ipfw} add deny ip from any to 192.168.0.0/24 in via ${lan_out}
#Ограничение скорости канала
${ipfw} add pipe 1 ip from me to 192.168.10.20 out via ${lan_in}
${ipfw} add pipe 2 ip from me to 192.168.10.0/24 out via ${lan_in}
#Правила для ната с машины 192.168.10.20
${ipfw} add divert natd tcp from 192.168.10.20 to any 22 via ${lan_out}
${ipfw} add divert natd ip from any to me in via ${lan_out}
#Разрешение для устновленных соединений
${ipfw} add allow tcp from any to any via ${lan_out} established
# Разрешение на подключение по SSH c наружи
${ipfw} add allow tcp from any to me 22 in via ${lan_out}
# Разрешение на подключение по SMTP c наружи
${ipfw} add allow tcp from any to me 25 in via ${lan_out}
# Разрешение DNS
${ipfw} add allow udp from me to any 53 out via ${lan_out}
${ipfw} add allow udp from any 53 to me in via ${lan_out}
# Разрешение SSH –правило для NAT
${ipfw} add allow tcp from me to any 22 out via ${lan_out}
# Разрешение HTTP
${ipfw} add allow tcp from me to any 80 out via ${lan_out}
# Разрешение HTTPS
${ipfw} add allow tcp from me to any 443 out via ${lan_out}
# Разрешение FTP
${ipfw} add allow tcp from me to any 21 out via ${lan_out}
${ipfw} add allow tcp from any to me 49152-65535 in via ${lan_out}
# Разрешение SMTP
${ipfw} add allow tcp from me to any 25 out via ${lan_out}
# Local
${ipfw} add allow icmp from any to any via ${lan_in}
${ipfw} add allow udp from any to any via ${lan_in}
${ipfw} add allow tcp from any to any via ${lan_in}
# LOG
${ipfw} add deny log ip from any to any
**********************************************************************************************************
С такими настройками у нас получается что:
Шлюз имеет доступ на сервисы DNS, SSH, HTTP, HTTPS, FTP, SMTP
С мира можно подключиться на 22 и 25 порт
Для машины 192.168.10.20 открыт NAT только на SSH
Т.е. придеться побегать по машинам и вручную прописать в настройках соединения адрес и порт прокси.
Для маленькой сетки больше и не надо :)
Добавил в конфиг ограничения по скорости канала: сделал 2 трубы - на 384к и 128к -
В трубу на 384к мы засунули директора (192.168.10.20), а в трубу 128к мы засунули всех остальных
-----------------------------------------------------------------------------
natd_enable="YES"
natd_interface=""
natd_flags="-dynamic"
суббота, 27 декабря 2008 г.
Обновление порта
Обновление порта (на примере -lgio)
FreeBSD 7, при установке из портов некоторых приложений ругается, cannot find -lgio-2.0 -проблема в библиотеке glib
смотрим какая версия установлена
localhost# pkg_info | grep glib
glib-2.14.2 Some useful routines of C programming (current stable versi
проверяем необходимость её обновления
pkg_version | grep glib
glib <
знак < означает, что установленная версия старее, чем та, что имеется в дереве портов
Значит необходимо обновить. обновлять будем с помошью утилиты portupgrade. ставим её из портов
localhost# whereis portupgrade
portupgrade: /usr/ports/ports-mgmt/portupgrade
localhost# cd /usr/ports/ports-mgmt/portupgrade
localhost# make install clean
порт установился,теперь обновляем наш glib
localhost# portupgrade glib-2.14.2
пятница, 26 декабря 2008 г.
SSH
/etc/group
wheel:*:0:root,alex # додаем пользователя которы сможет запустить su(root)
------------------------------------------------------------------------
netstat -na | grep -i listen - проверка портов что слушаються
ps aux | greo -i ssh - проверка процессов
ee /etc/rc.conf
допишем
sshd_enable="YES"
Запускаєм ssh без перезагрузки
/etc/rc.d/sshd start
root не можеt удаленно подключаться. Все -подключаемся putty
Если Вы желаете, чтобы при входе в систему отображалось Ваш собственное сообщение вместо стандартного, отредактируйте файл /etc/motd. Кроме того, если Вы хотите, чтобы после передачи имени пользователя и до передачи пароля выдавалось еще какое-либо сообщение, раскомментируйте в конфиге /etc/ssh/sshd_config строку:
#Banner /some/pathА вместо /some/path укажите путь к Вашему текстовому файлу с “баннером”. После редактирования sshd_config следует дать демону ssh перечитать его. Сделать это можно, послав процессу сигнал HUP:
сrawler# killall -HUP sshdПравда, в этом случае у Вас отвалятся все активные ssh сессии. Лучше сделать это так:
сrawler# /etc/rc.d/sshd restartТеперь при входе в систему мы увидим:
login as: daemony
Well, tell me your password?
Password:
Last login: Tue Jan 29 23:51:51 2008 from somehost
Welcome to Crazy Crawler!
Here’s all for good job.
$ _
Мелочь, но красиво. Через /etc/motd я как-то вешал публичные объявления для пользователей на одном из серверов. Вполне юзабельно. Тем более, что motd для этого и задумывался.
Кроме баннера, в /etc/ssh/sshd_config можно поправить еще несколько опций.
AllowGroups sshusersПри этом следует добавить соответсвующую группу в /etc/group. Например:
crawler# pw group add sshusersИ прописать в эту группу всех пользователей, которые могут иметь возможность входить на этот сервер удаленно по ssh. Достаточно просто изменить (добавить или удалить) список пользователей группы sshusers как эти изменения вступят в силу.
Замечание: если Вам вдруг взбредет в голову дать пользователю root возможность удаленно входить на сервер по ssh, Вам не только прийдется добавить его в группу sshusers, Вам также прийдется добавить в /etc/ssh/sshd_config строчку:
PermitRootLogin yesНо это конечно же не самое лучшее решение. … В /etc/ssh/sshd_config можно исправить еще несколько полезных опций.
# Здесь можно задать другой номер порта, указав нестандартный. Иногда спасает от брутфорса
Port 22
# Можно sshd заставить слушать какой-то конкретный интерфейс
# ListenAddress 0.0.0.0
# Максимальное количество попыток ввести пароль при входе
MaxAuthTries 3
# Можно задать время (в секундах), в течении которого, если не ввели пароль,
# сеанс связи будет закрыт сервером.
LoginGraceTime 20
****************************************
sockstat -4 -l
-4 отображаются только IPv4 сокеты.
-6 отображаются только IPv6 сокеты.
-c отображаются только подключенные сокеты.
-l отображаются только listening сокеты (открытый порт).
$ netstat -nat | grep LISTEN
среда, 24 декабря 2008 г.
login.conf
Ниже приведен список наиболее часто используемых ограничений на ресурсы (остальные, вместе с другими характеристиками можно найти в login.conf(5)).
coredumpsize
Ограничение на размер файла core, генерируемого программой, по очевидным причинам подчиняющееся другим ограничениям на используемое дисковое пространство (например, filesize, или дисковые квоты). Тем не менее, оно часто используется как менее строгий метод контролирования потребления дискового пространства: поскольку пользователь не создает файлы core самостоятельно, и зачастую не удаляет их, установка этого параметра может предохранить его от выхода за пределы дисковых квот, если большая программа (например, emacs) создаст core файл.
cputime
Это максимальное количество времени CPU, потребляемого пользователем. Превысившие это время процессы будут уничтожены ядром.
Замечание: Это ограничение потребляемого времени CPU, а не процентов использования CPU, которые отображаются в некоторых полях top(1) и ps(1). Ограничения на них на время написания этого материала невозможны и такие ограничения практически бесполезны: компилятор -- вполне законное приложение -- иногда может легко использовать почти 100% CPU.
filesize
Это максимальный размер файла, который может обрабатываться пользователем. В отличие от дисковых квот, это ограничение применяется к отдельным файлам, а не ко всему набору принадлежащих пользователю файлов.
maxproc
Это максимальное число процессов, которые могут быть запущены пользователем. В это число включаются и консольные и фоновые процессы. По очевидным причинам, они не могут быть больше, чем системное ограничение, указываемое через переменную sysctl(8) kern.maxproc. Имейте ввиду, что установка слишком жестких ограничений может стать помехой работе пользователя: зачастую полезно входить в систему с нескольких консолей или использовать каналы. Некоторые задачи, такие как компиляция большой программы, также порождают множество процессов (например, make(1), cc(1) и другие препроцессоры).
memorylocked
Это максимальный объем памяти, блокировка которого может быть запрошена процессом (см. например mlock(2)). Некоторые критически важные для системы программы, такие как amd(8), блокируют память так, что при выгрузке они не создают системе дополнительных проблем.
memoryuse
Это максимальный объем памяти, которая может быть занята процессами. Он включает основную память и использование подкачки. Это ограничение не снимает все вопросы, связанные с использованием памяти, но для начала это подходящее ограничение.
openfiles
Это максимальное количество файлов, которые могут быть открыты процессами. В FreeBSD, файлы также используются для представления сокетов и каналов IPC; не устанавливайте слишком маленькое значение. Ограничение этого параметра, устанавливаемое для всей системы, определяется переменной sysctl(8) kern.maxfiles.
sbsize
Это ограничение потребляемого пользователем объема сетевой памяти, т.е. mbufs. Оно было введено как ответ на старые DoS атаки, при которых создавалось множество сокетов, но обычно может быть использовано и для ограничения сетевых соединений.
stacksize
Это максимальный размер, до которого может вырасти стек процесса. Сам по себе этот параметр не может ограничить размер используемой программой памяти, следовательно, его необходимо использовать вместе с другими ограничениями.
Существуют несколько других аспектов, которые необходимо учитывать при установке ограничений ресурсов. Ниже приведены некоторые общие подсказки, советы и различные комментарии.
Процессам, загружаемым при старте системы скриптами /etc/rc присваивается класс daemon.
Хотя /etc/login.conf, поставляемый с системой, это хороший источник подходящих значений для большинства ограничений, только вы, администратор, можете знать подходящие значения для вашей системы. Установка слишком слабых ограничений может повлечь злоупотребления системой, а установка слишком сильных ограничений может стать помехой производительности.
Пользователи X Window System (X11) возможно должны получить больше ресурсов, чем другие пользователи. X11 сама по себе потребляет много ресурсов, а также провоцирует пользователей на одновременный запуск большего количества программ.
Помните, что многие ограничения применяются к отдельным процессам, а не к пользователю вообще. Например, установка openfiles в 50 означает, что каждый процесс, запущенный пользователем, может открывать до 50 файлов. Таким образом, общее количество файлов, которые могут быть открыты пользователем, вычисляется как openfiles, помноженное на maxproc. Это также применимо к потребляемой памяти.
coredumpsize
Ограничение на размер файла core, генерируемого программой, по очевидным причинам подчиняющееся другим ограничениям на используемое дисковое пространство (например, filesize, или дисковые квоты). Тем не менее, оно часто используется как менее строгий метод контролирования потребления дискового пространства: поскольку пользователь не создает файлы core самостоятельно, и зачастую не удаляет их, установка этого параметра может предохранить его от выхода за пределы дисковых квот, если большая программа (например, emacs) создаст core файл.
cputime
Это максимальное количество времени CPU, потребляемого пользователем. Превысившие это время процессы будут уничтожены ядром.
Замечание: Это ограничение потребляемого времени CPU, а не процентов использования CPU, которые отображаются в некоторых полях top(1) и ps(1). Ограничения на них на время написания этого материала невозможны и такие ограничения практически бесполезны: компилятор -- вполне законное приложение -- иногда может легко использовать почти 100% CPU.
filesize
Это максимальный размер файла, который может обрабатываться пользователем. В отличие от дисковых квот, это ограничение применяется к отдельным файлам, а не ко всему набору принадлежащих пользователю файлов.
maxproc
Это максимальное число процессов, которые могут быть запущены пользователем. В это число включаются и консольные и фоновые процессы. По очевидным причинам, они не могут быть больше, чем системное ограничение, указываемое через переменную sysctl(8) kern.maxproc. Имейте ввиду, что установка слишком жестких ограничений может стать помехой работе пользователя: зачастую полезно входить в систему с нескольких консолей или использовать каналы. Некоторые задачи, такие как компиляция большой программы, также порождают множество процессов (например, make(1), cc(1) и другие препроцессоры).
memorylocked
Это максимальный объем памяти, блокировка которого может быть запрошена процессом (см. например mlock(2)). Некоторые критически важные для системы программы, такие как amd(8), блокируют память так, что при выгрузке они не создают системе дополнительных проблем.
memoryuse
Это максимальный объем памяти, которая может быть занята процессами. Он включает основную память и использование подкачки. Это ограничение не снимает все вопросы, связанные с использованием памяти, но для начала это подходящее ограничение.
openfiles
Это максимальное количество файлов, которые могут быть открыты процессами. В FreeBSD, файлы также используются для представления сокетов и каналов IPC; не устанавливайте слишком маленькое значение. Ограничение этого параметра, устанавливаемое для всей системы, определяется переменной sysctl(8) kern.maxfiles.
sbsize
Это ограничение потребляемого пользователем объема сетевой памяти, т.е. mbufs. Оно было введено как ответ на старые DoS атаки, при которых создавалось множество сокетов, но обычно может быть использовано и для ограничения сетевых соединений.
stacksize
Это максимальный размер, до которого может вырасти стек процесса. Сам по себе этот параметр не может ограничить размер используемой программой памяти, следовательно, его необходимо использовать вместе с другими ограничениями.
Существуют несколько других аспектов, которые необходимо учитывать при установке ограничений ресурсов. Ниже приведены некоторые общие подсказки, советы и различные комментарии.
Процессам, загружаемым при старте системы скриптами /etc/rc присваивается класс daemon.
Хотя /etc/login.conf, поставляемый с системой, это хороший источник подходящих значений для большинства ограничений, только вы, администратор, можете знать подходящие значения для вашей системы. Установка слишком слабых ограничений может повлечь злоупотребления системой, а установка слишком сильных ограничений может стать помехой производительности.
Пользователи X Window System (X11) возможно должны получить больше ресурсов, чем другие пользователи. X11 сама по себе потребляет много ресурсов, а также провоцирует пользователей на одновременный запуск большего количества программ.
Помните, что многие ограничения применяются к отдельным процессам, а не к пользователю вообще. Например, установка openfiles в 50 означает, что каждый процесс, запущенный пользователем, может открывать до 50 файлов. Таким образом, общее количество файлов, которые могут быть открыты пользователем, вычисляется как openfiles, помноженное на maxproc. Это также применимо к потребляемой памяти.
Маршрутизация
Правила маршрутизации определяют, куда отправлять IP-пакеты. Данные маршрутизации хранятся в одной из таблиц ядра. Вести таблицы маршрутизации можно статически или динамически. Статический маршрут — это маршрут, который задается явно с помощью команды route. Динамическая маршрутизация выполняется процессом-демоном (routed или gated), который ведет и модифицирует таблицу маршрутизации на основе сообщений от других компьютеров сети. Для выполнения динамической маршрутизации разработаны специальные протоколы: RIP, OSPF, IGRP, EGP, BGP и т. д.
Динамическая маршрутизация необходима в том случае, если у вас сложная, постоянно меняющаяся структура сети и одна и та же машина может быть доступна по различным интерфейсам (например, через разные Ethernet или SLIP интерфейсы). Маршруты, заданные статически, обычно не меняются, даже если используется динамическая маршрутизация.
Для персонального компьютера, подключаемого к локальной сети, в большинстве ситуаций бывает достаточно статической маршрутизации командой route. Прежде чем пытаться настраивать маршруты, просмотрите таблицу маршрутизации ядра с помощью команды netstat -n -r. Вы должны увидеть что-то вроде следующего:
rigon@ubuntu-comp:~$ netstat -n -r
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth1
Если таблица пуста, то вы увидите только заголовки столбцов. Тогда надо использовать route. С помощью команды route можно добавить или удалить один (за один раз) статический маршрут. Вот ее формат:
route [-f] операция [-тип] адресат шлюз [dev] интерфейс
Здесь аргумент операция может принимать одно из двух значений: add (маршрут добавляется) или delete (маршрут удаляется). Аргумент адресат может быть IP-адресом машины, IP-адресом сети или ключевым словом default . Аргумент шлюз — это IP-адрес компьютера, на который следует пересылать пакет (этот компьютер должен иметь прямую связь с вашим компьютером). Команда
route -f
удаляет из таблицы данные обо всех шлюзах. Необязательный аргумент тип принимает значения net или host . В первом случае в поле адресата указывается адрес сети, а во втором — адрес конкретного компьютера (хоста).
Как правило, бывает необходимо настроить маршрутизацию по упоминавшимся выше трем интерфейсам:
* локальный интерфейс (lo),
* интерфейс для платы Ethetnet (eth0),
* интерфейс для последовательного порта (PPP или SLIP).
Локальный интерфейс поддерживает сеть с IP-номером 127.0.0.1. Поэтому для маршрутизации пакетов с адресом 127…. используется команда:
route add -net 127.0.0.1 lo
Если у вас для связи с локальной сетью используется одна плата Ethernet, и все машины находятся в этой сети (сетевая маска 255.255.255.0), то для настройки маршрутизации достаточно вызвать:
route add -net 192.168.36.0 netmask 255.255.255.0 eth0
Если же вы имеете насколько интерфейсов, то вам надо определиться с сетевой маской и вызвать команду route для каждого интерфейса.
Поскольку очень часто IP-пакеты с вашего компьютера могут отправляться не в одну единственную сеть, а в разные сети (например, при просмотре разных сайтов в Интернете), то в принципе надо было бы задать очень много маршрутов. Очевидно, что сделать это было бы очень сложно, точнее просто невозможно. Поэтому решение проблемы маршрутизации пакетов перекладывают на плечи специальных компьютеров — маршрутизаторов, а на обычных компьютерах задают маршрут по умолчанию, который используется для отправки всех пакетов, не указанных явно в таблице маршрутизации. С помощью маршрута по умолчанию вы говорите ядру “а все остальное отправляй туда”. Маршрут по умолчанию настраивается следующей командой:
route add default gw 192.168.1.1 eth0
Опция gw указывает программе route, что следующий аргумент - это IP-адрес или имя маршрутизатора, на который надо отправлять все пакеты, соответствующие этой строке таблицы маршрутизации.
Вот немного теории с сайта linuxcenter.ru
А теперь пример из жизни
Имеются следующие интерфейсы /etc/network/interface
auto lo
iface lo inet loopback auto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255 auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255
Интерфейс eth0 это связь с локальной сетью состоящей из 20 подсетей 192.168.1.х-192.168.20.x
Интерфейс eth1 это связь с ADSL модемом с выходом в интернет. Так большинство запросов идут в Инет на этом интерфейсе прописываем шлюз (gateway 192.168.254.1) данный параметр указывает в системе шлюз по-умолчанию, обращаю внимание, что шлюз надо прописывать только на одном интерфейсе, иначе в системе появятся 2 маршрута по умолчанию и естно будет затупление в работе. С интернетом разобрались.Но требуется еще просматривать ресурсы локальной сети для этого надо выполнить вот эти команды:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
На этом примере маршрутизируются 3 подсети
Все эти команды и многие другие можно прописать в файлк /etc/interface в итоге получится следующее:
auto lo
iface lo inet loopbackauto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255
Ну вот и все по аналогии настраиваются любое кол-во маршрутов и сетевых интерфейсов.
---------------------------------------------------------------------------
http://www.windowsfaq.ru/content/view/88/37/
---------------------------------------------------------------------------
/etc/netstart -перегружа rc.conf
---------------------------------------------------------------------------
sysctl net.inet.ip.forwarding=1 включает маршрутизацию -пакеты из одной подсети в другую. если добавим в /etc/rc.conf gateway_enabled="YES" ето одно и тоже
За это отвечает параметр net.inet.ip.forwarding, посмотрим в какое значение он имеет:
[root@freebsd ~]# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
----------------------------------------------------------------------------
route add default 10.10.2.1 (идет через тот if который первый, 10.10.2.7 в моем случае)
route add -host 10.1.2.1/32 10.10.2.5 -iface 10.10.2.1
10.1.2.1 - куда мне надо
10.10.2.5 - откуда мне надо
10.1.2.1 - через что мне надо
------------------------------------------------------------------------------
plip0 - это параллельный порт.
lo0 - это интерфейс для работы с localhost адрес 127.0.0.1
tun0 - это тунельный интерфейс ppp
-------------------------------------------------------------------------------
Динамическая маршрутизация необходима в том случае, если у вас сложная, постоянно меняющаяся структура сети и одна и та же машина может быть доступна по различным интерфейсам (например, через разные Ethernet или SLIP интерфейсы). Маршруты, заданные статически, обычно не меняются, даже если используется динамическая маршрутизация.
Для персонального компьютера, подключаемого к локальной сети, в большинстве ситуаций бывает достаточно статической маршрутизации командой route. Прежде чем пытаться настраивать маршруты, просмотрите таблицу маршрутизации ядра с помощью команды netstat -n -r. Вы должны увидеть что-то вроде следующего:
rigon@ubuntu-comp:~$ netstat -n -r
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth1
Если таблица пуста, то вы увидите только заголовки столбцов. Тогда надо использовать route. С помощью команды route можно добавить или удалить один (за один раз) статический маршрут. Вот ее формат:
route [-f] операция [-тип] адресат шлюз [dev] интерфейс
Здесь аргумент операция может принимать одно из двух значений: add (маршрут добавляется) или delete (маршрут удаляется). Аргумент адресат может быть IP-адресом машины, IP-адресом сети или ключевым словом default . Аргумент шлюз — это IP-адрес компьютера, на который следует пересылать пакет (этот компьютер должен иметь прямую связь с вашим компьютером). Команда
route -f
удаляет из таблицы данные обо всех шлюзах. Необязательный аргумент тип принимает значения net или host . В первом случае в поле адресата указывается адрес сети, а во втором — адрес конкретного компьютера (хоста).
Как правило, бывает необходимо настроить маршрутизацию по упоминавшимся выше трем интерфейсам:
* локальный интерфейс (lo),
* интерфейс для платы Ethetnet (eth0),
* интерфейс для последовательного порта (PPP или SLIP).
Локальный интерфейс поддерживает сеть с IP-номером 127.0.0.1. Поэтому для маршрутизации пакетов с адресом 127…. используется команда:
route add -net 127.0.0.1 lo
Если у вас для связи с локальной сетью используется одна плата Ethernet, и все машины находятся в этой сети (сетевая маска 255.255.255.0), то для настройки маршрутизации достаточно вызвать:
route add -net 192.168.36.0 netmask 255.255.255.0 eth0
Если же вы имеете насколько интерфейсов, то вам надо определиться с сетевой маской и вызвать команду route для каждого интерфейса.
Поскольку очень часто IP-пакеты с вашего компьютера могут отправляться не в одну единственную сеть, а в разные сети (например, при просмотре разных сайтов в Интернете), то в принципе надо было бы задать очень много маршрутов. Очевидно, что сделать это было бы очень сложно, точнее просто невозможно. Поэтому решение проблемы маршрутизации пакетов перекладывают на плечи специальных компьютеров — маршрутизаторов, а на обычных компьютерах задают маршрут по умолчанию, который используется для отправки всех пакетов, не указанных явно в таблице маршрутизации. С помощью маршрута по умолчанию вы говорите ядру “а все остальное отправляй туда”. Маршрут по умолчанию настраивается следующей командой:
route add default gw 192.168.1.1 eth0
Опция gw указывает программе route, что следующий аргумент - это IP-адрес или имя маршрутизатора, на который надо отправлять все пакеты, соответствующие этой строке таблицы маршрутизации.
Вот немного теории с сайта linuxcenter.ru
А теперь пример из жизни
Имеются следующие интерфейсы /etc/network/interface
auto lo
iface lo inet loopback auto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255 auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255
Интерфейс eth0 это связь с локальной сетью состоящей из 20 подсетей 192.168.1.х-192.168.20.x
Интерфейс eth1 это связь с ADSL модемом с выходом в интернет. Так большинство запросов идут в Инет на этом интерфейсе прописываем шлюз (gateway 192.168.254.1) данный параметр указывает в системе шлюз по-умолчанию, обращаю внимание, что шлюз надо прописывать только на одном интерфейсе, иначе в системе появятся 2 маршрута по умолчанию и естно будет затупление в работе. С интернетом разобрались.Но требуется еще просматривать ресурсы локальной сети для этого надо выполнить вот эти команды:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
На этом примере маршрутизируются 3 подсети
Все эти команды и многие другие можно прописать в файлк /etc/interface в итоге получится следующее:
auto lo
iface lo inet loopbackauto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255
Ну вот и все по аналогии настраиваются любое кол-во маршрутов и сетевых интерфейсов.
---------------------------------------------------------------------------
http://www.windowsfaq.ru/content/view/88/37/
---------------------------------------------------------------------------
/etc/netstart -перегружа rc.conf
---------------------------------------------------------------------------
sysctl net.inet.ip.forwarding=1 включает маршрутизацию -пакеты из одной подсети в другую. если добавим в /etc/rc.conf gateway_enabled="YES" ето одно и тоже
За это отвечает параметр net.inet.ip.forwarding, посмотрим в какое значение он имеет:
[root@freebsd ~]# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
----------------------------------------------------------------------------
route add default 10.10.2.1 (идет через тот if который первый, 10.10.2.7 в моем случае)
route add -host 10.1.2.1/32 10.10.2.5 -iface 10.10.2.1
10.1.2.1 - куда мне надо
10.10.2.5 - откуда мне надо
10.1.2.1 - через что мне надо
------------------------------------------------------------------------------
plip0 - это параллельный порт.
lo0 - это интерфейс для работы с localhost адрес 127.0.0.1
tun0 - это тунельный интерфейс ppp
-------------------------------------------------------------------------------
вторник, 23 декабря 2008 г.
Обновляем порты
portsnap и portmaster - обновляемся правильно
В сети вы без труда найдете массу мануалов о том, как обновить софт во фряхе. Но вот беда - многие из них сегодня потеряли актуальность или вовсе несут в себе исключительно дизинформацию. Господа, порты cvsup'ом уже никто не тянет! Никто не обновляет программы заклинанием "cd /usr/ports/path/to && made deinstall && make reinstall". Ну, точнее, кое-кто, разумеется, тянет и обновляет %). Но делать так не надо.
https://forum.lissyara.su/pro-sajt-f14/stat-ya-ne-moya-portsnap-i-portmaster-obnovlyaemsy-t24655.html
*********************************************************************
Заставляем FreeBSD при установке портов сначала искать их на ближайшем/бесплатном/удобном (нужное подчеркнуть) сервере, а потом только уже на другом (официальном). Для этого в make.conf добавляем следующие строки:
cd /usr/ports/net/cvsup-without-gui
make install clean
В файл
/etc/make.conf
добавляем строки
MASTER_SITE_OVERRIDE=http://ftp.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp2.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp3.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp4.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp5.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp6.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp7.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp8.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.lucky.net/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
после установки копируем файл настройки и редактируем его (указываем в нем что брать и откуда)
cd /usr/share/examples/cvsup/
cp ports-supfile /root
cd /root
ee potrs-supfile
меняем зеркало на украинское
# Defaults that apply to all the collections
#
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=cvsup6.ua.FreeBSD.org
rehash
cvsup -g -L 2 /root/ports-supfile && cd /usr/ports && make fetchindex
(make fatchindex - качает файл индекса портов и розворачивает на локальной машине, намното быстрее чем сделать make index
--------------------------------------------------------------------------------
если чтото не получилось делаем Make clean - и все сначала
--------------------------------------------------------------------------------
Rehash – переиндексация
--------------------------------------------------------------------------------
sockstat | grep 21
--------------------------------------------------------------------------------
*****************
cp /usr/share/examples/cvsup/ports-supfile /root/ports(любое место)
ee /root/potrs
*default host=cvsup6.ua.FreeBSD.org правим так
csup -L 2 /root/ports-supfile обновляем
cd /usr/ports
make fetchindex
******************
В сети вы без труда найдете массу мануалов о том, как обновить софт во фряхе. Но вот беда - многие из них сегодня потеряли актуальность или вовсе несут в себе исключительно дизинформацию. Господа, порты cvsup'ом уже никто не тянет! Никто не обновляет программы заклинанием "cd /usr/ports/path/to && made deinstall && make reinstall". Ну, точнее, кое-кто, разумеется, тянет и обновляет %). Но делать так не надо.
https://forum.lissyara.su/pro-sajt-f14/stat-ya-ne-moya-portsnap-i-portmaster-obnovlyaemsy-t24655.html
*********************************************************************
Заставляем FreeBSD при установке портов сначала искать их на ближайшем/бесплатном/удобном (нужное подчеркнуть) сервере, а потом только уже на другом (официальном). Для этого в make.conf добавляем следующие строки:
cd /usr/ports/net/cvsup-without-gui
make install clean
В файл
/etc/make.conf
добавляем строки
MASTER_SITE_OVERRIDE=http://ftp.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp2.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp3.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp4.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp5.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp6.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp7.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
http://ftp8.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.lucky.net/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
после установки копируем файл настройки и редактируем его (указываем в нем что брать и откуда)
cd /usr/share/examples/cvsup/
cp ports-supfile /root
cd /root
ee potrs-supfile
меняем зеркало на украинское
# Defaults that apply to all the collections
#
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=cvsup6.ua.FreeBSD.org
rehash
cvsup -g -L 2 /root/ports-supfile && cd /usr/ports && make fetchindex
(make fatchindex - качает файл индекса портов и розворачивает на локальной машине, намното быстрее чем сделать make index
--------------------------------------------------------------------------------
если чтото не получилось делаем Make clean - и все сначала
--------------------------------------------------------------------------------
Rehash – переиндексация
--------------------------------------------------------------------------------
sockstat | grep 21
--------------------------------------------------------------------------------
*****************
cp /usr/share/examples/cvsup/ports-supfile /root/ports(любое место)
ee /root/potrs
*default host=cvsup6.ua.FreeBSD.org правим так
csup -L 2 /root/ports-supfile обновляем
cd /usr/ports
make fetchindex
******************
WebMin
Install webmin
Execute cd /usr/ports/sysutils/webmin
Execute make install clean
Execute cd /usr/local/lib/webmin
Execute ./setup.sh
You will have to answer some questions.
Where should logging be placed
What port number should webmin bind to
What username and password
Should SSL be used
Maby some other stuff
Default answers to any of these is good enough. I prefer using SSL.
Execute: ee /etc/rc.conf
Now add a line at the bottom that say: webmin_enable="YES"
Press ESC and chose alternative A to quit and another A to perform saving before quitting.Reboot your machine
Execute reboot
Now when you startup you have sshd and webmin enabled which in my case means that I can continue my configuration from the comfort of my MacBook.Updating webmin
With web browser point to https://machine-IP:webminportnr
Enter credentials
Unfold Webmin in the left menu
Click "upgrade webmin" (the upwards pointy icon)
Make sure that the "Latest version from www.webmin.com" option is selected and click "Upgrade webmin"
Take a break
If there are any modules that needs upgrading, you will be informed about that. Personally I always chose to upgrade those too.
Adding a user from webmin
Unfold System in the left menu
Click "Users and groups"
Somewhere around the top there should be a link called "Create a new user." Click it.
Enter whatever username you like
Enter whatever Real Name you like
(if you like) Choose /usr/local/bin/bash in the Shell option
Select "Normal password" and enter a password in the textbox
In the "Group Membership" area click option "Existing group" and enter "wheel" in the textbox.
Let everything else be as set by default
Press the "Create" button down at the bottom.
Now you can start a remote SSH session to your FreeBSD machine fromany other machine on your network.
-----------------------------------------------------------------------
поменять пароль на вебмин
/usr/local/lib/webmin/changepass.pl /usr/local/etc/webmin
-----------------------------------------------------------------------
Execute cd /usr/ports/sysutils/webmin
Execute make install clean
Execute cd /usr/local/lib/webmin
Execute ./setup.sh
You will have to answer some questions.
Where should logging be placed
What port number should webmin bind to
What username and password
Should SSL be used
Maby some other stuff
Default answers to any of these is good enough. I prefer using SSL.
Execute: ee /etc/rc.conf
Now add a line at the bottom that say: webmin_enable="YES"
Press ESC and chose alternative A to quit and another A to perform saving before quitting.Reboot your machine
Execute reboot
Now when you startup you have sshd and webmin enabled which in my case means that I can continue my configuration from the comfort of my MacBook.Updating webmin
With web browser point to https://machine-IP:webminportnr
Enter credentials
Unfold Webmin in the left menu
Click "upgrade webmin" (the upwards pointy icon)
Make sure that the "Latest version from www.webmin.com" option is selected and click "Upgrade webmin"
Take a break
If there are any modules that needs upgrading, you will be informed about that. Personally I always chose to upgrade those too.
Adding a user from webmin
Unfold System in the left menu
Click "Users and groups"
Somewhere around the top there should be a link called "Create a new user." Click it.
Enter whatever username you like
Enter whatever Real Name you like
(if you like) Choose /usr/local/bin/bash in the Shell option
Select "Normal password" and enter a password in the textbox
In the "Group Membership" area click option "Existing group" and enter "wheel" in the textbox.
Let everything else be as set by default
Press the "Create" button down at the bottom.
Now you can start a remote SSH session to your FreeBSD machine fromany other machine on your network.
-----------------------------------------------------------------------
поменять пароль на вебмин
/usr/local/lib/webmin/changepass.pl /usr/local/etc/webmin
-----------------------------------------------------------------------
воскресенье, 21 декабря 2008 г.
Собираем ядро
make cleandepend && make depend && make -j8 -B && make install && reboot
1.Для пересборки ядра должны быть установлены его исходные тексты.
Проверяем установлены ли исходники (без них не пересоберецца): /usr/home/alex/>cd /usr/src/ lsКогда исходные кодя ядра установлены, приступаем с правке файла конфигурации ядра.
/usr/src/sys/i386/conf/
make LINT выводит достурные опции для конфигурирования ядра
ee LINT
/usr/src/sys/i386/conf/>cp GENERIC MY_GENERIC # копируем ядро
ee MY_GENERIC
Если у Вашей машины конфигурация i386 - а это 80386, 80486, 80586 (первые пни), P-II, P-III, P-IV, AMD K5, AMD K6, AMD K6-II, AMD K6-III, AMD K7 (Duron, Athlon, Sempron) то делаете то же что и я. Если архитектура отличается - тогда в директории /usr/src/sys/ ищете архитектуру, которая у Вас и делаете там похожие действия :) Архитектуру можно посмотреть, после загрузки так: /usr/src/sys/i386/conf/>dmesg | grep CP
CPU: Intel Pentium III (792.22-MHz 686-class CPU)
Подробней про архитектуры можно узнать на www.freebsd.org или в файле /etc/defaults/make.conf. Вот мой файл конфигурации ядра: #
2. Пример конфигурации ядра
machine i386 | # по умолчанию в 7 не указан- описывает архитектуру РК (amd64, i386, sparc) но можна и без него | |
# | cpu I386_CPU | # процессор компьютера |
# | cpu I486_CPU | # процессор компьютера |
# | cpu I586_CPU | # процессор компьютера |
cpu I686_CPU | # процессор компьютера | |
# про процы подробней можно посмотреть LINT | ||
ident main_kernell | # идентификатор ядра | |
maxusers 0 | # Определяет количество дескрипторов в системе (0 - значит определяет "автопилот" | |
makeoptions DEBUG=-g | #опции отладки ядра (в жизни, вероятно не пригодится, но если поймаете глюк и захотите cообщить об этом разработчикам - то пригодится) | |
options IPFIREWALL | #встраиваем поддержку файрволла в ядро | |
options IPFIREWALL_VERBOSE | # вывод информации об отброшенных пакетах | |
options PFIREWALL_VERBOSE_LIMIT=100 | # ограничение, чтоб весь /var логами не засрали | |
options IPFIREWALL_FORWARD | # включаем поддержку перенаправления чтобы можно было сделать позрачный прокси-сервер TCP пакетов ядром | |
options IPDIVERT | #поддержка IP-маскарадинга | |
options DUMMYNET | #поддержка DUMMYNET (искуственное ограничение пропускной способности сети, может быть нужно если есть необходимость урезать канал одним и разжать другим компьютерам) | |
options TCP_DROP_SYNFIN | # Это нужно, чтобы сетевые сканеры не могли определять версию OS на сервере. Также нужно добавить в /etc/rc.conf строчку tcp_drop_synfin="YES" (хз работает ли ето в 7ке) | |
options MATH_EMULATE | #эмуляция mатеметического сопроцессора сейчас он есть во всех процах, поэтому не нужно | |
options INET | # поддержка сети, конкретно протокола TCP/IP (если у Вас машина без сети - можете смело убирать :)) | |
options INET6 | # Протокол IP версии IPv6 | |
options FFS | #Berkeley Fast Filesystem файловая система FreeBSD | |
options FFS_ROOT | файловая система FFS является фаловой системой ядра | |
options SOFTUPDATES | #Enable FFS soft updates support SoftUpdates - повышает скорость работы с файловой системой | |
options UFS_DIRHASH | #Improve performance on big directories если у Вас будут директории с миллионами файлов - то этот пункт нужен. Но на самом деле никто не знает будут, или нет... | |
options MFS | #Memory Filesystem файловая система памяти | |
options MD_ROOT | #MD is a potential root device корневой файловой системой может быть файловая система в памяти (нужно для бездисковых рабочих станций ) | |
options NFS | #Network Filesystem Сетевая файловая система - если будете строить сеть между фряхами - оно нужно | |
options NFS_ROOT | #NFS usable as root device, NFS required корневым разделом может быть ФС находящаяся на другом компе. Нужно, # опять-таки только бездисковым рабочим станциям | |
options MSDOSFS | #MSDOS Filesystem файловая система FAT12, FAT16 и FAT32. Если будете что-то таскать дискетками на виндовые машины и # обратно - нужно. если будете монтировать форточные ФС - тоже нужно. | |
options CD9660 | #ISO 9660 Filesystem файловая система CD-ROM дисков | |
options CD9660_ROOT | #CD-ROM usable as root, CD9660 required Корневым разделом может быть файловая система CD-ROM - опять таки для бездисковых рабочих станций | |
options PROCFS | #файловая система процессов | |
options COMPAT_43 | # Cовместимость с BSD 4.3 (отдельные приложения начинают себя неадекватно вести, без этого пункта) | |
options SCSI_DELAY=15000 | #Задержка при загрузке для того, чтобы SCSI-контроллер успел обнаружить все подключенные к нему устройства. для современныхвинтов и контроллеров - 5 секунд, хватает за глаза. Если у Вас есть другие устройства на SCSI-шине - то читайте маны, что шли с ними. | |
#options UCONSOLE | #Allow users to grab the console если иксов на машиен нету - то этот пункт и не нужен | |
#options USERCONFIG | #boot -c editor | |
#options VISUAL_USERCONFIG | #visual boot -c editor | |
#options KTRACE | #ktrace(1) support | |
options SYSVSHM | #SYSV-style shared memory чё-то там про разделяемую память как я понял, это нужно в первую очередь графическим программам, но на всякий случай оставляю | |
options SYSVMSG | #SYSV-style message queues | |
options SYSVSEM | #SYSV-style semaphores | |
options P1003_1B | #Posix P1003_1B real-time extensions Насчёт этого пункта нигде ничё нарыть не удалось, самая подробная инфа в LINT - это какие-то расширения для работы в режиме реального времени. | |
options _KPOSIX_PRIORITY_SCHEDULING | # ну и шедулер, для этого самого Real Time - только вот не вполне понятно, какой нафиг шедулер для реального времени вообще может быть... | |
options ICMP_BANDLIM | #Rate limit bad replies ограничение неверных ответов по ICMP | |
options KBD_INSTALL_CDEV | # install a CDEV entry in /dev для всяких клав USB-овых | |
options AHC_REG_PRETTY_PRINT | # Print register bitfields in debug output. Adds ~128k to driver. для отладки | |
options AHD_REG_PRETTY_PRINT | # Print register bitfields in debug output. Adds ~215k to driver. для отладки | |
# следующие две опции нужны для многопроцессорных систем | ||
options SMP | # Symmetric MultiProcessor Kernel | |
options APIC_IO | # Symmetric (APIC) I/O | |
device isa | # поддержка шины ISA - советую не удалять этот пункт, даже на самых современных компах, т.к. даже в них есть ситемный таймер, клава и прочие вещи, которые с рождения ИСОвые и такими навсегда и останутся :) | |
#device eisa | # Шина EISA - я её видел то пару раз,на 486 компах... | |
device pci | # поддержка шины PCI | |
Floppy drives | # флоппики | |
device fdc0 at isa? port IO_FD1 irq 6 drq 2 | # контроллер флопов | |
device fd0 at fdc0 drive 0 | # первый флоп | |
#device fd1 at fdc0 drive 1 | # второй флоп | |
# If you have a Toshiba with its Y-E Data PCMCIA floppy, # don't use the above line for fdc0 but the following one: # какой-то тошибовский флопповод, подрубающийся по PCMSIA (для буков?) #device fdc0 | ||
# ATA and ATAPI devices | # Контролеры IDE хардов | |
device ata0 at isa? port IO_WD1 irq 14 | # первый канал | |
device ata1 at isa? port IO_WD2 irq 15 | # второй канал | |
device ata | # ???????? | |
device atadisk | # ATA disk drives собственно поддержка ATA-хардов | |
device atapicd # ATAPI CDROM drives | # CDROM`ы подключаемые к ATA | |
#device atapifd | # ATAPI floppy drives флопповоды подключаемые к ATA контроллеру (первый раз о таких узнал именно из конфига ядра) | |
#device atapist | # ATAPI tape drives Стриммеры подключаемые по ATA | |
#options ATA_STATIC_ID | #Static device numbering статическая нумерация устройств (я вот думал, что она всегда статическая) | |
# SCSI Controllers | # SCSI-контроллеры - без комментариев | |
#device ahb | # EISA AHA1742 family | |
#device ahc | # AHA2940 and onboard AIC7xxx devices | |
#device ahd | # AHA39320/29320 and onboard AIC79xx devices | |
#device amd | # AMD 53C974 (Tekram DC-390(T)) | |
#device isp | # Qlogic family | |
#device mpt | # LSI-Logic MPT/Fusion | |
#device ncr | # NCR/Symbios Logic | |
#device sym | # NCR/Symbios Logic (newer chipsets) | |
#optionsSYM_SETUP_LP_PROBE_MAP=0x40 | # Allow ncr to attach legacy NCR devices when both sym and ncr are configured | |
#device adv0 at isa? | ||
#device adw | ||
#device bt0 at isa? | ||
#device aha0 at isa? | ||
#device aic0 at isa? | ||
#device ncv # NCR 53C500 | ||
#device nsp # Workbit Ninja SCSI-3 | ||
#device stg # TMC 18C30/18C50 | ||
# SCSI peripherals | # периферийное сказёвое оборудование (собственно диски, накопители на магнитной ленте, CD-ROM`ы) | |
#device scbus | # SCSI bus (required) | |
#device da | # Direct Access (disks) | |
#device sa | # Sequential Access (tape etc) | |
#device cd | # CD | |
#device pass | # Passthrough device (direct SCSI access) | |
# RAID controllers interfaced to the SCSI subsystem | # сказёвые рэйды | |
#device asr | # DPT SmartRAID V, VI and Adaptec SCSI RAID | |
#device dpt | # DPT Smartcache - See LINT for options! | |
#device iir | # Intel Integrated RAID | |
#device mly | # Mylex AcceleRAID/eXtremeRAID | |
#device ciss | # Compaq SmartRAID 5* series | |
#device twa | # 3ware 9000 series PATA/SATA RAID | |
# RAID controllers | # рэйд-контроллеры | |
#device aac | # Adaptec FSA RAID, Dell PERC2/PERC3 | |
#device aacp | # SCSI passthrough for aac (requires CAM) | |
#device ida | # Compaq Smart RAID | |
#device ips | # IBM/Adaptec ServeRAID | |
#device amr | # AMI MegaRAID | |
#device mlx | # Mylex DAC960 family | |
#device pst | # Promise Supertrak SX6000 | |
#device twe | # 3ware Escalade | |
# atkbdc0 | controls both the keyboard and the PS/2 mouse | |
device atkbdc0 at isa? port IO_KBD | # контроллер клавы | |
device atkbd0 at atkbdc? irq 1 flags 0x1 | # клава | |
device psm0 at atkbdc? irq 12 | # PS/2 мышь | |
device vga0 at isa? | # Ну, это, куда моник прикручивать :) | |
# splash screen/screen saver | ||
#pseudo-device splash | ||
# syscons is the default console driver, resembling an SCO console | # системная консоль - | |
device sc0 at isa? flags 0x100 | # без этого пункта всё работает, но на локальном мониторе ничего не показывает | |
# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver | # это для всяких иксов нужно | |
#device vt0 at isa? | ||
#options XSERVER | # support for X server on a vt console | |
#options FAT_CURSOR | # start with block cursor If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines | |
#options PCVT_SCANSET=2 | IBM keyboards are non-std | |
device agp | # support several AGP chipsets Поддержка шины AGP | |
# Floating point support | do not disable. # какой-то драйвер расширений для математического сопроцессора | |
device npx0 at nexus? port IO_NPX irq 13 | ||
# Power management support | (see LINT for more options # управление питанием (ну, вот, зачем серверу засыпать?) | |
#device apm0 at nexus? disable flags 0x20 | # Advanced Power Management | |
PCCARD (PCMCIA) | support | |
#device card | ||
#device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000 | ||
#device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable | ||
# Serial (COM) ports | ||
device sio0 at isa? port IO_COM1 flags 0x10 irq 4 | ||
device sio1 at isa? port IO_COM2 irq 3 | ||
#device sio2 at isa? disable port IO_COM3 irq 5 | ||
#device sio3 at isa? disable port IO_COM4 irq 9 | ||
# Parallel port | ||
#device ppc0 at isa? irq 7 | ||
#device ppbus | # Parallel port bus (required) | |
#device lpt | # Printer | |
#device plip | # TCP/IP over parallel | |
#device ppi | # Parallel port interface device | |
#device vpo | # Requires scbus and da | |
# PCI Ethernet NICs | ||
#device de | # DEC/Intel DC21x4x (``Tulip'') | |
#device em | # Intel PRO/1000 adapter Gigabit Ethernet Card # (``Wiseman'') | |
#device txp | # 3Com 3cR990 (``Typhoon'') | |
#device vx | # 3Com 3c590, 3c595 (``Vortex'') | |
# PCI Ethernet NICs that use the common MII bus controller code. | # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! | |
#device miibus | # MII bus support Вообще, MII bus нужен для всех современных сетевух, поэтому его комментировать не надо. у меня сетевухи исовые, потому закомментил. | |
#device dc | # DEC/Intel 21143 and various workalikes | |
#device fxp | # Intel EtherExpress PRO/100B (82557, 82558) | |
#device pcn | # AMD Am79C97x PCI 10/100 NICs | |
#device rl | # RealTek 8129/8139 | |
#device sf | # Adaptec AIC-6915 (``Starfire'') | |
#device sis | # Silicon Integrated Systems SiS 900/SiS 7016 | |
#device ste | # Sundance ST201 (D-Link DFE-550TX) | |
#device tl | # Texas Instruments ThunderLAN | |
#device tx | # SMC EtherPower II (83c170 ``EPIC'') | |
#device vr | # VIA Rhine, Rhine II | |
#device wb | # Winbond W89C840F | |
#device xl | # 3Com 3c90x (``Boomerang'', ``Cyclone'') | |
#device bge | # B roadcom BCM570x (``Tigon III'') | |
# ISA Ethernet NICs. | ||
# 'device ed' requires 'device miibus' | ||
#device ed0 at isa? disable port 0x280 irq 10 iomem 0xd8000 | ||
#device ex | ||
#device ep | ||
#device fe0 at isa? disable port 0x300 | ||
# Xircom Ethernet | ||
#device xe | ||
# PRISM I IEEE 802.11b wireless NIC. | ||
#device awi | ||
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really | ||
# exists only as a PCMCIA device, so there is no ISA attachment needed | ||
# and resources will always be dynamically assigned by the pccard code. | ||
#device wi | ||
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will | ||
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP | ||
# mode (the factory default). If you set the switches on your ISA | ||
# card for a manually chosen I/O address and IRQ, you must specify | ||
# those parameters here. device an | ||
# The probe order of these is presently determined by i386/isa/isa_compat.c. | ||
#device ie0 at isa? disable port 0x300 irq 10 iomem 0xd0000 | ||
#device le0 at isa? disable port 0x300 irq 5 iomem 0xd0000 | ||
device lnc0 at isa? disable port 0x280 irq 10 drq 0 | ||
#device cs0 at isa? disable port 0x300 | ||
#device sn0 at isa? disable port 0x300 irq 10 | ||
# Pseudo devices - the number indicates how many units to allocate. | ||
pseudo-device loop | # Network loopback сетевая петля | |
pseudo-device ether # Ethernet support | # поддержка Ethernet | |
#pseudo-device sl 1 | # Kernel SLIP | |
#pseudo-device ppp 1 | # Kernel PPP | |
#pseudo-device tun | # Packet tunnel. | |
pseudo-device pty | # Pseudo-ttys (telnet etc) псевдо консоли (ssh, telnet) | |
#pseudo-device md | # Memory "disks" | |
#pseudo-device gif | # IPv6 and IPv4 tunneling | |
#pseudo-device faith 1 | # IPv6-to-IPv4 relaying (translation) | |
# The `bpf' pseudo-device enables the Berkeley Packet Filter. | # Be aware of the administrative consequences of enabling this! | |
pseudo-device bpf | #Berkeley packet filter псевдо-устройство, используется программами подсчёта траффика, сетевыми сканерами... | |
# USB support | ||
#device uhci | # UHCI PCI->USB interface | |
#device ohci | # OHCI PCI->USB interface | |
#device usb | # USB Bus (required) | |
#device ugen | # Generic | |
#device uhid | # "Human Interface Devices" | |
#device ukbd | # Keyboard | |
#device ulpt | # Printer | |
#device umass | # Disks/Mass storage - Requires scbus and da | |
#device ums | # Mouse | |
#device uscanner | # Diamond Rio MP3 Player USB Ethernet, requires mii | |
#device urio | ||
#device aue | # ADMtek USB ethernet | |
#device axe | # ASIX Electronics USB ethernet | |
#device cue | #CATC USB ethernet | |
#device kue | # Kawasaki LSI USB ethernet | |
# FireWire support | ||
#device firewire # FireWire bus code | ||
#device sbp | # SCSI over FireWire (Requires scbus and da) | |
#device fwe | #Ethernet over FireWire (non-standard!) |
Также были добавлены несколько строк мною - для поддержки IPFW и ipforward. /usr/src/sys/i386/conf/>cd ../../../
/usr/src/>make buildkernel KERNCONF=main_kernell.2005-26-11 && \
make installkernel KERNCONF=main_kernell.2005-26-11
Ядро стало меньше почти втрое. Перезагружаемся командой shutdown -r now, и проверяем всё ли работает нормально.
Теперь рассмотрим вариант, что у вас что-то неполучилось. В простых случаях, например, не работает сеть - надо просто изменить конфиг и пересобрать ядро. Для этого можно и локально поработать недолго :) В более сложном варианте - фря не грузится вообще - такое вполне возможно, если Вы на горячую руку ампутировали что-то нужное - например подержку SCSI-контроллера на котором висят винты, или вообще ампутировали файловую систему из ядра :) Бывает и такое. Тоже не надо терять голову, проблема решается сравнительно просто - надо загрузиться со старым ядром и заново пересобрать новое. На моменте загрузки, когда идёт 10-секундный обратный отсчёт времени (у меня, кстати, 2-х секундный :)) надо сделать то, что он просит - нажать любую клавищу, кроме [Enter], я, например, жму 'Esc': Hit [Enter] to boot immediately, or any other kay for command prompt.
Booting [kernel] in 8 seconds...
Type '?' for a list of commands, 'help' for more detailed help.
ok _
Как итог мы получаем приглашение загрузчика. Советую ознакомится со списком команд - их совсем мало, и времени это немного займёт. Теперь, выгружаем новое ядро из памяти, загружаем туда GENERIC (или Ваше старое ядро, если на машине какой-то нестандартный набор железа), и загружаем ОС: ok unload
ok load kernel.GENERIC
/kernel.GENERIC text=0x3418b5 data=0x4c0e0+0x34af4 syms=[0x4+0x474b0+0x4+0x5037c]
ok boot
После загрузки собираем новое ядро и снова пробуем.
---------------------------------------------------------------
machine i386 добавить(по умолчанию в 7 не указан) описывает архитектуру РК (amd64, i386, sparc) но можна и без него
------------------------------------------------------------------------
Всё прошло. Оказалось , что в 7.0 realese не надо комментировать в ядре IPv6 и потом в firewall некоторые опции видать уже встроены
(дос атак)
----------------------------------------------------------------------
config GENERIC - проверка на синтаксис вновь заполненого ядра
----------------------------------------------------------------------
после всех изменений, переходим в каталог /usr/src и выполняем следующую команду (если вы компилируете на многопроцессорной машине, имеет смысл выполнять make с ключом -j, где n – количество процессоров:)
#make -j4 buildkernel KERNCONF=kern1 && make installkernel KERNCONF=kern1
Параметр j4 означает собирать в 4 потока, то есть значительно быстрее. Если у вас не Pentium3, а хотя бы какой-нибудь dualcore тогда применение этого параметра будет целесообразны
Если вдруг новое ядро не загрузилось, тогда делаем так. При загрузке появляется 10 секундная пауза, выбираем пункт 6 и делаем такие действия
OK unload kernel_name
OK load /boot/kernel.old/kernel
OK boot
, где kernel_name - имя нового ядра при сборке
Возможно на некоторых системах вторая строчка может показывать сообщение, что ядро не найдено. Тогда можно попробовать сделать так.
OK unload kernel_name
boot /boot/kernel.old/kernel
======
unload
boot kernel.old
Таким образом ты загрузишь предыдущую версию системы. Исправь ошибки и повтори процесс установки нового ядра. Обычно со второго раза все получается =) Если же нет то загрузи GENERIC-ядро (вместо boot kernel.old, напиши boot kernel.GENERIC). Но ты особо не огорчайся, если оно не хочет компилится/работать/etc, мне пришлось перестраивать ядро 6 раз, чтобы добиться конфигурации "под себя" и "как мне удобно и нужно" =)
Подписаться на:
Сообщения (Atom)