iptables

title: iptables(8)

text:
# iptables(8)

## ИМЯ
iptables - инструмент администрирования фильтра пакетов IPv4 и NAT

## ОБЗОР
iptables [-t таблица] -[AD] цепочка описание-правил [опции]

iptables [-t таблица] -I цепочка [номер-правила] описание-правил [опции]

iptables [-t таблица] -R цепочка номер-правила описание-правил [опции]

iptables [-t таблица] -D цепочка номер-правила [опции]

iptables [-t таблица] -[LFZ] [цепочка] [опции]

iptables [-t таблица] -N цепочка

iptables [-t таблица] -X [цепочка]

iptables [-t таблица] -P цепочка цель [опции]

iptables [-t таблица] -E старое-имя-цепочки новое-имя-цепочки

## ОПИСАНИЕ
Iptables используется для установки, настройки и просмотра таблиц правил фильтрации IP-пакетов в ядре Linux.

Каждая таблица содержит несколько предопределённых цепочек и может содержать цепочки, определённые пользователем. Каждая цепочка - это список правил, которые могут воздействовать на множество пакетов. Каждое правило определяет, какие действие произвести с пакетами, на которые оно действует. Эти действия называются целью, целью может быть и переход на другую (определённую пользователем) цепочку в этой же таблице.

## ЦЕЛИ
Правило брандмауэра (межсетевого экрана) определяет критерии для пакета и цели. Если пакет не попадает под действие правила, проверяется следующее правило в цепочке; если попадает - проверяется правило, указанное в цели, которая может быть именем новой цепочки или одно из специальных целей: ACCEPT, DROP, QUEUE или RETURN.

ACCEPT принять (пропустить далее) пакет DROP проигнорировать (отбросить) пакет. QUEUE передать пакет в адресное пространство пользователя (получение пакета пользовательским процессом зависит от обработчика очереди; в ядрах 2.4.x и 2.6.x до 2.6.13 использовался обработчик ip_queue; в ядрах начиная с 2.6.14 появился дополнительный обработчик nfnetlink_queue; в этом случае пакеты с целью QUEUE отправляются очереди номер 0; см. также цель NFQUEUE ниже по тексту). RETURN остановить применение правил этой цепочки и передать пакет следующему правилу предыдущей (вызывающей) цепочки. Если достигается конец встроенной (предопределённой) цепочки или в ней к пакету применяется правило с целью RETURN, то окончательное действие над пакетом (цель) определяется стратегией (политикой) цепочки.

## ТАБЛИЦЫ
Существует три независимых таблицы (какие именно таблицы присутствуют в данный момент -- зависит от конфигурации ядра и наличия его модулей).

-t, --table таблица

Задаёт таблицу, к которой будет применена команда. Если ядро скомпилировано с автоматической загрузкой модулей, то при необходимости будет загружен модуль, соответствующий таблице. Итак, таблицы:

filter:

Таблица используемая по-умолчанию (если опция -t не задана). Эта таблица содержит предопределённые цепочки INPUT (для входящих пакетов - направленных в локальные сокеты), FORWARD (для проходящих пакетов) и OUTPUT (для исходящих пакетов - сгенерированных в локальной системе).

nat:

Эта таблица используется, когда встречается пакет, устанавливающий новое соединение. Она содержит три предопределённых цепочки: PREROUTING (для изменения входящих пакетов), OUTPUT (для изменения локально сгенерированных пакетов перед их отправлением) и POSTROUTING (для изменения всех исходящих пакетов).

mangle:

Эта таблица используется для специальных изменений пакетов. Она содержала две предопределённые цепочки в ядрах до версии 2.4.17: PREROUTING (для изменения входящих пакетов до их перенаправления-маршрутизации) и OUTPUT (для изменения локально сгенерированных пакетов перед их маршрутизацией). Начиная с ядер версии 2.4.18, включены ещё три другие предопределённые цепочки: INPUT (для изменения входящих пакетов), FORWARD (для изменения проходящих пакетов) и POSTROUTING (для изменения исходящих пакетов).

raw:

Используется преимущественно для создания исключений в слежении за соединениями совместно с целью NOTRACK. Для неё в netfilter сделаны специальные вставки, имеющие высший приоритет, и поэтому вызываемые до ip_conntrack и всех других таблиц. В таблице имеются следующие предопределённые цепочки: PREROUTING (для пакетов приходящих из сетевых интерфейсов) OUTPUT (для пакетов генерируемых локальными процессами)

## ОПЦИИ
Опции iptables могут быть разделены на несколько групп.

### КОМАНДЫ
Эти опции определяют действие, выполняемое в данном сеансе работы программы. В командной строке может быть указана только одна из этих опций, если противоположное явно не указано в описании. Длинные команды можно сокращать до первых букв, но их должно быть достаточно, чтобы программа могла однозначно идентифицировать команду.

-A, --append цепочка определение-правила

Добавить одно или несколько правил в конец указанной цепочки. Если имя источника и/или стока (назначения) соответствует нескольким адресам, правило будет добавлено для всех возможных комбинаций адресов.

-D, --delete цепочка определение-правила

-D, --delete цепочка номер-правила

Удалить одно или несколько правил из указанной цепочки. Существует две версии этой команды: правило может быть указано через его номер в цепочке (счёт первого правила начинается с 1) или через соответствие определения правила.

-I, --insert цепочка [номер-правила]

определение-правила" В указанной цепочке вставить одно или более правил в позицию заданную номером. Так, если указан номер 1, правило или правила будут вставлены в начало цепочки. Это подразумеваемая позиция, если номер не указан.

-R, --replace цепочка номер-правила определение-правила

Заменить правило в указанной цепочке. Если имена источника и/или стока соответствуют нескольким адресам, команда не будет выполнена с сообщением об ошибке. Правила нумеруются с 1.

-L, --list [цепочка]

Показать все правила в выбранной цепочке. Если цепочка не указана, то команда применяется ко всем цепочкам. Как и всякая другая команда iptables, она воздействует на указанную таблицу (filter, если таблица не указана), к примеру следующая команда выводит список правил NAT:

```
 iptables -t nat -n -L
```

Обратите внимание на опцию -n которая часто используется для отключения (медленного) определения имён DNS. Также можно указать опцию -Z -Z (zero), в этом случае автоматически произойдёт перечисление правил цепочки и обнуление её счётчиков. Вид результата зависит от других аргументов. Самый детальный результат может быть получен так:

```
 iptables -L -v
```

-F, --flush [цепочка]

Сбросить выбранную цепочку (все цепочки в таблице, если ни одна не указана). Это эквивалентно удалению по одному всех правил.

-Z, --zero [цепочка]

Обнулить счётчики количества пакетов и байтов во всех или указанной цепочке. Можно также указать -L, --list чтобы отобразить значения счётчиков непосредственно перед их обнулением (см. выше).

-N, --new-chain цепочка

Создать новую, определённую пользователем цепочку с заданным именем. В момент создания цепочки не должно быть уже существующих целей с указанным именем.

-X, --delete-chain [цепочка]

Удалить цепочку, определённую пользователем. При этом не должно быть ссылок на удаляемую цепочку. Если такие ссылки есть, необходимо сначала удалить или изменить правила, ссылающиеся на удаляемую цепочку. Если цепочка не указана, из таблицы будут удалены все цепочки кроме встроенных.

-P, --policy цепочка цель

Определить стратегию для цепочки. Допустимые цели описаны в разделе ЦЕЛИ настоящего документа. Стратегия может быть задана только для встроенных цепочек и не может быть задана для цепочек определённых пользователем.

-E, --rename-chain старое-имя новое-имя

Переименовать цепочку, определённую пользователем. Эта команда не изменяет структуру таблицы и используется только в косметических целях.

-h

Подсказка. Выдаёт очень короткое описание синтаксиса команд.

### ПАРАМЕТРЫ
Следующие параметры предназначены для формирования правил (используются в командах add, delete, insert, replace и append).

-p, --protocol [!] протокол

Сетевой протокол применяемого правила или проверяемого пакета. Допустимые значения: tcp, udp, icmp, all. Также можно указывать в виде числа (соответствующего одному из перечисленных ил иному протоколу). Названия протоколов также можно брать из файла /etc/protocols. Знак "!" перед названием протокола инвертирует результат теста. Число 0 эквивалентно all. Значение all соответствует всем протоколами и используется если данный параметр опущен.

-s, --source [!] адрес[/маска]

Адрес источника. Адресом может быть сетевое имя, имя хоста (не рекомендуем указывать имена хостов, разрешаемые через запросы к удалённым DNS), диапазон IP-адресов (с маской через слэш) или одиночный IP-адрес. Маской может быть сетевая маска или число, соответствующее количеству определяющих разрядов в сетевой маске. Например, маска 24 эквивалентна 255.255.255.0. Знак "!" перед спецификацией адреса инвертирует результат теста. Опция --src является псевдонимом данного параметра.

-d, --destination [!] адрес[/маска]

Адрес цели. Синтаксис аналогичен синтаксису параметра -s Опция --dst является псевдонимом данного параметра.

-j, --jump цель

Определяет цель правила; т.е., что делать, когда пакет попадает под условия правила. Целью может быть цепочка, определённая пользователем (отличная от цепочки правила), одна из встроенных целей, определяющая окончательное действие над пакетом, или расширение (см. раздел РАСШИРЕНИЯ далее по тексту). Если эта опция не задана в правиле (и ключ -g также не использован), то правило не будет применяться, но счётчик количества применений правила будет увеличен.

-g, --goto цепочка

Продолжить обработку в цепочке, определённой пользователем. В отличие от опции --jump, после возврата из вызванной цепочки, применение правил будет продолжено не в текущей цепочке, а в той цепочке, которая вызвала текущую через --jump.

-i, --in-interface [!] имя

Имя интерфейса, через который должен быть получен обрабатываемый пакет (только для пакетов входящих в цепочки INPUT, FORWARD и PREROUTING ). Использование аргумента "!" перед именем интерфейса инвертирует результат теста. Если имя интерфейса оканчивается на "+", то это означает любой интерфейс, имя которого начинается с указанного имени. Если эта опция опущена, при обработке пакета интерфейс, с которого он был получен, не учитывается.

-o, --out-interface [!] имя

Имя интерфейса, через который отправляется обрабатываемый пакет (только для пакетов входящих в цепочки FORWARD, OUTPUT и POSTROUTING ). Использование аргумента "!" перед именем интерфейса инвертирует результат теста. Если имя интерфейса оканчивается на "+", то это означает любой интерфейс, имя которого начинается с указанного имени. Если эта опция опущена, при обработке пакета интерфейс, с которого он был получен, не учитывается.

[!] -f, --fragment

Означает, что это правило будет применяться ко второму и последующим фрагментам фрагментированного пакета. Так как у фрагмента невозможно определить номер порта источника или цели, равно как и тип ICMP, такие пакеты не обрабатываются правилами, содержащими номера портов или тип ICMP. Если перед флагом -f указан "!", то правило будет применяться только к первому фрагменту или к нефрагментированному пакету.

-c, --set-counters число-пакетов число-байт

Позволяет инициализировать в правиле счётчики пакетов и байтов (при выполнении операций INSERT, APPEND, REPLACE ).

### ПРОЧИЕ ОПЦИИ
Имеются следующие дополнительные опции:

-v, --verbose

Увеличить подробность сообщений. При указании её с командой list будет выводиться имя интерфейса, параметры правил и маски TOS. Также выводятся счётчики ("K", "M", "G" соответствуют множителям 1000, 1 000 000 и 1 000 000 000; см. -x ). Если ключ используется с командами --append, --insert, --delete или --replace, то будет выведен подробный отчёт о произведенной операции.

-n, --numeric

Выводить IP-адреса и номера портов в числовом виде предотвращая попытки преобразовать их в символические имена.

-x, --exact

Для всех чисел в выходных данных выводить их точные значения без округления и без использования множителей K, M, G. Этот ключ используется только с командой -L и не применим с другими командами.

--line-numbers

Режим вывода номеров строк при отображении списка правил командой --list. Номер строки соответствует позиции правила в цепочке.

--modprobe=команда

Команда загрузки модулей ядра (при добавлении правил в цепочку). Может использоваться в случае, когда модули ядра находится вне стандартного пути поиска.

## РАСШИРЕНИЯ МЕХАНИЗМА ТЕСТИРОВАНИЯ
Возможности тестирования пакетов расширяются через модули. Последние загружаются либо автоматически при указании -p / --protocol , либо явно при указании имени модуля через -m / --match . После загрузки модуля становятся доступными дополнительные опции командной строки, в зависимости от модуля. Справку по новым ключам можно получить с помощью ключа -h / --help . Допустимо указание нескольких модулей. Результаты тестирования, выдаваемые модулем, обычно можно инвертировать указав ! перед его именем. В базовую поставку входят следующие модули.

### account
Вести учёт трафика для всех хостов в определённой подсети (по маске).

