Удомельский форум

Удомельский форум (http://second.udomlya.ru/uf/index.php)
-   Свободное ПО (http://second.udomlya.ru/uf/forumdisplay.php?f=25)
-   -   Firewall (http://second.udomlya.ru/uf/showthread.php?t=219)

Vulzscht 27.04.2006 21:53

Firewall
 
Firewall
« написано: 25.04.2006 :: 00:06:52 »
Процитировано сообщение: Vulzscht от 04.04.2006 :: 16:48:10:
6) немного бы узнать о IPtables и работе с ним.
Вероятно, все уже так или иначе имели дело с файерволом -- не буду особо заострять внимание на некоторых моментах...
Однако кое-что из азов уточнить хотелось бы, а именно то, как ведёт себя пакетный фильтр в ОС Linux (ipchains, iptables) и *BSD (ipfw) и в чём состоит главное отличие в его поведении от *BSD (IPFilter, pf).
В Linux, все входящие пакеты попадают в цепочку INPUT, а исходящие -- в OUTPUT (это утверждение справедливо только для нетранзитных пакетов, то есть предназначенной данной машине).
В *BSD системах -- это in и out.

Отличие в следующем: в Linux (ipchains и iptables) и *BSD (ipfw) прграмма фильтрации вызывается по одному разу для каждого правила фильтрации. Этот единственный раз соответствует первому подходящему для пакета правилу.
То есть если мы укажем несколько правил
Код:

iptables -A INPUT -m stare --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 10.0.0.0/17 -d 10.0.75.5 -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/17 -d 10.0.75.5 -p tcp -m tcp --dport 21 -j REJECT
iptables -A INPUT -s 10.0.0.0/17 -d 10.0.75.5 -p tcp -m tcp -m multiport --dports 137,139 -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A OUTPUT -j ACCEPT

то третье по счёту правило _никогда_ не будет выполняться!!!
Это обусловлено тем, что для всех пакетов, соответсвующих требованиям:
- исходящий адрес из диапазона 10.0.0.0/17
- адрес назначения 10.0.75.5
- TCP протокол
- порт назначения 21
уже обработаны -- к ним применено ПЕРВОЕ правило, которому они соответствовали. а именно -- ACCEPT!
То есть для Linux (ipchains, iptables) следует правила составлять в порядке от менее значимого к более значимому.
Вследствие обработки лишь первых правил, соответсвующих пакету, повышается производительность файерволов iptables и ipchains в сравнении с IPFilter и pf.

В *BSD системах (FreeBSD с IPFilter и OpenBSD с pf) -- всё с точностью до наоборот!!!
То есть файервол там работает по принципу "консервативного" файервола -- к пакету будет применено ПОСЛЕДНЕЕ правило, которому он будет соответствовать!
То есть, если мы напишем в /etc/pf.conf для OpenBSD

Код:

block in
pass out keep state
pass in on $ext_if proto tcp from 10.0.0.0/17 to 10.0.75.5 port 21 keep state

Всё будет работать правильно (а ведь первым правилом является 'block in' -- блокировать все входящие пакеты) -- доступ на FTP сервер разрешён (и никуда более!). А всё потому, что применяется последнее значимое правило.

Для более детального ознакомления с опциями программы iptables, рекоммендую обратиться к прочтению следующего документа: ftp://10.0.75.5/exch/linux-info/iptables-textbook.tgz

Цитата:
FirewallBuilder - это просто графический интерфейс для iptables или я неправ?
Да.

Vulzscht 11.05.2006 20:07

почитал документ, пасибо
возник вопрос - в консоли я запускаю iptables командой
Код:

/etc/rc.d/init.d/iptables start
а вот с добавлением правил не очень понял...
просто если использовать просто iptables или путь указанный выше и уже настройки какие-либо, выдается что команда не найдена
и еще вопрос - может, хотя не дошел еще по мануалу, - при загрузке iptables автоматом грузится последний файл настроек?
и как создать свой файл и добавить iptables в автозагрузку по умолчанию
понимаю, что вопросы детские, но... увы... "я не волшебник, я только учусь"

grumbler 14.05.2006 22:55

Цитата:

Сообщение от Vulzscht
почитал документ, пасибо
возник вопрос - в консоли я запускаю iptables командой
Код:

/etc/rc.d/init.d/iptables start
а вот с добавлением правил не очень понял...
просто если использовать просто iptables или путь указанный выше и уже настройки какие-либо, выдается что команда не найдена
и еще вопрос - может, хотя не дошел еще по мануалу, - при загрузке iptables автоматом грузится последний файл настроек?
и как создать свой файл и добавить iptables в автозагрузку по умолчанию
понимаю, что вопросы детские, но... увы... "я не волшебник, я только учусь"

Правила можно добавлять прямо в процессе: то есть пишешь в коммандной строке
Код:

/sbin/iptables -A OUTPUT -j ACCEPT #себе мы разрешаем всё!
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #всем остальным -- только то, что можно
/sbin/iptables -A INPUT -s 10.0.0.0/17 -d 10.0.23.29 -p tcp -m tcp -m multiport --dports 137,138,139,445 -j ACCEPT
/sbin/iptables -A INPUT -s 10.0.0.0/17 -d 10.0.23.29 -p tcp -m tcp --dports 21 -j ACCEPT
#и так далее

Далее для сохранения правил в файл конфига пользуешься утилитой iptables-save, а для их восстановления -- iptables-restore.
Код:

man iptables-save
man iptables-restore

Вообще говоря, скрипт /etc/init.d/iptables должен уметь делать и то и другое.

Просмотреть текущий набор правил можно при помощи комманды
Код:

iptables -L
и различных дополнительных опций.
Код:

man iptables
И ещё: в разных дистрибутивах Linux на безопасность смотрят по-своему, и как следствие, в переменной окружения $PATH не всегда присутствуют все директории с системными утилитами/программами.
Иногда это может поставить в тупик: как так (iptables у меня точно стОит, а система мне говорит: "command not found")?
Для поиска можно воспользоваться утилитой locate:
Код:

locate iptables
(В этом случае в системе необходимо наличие slocate. Если база данных slocate не не обновлялась -- выполни updatedb).
Иногда просто нужно узнать расположение системной утилитки (только в том случае, если путь к ней присутствует в переменной окружения $PATH) -- в этом случае поможет which:
Код:

which updatedb

Vulzscht 15.05.2006 15:55

Цитата:

вроде кое-что понимаю, но точно и ясно непонятно как восстанавливать правила после рестарта iptables, совсем непонятно, нашел только что стандартная база его называется filter, но никаким макаром не получилось ее загрузить...
немножко подумал...
Код:

[root@dekwin Lain]# /sbin/iptables-restore -t /etc/foomatic/filter.conf
впринципе получилось так восстановить правила... правда выдалось сообщение об ошибке, но при просмотре цепочек все оказалось на месте...

а вообще все-таки как восстановить нормально правила? в мануале по восстановлению упоминается только параметры -с (восстановить все как я понял) и -n (не очищать все вроде как), просто еще интересно где точно лежил этот файл настроек
вобщем вот как все происходит:
Код:

[root@dekwin dekwin]# /etc/rc.d/init.d/iptables start
Applying iptables firewall rules:                                                                                                [ DONE ]

[root@dekwin dekwin]# /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target    prot opt source              destination

Chain FORWARD (policy ACCEPT)
target    prot opt source              destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source              destination

[root@dekwin dekwin]# /sbin/iptables -A OUTPUT -j ACCEPT
[root@dekwin dekwin]# /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@dekwin dekwin]# /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target    prot opt source              destination
ACCEPT    all  --  anywhere            anywhere            state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target    prot opt source              destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source              destination
ACCEPT    all  --  anywhere            anywhere

[root@dekwin dekwin]# /sbin/iptables-save -c -t
/sbin/iptables-save: option requires an argument -- t
# Generated by iptables-save v1.3.1 on Tue May 16 14:42:45 2006
*nat
:PREROUTING ACCEPT [315:44349]
:POSTROUTING ACCEPT [2:115]
:OUTPUT ACCEPT [2:115]
COMMIT
# Completed on Tue May 16 14:42:45 2006
# Generated by iptables-save v1.3.1 on Tue May 16 14:42:45 2006
*mangle
:PREROUTING ACCEPT [8879:12060245]
:INPUT ACCEPT [14298:17852109]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4533:185315]
:POSTROUTING ACCEPT [7265:314208]
COMMIT
# Completed on Tue May 16 14:42:45 2006
# Generated by iptables-save v1.3.1 on Tue May 16 14:42:45 2006
*filter
:INPUT ACCEPT [6102:8122457]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2519:104415]
[2629:3917568] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[2014:80900] -A OUTPUT -j ACCEPT
COMMIT
# Completed on Tue May 16 14:42:45 2006

