Шрифт:
Интервал:
Закладка:
iptables -A INPUT --mac-source 11:12:13:14:15:16 -j ...
Потом вы уже сами определите действие после опции -j. Если же нам нужно выделить все пакеты, кроме тех, которые присылает узел с этим MAC-адресом, то нужно использовать символ инверсии «!».
IPTables позволяет указывать несколько портов (не больше 15) через запятую, например:
iptables -A INPUT -p tcp -m multiport --sport 22,53,80,110 -j ...
Вместо портов источника вы можете указать порты назначения, используя опцию --dport.
Если вы хотите одновременно указать как порты источника, так и порты назначения, используйте опцию --port:
iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
19.6.6. Фильтрация по отдельным пользователям
Если IPChains умел отфильтровывать только пакеты, исходящие от определенного компьютера, то теперь мы можем выделять пакеты отдельных пользователей. Для этого предназначены следующие критерии, которые могут использоваться только для исходящих пакетов в цепочке OUTPUT:
♦ --uid-owner UID — отбор пакетов по UID пользователя;
♦ --gid-owner GID — отбор по группе (GID);
♦ --pid-owner PID — отбор по идентификатору процесса;
♦ --sid-owner SID — отбор по идентификатору сеанса.
Например, выделить все пакеты, исходящие от пользователя с UID 500, можно так:
iptables -A OUTPUT -m owner --uid-owner 500
Аналогично мы можем ограничивать исходящие пакеты группы или процесса:
iptables -A OUTPUT -m owner --gid-owner 0
iptables -A OUTPUT -m owner --pid-owner 78
Естественно, мы можем сделать это только для исходящих пакетов, поскольку мы не знаем, какой UID имеет пользователь другой системы: информация об этом не передается по протоколу TCP.
Глава 20
Настройка ядра
20.1. Многообразие ядер Linux
В дереве развития ядер Linux достаточно много веток. И хотя в большинстве случаев придерживаются официальных версий ядер (ветка 2.6.x), упускать из внимания все остальные ни в коем случае нельзя.
2.6.xЭто главная ветка ядер Linux на настоящий момент, которую принято считать официальной и которая поддерживается самим Линусом Торвальдсом. Политика этой ветки более либеральна по сравнению с политикой ветки 2.4: в нее включаются не только исправления багов, но и такие изменения, для которых раньше заводили отдельную, экспериментальную, ветку. Все ядра этой ветки можно найти на сайте www.kernel.org.
2.4.xВ свое время ядра 2.4.x были основными — они встраивались во все дистрибутивы. Однако им на смену пришли ядра 2.6.x, и о ядрах классической ветки не стоило бы говорить, если бы не их исключительная стабильность (по сравнению с ядрами 2.6.x). И хотя они не обладают многими достоинствами и качествами 2.6.x, для тех, кому важна стабильность — они еще служат хорошую службу.
Более того, даже в некоторые современные дистрибутивы еще встраивается эти ядра (например, в Slackware 10.1). На сегодняшний момент эта ветка по прежнему очень активно поддерживается, а руководит данным процессом Марсело Тосатти, очень молодой программист бразильской компании Conectiva.
В качестве обновлений выступают исправления обнаруженных ошибок, ну и периодически — новые драйвера.
Так же как и ядра 2.6.x, ядра ветки 2.4.x. можно получить на сайте www.kernel.org.
2.6.x.уВыше было сказано, что ядра ветки 2.6.x не отличаются особой стабильностью по сравнению с теми же 2.4.x. Даже были намерения сменить схему именования новых ядер. Однако этого не произошло, просто создали дополнительную ветку, которая выступает под грифом «stable» (то бишь стабильная), и которая известна под именем 2.6.x.у.
Ведут ветку -stable товарищи по имени Грег Кроа-Хартман и Крис Райт. В ней появляются только те обновления, которые непосредственно касаются повышения стабильности ядра и решают конкретные проблемы. Никакие обновления с новыми функциональными возможностями и т.п. в ядра этой ветки не вносятся.
2.6.x-mmЕсли в предыдущем разделе мы рассмотрели наиболее стабильную ветку ядер Linux поколения 2.6, ветку 2.6.x-mm можно считать наименее стабильной. Она включает в себя все возможные патчи ядра, которые были выпущены.
Данная ветка является скорее экспериментальной, нежели имеющей практическое значение. Очень многое к Линусу в его ветку 2.6.x попадает именно через фильтр 2.6.x-mm. В частности сейчас в этих ядрах уже имеется поддержка файловой системы Reiser4, которая с легкостью выигрывает все тесты по производительности, и технологии FUSE (http://fuse.sourceforge.net). реализующей поддержку файловых систем в пользовательском пространстве.
Ведет ветку Эндрю Мортон, а патчи ветки доступны в двух видах:
♦ «все в одном» — единый мегапатч;
♦ «каждый сам по себе» — архив патчей, которые можно применять по отдельности.
Скачать их можно по адресу http://kernel.org/patchtypes/mm.html,
2.6.x-mm-jediВетка 2.6.x-mm-jedi является, как это можно понять из названия, ответвлением 2.6.x-mm. И по сути считается stable-версией последней. Здесь собираются самые критичные исправления по различным версиям ядер 2.6.x-mm.
Доступ к данным патчам можно получить по адресу ftp://ftp.c9x.org/pub/linux-kernel.
2.6.x-pre и 2.6.x-rcЯдра этих веток представляют собой предварительные версии ядер, которые впоследствии должны стать официальными. При этом принято считать, что ядра -pre являются наиболее «сырыми» и в них могут быть привнесены существенные изменения, а ядра -rc — уже более-менее стабильными.
2.6.x-tinyАвтор и ведущий данной ветки, Мэтт Мэколл, поставил себе задачу минимизировать занимаемые ядром дисковое пространство и объем памяти. Автор утверждает, что его ядро может быть запущено даже на машине с 2 Мб памяти.
Детально ознакомиться с этим направлением и получить само ядро можно на сайте http://selentic.com/tiny.
2.6.x-acЭта ветка, ведомая Аланом Коксом, призвана аккумулировать все исправления и патчи, касающиеся в основном драйверов. Кстати говоря именно это ядро используется в дистрибутивах Fedora Core.
Проект доступен по адресу http://kernel.org/patchtypes/ac.html
ПрочиеСреди прочих следует также отметить:
♦ 2.6.x-ck — в этой ветке аккумулируются патчи к диспетчерам ввода/вывода, а также направленные на общее повышение отзывчивости системы. Адрес: http://ck.kolivas.org/patches/2.6.
♦ 2.6.x-RT — данная ветка направлена на обеспечение использования Linux в системах реального времени (мягкого и жесткого), насколько это вообще возможно сделать применительно к Linux.
20.2. Зачем настраивать ядро?
В главе 7 я уже говорил о том, что в обязанности ядра ОС Linux входит не только реализация концепций процессов, виртуальной памяти, файловой системы и тому подобных составляющих UNIX, но и организация взаимодействия с оборудованием компьютера. Это взаимодействие осуществляют драйверы устройств, которые в современных (выше 2.0) ядрах могут как встраиваться в ядро статически, так и подключаться в виде модулей.
Хорошо известно, как многочисленно и разнообразно оборудование персональных компьютеров, на которых и работает ОС Linux, Ядро должно уметь адаптироваться к любой аппаратной среде. Этой цели служат параметры ядра — динамические или сообщаемые ему при загрузке — и механизм динамического подключения модулей.
Производители дистрибутивов поставляют ядро в некоторой базовой конфигурации, работающей на множестве вариантов оборудования, но не оптимизированной ни под один из них. Переконфигурировав ядро именно под свою аппаратную среду и задачи, можно существенно повысить производительность и увеличить надежность системы.
В этой главе я рассмотрю три основных способа настройки ядра:
♦ модификация динамических параметров ядра через псевдофайловую систему /proс;
♦ использование загрузчика для передачи ядру параметров на этапе начальной загрузки;
♦ пересборка ядра из исходных кодов.
20.3. Динамические параметры ядра
Файлы в каталоге /proc — это на самом деле информационные каналы, реализующие интерфейс между ядром и прикладными программами. Они разработаны для повышения гибкости ядра, позволяя системному администратору корректировать его поведение «на лету», без перезагрузки. Файловая система procfs называется виртуальной, потому что в действительности это карта работающей системы в иерархическом виде, создаваемая ядром и присоединяемая к обычной файловой системе. Некоторые команды (например, ps) извлекают информацию о состоянии системы, не прибегая к системным вызовам, а читая непосредственно из /proc.
Хотя часть виртуальных файлов содержит текстовые данные, для их просмотра и изменения обычный ASCII-редактор неприменим: ведь они мало того что не существуют физически, так еще и ядро может в любое время внести в них изменения. Читать такие файлы нужно командой cat, а записывать — перенаправляя вывод команды echo. Например, чтобы увидеть максимальное количество файлов, которые можно открыть в одном процессе, введите команду
- Операционная система UNIX - Андрей Робачевский - Программное обеспечение
- Разработка приложений в среде Linux. Второе издание - Майкл Джонсон - Программное обеспечение
- Искусство программирования для Unix - Эрик Реймонд - Программное обеспечение
- Linux - Алексей Стахнов - Программное обеспечение
- Fedora 8 Руководство пользователя - Денис Колисниченко - Программное обеспечение
- Недокументированные и малоизвестные возможности Windows XP - Роман Клименко - Программное обеспечение
- Изучаем Windows Vista. Начали! - Дмитрий Донцов - Программное обеспечение
- Windows Vista - Виталий Леонтьев - Программное обеспечение
- Архитектура операционной системы UNIX - Морис Бах - Программное обеспечение
- Windows Vista. Трюки и эффекты - Юрий Зозуля - Программное обеспечение