Возможности:

- подробная (один счётчик на протокол - TCP/UDP/IMCP/Прочие) и краткая статистика

- одно правило iptables для всех хостов в определённой подсети (по маске).

- загрузка/сохранение счётчиков (посредством записей procfs)

--aaddr сеть/маска

Подсеть, для которой следует вести статистику.

--aname имя

Имя таблицы для данной статистики. По умолчанию - DEFAULT.

--ashort

Не разделять учёт по протоколам.

Пример использования:

Вести учёт трафика из/в сеть 192.168.0.0/24 в таблице mynetwork:

\# iptables -A FORWARD -m account --aname mynetwork --aaddr 192.168.0.0/24

Вести учёт трафика WWW-сервера из/в сеть 192.168.0.0/24 в таблице mywwwserver:

\# iptables -A INPUT -p tcp --dport 80

-m account --aname mywwwserver --aaddr 192.168.0.0/24 --ashort

\# iptables -A OUTPUT -p tcp --sport 80

-m account --aname mywwwserver --aaddr 192.168.0.0/24 --ashort

Снять показания счётчиков:

\# cat /proc/net/ipt_account/mynetwork # cat /proc/net/ipt_account/mywwwserver

Установить показания счётчиков:

\# echo "ip = 192.168.0.1 packets_src = 0" > /proc/net/ipt_account/mywwserver

Веб-страница:

http://www.barbara.eu.org/~quaker/ipt_account/

### addrtype
Данный модуль тестирует пакеты по типу адреса. Точное определение конкретного "типа адреса" зависит от соответствующего протокола третьего уровня.

Имеются следующие типы адресов:

UNSPEC

неопределённый адрес (0.0.0.0) UNICAST адрес для конкретного устройства LOCAL локальный адрес BROADCAST широковещательный адрес ANYCAST адрес для любого устройства MULTICAST адрес для нескольких устройств BLACKHOLE адрес "в никуда" UNREACHABLE недоступный адрес PROHIBIT запрещённый адрес THROW не описан NAT не описан XRESOLVE не описан

--src-type тип

Исходный адрес должен иметь указанный тип

--dst-type тип

Целевой адрес должен иметь указанный тип

### ah
Этот модуль тестирует по последовательным периферийным интерфейсам (SPI) в аутентификационном заголовке пакетов IPsec.

--ahspi [!] spi[:spi]

### childlevel
Экспериментальный модуль. Он тестирует по факту принадлежности пакета к основному соединению непосредственно или через дочерние соединения. Например, большинство пакетов принадлежат к основному соединению непосредственно (уровень 0). Данные FTP - дочернему (уровень 1). Уровень может быть сколь угодно большим.

--childlevel [!] уровень

### comment
Позволяет добавлять комментарии (до 256 символов) в правила.

--comment комментарий

Пример:

iptables -A INPUT -s 192.168.0.0/16 -m comment --comment "A privatized IP block"

### condition
Результат теста совпадает со значением в соответствующем файле /proc - 0 или 1.

--condition [!] имя-файла

Выдать результат теста из /proc/net/ipt_condition/имя-файла

### connbytes
Результат теста будет зависеть от количества байт или пакетов, переданных на данный момент (в обоих или одном из направлений), или по среднему числу байт, приходящихся на пакет.

Под каждый из счётчиков отводится 64 бита, поэтому их переполнение практически невозможно.

Обычно данный модуль используется для уменьшения приоритета долгих загрузок.

Статистику по трафику соединений можно просмотреть в файле /proc/net/ip_conntrack, для обращения к ней воспользуйтесь ctnetlink

[!] --connbytes мин:[макс]

Результат теста будет положительным для пакетов соединения через которое принято пакетов/байтов больше первого числа, и меньше второго (если оно указано). Также первое число может выступать нижней границей для среднего размера пакета. "!" инвертирует результат.

--connbytes-dir [original|reply|both]

Какие пакеты учитывать (свои, ответные или все)

--connbytes-mode [packets|bytes|avgpkt]

Отслеживаемый показатель - число пакетов, байтов или средний размер всех полученных пакетов (в байтах). Если в предыдущей опции указано both, а в данной - avgpkt, и данные передаются (преимущественно) в одном направлении (например, HTTP), средний размер пакета будет приблизительно в два раза меньше размера пакетов несущих данные.

Пример:

iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ...

### connlimit
Позволяет ограничить число одновременных соединений TCP для одного IP-адреса (клиента) либо блока адресов.

[!] --connlimit-above n

Выдавать положительный результат если число tcp-соединений (не) больше n

--connlimit-mask биты

Группировать хосты по указанной маске

Примеры:

\# допускать не больше 2 соединений telnet с одного хоста

iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT

\# то же самое:

iptables -A INPUT -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT

\# ограничить число одновременных запросов http до 16 на подсеть класса C (24

первых разряда) iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT

### connmark
Этот модуль позволяет использовать в правилах проверку значений маркеров соединения, установленных с помощью операции (цели) CONNMARK (см. ниже).

--mark маркер[/маска]

Значение маркера соединения, при котором выполняется условие. Если указана маска, она накладывается (операция поразрядного И) на значение маркера соединения перед проверкой условия.

### connrate
Выдаёт результат теста на основе текущей скорости передачи данных по соединению.

--connrate [!] [мин]:[макс]

Выдавать положительный результат если текущая скорость находится в указанных рамках. Указание "!" перед аргументом обращает смысл последнего.

### conntrack
Этот модуль при использовании совместно с компонентом мониторинга соединений предоставляет более широкие сведения о состоянии соединения, чем "state". Модуль доступен если сборка iptables проводилась с ядром, имеющим возможности требуемые для модуля.

--ctstate состояния

Список состояний соединения через запятую, при которых результат будет положительным. Возможные состояния: INVALID - пакет не связан с каким-либо известным соединением, ESTABLISHED - пакет связан с соединением, по которому уже проходили пакеты в обоих направлениях, NEW - пакет инициирует новое соединение, либо связан с соединением, по которому ещё не проходили пакеты в обоих направлениях , RELATED - пакет инициирует новое соединение, но также связан с уже существующим соединением, например при передаче данных по FTP или сообщении об ошибке ICMP, SNAT - виртуальное состояние, положительный результат выдаётся если исходный адрес источника отличен от адреса, который должен получить ответ, DNAT - виртуальное состояние, положительный результат выдаётся если исходный адрес получателя отличен от адреса отправителя ответа,

--ctproto протокол

Проверяет принадлежность пакета к протоколу, указанному номером или символьным именем.

--ctorigsrc [!] адрес[/маска]

Проверяет соответствие исходного (нетранслированного) адреса отправителя указанному адресу или диапазону адресов.

--ctorigdst [!] адрес[/маска]

Проверяет соответствие исходного (нетранслированного) адреса получателя указанному адресу или диапазону адресов.

--ctreplsrc [!] адрес[/маска]

Проверяет соответствие адреса отправителя отклика указанному адресу или диапазону адресов.

--ctrepldst [!] fIадрес[/маска]

Проверяет соответствие адреса получателя отклика указанному адресу или диапазону адресов.

--ctstatus [NONE|EXPECTED|SEEN_REPLY|ASSURED][,...]

Проверяет соответствие пакета одному или группе внутренних состояний conntrack.

--ctexpire time[:time]

Проверяет соответствие оставшегося для пакета времени жизни заданному значению или диапазону.

### dccp
--source-port,--sport [!] порт[:порт]

--destination-port,--dport [!] порт[:порт]

--dccp-types [!] типы-пакетов

Тип пакета DCCP должен быть одним из перечисленных (через запятую) Возможные типы: REQUEST RESPONSE DATA ACK DATAACK CLOSEREQ CLOSE RESET SYNC SYNCACK INVALID" .

--dccp-option [!] число

Для положительного результата должна быть установлена опция DCP.

### dscp
Этот модуль проверяет 6-разрядное значение DSCP в поле TOS заголовка IP. В соответствии с RFC 247413 значение DSCP заменяет собой значение TOS.

--dscp значение

Значение в десятичной или шестнадцатеричной форме (0-32).

--dscp-class класс-DiffServ

Класс DiffServ. Возможные значения: BE, EF, AFxx, CSx.

### dstlimit
Позволяет ограничивать скорость обмена пакетами в секунду (pps) для одного целевого IP/порта.

ЭТОТ МОДУЛЬ УСТАРЕЛ. ИСПОЛЬЗУЙТЕ МОДУЛЬ "hashlimit"

--dstlimit скорость

Ограничение на среднюю скорость обмена пакетами. Допустимо дополнение в конце /sec /minute /hour /day.

--dstlimit-mode режим

Режим ограничения: это один из наборов dstip + dstip-dstport , srcip-dstip , либо srcipdstip-dstport .

--dstlimit-name имя