[root@dekwin dekwin]# /etc/rc.d/init.d/iptables stop
Resetting built-in chains to the default ACCEPT policy:                                                                          [ DONE ]

[root@dekwin dekwin]# /etc/rc.d/init.d/iptables start
Applying iptables firewall rules:                                                                                                [ DONE ]

[root@dekwin dekwin]# /sbin/iptables-restore -c -n

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

а еще покопался в fwbuilder - есть там темка интересная... создается просто *.fw скрипт, при запуске которого все правила автоматом добавляются в iptables... единственное что пока не очень понятно, как в самом fwbuilder правила добавлять... уж больно хитро там как-то...

grumbler 18.05.2006 20:58

Скрипт /etc/init.d/iptables уже умеет и сохранять и восстанавливать правила.
Притом делает он это в момент старта и останова автоматически.

Цитата:

Сообщение от Vulzscht
немножко подумал...
Код:

[root@dekwin dekwin]# /sbin/iptables-save -c

Есть такая возможность -- перенаправление ввода/вывода называется...
При вводе вышеуказанной комманды, iptables просто выплюнул тебе всё на стандартный вывод (дисплей). Для сохранения всего этого хозяйства в файл, необходимо перенаправить вывод в файл, например
Код:

/sbin/iptables-save -c > /etc/sysconfig/iptables-rules
А для восстановления, соответственно
Код:

/sbin/iptables-restore -c < /etc/sysconfig/iptables-rules
Опция -n в iptables-restore используется для _не_очистки_ предыдущего набора правил. То есть, если ты выполнил
Код:

iptables-restore -n новый_набор_правил
то ты получишь предыдущий набор правил плюс новый_набор_правил, а не только новый_набор_правил. Без этой опции при выполнении iptables-restore предыдущий набор правил _очищается_.

Цитата:

с моей точки зрения юзверя вроде как все правильно, если не указана таблица, то используется таблица по умолчанию...
Необходимой таблицей является таблица flter.
Таблицы же mangle и nat тебе не нужны.
Без опции -t имя_таблицы iptables должен сохранять/восстанваливать весь набор правил.

Цитата:

а еще покопался в fwbuilder - есть там темка интересная... создается просто *.fw скрипт, при запуске которого все правила автоматом добавляются в iptables... единственное что пока не очень понятно, как в самом fwbuilder правила добавлять... уж больно хитро там как-то...
Не приходилось им пользоваться...
Разбирайся!


Текущее время: 10:59. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot