|
|
Кто не спрятался, я не виноват!Фильтрация пакетов, firewall и маскарадинг в Линуксеipchains: команды, параметры, флагиКоманды операций с правилами в цепочке:
Условия проверки пакетов, которые можно задавать в правилах:
Действия с пакетами, которые можно задавать в правилах:
Команды операций с целыми цепочками:
Команды маскарадинга:
Ручная проверка работы фильтраИзменение нескольких правил одной командой:
А теперь подробно обо всех командах, параметрах и флагах: Команды операций с правилами в цепочках
Добавление нового правила к цепочке производится командой
'-A' (add), за которой следует имя цепочки и все другие необходимые параметры и
флаги, например: ipchains -A input -s 127.0.0.1 -p icmp -j DENYбудет уничтожать ICMP-пакеты с адреса 127.0.0.1 при проверке по входной цепочке. Правила, добавляемые командой -A, приписываются в конец цепочки.
Новое правило можно вставить в определенную позицию цепочки командой '-I'
(insert), после которой должен быть указано имя цепочки и номер, а также другие
необходимые параметры. Остальные правила в цепочке (если они есть) будут
сдвинуты на следующие позиции. Первое правило в цепочке имеет номер 1.
Например: ipchains -I forward 1 -p tcp -d 0/0 www -j DENYзапрещает пересылку tcp-пакетов на www-порт. Заменить правило в определенной позиции цепочки можно командой '-R' (replace), после которой должен быть указано имя цепочки и номер, а также другие необходимые параметры. Синтаксис полностью совпадает с командой '-I'.
Удалить правило в определенной позиции цепочки можно командой '-D' (delete),
например: ipchains -D forward 1Остальные правила в цепочке (если они есть) сдвигаются на 1 позицию.
Если вы не знаете номера правила в цепочке и не хотите его определять,
то можно применить команду удаления по условию.
Для этого после команды -D и названия цепочки надо указать абсолютно тот же набор
параметров, который использовался при создании правила командами '-A', '-I'
или '-R', например: ipchains -D input -s 127.0.0.1 -p icmp -j DENYОднако, если в цепочке было несколько одинаковых правил, будет удалено только первое из них. Условия проверки пакетов, которые можно задавать в правилах:Адреса отправителя и получателя могут быть заданы, соответственно, после параметров '-s' и '-d', в следующих формах:
Инверсия условия: многие условия (в частности, -s и -d) допускают инвертирование путем указания '!' перед параметром. Например, чтобы указать все пакеты, кроме пришедших с localhost, надо использовать параметр '-s ! localhost' Протокол ('-p') может указываться в виде названия (большими или маленькими буквами) - TCP, UDP, ICMP, или в виде номера (см. /etc/protocols). К протоколам также может применяться инверсия: '-p ! TCP'означает любой протокол, кроме TCP. Для протоколов TCP и UDP в параметрах '-s' и '-d' после адреса могут указываться номера портов. Порты могут указываться в виде символического имени, например, www (см. /etc/services), в виде десятичного номера (например, 80) и в виде диапазона (80:82 включает порты 80, 81, 82). Если в диапазоне пропущена нижняя граница, то подразумевается 0 (например, :19 означает все порты с 0 по 19 включительно), если верхняя, то подразумевается 65535. Если порт не указан вовсе, то подразумеваются все. К портам также может применяться инверсия: '-p TCP -d 0.0.0.0/0 ! www'означает все пакеты протокола TCP, кроме адресованных на 80 порт.
Внимание! Условие '-p TCP -d ! 192.168.1.1 www'сильно отличается от '-p TCP -d 192.168.1.1 ! www'Первое означает любой TCP-пакет на www-порт любой машины, кроме как на 192.168.1.1. Второе означает любой TCP-пакет на любой порт машины 192.168.1.1, кроме порта www. А запись '-p TCP -d ! 192.168.1.1 ! www'означает любой TCP-пакет, кроме адресованных на любой порт машины 192.168.1.1 и кроме адресованных на www-порт любой машины.
Для протокола ICMP могут указываться тип (type) и код (code) ICMP-пакетов.
Тип может указываться после адреса в параметре '-s', а код - в параметре '-d'.
Они могут указываться в виде чисел, а тип - и в виде символического имени.
Чтобы получить список символических имен типов, наберите команду ipchains -h icmpВот небольшая таблица наиболее распространенных типов ICMP-пакетов: Номер типа: Название: Кем используется: 0 echo-reply ping 3 destination-unreachable любой TCP/UDP-трафик 5 redirect маршрутизация в отсутствие демона маршрутизации 8 echo-request ping 11 time-exceeded tracerouteВ текущей версии ipchains имена типов не могут инвертироваться с помощью '!'. Внимание! Ни в коем случае не запрещайте передачу ICMP-пакетов типа 3! Это может сильно замедлить или вообще заблокировать передачу данных. Интерфейсом называется физическое или логическое устройство, через которое могут приниматься или передаваться пакеты. Чтобы узнать, какие интерфейсы присутствуют в вашей машине и активны (up), воспользуйтесь командой ifconfig. Параметр '-i' позволяет задать проверку интерфейса в правиле. Интерфейсом для входящих пакетов (т.е. проверяемых по входной цепочке) является тот интерфейс, через который они получены. Интерфейсом для выходящих пакетов (т.е. проверяемых по выходной цепочке) считается тот, через который они будут отправлены. Интерфейсом для транзитных пакетов (т.е. проверяемых по пересылочной цепочке) также считается тот, через который они будут отправлены дальше, хотя такое решение несколько произвольно.. При проверке по пользовательской цепочке интерфейс определяется в зависимости от того, из какой встроенной цепочки она была вызвана. Вполне допустимо при задании правил указывать неактивный (down) или вообще отсутствующий в данный момент интерфейс. Такое правило просто не будет соответствовать ни одному пакету, пока интерфейс не активизируется. Можно указать сразу некоторую группу интерфейсов, написав '+' после имени. Так, '-i ppp+' означает все интерфейсы, имена которых начинаются с 'ppp' (в том числе, и не существующие на момент задания правила). К интерфейсам также применима инверсия: '-i ! eth0' означает все интерфейсы, кроме eth0. Иногда бывает полезно разрешить создание TCP-соединений только в одну сторону (например, из локальной сети в остальной интернет, но не наоборот). Фильтрация пакетов только по адресам здесь не поможет, потому что TCP-соединение требует передачи пакетов в обе стороны. Решение состоит в том, чтобы уничтожать пакеты с запросом на установку соединения, идущие в нежелательную сторону.
Пакеты с запросом на установку TCP-соединения отличаются тем, что у них
установлен флаг SYN, а флаги FIN и ACK сброшены, и по традиции называются
SYN-пакетами. Проверка этого условия включается флагом '-y'.
Он допустим только в правилах с указанным протоколом TCP, например: -p TCP -s 192.168.1.1 -yозначает пакеты на установку соединения, отправленные с машины 192.168.1.1. В документации написано, что флаг -y может инвертироваться с помощью '!' для указания всех пакетов, кроме SYN, но я не представляю себе, как это пишется. Сами проверяйте. Иногда случается так, что пакет превышает максимально возможный размер для передачи по некоторому каналу (MTU - maximum transfer unit). В этом случае он разбивается на несколько пакетов (фрагментов), которые посылаются по отдельности. Это называется фрагментацией (fragmentation). На принимающей стороне фрагменты собираются обратно (дефрагментация - defragmentation). Проблема состоит в том, что некоторые данные, необходимые для проверки условий фильтрации, содержатся только в первом фрагменте (в частности, порт отправителя, порт получателя, тип ICMP, код ICMP, TCP флаг SYN). Если ваша машина является единственным шлюзом, соединяющим локальную сеть с остальным интернетом, вы можете указать ей дефрагментировать все проходящие через нее пакеты (надо собрать ядро с параметром CONFIG_IP_ALWAYS_DEFRAG). Если ваша машине не дефрагментирует транзитные пакеты, то фильтрация будет работать так: если правило содержит проверки информации, которая отсутствует во фрагменте, то условие считается не выполненным, и правило не срабатывает. Таким образом, первый фрагмент обработается как любой нефрагментированный пакет, а все остальные фрагменты - нет. Например, условие '-p TCP -s 192.168.1.1 www'не сработает на втором и последующих фрагментах пакета. Но также не сработает и обратное условие: '-p TCP -s 192.168.1.1 ! www'поскольку во втором и последующих фрагментах вообще нет информации о номере порта. Вы можете указывать правила для второго и последующих фрагментов с помощью флага '-f'. Очевидно, его нельзя применять вместе с номерами портов TCP/UDP, типом и кодом ICMP, и TCP SYN флагом, поскольку эта информация во втором и последующих фрагментах отсутствует. Можно также указать, что правило не применяется ко второму и последующим фрагментам, указав '!' перед '-f'. Раньше считалось безопасным пропускать второй и последующие фрагменты любых пакетов, поскольку первый фрагмент при необходимости будет уничтожен, и на машине-получателе весь пакет все равно собран не будет. Однако сейчас известны способы вызвать неработоспособность компьютеров просто путем посылки фрагментов. Имейте это в виду. Некорректно сформированные пакеты (TCP, UDP, ICMP до того короткие, что из них нельзя извлечь информацию о номерах портов или коде и типе ICMP) также считаются фрагментами и обрабатываются по правилам для фрагментов.
Следующий пример уничтожает фрагменты, адресованные на 192.168.1.1: ipchains -A input -f -d 192.168.1.1 -j DENY Действия с пакетами, которые можно задавать в правилах:Основное действие с пакетом, если он соответствует условию правила, задается с помощью параметра '-j' (jump to). Существует шесть специальных действий:
Если действие правила не указано, то даже при соответствии пакета его условиям
продолжается проверка следующих правил в
цепочке. Такие правила называются учетными (accounting) и используются для
учета трафика. Например, чтобы считать трафик от 192.168.1.1, можно
использовать правило: ipchains -A input -s 192.168.1.1и проверять трафик командой ipchains -L -v Флагом '-l' (log) можно указать, что пакет следует записать в системный журнал. Обычно это применяется для регистрации возможных атак или при отладке сетевых настроек. Не злоупотребляйте регистрацией в системном журнале, а то он начнет быстро распухать.. Изменение Типа Обслуживания (TOS, Type Of Service) задается параметром '-t'. В заголовке IP-пакета есть 4 специальных редко используемых битовых флага, которые могут влиять (а могут и не..) на обслуживание пакета некоторыми маршрутизаторами:
ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10 ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10 ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08Флаг '-t' имеет 2 шестнадцатиричных параметра, которые применяются так: новыйTOS = (старыйTOS AND первый параметр) XOR второй параметр Для простоты приводится таблица со значениями параметров: Название Типа Обслуживания: Значения параметров: Типичное применение Minimum Delay 0x01 0x10 ftp, telnet Maximum Throughput 0x01 0x08 ftp-data Maximum Reliability 0x01 0x04 snmp Minimum Cost 0x01 0x02 nntp Команды операций с целыми цепочкамиВы можете создавать свои цепочки правил. Называть цепочки можно любыми именами, кроме имен встроенных цепочек и стандартных действий (т.е. input, output, forward, ACCEPT, DENY, REJECT, MASQ, REDIRECT, RETURN). Не рекомендуется использовать в именах большие буквы, поскольку они могут быть задействованы в следующих версиях ipchains. Имя цепочки может содержать до 8 символов.
Создание новой цепочки производится командой '-N' (new), например: ipchains -N test
Удаление цепочки производится командой '-X', например: ipchains -X testПочему '-X'? А потому, что все хорошие буквы уже задействованы. Существует ограничение: цепочку можно удалить только если она пустая (т.е. в ней нет ни одного правила), и если на нее не ссылаются никакие правила из других цепочек.
Очистка (flushing) цепочки (т.е. удаление из нее всех правил)
производится командой '-F' (flush), например: ipchains -F forwardЕсли имя цепочки не указано, то будут очищены все цепочки.
Просмотр одной цепочки или всех сразу производится командой '-L' (list),
например: ipchains -L inputЕсли имя цепочки не указано, то будут показаны все цепочки. В выводимой информации значение refcnt означает, сколько правил ссылаются на данную цепочку в своих действиях. Чтобы цепочку можно было удалить, ее refcnt должен быть равен 0. Вместе с командой '-L' можно указывать следующие флаги:
Сброс (обнуление) счетчиков производится командой '-Z' (zero), например: ipchains -Z inputЕсли имя цепочки не указано, то обнуляются счетчики всех цепочек. Иногда требуется узнать состояние счетчиков непосредственно перед обнулением. Применение последовательно команд 'ipchains -L -v' и 'ipchains -Z' не подходит, поскольку в промежутке между их выполнением счетчики могут изменить свое значение. В таком случае можно указать обе команды в одном вызове: ipchains -L -v -Zно при этом нельзя задать конкретную цепочку - статистика будет выведена и затем сброшена для всех цепочек сразу. Задание политики для цепочки производится командой '-P' (policy). Если пакет не удовлетворяет ни одному условию в цепочке, то к нему применяется политика цепочки. Политика может задаваться только для встроенных цепочек (input, output, forward). Политика может быть: ACCEPT, DENY, REJECT а для пересылочной цепочки еще и MASQ. Задание политики MASQ для пересылочной цепочки не рекомендуется по соображениям безопасности: злоумышленник может настроить маршрутизацию своих пакетов на ваш шлюз, и его пакеты, не соответствующие явно никаким правилам в пересылочной цепочке, будут по умолчанию маскарадиться. В результате он сможет работать в интернете с IP-адреса вашего шлюза, скрывая свой реальный адрес. Хинт: использование действия RETURN в правилах
цепочки позволяет применить к подходящему пакету текущую политику цепочки
вместо конкретного действия.
Операции с маскарадингом:Для работы с маскарадингом используется команда '-M' (masquerade), которая может сочетаться с '-L' (list) для просмотра текущих установок маскарадинга, и с '-S' (set) для установки параметров. '-L' может использоваться со своими флагами '-n', '-v', '-x'.
После '-S'
должны следовать три параметра, задающие таймауты в секундах, соответственно,
для TCP-сеансов, для TCP-сеансов после FIN-пакета, и для UDP-пакетов.
Если вы не хотите менять значение какого-то параметра, укажите для него
значение 0. Наиболее часто приходится менять первый из этих параметров для
нормальной работы FTP.
Ручная проверка работы фильтра пакетов
Если вы хотите проверить, как будет работать фильтр на некотором пакете,
используйте команду '-C' (check). Параметры этого фиктивного пакета задаются
точно так же, как и в правилах: '-p' для протокола, '-s' для адреса отправителя,
'-d' для адреса получателя, '-i' для интерфейса. Если используется протокол TCP
или UDP, то в адресах отправителя и получателя должен быть указан порт, а для
ICMP - код и тип ICMP, кроме случая, когда проверяется не первый фрагмент
пакета ('-f') - там этой информации быть не должно. Для протокола TCP и в
отсутствие флага '-f' (т.е. проверяемый пакет не является фрагментом) можно
указать флаг -y для имитации SYN-пакета. Пример: проверяем по входной цепочке
TCP SYN-пакет от 192.168.1.1 порт 60000 на 192.168.1.2 порт www, пришедший
через интерфейс
eth0, (типичный запрос на установку www-соединения): ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 wwwВ ответ на эту команду ipchains сообщит судьбу пакета, например 'Packet accepted'. Изменение нескольких правил одной командойИногда одна команда может воздействовать сразу на несколько правил. Это может происходить по двум причинам.
Во-первых, если вы указываете символический адрес машины, а его разрешение
через DNS дает несколько различных IP-адресов, то ipchains будет действовать
так, как если бы вы ввели несколько команд со всеми возможными сочетаниями
IP-адресов. Например, если www.foo.com разрешается в 3 адреса, а www.bar.com -
в 2 адреса, и вы ввели команду ipchains -A input -j reject -S www.bar.com -d www.foo.comто ко входной цепочке добавится 6 правил.
Во-вторых, ipchains может выполнить несколько действий, если вы указали флаг
'-b' (bidirectional). При этом ipchains будет действовать так, как если бы вы
ввели команду дважды, во втором случае поменяв местами параметры '-s' и '-d'.
Например, чтобы запретить пересылку пакетов от и к 192.168.1.1,
можно воспользоваться командой: ipchains -b -A forward -j REJECT -s 192.168.1.1Флаг '-b' может применяться в командах '-A', '-C', '-I', '-D' (кроме удаления по номеру правила).
Еще один полезный флаг - '-v' (verbose), который позволяет точно узнать,
что сделала ваша команда. Он особенно полезен, если ваша команда может
воздействовать сразу на несколько правил. Например, можно проверить, как
работает пересылка фрагментов сразу в обе стороны между 192.168.1.1 и
192.168.1.2: ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo. << Страница 2 Страница 4 >>
создать сайт :: продвижение сайтов :: Быстрые международные перевозки :: Защитив свой компьютер, можно спокойно отправиться вавтобусные туры во францию :: Нужна спальня? мебель спальни недорогие и гостиные | ||||||||||||||||