Имя файла /proc/net/ipt_dstlimit/*

[--dstlimit-burst burst]

Число пакетов в пике, для которых будет результат теста будет положительным. Значение по умолчанию: 5

[--dstlimit-htable-size размер]

Число наборов (buckets) в хэш-таблице

[--dstlimit-htable-max максимум]

Ограничение на число элементов в хэш-таблице

[--dstlimit-htable-gcinterval интервал]

Интервал между сбором мусора в хэш-таблице (в мс). Значение по умолчанию - 1000 (1 секунда).

[--dstlimit-htable-expire время

Время после которого неиспользуемые элементы подлежат удалению, в мс. Значение по умолчанию - 10000 (10 секунд).

### ecn
Используется для проверки соответствия значения поля ECN в заголовках IPv4 и TCP. ECN - это механизм явного предуведомления о перегрузке (Explicit Congestion Notification) определённый RFC3168

--ecn-tcp-cwr

Результат определяется разрядом TCP ECN CWR (Congestion Window Received).

--ecn-tcp-ece

Результат определяется разрядом TCP ECN ECE (ECN Echo).

--ecn-ip-ect num

IPv4 ECT (ECN-Capable Transport) должен быть равным указанному числу (от `0' до `3').

### esp
Модуль esp служит для проверки значений SPI в заголовках ESP пакетов IPSec.

--espspi [!] spi[:spi]

### fuzzy
Результат теста зависит от скорости доставки пакетов по методу FLC (Fuzzy Logic Controller): пока скорость доставки пакетов не достигает нижнего порога, условие никогда не будет выполняться; при скорости в диапазоне между нижним и верхним порогами частота выполнения условий будет расти пропорционально скорости доставки пакетов; после превышения верхнего порога скорости частота выполнения условий достигнет максимального значения.

--lower-limit скорость

Нижний порог (пакетов в секунду).

--upper-limit скорость

Верхний порог (пакетов в секунду).

### hashlimit
Этот модуль добавляет новое условие проверки hashlimit, позволяющее вводить ограничения на один адрес назначения или пару "адрес-порт".

С помощью данного условия можно задавать ограничения типа

"не более 1000 пакетов в секунду для каждого хоста в сети 192.168.0.0/16"

"не более 100 пакетов в секунду для каждого сервиса на хосте 192.168.1.1"

одним правилом iptables.

--hashlimit скорость

Среднее значение скорости. Параметр представляет собой целое число, определяющее максимальное количество пакетов, и суффикс, который определяет единицу времени. В качестве суффикса могут использоваться значения /second, /minute, /hour, /day. По умолчанию подразумевается число пакетов в секунду.

--hashlimit-burst число

Число пакетов в пике

--hashlimit-mode destip | destip-destport

Ограничение по адресам или портам.

--hashlimit-name foo

Имя для /proc/net/ipt_hashlimit/foo.

--hashlimit-htable-size num

Число элементов (buckets) в хэш-таблице.

--hashlimit-htable-max num

Максимальное количество записей в хэше.

--hashlimit-htable-expire num

Время (в миллисекундах) жизни записи в хэш-таблице. По умолчанию время жизни составляет 10000 (10 секунд).

--hashlimit-htable-gcinterval num

Интервал "сборки мусора" в хэш-таблице.

### helper
Выдаёт положительный результат для пакетов относящихся к конкретному вспомогательному компоненту conntrack.

--helper имя

Вспомогательный компонент conntrack.

Может принимать значение "ftp" для пакетов ftp-сеанса на стандартном порте. В случае нестандартных портов добавляйте их к имени: "ftp-2121".

Аналогично и для других компонентов.

### icmp
Эта расширение загружается при указании `--protocol icmp'.

--icmp-type [!] тип

Тип ICMP в виде числа или имени в соответствии с

```
 iptables -p icmp -h
```

### iprange
Результат теста зависит от адреса IPv4.

[!]--src-range ip-ip

Диапазон IP-адресов отправителя.

[!]--dst-range ip-ip

Диапазон IP-адресов получателя.

### ipv4options
Результат теста зависит от параметров заголовка IPv4, таких как параметры маршрутизации, запись маршрута, запрос времени, оповещение маршрутизатора.

--ssrr

Должен быть установлен флаг strict source routing (маршрутизация указывается источником).

--lsrr

Должен присутствовать флаг loose source routing (свободная маршрутизация).

--no-srr

Флаг, позволяющий источнику определить режим маршрутизации, должен отсутствовать.

[!] --rr

Должен присутствовать флаг RR (route record).

[!] --ts

Должен присутствовать флаг TS (timestamp).

[!] --ra

Должен присутствовать флаг оповещения маршрутизатора (router-alert).

[!] --any-opt

Выдавать положительный результат если хотя бы один пункт из указанных выше был выполнен. Если указан !, ни одно из условий не должно выполняться.

Примеры:

$ iptables -A input -m ipv4options --rr -j DROP

отбрасывать пакеты с флагом record-route.

$ iptables -A input -m ipv4options --ts -j DROP

отбрасывать пакеты с флагом timestamp.

### length
Позволяет проверять размеры пакетов (точно или по диапазону).

--length [!] размер[:размер]

### limit
Этот модуль выдаёт положительный результат с фиксированной частотой. Правило использующее это расширение будет выполняться до момента достижения лимита (и наоборот, если указан "!"). Может использоваться вместе с целью LOG для получения ограниченного протоколирования.

--limit частота

Максимальная средняя частота положительных результатов. После числа можно указывать единицы: `/second', `/minute', `/hour', `/day'; значение по умолчанию - 3/hour.

--limit-burst number

Ограничение на исходное число пропускаемых пакетов: это число увеличивается на единицу каждый раз когда ограничение на частоту положительных результатов не достигается. Это происходит столько раз, сколько указано в данном параметре. Значение по умолчанию - 5.

### mac
--mac-source [!] адрес

Выполнять тестирование по MAC-адресу отправителя. Адрес должен указываться в форме XX:XX:XX:XX:XX:XX. Использование данного условия имеет смысл только при получении пакетов от устройства Ethernet, проходящих на одну из цепочек PREROUTING, FORWARD или INPUT .

### mark
Тестирует по полю mark. Это специальное поле, которое существует только в области памяти ядра и связывается с конкретным пакетом. (для установки этого поля используется цель MARK , описанная ниже).

--mark число[/маска]

Пропускать пакеты с указанной отметкой (представляющей собой беззнаковое целое) Если указана маска, то перед сравнением она накладывается на указанное значение (логическое И).

### mport
Модуль пропускает пакеты на заданном наборе портов (исходных или целевых). Возможно указание до 15 портов. Используется только вместе с -p tcp или -p udp.

--source-ports порт[,порт[,порт...]]

Пропускать пакеты с исходным портом равным одному из указанных. Краткая форма ключа - --sports .

--destination-ports порт[,порт[,порт...]]

Пропускать пакеты с портом назначения равным одному из указанных. Краткая форма ключа - --dports .

--ports порт[,порт[,порт...]]

Пропускать пакеты с одинаковыми исходным и портом назначения и равными одному из указанных.

### multiport
Позволяет указывать в тексте правила несколько (до 15) портов и диапазонов портов. Диапазон портов (порт:порт) считается за два порта (в отношении ограничения в 15). Используется только вместе с -p tcp или -p udp.

--source-ports [!] порт[,порт[,порт:порт...]]

Пропускать пакеты с исходным портом равным одному из указанных. Краткая форма ключа - --sports .

--destination-ports [!] порт[,порт[,порт:порт...]]

Пропускать пакеты с портом назначения равным одному из указанных. Краткая форма ключа - --dports .

--ports [!] порт[,порт[,порт:порт...]]

Пропускать пакеты с одинаковыми исходным и портом назначения и равными одному из указанных.

### nth
Пропускает каждый `n'-ый пакет

--every n

Пропускать каждый n-ый пакет.

[--counter номер]

Использовать внутренний счётчик с указанным номером. Значение по умолчанию - `0'.

[--start число]

Начальное значение счётчика (вместо стандартного `0'). Обычно между `0' и `n'-1.

[--packet k]

Пропускать k-ый пакет из набора n пакетов. Соответственно, значение должно быть между `0' и `n'-1.

### osf
Идея фильтрации по пассивным сигнатурам ОС (passive OS fingerprint) была изначально реализована в брандмауэре pf из OpenBSD.

Оригинальная таблица сигнатур составлена Михаилом Залевски (Michal Zalewski) <lcamtuf@coredump.cx>.

Данный модуль фильтрует пакеты по данным из (первого) пакета SYN (WS, MSS, опциям и их порядку, ttl, df и т.д.), определяя ОС отправителя на основе динамической таблицы сигнатур ОС.

--log 1/0

Записывать в протокол семейства ОС даже если они не совпадают с ожидаемыми. 0 - записывать все данные; 1 - только первые. Данные записываются в syslog в таком формате:

ipt_osf: Windows [2000:SP3:Windows XP Pro SP1, 2000 SP3]: 11.22.33.55:4024 -> 11.22.33.44:139

ipt_osf: Unknown: 16384:106:1:48:020405B401010402 44.33.22.11:1239 -> 11.22.33.44:80

--smart

Включить дополнительные алгоритмы определения удалённой ОС. OSF будет учитывать исходный TTL только если соединение установлено в рамках локальной сети.

--netlink

Протоколировать все события в NETLINK_NFLOG groupt 1.

--genre [!] string

Пропускать пакеты от семейства ОС.

Пример:

\#iptables -I INPUT -j ACCEPT -p tcp -m osf --genre Linux --log 1 --smart

Обратите внимание, что указание -p tcp обязательно, поскольку проверка ведётся на уровне этого протокола.

Сигнатуры хранятся в файле /proc/sys/net/ipv4/osf. Очистить список сигнатур можно командой

echo -en FLUSH > /proc/sys/net/ipv4/osf

Допустима только одна сигнатура за открытие/запись/закрытие.

Список сигнатур доступен в Интернете по адресу http://www.openbsd.org/cgi-bin/cvsweb/src/etc/pf.os

### owner
Позволяет фильтровать по параметрам "владельца" пакета. Этот критерий можно использовать только в цепочке OUTPUT , но даже в этом случае могут попадаться пакеты без владельца (например, ответы ISMP ping), и такие пакеты не будут пропускаться.

--uid-owner идентификатор-пользователя

Пропускать пакеты генерируемые процессами работающими от указанного пользователя.

--gid-owner идентификатор-группы

Пропускать пакеты генерируемые процессами работающими от пользователя входящего в указанную группу.

--pid-owner идентификатор-процесса

Пропускать пакеты генерируемые процессом с указанным идентификатором.

--sid-owner идентификатор-сеанса

Пропускать пакеты генерируемые процессами в сеансе с указанным идентификатором.

--cmd-owner имя-команды

Пропускать пакеты генерируемые процессами с указанным именем команды. (ключ поддерживается только если пакет iptables был собран с ядром, имеющим соответствующую функцию)

Примечание: фильтрация по pid, sid и команде не работает в SMP-системах

### physdev
Позволяет организовывать фильтрацию по устройствам используемым для связи двух локальных сетей. Это модуль является частью инфраструктуры для IP-брандмауэра "прозрачно" связывающего сети. Имеет смысл использовать только с ядрами 2.5.44.

--physdev-in [!] имя

Порт связи сетей, через который получен пакет (только для пакетов, проходящих цепочки INPUT, FORWARD или PREROUTING ). Если имя интерфейса оканчивается на "+", то будут пропускаться пакеты со всех интерфейсов, имя которых начинается с указанной последовательности. Если пакет получен из устройства, которое не связывает локальные сети, он не будет пропущен (если только не указано "!").

--physdev-out [!] имя

Порт связи сетей, через который пакет отправляется (для пакетов, проходящих цепочки FORWARD, OUTPUT или POSTROUTING ). Если имя интерфейса оканчивается на "+", то будут пропускаться пакеты со всех интерфейсов имя которых начинается с указанной последовательности. Тестирование по порту вывода в цепочках OUTPUT nat и mangle невозможно, зато в filter OUTPUT - возможно. Если пакет отправляется не через устройство связи двух сетей, или если отправляющее устройство на данном этапе неизвестно, то такой пакет не будет пропущен (если только не указан "!").

[!] --physdev-is-in

Пропускать пакеты, полученные через интерфейс связи двух сетей.

[!] --physdev-is-out

Пропускать пакеты, отправляемые через интерфейс связи двух сетей.

[!] --physdev-is-bridged

Пропускать пакеты, для которых не выполняется маршрутизация (т.к. они проходят через "мост" между сетями) Имеет смысл только в цепочках FORWARD и POSTROUTING.

### pkttype
Позволяет фильтровать пакеты по их типу на уровне канала связи.

--pkt-type [unicast|broadcast|multicast]

### policy
Позволяет фильтровать пакеты по стратегии обработки пакета IPsec.

--dir in|out

Стратегия, по которой следует фильтровать: стратегии извлечения данных из сообщения или включения (инкапсуляции) оных. Вариант in допустим в цепочках PREROUTING, INPUT и FORWARD , вариант out

- в цепочках POSTROUTING, OUTPUT и FORWARD .

--pol none|ipsec

Должен ли пакет подлежать обработке IPsec.

--strict

Пропускать пакеты с хотя бы одним правилом, соответствующим заданной стратегии, или обязательно со всеми.

--reqid id

Пропускать пакеты с указанным идентификатором reqid правила стратегии. Идентификатор указывается с помощью команды setkey(8) , в качестве уровня используется unique:id .

--spi spi

Фильтровать пакеты на основе последовательного периферийного интерфейса (SPI) SA.

--proto ah|esp|ipcomp

Фильтровать пакеты на основе протокола инкапсуляции.

--mode tunnel|transport

Фильтровать пакеты на основе режима инкапсуляции.

--tunnel-src адрес[/маска]

Пропускать пакеты с исходным адресом [пункта] режима tunnel SA, входящим в указанный диапазон. Имеет смысл только при --mode tunnel.

--tunnel-dst адрес[/маска]

Пропускать пакеты с адресом назначения режима tunnel SA, входящим в указанный диапазон. Имеет смысл только при --mode tunnel.

--next

Начать следующий элемент в спецификации стратегии. Может указываться вместе с --strict

### psd
Пытаться обнаружить сканирование портов TCP и UDP. Реализовано на основе scanlogd из Solar Designer.

--psd-weight-threshold порог

Общий вес (см. ниже) пакетов TCP/UDP за последнее время, приходящих от одного источника, но на разные порты, при котором можно считать, что это умышленное сканирование портов.

--psd-delay-threshold задержка

Максимальная задержка (в сотых секунды) между пакетами приходящими на различные порты от одного источника, при которой они будут считаться подпоследовательностью пакетов при сканировании.

--psd-lo-ports-weight вес

Вес пакетов, приходящих на привилегированные порты (<=1024).

--psd-hi-ports-weight weight

Вес пакетов, приходящих на непривилегированные порты.

### quota
Позволяет квотировать использование сети - уменьшает счётчик байтов на единицу при обработке каждого пакета.

--quota размер

Квота в байтах.

Примечание: не работает в SMP-системах.

### random
Вероятностная фильтрация.

--average доля

Пропускать указанную часть пакетов (в процентах). Значение по умолчанию - 50%.

### realm
Фильтровать пакеты по области маршрутизации. Последние используются в сложных конфигурациях сетей, задействующих динамические протоколы маршрутизации наподобие BGP.

--realm [!] значение[/маска]

Пропускать пакеты с указанным номером области (диапазон областей можно указывать добавлением маски). Также можно указывать области по имени, в соответствии с /etc/iproute2/rt_realms (в этом случае указание маски недопустимо).

### recent
Позволяет динамически составлять списки IP-адресов и выполнять фильтрацию по ним различными способами.

Например, можно создать список `badguy', соответствующий компьютерам,

с которых поступали запросы на порт 139, и затем отбрасывать все их любые последующие запросы.

--name имя

Список, с которым следует работать. Значение по умолчанию - 'DEFAULT'.

[!] --set

Добавить адрес источника пакета в список. Если адрес уже в списке, он будет обновлён. Этот "критерий" всегда возвращает положительный результат (либо всегда отрицательный - если указано "!").

[!] --rcheck

Проверить, имеется ли адрес источника пакета в списке.

[!] --update

Как и --rcheck, если адрес будет найден, запись о времени последнего его появления будет обновлена.

[!] --remove

Возвращает положительный результат, если адрес источника пакета найден в списке (в этом случае адрес также удаляется из него).

[!] --seconds интервал

Используется с --rcheck или --update. Учитывать в списке только адреса, которые появлялись в последние n секунд.

[!] --hitcount количество

Используется с --rcheck или --update. Учитывать в списке только адреса, которые появлялись указанное количество раз (или больше). Для ещё большего сужения критерия воспользуйтесь также --seconds.

--rttl

Используется с --rcheck или --update. Пропускать пакеты, только если их источник в списке, и их TTL совпадает с TTL пакета, который привёл к добавлению источника в список (--set). Может быть полезно для предотвращения DoS-атак посредством подмены исходного адреса (т.е. когда модуль будет блокировать "невиновные" адреса).

Примеры:

\# iptables -A FORWARD -m recent --name badguy --rcheck --seconds 60 -j DROP # iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name badguy --set -j DROP

Дополнительные примеры приведены на сайте http://snowman.net/projects/ipt_recent/.

Таблицы адресов хранятся в /proc/net/ipt_recent/.

Таким образом, можно просмотреть текущее содержимое списков адресов, а также модифицировать их:

echo xx.xx.xx.xx > /proc/net/ipt_recent/DEFAULT

для добавления адреса в список по умолчанию

echo -xx.xx.xx.xx > /proc/net/ipt_recent/DEFAULT

для удаления адреса из списка по умолчанию

echo clear > /proc/net/ipt_recent/DEFAULT

для очистки списка по умолчанию.

Параметры модуля (со значениями по умолчанию):

ip_list_tot=100

Ограничение на количество адресов в одной таблице

ip_pkt_list_tot=20

Ограничение на количество пакетов для одного адреса, сведения о которых запоминаются

ip_list_hash_size=0

Размер хэш-таблицы. 0 - вычислять размер на основе ip_list_tot, при значениях по умолчанию это 512

ip_list_perms=0644

Права доступа для файлов /proc/net/ipt_recent/*

debug=0

Установите в 1 для получения отладочной информации

### sctp
--source-port,--sport [!] порт[:порт]

--destination-port,--dport [!] порт[:порт]

--chunk-types [!] all|any|only

тип-части[:флаги] [...] Если буква отвечающая флагу указана в верхнем регистре, то положительный результат будет выдаваться если он установлен, и наоборот. Типы частей: DATA INIT INIT_ACK SACK HEARTBEAT HEARTBEAT_ACK ABORT SHUTDOWN SHUTDOWN_ACK ERROR COOKIE_ECHO COOKIE_ACK ECN_ECNE ECN_CWR SHUTDOWN_COMPLETE ASCONF ASCONF_ACK

тип части доступные флаги

DATA U B E u b e

ABORT T t

SHUTDOWN_COMPLETE T t

(нижний регистр = флаг должен быть "выключен", верхний - "включен")

Примеры:

iptables -A INPUT -p sctp --dport 80 -j DROP

iptables -A INPUT -p sctp --chunk-types any DATA,INIT -j DROP

iptables -A INPUT -p sctp --chunk-types any DATA:Be -j ACCEPT

### set
Фильтрует по принадлежности IP множествам определяемым с помощью ipset(8).

--set имя-множества флаг[,флаг...]

где флаги - src и/или dst. Множеств может быть не больше шести. Например, условию

```
 iptables -A FORWARD -m set --set test src,dst
```

будут соответствовать пакеты, адрес или порт (в зависимости от множества) источника которых имеется во множестве. Если адрес/порт имеется в множестве, и для соответствующего элемента множества (либо для всего множества) определён адрес назначения (т.е. адрес), то для получения положительного результата необходимо также чтобы совпадали адреса назначения.

### state
Используется с компонентом мониторинга соединений, и позволяет использовать состояние трассировки пакета.

--state состояния

Список фильтруемых состояний через запятую. Возможные значения: INVALID - соединение, с которым связан пакет, определить не удалось, например, из-за нехватки памяти, или пакет является сообщением об ошибке ICMP. ESTABLISHED - пакет принадлежит уже установленному соединению, через которое пакеты идут в обоих направлениях. NEW - пакет открывает новое соединение или принадлежит однонаправленному (до данного момента времени) потоку. RELATED - пакет принадлежит уже существующему соединению, но при этом он открывает новое соединение. Примером тому может служить передача данных по FTP или выдача сообщения ICMP об ошибке создания соединения, которое должно было быть связано с существующим TCP или UDP соединением.

### string
Фильтровать по содержимому пакета. Для работы требуется ядро linux >= 2.6.14.

--algo bm|kmp

Стратегия сравнения/поиска. (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)

--from позиция

Позиция в данных с которой следует начинать поиск. Значение по умолчанию - 0.

--to позиция

Позиция в данных, при достижении которой следует прекращать поиск. Значение по умолчанию - размер пакета.

--string последовательность

Последовательность символов, которую следует искать в пакете. --hex-string pattern Последовательность символов, которую следует искать в пакете (в шестнадцатеричном представлении).

### tcp
Это расширение загружается при указании `--protocol tcp'. Становятся доступными следующие ключи:

--source-port [!] порт[:порт]

Исходный порт (или диапазон портов), с которого должен быть отправлен пакет для прохождения теста. В качестве значения может указываться номер порта или название сетевой службы. Диапазон (включительно) портов указывается в формате первый-порт:последний-порт. Если опускается первый порт, т.е. когда критерий записывается как --source-port :80, то в качестве начала диапазона принимается число 0. Если опускается максимальный порт, т.е. когда критерий записывается как --source-port 22:, то в качестве конца диапазона принимается число 65535. Если первый порт больше последнего, они меняются местами. Краткая форма ключа - --sport .

--destination-port [!] порт[:порт]

Порт (или диапазон портов) назначения. Краткая форма ключа - --dport .

--tcp-flags [!] флаги comp

Пропускать пакеты с указанным набором флагов TCP. Первый аргумент - флаги (через запятую), которые нужно проверять, второй - те флаги, которые должны быть установлены. Возможные флаги: SYN ACK FIN RST URG PSH ALL NONE. Так, условию

```
 iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
```

будут соответствовать пакеты с установленным флагом SYN, и снятыми флагами ACK, FIN, RST.

[!] --syn

Пропускать пакеты TCP с установленным флагом SYN и снятыми ACK,RST,FIN. Такие пакеты используются для запроса создания TCP-соединения; очевидно, блокирование таких пакетов приведёт к невозможности создания входящих TCP-соединений. Эквивалентно --tcp-flags SYN,RST,ACK,FIN SYN. При указании "!" перед "--syn", смысл ключа инвертируется.

--tcp-option [!] номер-опции

Пропускать пакеты с установленной опцией TCP.

--mss число[:число]

Пропускать пакеты TCP SYN и SYN/ACK с указанным значением MSS (или значением входящим в диапазон), что ограничивает размер пакетов для соединения.

### tcpmss
Фильтрует по полю MSS (maximum segment size - максимальный размер сегмента) заголовка TCP. Возможно применять только к пакетам TCP SYN и SYN/ACK, т.к. MSS определяется в рамках процедуры согласования (handshake) в начале соединения.

[!] --mss число[:число]"

Пропускать пакеты с TCP MSS в указанном диапазоне.

### time
Фильтрует пакеты по времени/дате прибытия. Все ключи являются необязательными.

--timestart чч:мм

Пропускать только при времени прибытия после указанного (включительно). Значение по умолчанию - 00:00.

--timestop чч:мм

Пропускать только при времени прибытия до указанного (включительно). Значение по умолчанию - 23:59.

--days дни-недели

Пропускать пакеты в указанные дни недели (Mon,Tue,Wed,Thu,Fri,Sat,Sun); по умолчанию - в любой день)

--datestart ГГГГ[:ММ[:ДД[:чч[:мм[:сс]]]]]

Пропускать только при дате прибытия после указанной (включительно). Значение по умолчанию - 1970.

--datestop date

Пропускать только при дате прибытия до указанной (включительно). Значение по умолчанию - 2037.

### tos
Фильтрует по разрядам байта TOS (Type Of Service - говоря вообще, приоритет пакета) в заголовке IP-пакета.

--tos tos

Стандартное имя (список можно вывести командой

iptables -m tos -h

) или число.

### ttl
Фильтрует по полю заголовка IP, определяющему время жизни пакета.

--ttl-eq ttl

Значение TTL должно быть равно указанному.

--ttl-gt ttl

Значение TTL должно быть больше указанного.

--ttl-lt ttl

Значение TTL должно быть меньше указанного.

### u32
Позволяет извлекать из пакета данные размером до 4 байт, применять к ним операции логического И, сдвига, и проверять принадлежность получающихся данных определённым диапазонам.

Более подробное описание и примеры доступны в исходном коде ядра.

### udp
Это расширение загружается при указании `--protocol udp'. Доступны следующие ключи:

--source-port [!] порт[:порт]

Диапазон, в который должен входить исходный порт. См. описание ключа --source-port расширения TCP.

--destination-port [!] port[:port]

Диапазон, в который должен входить целевой порт. См. описание ключа --destination-port расширения TCP.

### unclean
Фильтрует предположительно ошибочные и бесполезные пакеты. Это экспериментальный модуль.

## РАСШИРЕНИЯ МЕХАНИЗМА ОБРАБОТКИ
В iptables можно добавлять дополнительные цели: Далее описаны модули включенные в стандартную поставку.

### BALANCE
Позволяет равномерно распределять соединения между компьютерами в локальной сети в заданном диапазоне (целевых) адресов.

--to-destination ip1-ip2

Диапазон адресов.

### CLASSIFY
Устанавливает значение skb->priority (т.е. классифицировать пакет по критерию CBQ).

--set-class главное-число:дополнительное-число

Идентификатор класса

### CLUSTERIP
Позволяет реализовывать простые конфигурации кластеров с общим IP и MAC без явного использования балансировщика (см. выше). Соединения распределяются статически.

--new

Добавить новый кластерный IP. Этот ключ всегда необходимо использовать в первом правиле для данного кластерного IP.

--hashmode режим

Режим хэширования: sourceip, sourceip-sourceport, sourceip-sourceport-destport

--clustermac mac

MAC кластерного IP. Это должен быть адрес для доставки подмножеству абонентов на уровне канала связи.

--total-nodes число

Общее число узлов в кластере.

--local-node число

Число локальных узлов в кластере.

--hash-init случайное-число

Начальное число для инициализации хэша.

### CONNMARK
Помечает соединения.

--set-mark метка[/маска]

Метка соединения. Если указана маска, изменяются только разряды которые равны единице в маске.

--save-mark [--mask маска]

Перенести метку пакета в соединение. Если указана маска, копируются только разряды, которые равны единице в маске.

--restore-mark [--mask маска]

Перенести метку соединения в пакет. Если указана маска, копируются только разряды, которые равны единице в маске. Допустимо только в таблице mangle .

### CONNSECMARK
Переносит метки механизма защиты из пакетов в соединения (если они ещё не имеют меток), и из соединений обратно в пакеты (также если они ещё не имеют меток). Обычно используется совместно с SECMARK и только в таблице mangle .

--save

Если пакет имеет метку, а соединение нет, то перенести её в соединение.

--restore

Если соединение имеет метку, а пакет нет, то перенести её в соединение.

### DNAT
Применяется только в таблице nat и цепочках PREROUTING , OUTPUT и вызываемых из них цепочках определяемых пользователем. DNAT (Destination Network Address Translation) используется для преобразования адреса места назначения в IP заголовке пакета. Если пакет подпадает под критерий правила, выполняющего DNAT, то этот пакет, и все последующие пакеты из этого же потока, будут подвергнуты преобразованию адреса назначения и переданы на требуемое устройство, хост или сеть. Доступен один ключ:

--to-destination

"[ip-адрес][-ip-адрес][:порт-порт]" Определяет новый целевой IP-адрес, либо диапазон (включительно) IP-адресов и (необязательно) диапазон портов (последнее допустимо только при указании -p tcp или -p udp). Если диапазон портов не указывается, порты не будут меняться. То же самое относится IP-адресов.

При использовании ядра до 2.6.10 допустимо указание нескольких ключей --to-destination. В этом случае производится простая кольцевая балансировка. Ядра (>= 2.6.11-rc1) не позволяют распределять нагрузку по нескольким диапазонам IP-адресов.

### DSCP
Позволяет изменять разряды DSCP в заголовке TOS пакетов IPv4. Может использоваться только в mangle.

--set-dscp значение

Устанавливать поле DSCP в указанное значение (десятичное или шестнадцатеричное)

--set-dscp-class класс

Устанавливать класс DiffServ в поле DSCP.

### ECN
Позволяет закрывать известные "дыры" ECN. Используется в mangle.

--ecn-tcp-remove

Удалять все разряды ECN из заголовка TCP. Используется вместе с -p tcp.

### IPMARK
Отмечает принимаемые пакеты на основе IP-адресов, связанных с ними. Позволяет заменить несколько записей mangle/mark одной в случае использования классификатора брандмауэра.

Используется в mangle, PREROUTING, POSTROUTING и FORWARD.

--addr src/dst

IP-адрес, с которым следует работать: исходный или конечный.

--and-mask маска

Применять логическое И маски к IP-адресу.

--or-mask mask

Применять логическое ИЛИ маски к IP-адресу.

Порядок байт IP-адрес обращается для соответствия представлениям человека: 192.168.0.1 - 0xc0a80001. Сначала выполняется операция И, затем ИЛИ.

Примеры:

Создадим очередь для каждого пользователя, номер очереди будет соответствовать IP-адресу: все пакеты приходящие от/отправляемые в 192.168.5.2 будут перенаправляться в очередь 1:0502, 192.168.5.12 -> 1:050c и т.д.

Имеется одно правило классификации:

tc filter add dev eth3 parent 1:0 protocol ip fw

Теперь вместо:

iptables -t mangle -A POSTROUTING -o eth3 -d 192.168.5.2 -j MARK --set-mark 0x10502

iptables -t mangle -A POSTROUTING -o eth3 -d 192.168.5.3 -j MARK --set-mark 0x10503

можно будет указать:

iptables -t mangle -A POSTROUTING -o eth3 -j IPMARK --addr=dst --and-mask=0xffff --or-mask=0x10000

Это значительно (вдвое) уменьшает нагрузку на маршрутизаторы, обслуживающие сотни пользователей.

### IPV4OPTSSTRIP
Удаляет все опции IP из пакета.

Никаких дополнительных параметров не требуется:

\# iptables -t mangle -A PREROUTING -j IPV4OPTSSTRIP

### LOG
Вносить в протокол ядра записи о пакетах (например, поля заголовка IP), для которых указана данная цель. Протокол ядра доступен по команде dmesg . См. syslogd(8)). Обработка после этой цели продолжается. Так, для внесения записей о блокируемых пакетах укажите два отдельных правила с одинаковыми условиями, для первого укажите цель LOG, для второго - DROP (или REJECT).

--log-level уровень

Степень подробности (число, см. syslog.conf(5)).

--log-prefix префикс

Префикс для выделения записей протокола среди других. До 29 символов.

--log-tcp-sequence

Протоколировать номера последовательностей (sequence numbers) TCP. Если протокол доступен обычным пользователям, это отрицательно скажется на защищённости системы.

--log-tcp-options

Вносить в протокол параметры заголовка TCP.

--log-ip-options

Вносить в протокол параметры заголовка IP.

--log-uid

Вносить в протокол идентификатор пользователя, которому принадлежит процесс, сгенерировавший пакет.

### MARK
Используется для присвоения пакетам меток. Может использоваться только в пределах таблицы mangle . Обычно используется вместе с iproute2.

--set-mark значение

Задать значение nfmark.

--and-mark значение

Выполнить операцию "логическое И" над значением nfmark и указанным.

--or-mark значение

Выполнить операцию "логическое ИЛИ" над значением nfmark и указанным.

### MASQUERADE
Цель допустима только в таблице nat в цепочке POSTROUTING , для конфигураций с динамической выдачей IP (dialup): если у вас статический IP-адрес, используйте SNAT (это уменьшит нагрузку на систему). Маскарадинг - это по сути привязывание к IP-адресу интерфейса, через который пакет выходит, но он также имеет хорошее свойство - забывать соединения при остановке сетевого интерфейса. Это корректное поведение если каждый раз при установлении связи с Internet получается новый адрес (потому имеющиеся соединения теряются в любом случае).

--to-ports порт[-порт]

Диапазон исходных портов, который следует использовать вместо эвристически определяемого модулем SNAT (см. выше). Допустимо только при указании -p tcp или -p udp.

### MIRROR
Экспериментальная цель, созданная в демонстрационных целях, поскольку это действие может привести к "зацикливанию" пакета и, в результате, к отказу в обслуживании.

Данное действие допускается использовать только в цепочках INPUT, FORWARD , PREROUTING и в цепочках, вызываемых из них. Пакеты, отправляемые в сеть действием MIRROR, больше не подвергаются фильтрации, трассировке или NAT, избегая тем самым "зацикливания" и других неприятностей. NOT .

### NETMAP
Позволяет задать статическое отображение адресов одной подсети в адреса другой. Используется только в таблице nat .

--to адрес[/маска]

Целевой адрес (или диапазон адресов). Отображённый адрес будет получаться следующим образом: все единицы в маске заменяются на цифры в соответствующих позициях нового "адреса"; все остальные разряды заполняются из отображаемого адреса.

### NFQUEUE
Это расширение QUEUE. В отличие от QUEUE, позволяет помещать пакет в определённую очередь, идентифицируемую по 16-разрядному номеру.

--queue-num номер

Номер очереди QUEUE. Допустимые номера - от 0 до 65535. По умолчанию - 0.

Работает только с ядрами 2.6.14 и позже, т.к. требует поддержку

nfnetlink_queue.

### NOTRACK
Исключает пакет из множества наблюдаемых.

Используется только в таблице

raw .

### REDIRECT
Может использоваться только в цепочках PREROUTING и OUTPUT таблицы nat , а также в цепочках, вызываемых из вышеуказанных.

Выполняет перенаправление пакетов на другой порт той же самой машины. Очень удобно для выполнения "прозрачного" проксирования (transparent proxying), когда машины в локальной сети даже не подозревают о существовании прокси-сервера. При перенаправлении целевой IP-адрес пакета меняется на основной адрес интерфейса отправки (локальным пакетам присваивается 127.0.0.1). Для действия REDIRECT предусмотрен только один ключ:

--to-ports порт[-порт]

Диапазон портов, на которые следует перенаправлять пакет. Допустимо только при указании -p tcp или -p udp.

### REJECT
Используется для отправки сообщения об ошибке на хост, от которого получен исходный пакет, в остальном эквивалентно DROP , обработка пакета останавливается на этой цели. Может использоваться только в цепочках INPUT, FORWARD , OUTPUT , а также в цепочках, вложенных в них. Следующий ключ определяет форму пакета с сообщением об ошибке:

--reject-with тип

Сообщение ICMP об ошибке. Возможные значения:

```
 icmp-net-unreachable
 icmp-host-unreachable
 icmp-port-unreachable
 icmp-proto-unreachable
 icmp-net-prohibited
 icmp-host-prohibited
 icmp-admin-prohibited (*)
```

По умолчанию отправляется port-unreachable. Для правил, которые фильтруют пакеты только принадлежащие протоколу TCP, можно указывать tcp-reset : это приведёт к возврату пакетов TCP RST и полезно для блокирования тестов ident (113/tcp) выполняемых при отправке почты на недоступные узлы.

(*) Указание icmp-admin-prohibited в случае если ядро не поддерживает этого

равносильно цели DROP

### ROUTE
Позволяет явно изменять логику маршрутизации сетевой подсистемы. Используется в таблице mangle .

--oif интерфейс

Направить пакет через указанный интерфейс.

--iif интерфейс

Изменить сведения об интерфейсе, который доставил пакет.

--gw IP-адрес

Направить пакет через указанный шлюз.

--continue

Не прекращать тестирование пакета в цепочке. Недопустимо, если указан один из ключей `--iif' / `--tee'

--tee

Выполнять указанные действия над копией пакета, не прекращать тестирование исходного пакета в цепочке. Недопустимо, если указан один из ключей `--iif' / `--continue'

### SAME
Аналогично SNAT/DNAT, в зависимости от цепочки: на вход принимается диапазон адресов (`--to 1.2.3.4-1.2.3.7'), после чего клиентам выдаётся одна и та же пара исходного/целевого адресов для одного соединения.

--to ip1-ip2

Адреса, в которые будут отображаться получаемые адреса пакетов. Допустимо указание нескольких ключей.

--nodst

Не учитывать изначальный целевой IP-адрес при определении нового исходного адреса.

### SECMARK
Устанавливает метки механизма защиты в пакетах. Они используются подсистемами защиты наподобие SELinux. Допустимо указание только в таблице mangle .

--selctx контекст-защиты

### SET
Добавляет и удаляет элементы из множеств IP, определяемых с помощью ipset(8).

--add-set имя-множества флаг[,флаг...]

Добавить адреса/порты пакета в указанные множества

--del-set имя-множества флаг[,флаг...]

Удалить адреса/порты пакета в указанные множества, где флаги - src и/или dst, ограничение - 6 штук.

Для многоуровневого добавления/удаления элементов с помощью SET

необходимо предварительно определить связывание (адресов).

### SNAT
Используется только в цепочке POSTROUTING таблицы nat . Изменяет адрес источника пакета, если он удовлетворяет условиям, и всех последующих пакетов соединения (последние не будут тестироваться).

--to-source ip1[-ip2][:порт1-порт2]

IP-адрес или диапазон адресов (включительно) источника, а также (необязательно, и только в случае -p tcp или -p udp) диапазон портов. Если последний не указан, то выполняются следующие отображения: порты до 512 будут отображаться в порты до 512; порты от 512 до 1023 включительно - в порты до 1024; остальные - в порты начиная с 1024. По возможности порты будут отображаться сами в себя.

В ядрах до 2.6.10 возможно указание нескольких ключей --to-source. В этом случае производится простая кольцевая балансировка. Ядра >= 2.6.11-rc1 не могут работать с несколькими диапазонами IP-адресов.

### TARPIT
Удерживает входящие соединения TCP (объём используемых модулем ресурсов не зависит от количества соединений). Запросы на установление соединения принимаются, но сразу после этого соединения переводятся в состояние удерживания (persist - окно нулевого размера), в которых удалённая сторона не посылает никаких данных, и только отправляет запросы на продолжение каждые 60-240 секунд. Попытки закрытия соединения игнорируются, и оно закрывается по истечении времени ожидания (12-24 минут).

Аналогично LaBrea <http://www.hackbusters.net/LaBrea/>, но не требует выделенного сервера и IP-адресов. Любой порт TCP, для которого иначе бы выполнялось одно из действий DROP или REJECT, может удерживать соединения (стать tarpit).

Для удерживания соединений на порт TCP 80 данного компьютера:

iptables -A INPUT -p tcp -m tcp --dport 80 -j TARPIT

Для значительного замедления сканирования неиспользуемых адресов по схеме Code Red/Nimda перенаправьте их на компьютер с Linux, не выполняющий функцию маршрутизации (ip route 10.0.0.0 255.0.0.0 ip.of.linux.box на Cisco), включите перенаправление IP на компьютере с Linux и:

iptables -A FORWARD -p tcp -j TARPIT

iptables -A FORWARD -j DROP

Примечание:

Если вы используете модуль conntrack, то необходимо также указывать цель NOTRACK, иначе ядро будет выделять ресурсы без надобности для каждого удерживаемого соединения. Так, при удерживании входящих соединений на порт IRC:

iptables -t raw -A PREROUTING -p tcp --dport 6667 -j NOTRACK

iptables -A INPUT -p tcp --dport 6667 -j TARPIT

### TCPMSS
Позволяет изменять значение MSS пакетов TCP SYN, для ограничения размера пакетов соединения (обычно ограничение равно MTU исходящего интерфейса минус 40). Натурально, может использоваться только при -p tcp, в таблице mangle.

Эта цель полезна если провайдер или серверы блокируют пакеты ICMP запроса фрагментации. Определить, так ли это в вашем случае, легко: с компьютера Linux, выступающего в роли брандмауэра/маршрутизатора всё работает, но компьютеры, которые он обслуживает, не могут обмениваться пакетами большого размера:

1)

Веб-браузеры устанавливают соединение, но не получают никаких данных.

2)

Не удаётся получать электронные сообщения большого размера.

3)

ssh работает нормально, но scp бездействует после процедуры согласования.

Как это можно исправить: включите указанную опцию и добавьте правило в брандмауэр:

```
 iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \

             -j TCPMSS --clamp-mss-to-pmtu
```

--set-mss значение

Значение опции MSS, которое следует устанавливать.

--clamp-mss-to-pmtu

Автоматически вычислять значение MSS по формуле (path_MTU - 40).

Допустимо одновременное указание только одного из этих ключей.

### TOS
Используется для установки разрядов в поле Type of Service заголовка IP. Допустимо только в таблице mangle .

--set-tos tos

Возможно указание значения в виде числа или имени в соответствии со списком

```
 iptables -j TOS -h
```

### TRACE
Включает трассировку пакетов соответствующих условию правила.

### TTL
Используется для изменения содержимого поля Time To Live в заголовке IPv4. TTL определяет число маршрутизаторов которое пакет должен пройти прежде чем он будет считаться утерянным.

Изменение (особенно - увеличение) поля TTL может быть опасным, потому желательно

избегать этого.

Никогда не изменяйте (особенно - не увеличивайте) TTL пакетов, покидающих

локальную сеть. Таблица mangle .

--ttl-set число

Установить новое значение TTL.

--ttl-dec число

Уменьшить значение TTL на указанное число.

--ttl-inc число

Увеличить значение TTL на указанное число.

### ULOG
Предоставляет возможность протоколирования сведений о пакетах в пользовательском пространстве. При использовании этого действия пакет через сокеты netlink доставляется произвольному количеству адресатов. В качестве адресатов выступают процессы в пользовательском пространстве. Как и в случае с LOG, тестирование пакета в цепочке не прекращается.

--ulog-nlgroup группа-netlink

Группа netlink (1-32), которой следует посылать пакет. Значение по умолчанию - 1.

--ulog-prefix префикс

Префикс для записей в протоколе для выделения среди других сообщений. До 32 символов.

--ulog-cprange размер

Количество байтов, которое следует переносить в пользовательское пространство. По умолчанию - 0 (копировать весь пакет).

--ulog-qthreshold размер

Размер буфера пакетов в ядре. При заполнении буфера он будет посылаться в пользовательское пространство как одно сообщение netlink. По умолчанию - 1 (для обратной совместимости).

### XOR
Шифровать трафик TCP и UDP простым кодом XOR

--key строка

Ключ.

--block-size

Размер блока

## ДИАГНОСТИКА
Разнообразные сообщения выводятся на стандартный вывод. Код выхода в случае отсутствия ошибок - 0. Если команде переданы недопустимые ключи, код выхода равен 2, при остальных ошибках код выхода равен 1.

## ОШИБКИ
См. http://bugzilla.netfilter.org/

## СОВМЕСТИМОСТЬ С IPCHAINS
Пакет iptables очень похож на ipchains, написанные Расти Расселом (Rusty Russell). Основное различие состоит в том, что цепочки INPUT и OUTPUT не применяются для "проходящих" пакетов. Потому каждый пакет проходит только через одну из цепочек (кроме трафика кольцевого интерфейса loopback, проходящего через INPUT и OUTPUT).

Другое различие состоит в том, что -i относится с входному интерфейсу; -o - к выходному, и оба они доступны для пакетов в цепочке FORWARD .

В стандартной конфигурации iptables работает как фильтр пакетов (таблица `filter'), и к нему можно подключать дополнительные расширения. Это должно помочь избежать "неразберихи" с IP-маскарадингом и собственно фильтрацией. Так, следующие ключи обрабатываются иначе:

```
 -j MASQ

 -M -S

 -M -L
```

Натурально, имеется много менее значительных изменений.

## СМ. ТАКЖЕ
iptables-save(8), iptables-restore(8), ip6tables(8), ip6tables-save(8), ip6tables-restore(8), libipq(3).

О фильтрации пакетов более подробно написано в packet-filtering-HOWTO, о трансляции адресов - в NAT-HOWTO, о нестандартных расширениях - в netfilter-extensions-HOWTO, о программировании - в netfilter-hacking-HOWTO.

См. http://www.netfilter.org/ и http://www.linuxshare.ru/docs/security/iptables/iptables-tutorial.html.

## АВТОРЫ
Пакет создал Расти Рассел (Rusty Russell), консультируясь с Майклом Ньюлингом (Michael Neuling) на ранних этапах.

Благодаря Марку Бушэ (Marc Boucher) был удалён код ipnatctl, он был заменен более общей инфраструктурой отбора пакетов. Им была реализована таблица mangle, фильтрация по владельцу, метки и ещё много чего другого.

Джеймс Моррис (James Morris) реализовал цель TOS и фильтрацию по tos.

Джозеф Кадлецик (Jozsef Kadlecsik) реализовал цель REJECT.

Гаральд Уэльт (Harald Welte) реализовал цели ULOG и nd NFQUEUE, libiptc, а также цели и фильтры TTL, DSCP, ECN.

Команду Netfilter Core Team составляют: Марк Бушэ (Marc Boucher), Мартин Джозефсон (Martin Josefsson), Дожзеф Кадлецик (Jozsef Kadlecsik), Патрик МакХарди (Patrick McHardy), Джеймс Моррис (James Morris), Гаральд Уэльт (Harald Welte) и Расти Рассел (Rusty Russell).

Настоящий документ написан Херви Ейчинном (Herve Eychenne) <rv@wallfire.org>.

## ПЕРЕВОД
Николай Шафоростов <shafff@ukr.net> 2007


iptables-restore

package: man-pages-ru-extra

title: iptables-restore(8)

summary: восстановить таблицы IP

text:
# iptables-restore(8)

## ИМЯ
iptables-restore - восстановить таблицы IP

## ОБЗОР
iptables-restore [-c] [-n]

## ОПИСАНИЕ
iptables-restore используется для восстановления IP таблиц на основе данных из стандартного ввода. Чтобы считать информацию из файла, используйте предоставляемое командной оболочкой перенаправление ввода/вывода.

-c, --counters

восстановить значения для всех счетчиков байтов и пакетов.

-n, --noflush

не удалять предыдущее содержимое таблицы. Если этот флаг не указан, iptables-restore сбрасывает (удаляет) все предыдущее содержимое соответствующих таблиц IP.

## ОШИБКИ
Ни одна не известна для iptables-1.2.1.

## АВТОР
Гаральд Уэльт (Harald Welte) <laforge@gnumonks.org>

## СМ. ТАКЖЕ
iptables-save(8), iptables(8)

iptables-HOWTO, где детально описано использование iptables, NAT-HOWTO, где детализирован NAT, и netfilter-hacking-HOWTO где детально описано внутреннее строение iptables.

## ПЕРЕВОД
Перевод с английского Виктор Ерёмин <ErV2005@rambler.ru> 2007

branch: sisyphus


iptables-save

title: iptables-save(8)

summary: сохранить таблицы IP

text:
# iptables-save(8)

## ИМЯ
iptables-save - сохранить таблицы IP

## ОБЗОР
iptables-save [-c] [-t таблица]

## ОПИСАНИЕ
iptables-save используется для вывода содержимого IP таблиц (в легко обрабатываемом формате) на стандартный вывод. Используйте предоставляемое оболочкой перенаправление ввода/вывода для записи в файл.

-c, --counters

включать в вывод текущие значения всех счетчиков байтов и пакетов.

-t, --table имя_таблицы

ограничить вывод только одной таблицей. Если флаг не указан, будет выведены все доступные таблицы.

## ОШИБКИ
Ни одна не известна для iptables-1.2.1.

## АВТОР
Гаральд Уэльт (Harald Welte) <laforge@gnumonks.org>

## СМ. ТАКЖЕ
iptables-restore(8), iptables(8)

iptables-HOWTO, где более детально описано использование iptables, NAT-HOWTO, где детально описан NAT, и netfilter-hacking-HOWTO где разъясняется внутреннее строение iptables.

## ПЕРЕВОД
Перевод с английского Виктор Ерёмин <ErV2005@rambler.ru> 2007


klogd

title: klogd(8)

summary: Демон журналирования ядра

text:
# klogd(8)

## ИМЯ
klogd - Демон журналирования ядра

## СИНТАКСИС
klogd [ -c n ] [ -d ] [ -f fname ] [ -iI ] [ -n ] [ -o ] [ -p ] [ -s ] [ -k fname ] [ -v ] [ -x ] [ -2 ]

## ОПИСАНИЕ
klogd - это системный демон, который перехватывает и журналирует сообщения ядра Linux.

## ОПЦИИ
-c n

Устанавливает уровень журналирования по умолчанию для консольных сообщений в n.

-d

Включить отладочный режим. Будет выводить МНОЖЕСТВО данных в стандартный поток ошибок (stderr).

-f файл

Журналировать сообщения в указанный файл, т.е. не использовать syslog.

-i -I

Послать сигнал уже запущенному демону klogd. Благодаря этим опциям, информация о символах будет загружена/перечитана заново. Опция -i посылает сигнал загрузить информацию о символах модулей ядра. Опция -I посылает сигнал перечитать заново как информацию о статических символах ядра, так и о символах модулей ядра.

-n

Запретить автопереход в фоновый режим. Это особенно необходимо, когда klogd запускается и контролируется через init(8).

-o

Выполниться в режиме 'взгляд'. В этом режиме klogd единожды читает и журналирует все сообщения, найденные в буферах сообщений ядра. Затем демон завершает свою работу.

-p

Включить режим паранойи. Эта опция задает поведение klogd при загрузке информации о символах модулей ядра. klogd загружает информацию о символах модулей ядра каждый раз, когда строка "Oops" обнаруживается в потоке сообщений ядра.

-s

Заставляет klogd использовать системный вызов для обращения к буферам сообщений ядра.

-k file

Использовать заданный файл как источник информации о символах ядра.

-v

Напечатать версию и выйти.

-x

Не допускать преобразования EIP и поэтому не читать файл System.map.

-2

Когда символы раскрываются, печатать две строки. Одна с адресами, преобразованными в символы, другая с необработанными данными. Это позволяет внешним программам (таким как ksymoops) производить собственную обработку данных.

## ОБЗОР
Функционал демона klogd обычно находился в syslog но это не лучшее место для него. В современном ядре Linux следует обратить внимание на такие вопросы, возникающие при передачи сообщений ядра, как определение источника, приоритеты, получение адресов и т.д. Вынесение журналирования сообщений ядра в отдельный процесс предлагает явное разделение функциональности.

В Linux есть два потенциальных источника для журналирования информации ядра: файловая система /proc и системный вызов (sys_syslog), хотя, в конечном счете, это одно и тоже. Klogd разработан таким образом, что сам выбирает какой источник информации больше всего подходит. Для этого он сначала проверяет, смонтирована ли файловая система /proc . Если да, то файл /proc/kmsg используется в качестве источника информации для журналирования. Если файловая система не смонтирована, демон klogd использует системный вызов, чтобы получить доступ к сообщениям ядра. Для того, чтобы заставить klogd принудительно использовать системный вызов в качестве источника сообщений, можно использовать в командной строке опцию "-s".

Если сообщения ядра направлены через демон syslogd, демон klogd, начиная с версии 1.1, имеет возможность корректно сортировать сообщения ядра согласно их приоритетам (приоритезация). Приоритезация сообщения была добавлена в ядро в версии 0.99pl13. Необработанные сообщения ядра имеют форму:

<[0-7]>Какое-то сообщение из ядра.

Приоритет сообщения представлен как односимвольное значение заключенное в <>. Эти значения определены в заголовочном файле ядра kernel.h. Когда сообщение получено из ядра, демон klogd распознает уровень приоритета и назначает соответствующий уровень syslog приоритета для сообщения. Если задан выходной файл посредством (-f), то приоритет добавляется к началу сообщения ядра.

Демон klogd также предоставляет возможность выводить сообщения ядра на системную консоль. Совместно с приоритезацией сообщений ядра было включение изначального уровня сообщений для ядра. В стандартном ядре изначальный уровень сообщений консоли установлен в 7. Любое сообщение с уровнем приоритета ниже чем 7 (наивысший приоритет) появляется на консоли.

Сообщения с уровнем приоритета 7 считаются отладочными сообщениями, и поэтому не будут появляться на консоли. Множество администраторов, особенно в многопользовательских системах, предпочитают, чтобы все сообщения ядра обрабатывались демоном klogd и направлялись в файл либо в демон syslogd. Это предотвращает появление таких неприятных ситуаций как выход за пределы бумаги на принтере или изменение в использовании диска, обнаруженное в беспорядочных сообщениях консоли.

Когда в командной строке передается -c , демон klogd выполнит системный вызов, чтобы подавить вывод на консоль всех сообщений ядра. Предыдущие версии всегда вызывали этот системный вызов и исключали появление всех сообщений ядра за исключением сообщений 'panic'. В настоящие время это обрабатывается по другому, поэтому демону klogd больше не нужно выставлять это значение. Аргумент, представляемый опцией -c, задает уровень приоритета сообщений, которые будут направлены на консоль. Заметьте, что только сообщения с приоритетом МЕНЬШЕ заданного будут направлены на консоль.

К примеру, чтобы ядро отображало все сообщения с уровнем приоритета 3 (KERN_ERR) и более серьезные сообщения, должна быть выполнена следующая команда:

```
	klogd -c 4
```

Если установлены исходные тексты ядра, числовые значения для сообщений ядра можно найти в заголовочном файле ядра kernel.h из каталога /usr/include/linux. Эти значения аналогичны значениям приоритета syslog, которые определены в файле syslog.h из каталога /usr/include/sys.

Демон klogd может быть также использован в режиме 'взгляд' для чтения буферов сообщений ядра. Этот режим задается опцией -o в командной строке. Результат работы будет направлен или в демон syslogd или в альтернативный файл, заданный опцией -f .

К примеру, чтобы прочитать все сообщения ядра после загрузки системы и записать их в файл krnl.msg, необходимо выполнить следующую команду:

```
	klogd -o -f ./krnl.msg
```

## ОПРЕДЕЛЕНИЕ АДРЕСОВ В ЯДРЕ
Если ядро распознает условия внутренней ошибки, вызывается обработчик общей ошибки защиты. Как часть процедуры обработки общей ошибки защиты ядро выводит отчет, где показывает состояние процессора во время ошибки. Этот отчет включает в себя содержимое регистров процессора, содержимое стека ядра и данные от том, какая функция выполнялась в момент ошибки.

Эта информация ЧРЕЗВЫЧАЙНО ВАЖНА для определения какие условия вызвали внутреннюю ошибку. Но разработчики ядра сталкиваются с трудностями при попытке проанализировать эту информацию. Необработанные числовые данные, представленные в отчете об ошибке защиты, не очень полезны для разработчиков. Это происходит потому, что ядра не идентичны друг другу и адреса расположения переменных или функций не одни и те же в разных ядрах. Для того, чтобы диагностировать причину проблемы, разработчикам необходимо знать, какая конкретная функция ядра или переменная были вовлечены в процесс появления ошибки.

Список, содержащий адреса расположения важных переменных и функций, создается в ходе процесса компиляции ядра. Этот список хранится в файле System.map в корне дерева исходных текстов ядра. Используя этот список, разработчики ядра могут однозначно определить, что ядро делало когда произошла ошибка.

Процесс преобразования числовых значений адресов из отчета об ошибке защиты может быть сделан вручную или с использованием программы ksymoops , поставляемой вместе с исходными текстами ядра.

Для удобства klogd будет пытаться преобразовать числовые значения адресов в их символическую форму, если во время выполнения доступна таблица символов ядра. Если вам необходимы оригинальные адреса символов, используйте опцию -2 , чтобы вывести необработанные адреса. Таблица символов может быть задана опцией -k в командной строке. Если таблица символов не задана явно, то демон будет пытаться использовать следующие файлы:

```
/boot/System.map
/System.map
/usr/src/linux/System.map
```

Системные карты поставляются с информацией о версии с ядра 1.3.43. Эта информация используется для обеспечения интеллектуального поиска в списках системных таблиц. Полезность этой возможности в том, что она предоставляет поддержку как для готовых, так и для экспериментальных ядер.

К примеру, готовое ядро может иметь собственные системные карты в /boot/System.map. Если экспериментальное или тестовое ядро компилируется из исходных текстов, расположенных в /usr/src/linux, системная карта может быть найдена в /usr/src/linux/System.map. Когда klogd запустится под экспериментальным ядром, системная карта в /boot/System.map будет пропущена в пользу карты из /usr/src/linux/System.map.

Современные ядра (с 1.3.43) генерируют важные адреса ядра правильно, поэтому они будут распознаны и использованы демоном klogd. Для более ранних ядер требуется накладывать патч. Этот патч поставляется совместно с исходными текстами sysklogd.

Процесс анализа ошибок защиты ядра отлично работает с ядрами собранными статически. Некоторые трудности возникают при попытках диагностировать проблемы, случившихся в загружаемых модулях ядра. Загружаемые модули ядра используются, чтобы реализовать некоторую функциональность ядра в такой форме, когда она может по желанию быть загружена/выгружена. Использование загружаемых модулей ядра полезно с позиции отладки, а также для уменьшения памяти, используемой ядром.

Проблемы с диагностикой ошибок в загружаемых модулях вызваны самой природой динамического связывания этих модулей. Когда модуль загружается, ядро выделят память под этот модуль, когда модуль выгружается - эта память освобождается. Такое динамическое выделение памяти делает невозможным изготовление файла-карты, который описывает адреса переменных и функций в загружаемом модуле ядра. Без этой карты расположений невозможно определить, что пошло не так, когда ошибка защиты затрагивает модуль ядра.

klogd имеет поддержку работы с проблемами диагностики ошибок защиты в загружаемых модулях ядра. На начало работы программы или в ответ на полученный сигнал, демон опрашивает ядро на предмет списка всех загруженных модулей и их адресов в памяти. Отдельные модули при загрузке могут также регистрировать расположение важных функций. Адреса этих экспортированных символов также определяются в ходе процесса опроса ядра.

Когда ошибка защиты происходит, делается попытка распознать адреса ядра из таблицы статических символов. Если это не удается, попытка повторяется с символами модулей, загруженных в данный момент. Это позволяет, как минимум, определить какой загружаемый модуль ответственен за генерацию ошибки защиты. Дополнительную информацию можно получить в том случае, если разработчик модуля предусмотрел экспорт информации о символах.

Корректное и правильное получение адресов в модулях ядра требует того, чтобы klogd был информирован при изменении состояния модуля ядра. Опции -i и -I могут быть использованы для передачи сигнала демону (исполняющемуся в данный момент), чтобы он перезагрузил информацию о символах. Наиболее важная опция для корректного получения символов модуля - это -i . Каждый раз, когда модуль загружается или удаляется из ядра, должна выполняться следующая команда:

```
klogd -i
```

Также может быть использована опция -p , чтобы гарантировать, что информация о символах актуальна. Эта опция говорит klogd перезагрузить таблицу символов, как только ошибка защиты обнаруживается. В этом режиме "паранойи", программу необходимо запускать с осторожностью. В момент появления ошибки защиты стабильность ядра и операционного окружения всегда под вопросом. Поскольку для чтения информации о символах демон klogd должен выполнять системные вызовы, существует вероятность того, что система будет слишком нестабильна для получения полезной информации. Намного лучшим решением было бы гарантирование того, что klogd обновляется каждый раз, когда модуль загружается или выгружается. При наличии обновленной информации о символах, вероятность правильного разбора ошибки защиты увеличивается.

Включенный в распространяемые исходные тексты sysklogd, патч к пакету modules-2.0.0, позволяет командам insmod, rmmod и modprobe автоматически генерировать сигнал для klogd каждый раз, когда модуль подключается или отключается из ядра. Использование этого патча гарантирует, что информация о символах в klogd всегда соответствует текущему состоянию ядра.

## ОБРАБОТКА СИГНАЛОВ
Демон klogd реагирует на восемь сигналов: SIGHUP, SIGINT, SIGKILL, SIGTERM, SIGTSTP, SIGUSR1, SIGUSR2 и SIGCONT. После сигналов SIGINT, SIGKILL, SIGTERM и SIGHUP демон закроет источники журналирования и аккуратно завершит свою работу.

Сигналы SIGTSTP и SIGCONT используются, чтобы запустить и остановить журналирование сообщений ядра. После получения сигнала SIGTSTP демон закроет источники журналирования и переключиться в режим ожидания, ничего не выполняя. Соответственно, сигнал SIGCONT приказывает демону переинициализироваться и выбрать заново источник журналирования. Используя комбинацию из SIGSTOP и SIGCONT, источник журналирования можно перевыбрать без остановки и перезапуска демона. К примеру, если файловая система /proc отмонтировалась по какой-либо причине, то может быть использована следующая последовательность команд:

\# kill -TSTP pid

\# umount /proc

\# kill -CONT pid

Это будет отмечено в системных журналах с приоритетом LOG_INFO , таким образом, документируя запуск/остановку процесса журналирования.

Сигналы SIGUSR1 и SIGUSR2 используются, чтобы инициировать загрузку/перезагрузку информации о символах ядра. Получение сигнала SIGUSR1 загружает заново информацию о символах ядра. Сигнал SIGUSR2 загружает заново информацию о статических символах ядра и информацию о символах модулей ядра.

При условии, что файл System.map находится в соответствующем месте, самый полезный сигнал - SIGUSR1 . Этот сигнал используется, чтобы сообщить демону о том, что модули ядра загружены/выгружены. Посылка этого сигнала демону после изменения состояния модуля ядра, гарантирует, что в случае появления ошибки защиты в адресном пространстве, занимаемом модулем ядра, будет происходить корректное преобразование символов.

## ФАЙЛЫ
/proc/kmsg

Источник сообщений ядра klogd

/var/run/klogd.pid

Файл, содержащий идентификатор процесса klogd

/boot/System.map, /System.map, /usr/src/linux/System.map

Расположение системных карт ядра по умолчанию.

## ОШИБКИ
Вполне возможны и в больших количествах. Хорошо отформатированные файлы патчей будут высоко оценены.

## АВТОР
Steve Lord (lord@cray.com) изначально написал klogd , Greg Wettstein сделал основные улучшения.

Dr. Greg Wettstein (greg@wind.enjellic.com)

Enjellic Systems Development

Вычислительный отдел при подразделении онкологических исследований

Центр исследований раковых заболеваний имени Роджера Мориса

Fargo, ND 58122

## ПЕРЕВОД
Перевод с английского Alexander Kolotov (alexandr.kolotov@gmail.com) 2007


lilo

title: lilo(8)

text:
# lilo(8)

## НАЗВАНИЕ
lilo - устанавливает загрузчик операционных систем

## СИНТАКСИС
Основная функция:

/sbin/lilo - установить загрузчик

Часто используемые функции (более подробно см. ниже):

/sbin/lilo -q - запрос списка ядер операционных систем

/sbin/lilo -T - вывод подробной системной информации по интересующей теме

/sbin/lilo -R - для следующей загрузки системы одноразово установить, используемую по умолчанию строчку команды

/sbin/lilo -A - сделать активным или показать активный раздел диска

/sbin/lilo -E - редактировать заголовок или обновить растровый (bitmap) файл

/sbin/lilo -M - установить Главную Загрузочную Запись (MBR) на диск

/sbin/lilo -I - запросить название пути текущего ядра

/sbin/lilo {-u|-U} - убрать загрузчик LILO из MBR и восстановить прежний загрузчик

## ОПИСАНИЕ
lilo устанавливает загрузчик (boot-менеджер) общего назначения под названием LILO, который при последующей перезагрузке компьютера позволит загрузить из разных разделов жесткого (жестких) дисков различные операционные системы (если они имеются): Linux, BSD, Unixware, OS/2, Windows 9x/Me/NT/2000/XP, PC/MS DOS :) и т.д. Обычно установка LILO осуществляется во время инсталляции ОС Linux. После следующего включения компьютера и соответственно старта LILO, классическим вариантом является появление приглашения boot:, которое ожидает, когда пользователь введёт имя загружаемого образа. Если в течении некоторого периода времени (это значение хранится в файле /etc/lilo.conf) пользователь не отвечает, загружается образ, принятый по умолчанию (также указан в /etc/lilo.conf). Если LILO применяется для загрузки OC Linux, можно указать одну или более опций для передачи их ядру Linux. Обычно в качестве опций указывают характеристики контроллера жесткого диска: адрес порта ввода/вывода,IRQ, DMA. Вообще команда lilo имеет огромное число опций.

## ОПЦИИ
-A мастер-диск [ N ]

Определяет какой раздел является активным на устройстве мастер-диск. Например:

\# lilo -A /dev/hda

/dev/hda1

\# lilo -A /dev/hdb

/dev/hdb1

Опция, содержащая номер N от 1 до 4, делает активным соответствующий раздел на ведущем (master) устройстве. Например:

\# lilo -A '/dev/hda 2'

\# lilo -A /dev/hda

/dev/hda2

-b bootdev

Задает имя устройства загрузки, т.е. куда будет установлен загрузчик. Например, "-b /dev/hda" задает Главную Загрузочную Запись (MBR); "-b /dev/sdb5" задает первый расширенный раздел на втором SCSI диске.

-B bitmap-файл

Задает растровый образ в виде bitmap-файл, который появляется на мониторе в графическом режиме при включении компьютера.

-c

Включить сжатие карты ОС. Это позволит объединить несколько запросов чтения из смежных секторов, что должно ускорить процесс загрузки (особенно с дискет).

-C файл-настройки

Использует указанный файл-настройки в качестве файла конфигурации. По умолчанию lilo читает инструкции и список ядер операционных систем из файла /etc/lilo.conf.

-d задержка

Задает задержку в децисекундах (20 = 2 сек) перед автоматической загрузкой первой операционной системы. Это позволит вам, в случае необходимости (когда имеется несколько операционных систем), прервать автозагрузку нажатием клавиши <Shift>, <Alt>, <Ctrl>, <ScrollLock> или <CapsLock> и задать иную ОС. После прерывания автозагрузки должно появится приглашение вида boot:, которое будет ожидать от пользователя ввода имени загружаемого образа. Этот аргумент замещается установкой директивы prompt в файле-настройки (по умолчанию это /etc/lilo.conf).

-D метка

При загрузке по умолчанию, использовать ядро с заданной меткой вместо ядра, которое указано первым в списке.

-E имя_файла.тип

Если .тип является .bmp, тогда указанный файл рассматривается как растровый графический файл, который используется в директиве "bitmap=" файла-настроек. С помощью любого удобного графического редактора можно создать или изменить информацию в растровом (bitmap) файле для заголовка LILO. Если .тип является .dat, тогда указанный файл рассматривается как конфигурационный файл, задающий параметры растровой графики, которые трансформируются для заголовка LILO в растровый файл с тем же именем_файла.

-f disk-tab

Задаёт файл параметров геометрии диска. (По умолчанию это /etc/disktab.)

-F

Отключить проверку загрузочного сектора для некоторых файловых систем (например, swap, XFS, ...), которые могут быть повреждены установкой LILO в первый сектор раздела. Дело в том, что эти файловые системы используют первый сектор как суперблок. См. также описание опции "-P ignore", которая позволяет пропустить проверку данной таблицы разделов.

-g

Указывает использовать геометрический адрес в виде цилиндр/головка/сектор диска. Её применение ограничено 1023 цилиндром включительно. Эта опция оставлена для совместимости со старыми версиями LILO.

-i boot-loader

В качестве загрузочного сектора использовать содержимое указанного файла boot-loader. (По умолчанию это /boot/boot.b.)

-I метка

Идентифицирует текущий образ ядра, заданный меткой. Метку запущенного (после загрузки системы) ядра можно найти в переменной окружения BOOT_IMAGE или в псевдо-файле `/proc/cmdline'. Команда с этой опцией выведет соответствующий полный путь и имя файла с ядром, файл раскладки (keytable) или инициализируемый в начале загрузки файл виртуального диска (ramdisk) (соответственно через опции "i", "k", "r"). Например:

\# lilo -I 'linux-up i'

/boot/vmlinuz-up

\# lilo -I 'linux-up k'

us.ktl

\# lilo -I 'linux-up r'

/boot/initrd-up.img

-l

Указывает использовать 24-битную логическую (линейную) адресацию секторов вместо традиционной геометрической адресации цилиндр/головка/сектор диска.

-L

Указывает использовать 32-битные Логические Адреса Блоков (LBA) вместо традиционных геометрических адресов в виде цилиндр/головка/сектор диска, тем самым, предоставляя доступ ко всем разделам диска с более чем 1024 цилиндрами.

-m файл-карты

Использовать альтернативный файл-карту, содержащий список ядер операционных систем, вместо используемого по умолчанию.

-M мастер-диск [ mbr-файл ]

Установить Главную Загрузочную Запись (MBR) на указанное устройство мастер-диск. В том случае, если не задан второй аргумент mbr-файл, новый MBR, по умолчанию, копируется из "mbr.b", который содержится внутри файла /sbin/lilo (версия 22.3). Основная таблица разделов на мастер-диске не изменяется. Если никакой серийный номер диска не указан, тогда создаётся произвольный номер, который и записывается в MBR.

-p

Требует интерактивного ввода всей паролей, которые определены как "" в файле конфигурации.

-P {fix|ignore}

Исправить (fix) или пропустить (ignore) `поврежденные' таблицы разделов, т.е. таблицы с несоответствующими одна другой линейными адресами и адресами в виде цилиндр/головка/сектор. Вначале всегда пытайтесь выполнить -P ignore поскольку команда с опцией -P fix перезаписывает таблицу разделов, что при неблагоприятном исходе может привести к разрушению всех таблиц разделов на диске. Опция -P ignore используется также для отмены процедуры тестирования тех типов разделов, которые не допускают установку LILO в загрузочный сектор. Эта опция часто используется с опцией "-F", которая позволяет отключить проверку загрузочного сектора для некоторых файловых систем (например, swap, XFS, ...).

-q

Выводить список ядер операционных систем (не только Linux), которые можно загрузить во время включения компьютера. Например:

\# lilo -q

linux-up *

failsafe

Windows

floppy

Этот список обычно хранится в файле /boot/map, который для lilo является основным и содержит названия и расположение ядра(ер) загрузки. Эта опция выводит только список названий. Для получения более детальной информации об установленном загрузчике используйте эту опцию с опцией -v.

-r корневой-каталог

Выполняет команду chroot, передавая ей в качестве аргумента указанный корневой-каталог. Необходимость в этом может возникнуть при загрузке с компакт-диска или дискеты в случае восстановления операционной системы. Новый корневой-каталог должен содержать каталог /dev, а также может нуждаться в /boot каталоге. Ему также может понадобится файл /etc/lilo.conf. Эта опция используется сценарием mkbootdisk для создания загрузочной дискеты.

-R строка команды

Эта опция позволяет указать определенную строку команды, которая сработает при следующем запуске загрузчика. Потом загрузчик удалит эту строку. Фактически это одноразовая команда. lilo с этой опцией обычно используется в сценариях перезагрузки системы, сразу перед вызовом `shutdown -r'. Эта опция, указанная без аргументов, отменяет строки, помеченные как lock или fallback.

-s save-file

Когда команда lilo перезаписывает загрузочный сектор, она сохраняет резервную копию его прежнего содержимого в файле, имя которого обычно /boot/boot.NNNN, где NNNN означает соответствующее устройство. Эта опция позволяет указать альтернативный файл для резервной копии загрузочного сектора (или, вместе с опцией -u, позволяет указать из какого файла восстановить загрузочный сектор).

-S save-file

Обычно команда lilo не перезаписывает существующий файл резервной копии загрузочного сектора. Эта опция позволяет перезаписать его.

-t

Выполняет только проверку (тест), не записывая реально вновь созданный загрузочный сектор или файл карты. Используйте совместно с опцией -v чтобы узнать, что в действительности lilo собирается сделать.

-T опция

Выводит системную информацию, часть которой берётся из системного BIOS. Эта возможность более удобна по сравнению с загрузкой диагностической дискеты LILO на проблемной системе. опция может принимать одно из следующих значений:

```
   help  - вывести список доступных опций диагностики

   ChRul - вывести список типов разделов в зависимости от

           правил смены (Change-Rules)

   EBDA  - вывод информации об Extended BIOS Data Area

   geom=<диск> вывод информации о геометрии диска, содержащейся в BIOS;

           например, geom=0x80

   geom  - вывести список о геометрии всех дисков

   table=<диск> вывод информации об основной таблице разделов диска;

           например, table=/dev/sda

   video - вывести список графических режимов, которые доступны для

           загрузчика
```

-u [название-диска]

Убрать загрузчик lilo из главной загрузочной записи и восстановить прежний загрузчик. С этой опцией могут использоваться опции '-s' и '-C'. Указывать название-диска не обязательно. Дополнительно происходит проверка временной метки.

-U [название-диска]

Действует аналогично предыдущей опции, но не делается проверка временных меток.

-v

Подробно информирует о происходящем. Указание от одно до пяти опций -v увеличивает уровень информативности. Можно использовать и такой вариант: -v n (где уровень информативности n=1..5).

-V

Выводит информацию о номере версии программы.

-w

Подавляет предупреждающие сообщения.

-x опция

Только для установленных RAID массивов. Для опции могут быть использованы следующие ключевые слова: none, auto, mbr-only или список дополнительных устройств загрузки (без пробелов между ними), указанных через запятую.

-X

Зарезервировано LILO для внутреннего использования. Может приводить к различным результатам в зависимости от используемой версии LILO. Строка начинающаяся с "CFLAGS=" будет содержать опции компилирования, которые были использованы для сборки данной версии LILO.

-z

Когда используется совместно с опцией -M, выполняет очистку серийного номера устройства. Обычно используется при создании нового серийного номера устройства, как например:

```
     lilo -z -M /dev/hda

     lilo -M /dev/hda
```

Приведенные выше опции командной строки соответствуют следующим ключевым словам файла конфигурации, которые показаны ниже.

-b устройство_загрузки

boot=устройство_загрузки

-B файл.bmp

bitmap=файл.bmp

-c

compact

-d dsec

delay=dsec

-D метка

default=метка

-i загрузчик

install=загрузчик

-f файл

disktab=файл

-g

geometric

-l

linear

-L

lba32

-m файл_карты

map=файл_карты

-P fix

fix-table

-P ignore

ignore-table

-s файл

backup=файл

-S файл

force-backup=файл

-v [N]

verbose=N

-w

nowarn

-x опция

raid-extra-boot=опция

## ОПЦИИ ЗАГРУЗКИ
Опции описанные здесь могут быть указаны в командной строке во время загрузки образа ядра (OC Linux). Эти опции обрабатываются LILO, а после передачи ядру (за исключением некоторых) удаляются из командной строки.

lock

Блокирует использование командной строки, аналогично директиве 'lock', которую можно указать в файле конфигурации 'lilo.conf.'

mem=###[,K,M]

Определяет максимальный объём оперативной памяти в системе. Объём указывается в байтах, килобайтах или мегабайтах. Эта опция не удаляется из командной строки и всегда передаётся в ядро.

nobd

Не производить чтение данных о параметрах из BIOS. Эта опция зарезервирована для использования с не IBM-совместимыми BIOS-ми, которые "зависают" в начале загрузки после выдачи строк:

```
     Loading...............

     BIOS data check
```

vga=[ASK,EXT,EXTENDED,NORMAL]

Позволяет переназначить (используемый по умолчанию) видео режим при загрузке ядра.

## ОШИБКИ ЗАГРУЗКИ
Процесс загрузки происходит в две стадии. Начальная стадия загрузки первого сектора осуществляется или средствами BIOS, или загрузчиком, который находится в MBR. В дальнейшем программный код (содержащийся в этом секторе) уже сам выполняет загрузку ограниченного количества секторов загрузчика для второй стадии. Когда первая стадия загрузки LILO получает управление, на мониторе появляется первая буква "L". Затем он считывает сектора и настраивает их для передачи управления второй стадии загрузки. Здесь появляется буква "I". Если обнаруживается какой-нибудь сбой, например, ошибка чтения диска, будет выдан шестнадцатеричный код ошибки и предпринята попытка повторить операцию. Все шестнадцатеричные коды ошибок являются значениями, которые возвращает BIOS. Ошибки обнаруживаемые и связанные с lilo это - 40, 99 и 9A. Ниже приведена часть списка с некоторыми кодами ошибок:

00 ошибок нет

01 неверная дисковая команда

0A признак "битого" сектора

0B признак "битой" дорожки

20 ошибка контроллера устройства

40 сбой позиционирования головки диска (BIOS)

40 номер цилиндра >1023 (LILO)

99 недопустимый индексный сектора на второй стадии загрузки (LILO)

9A не обнаружена загружаемая сигнатура на второй стадии загрузки (LILO)

AA невозможно прочитать устройство

FF заданное действие завершилось с ошибкой

Ошибку с кодом 40 генерирует BIOS или LILO в процессе преобразования линейных (24-битовых) адресов дискового пространства в геометрические (C:H:S) адреса. Эта ошибка также может появится на старых системах, которые не поддерживают адресацию lba32 (32-битные адреса). Ошибки 99 и 9A обычно означают невозможность чтения файла карты (map-file, -m или map=), обычно из-за того, что LILO не был перезапущен после некоторых изменений в системе или из-за несогласованности в параметрах геометрии устройства, которые использует LILO (см. вывод команды lilo -v3) с реально установленными в BIOS (для устранения этой проблемы вам, возможно, понадобится один из дисков диагностики lilo, распространяемых с исходным кодом lilo).

Когда происходит передача управления от первой стадии загрузки второй, это сопровождается появлением на мониторе второй буквы "L". Последующая инициализация второй стадии, включая проверку "Таблицы Дескрипторов" - списка ядер или других загружаемых компонентов - сопровождается появлением завершающей буквы "O", в форме целого слова "LILO", которое состоит только из заглавных букв.

В течении всей второй стадии загрузки, сообщения об ошибках выводятся на английском языке, с помощью которых более или менее точно можно попытаться найти источник их появления.

## НЕСОВМЕСТИМОСТИ
lilo имеет проблемы с файловой системой reiserfs представленной в ядрах серии 2.2.x в том случае, когда файловая система монтируется без опции 'notail'. Эта несовместимость устранена в файловых системах reiserfs начиная с версии 3.6.18 и lilo версии 21.6.

Начиная с версии 22.0, устройства RAID массивов записывают загрузочную запись в таблицу разделов RAID. Во время записи MBR может возникнуть необходимость оставить RAID загружаемым при последующем восстановлении, однако, все предпринятые по умолчанию действия могут быть изменены. В такой ситуации, для создания архива совместимого с предыдущими версиями, используйте опцию `-x mbr-only'.

## ОШИБКИ
Опции `backup' и `force-backup' файла конфигурации ещё не полностью реализованы правильно для установленных RAID массивов. Используйте стандартный механизм резервного копирования загрузочной записи, кажется, он работает без ошибок, и поэтому он должен быть использован.

## СМ. ТАКЖЕ
fdisk(8), lilo.conf(5), mkrescue(8), mkinitrd(8).

В целом программа lilo сопровождается очень подробной документацией. (lilo 21)

## АВТОРЫ
Werner Almesberger <almesber@lrc.epfl.ch> (версии с 0 по 21)

John Coffman <johninsd@san.rr.com> (версии с 21.2 по настоящую)

## ПЕРЕВОД
оригинального файла на английском lilo.8.gz (5524 байт от 25.06.2004) (+примеры) выполнен Aleksander N.Gorohovski <angel@feht.dgtu.donetsk.ua> 06.12.2005. Уточнения и правка Andrey Rahmatullin <wrar-alt@mail.ru>, Vitaly Lipatov <lav@altlinux.ru>