от mystical(11-12-2010)

рейтинг (45)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Основи на iptables

След версия 2.4 на ядрото , GNU/Linux представи изцяло нов софтуер за обработка на пакети, наречен Netfilter. Инструментът, използван за контролиране на Netfilter, iptables, е големият брат на по- старата команда ipchains, използвана в ядрата от версия 2.2. iptables прилага подредени “вериги” от правила за мрежовите пакети. Наборите от вериги съставят “таблици” и се използват за обработка на определени видове трафик. Възможните вериги са INPUT, OUTPUT, FORWARD, PREPOUTING и POSTROUTING, а таблиците са filter, nat, mangle и raw.

Таблици и вериги на IPTABLES

Всички правила в iptables имат основен синтаксис. Този синтаксис е:

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

Първата част от синтаксиса на iptables е незадължителната опция -t таблица. Подразбиращата се таблица на iptables се нарича “filter”. Веригите от правила в нея се използват за филтриране на пакетите на мрежовия трафик. Таблицата filter съдържа три подразбиращи се вериги – INPUT, FORWARD и OUTPUT. Всеки пакет, който се обработва от ядрото, се пропуска през точно една от тях.

  • Правилата във веригата INPUT се прилагат върху трафика, адресиран към локалния хост. При. - пакети, които са насочени само към рутера.

  • Правилата във веригата OUTPUT се прилагат върху трафика, идващ от локалния хост (локално генерираните пакети). При. - пакети, които водят началото си от рутера. Неща изпращани от рутера, като syslog до отдалечен syslog сървър, отговор на ping (echo) заявки и др.

  • Правилата във веригата FORWARD се прилагат върху всички пакети, които пристигат на мрежовия интерфейс и трябва да се пренасочат към друг. При. - пакети, които влизат в рутера и ще бъдат изпратени към други устройства.

Да помислим по този начин... Ако искам да контролирам трафика между интернет и потребителите, който преминава през рутер, тогава ще трябва да използвам FORWARD веригата, за да филтрирам/управлявам този трафик. Ако искам да огранича тези, които могат да се свържат с моя рутер, ще трябва да използвам INPUT веригата. Ако искам да управлявам главния трафик, ще използвам OUTPUT веригата. Почти не се среща да видите голям управляващ ред в OUTPUT веригата, като повечето от трафика, който се свързва с OUTPUT веригата е управляем или чрез управляващите настройки (например конфигуриращи syslog сървъра) или чрез контролиране на INPUT (без да е нужно да ограничавате echo отговорите, ако просто контролирате, от къде може да допуснем да идват echo заявките). МНОГО Е ВАЖНО да не мислите за тези три вериги, като че ли имат нещо общо с посоката на трафика, както се отнася към мрежата. Много честа грешка е да поставите условие в INPUT веригата, мислейки, че това ще предотврати трафика от интернет от сканирането на компютрите на потребителите.

Таблицата „nat” съдържа вериги правила за контрол на Network Address Translation (тук “nat” е името на таблицата на iptables, а “NAT” е името на схемата за превод на мрежови адреси). Тази таблица се взема в предвид само когато пакета, който създава нова връзка е неочаквано срещнат. Таблицата nat се използва за DNAT (Destination NAT), SNAT (Source NAT) и маскиране (masquerade). Тя имплементира веригите:

  • PREROUTING (преди маршрутизиране, източник; Destination NAT - за влизащи пакети)

  • POSTROUTING (след маршрутизиране, насока; Source NAT - за излизащи пакети) и OUTPUT.

Таблицата „mangle” съдържа вериги, които модифицират или променят съдържанието на мрежовите пакети извън контекста на NAT и филтрирането на пакети. Тя се използва, когато искате да модифицирате TOS (Type of Service) битове или да поставите върху пакета маркер, който netfilter може да използва за поставяне в опашка и на други неща. Въпреки, че тя е много полезна за специални обработки на пакети, като например промяната на времето на живот на IP пакетите , тя обикновено не се използва в повечето производствени среди.

Команди и Опции на iptables

-A (-append) добавяне -Добавяне на правило към края на дадена верига. Тази команда приема като задължителни аргументи име на верига и спецификация на правило

iptables -A INPUT -p tcp –dport 23 -j DROP

Тази команда добавя условие в края на системата INPUT, която ще донесе всичкия насочен трафик към рутера запомнете за какво е INPUT системата) и е tcp пакета с насоката порт 23 (telnet).

-D (-delete) изтриване - Изтриване на правилата от дадена верига. Тази команда приема като задължителни аргументи име на верига и спецификация на правило или номер на правило.

iptables -D INPUT 4

Тази команда би изтрила 4-тото правило в INPUT веригата. Правилата са номерирани, започвайки от 1 (не 0).

-C (check) проверка - изискват се -s, -d, -p, -i . Тази команда приема като задължителни аргументи име на верига и спецификация на правило.

-I (-insert) вмъкване - Вмъкване на правила в зададена верига. Разширение на -А, но спецификацията на правило се поставя пред зададен номер на правило. Тази команда приема като задължителни аргументи име на верига, номер на правило, пред което се вмъква и спецификацията на правило.

iptables –insert INPUT 2 -p tcp –dport 22 -j DROP

Тази команда вмъква правило във втората позиция на веригата INPUT, която ще изпусне TCP трафика, предопределен за порт 22 (ssh). Правилото ще бъде поставено между предишните правила в позиция 1 и 2 (старото правило номер 2 ще стане номер 3).

-R (-replace) заменяне - Заменяне на правило в зададена верига. Комбинация от Insert и Delete. Тази команда приема като задължителни аргументи име на верига, номер на правило и спецификация на правило. Спецификацията замества номера в зададената верига.

-F (-flush) изчистване - Изтриване на всички правила в дадена верига или във всички вериги, ако не е зададено име на верига.

-L (-list) списък - Извеждане на списък на всички правила в дадена верига или във всички вериги, ако не е зададено име на верига.

-z (-zero) нулиране - Нулиране на броячите. Нулира броячите в зададена верига или във всички вериги, ако не е зададено име на верига.
-N (-new)нова - Създаване на потребителски дефинирана верига. Тази команда изисква само име на веригакато задължителен аргумент.
-X Изтриване на потребителски дефинирана верига - Тази команда изисква име на верига. Тази верига трябва да бъде празна. Подразбиращите се вериги не могат да бъдат изчистени.
-P (-policy) политика - Задаване на политика за дадена верига. Тази команда приема като задължителни аргументи име на верига и цел
-E (-rename chain) преименуване на верига - Тази команда приема като задължителни аргументи старо име на верига и ново име на верига.
-h (-help) помощ - Помощ за синтаксиса на командите..

Цели (политики) в iptables

Всяко правило, което съставя верига, има клауза “target” (цел), която определя какво се прави с отговарящите й пакети. Когато някой пакет отговаря на дадено правило, съдбата му в повечето случаи е решена окончателно, не се използват допълнителни правила. Въпреки че много цели са дефинирани вътрешно в iptables, все пак се позволява като цел на правило да се подаде друга верига.

Целите, налични за използване в правилата на таблицата filter, са ACCEPT, DROP, REJECT, LOG, MIRROR, QUEUE, REDIRECT, RETURN и ULOG. Когато правилото води до използване на

  • ACCEPT – пропускане на пакетите

  • DROP - отхвърля пакетите тихо

  • REJECT - отхвърля пакетите и връща ICMP съобщение за грешка

  • MASQUERADE - маскиране на пакета. Използва се с POSTROUTING

  • LOG - дава прост начин за проследяване на пакетите, които отговарят на правилата

  • ULOG - предоставя по- разширени дневници.

  • REDIRECT - отклонява пакетите към прокси, вместо да ги остави да продължат по пътя си. Тази функция може да се използва, за да се прекара целия уеб трафик на сайта през уеб кеш, какъвто е Squid.

  • RETURN - терминира дефинирани от потребителите правила и е аналогична на контракцията ретурн при извикване на подпроцедура.

  • MIRROR - разменя IP адресите на източника и дестинацията, преди да изпрати пакета.

  • QUEUE - подава пакетите на локални потребителски програми чрез модул на ядрото.


Опции на IPTABLES
С известен брой опции можете да използвате знака ! за обръщане на значението им.
-p [!] протокол - Този параметър свързва протокола на пакета. Това може да е един от tcp, udp, icmp, or all, или който и да е протокол, изброен в /etc/protocols или просто можете да ползвате номера на протокола. Пълният списък от протоколни номера може да бъде намерен на  http://www.iana.org/assignments/protocol-numbers.

Тоз пример приема всеки TCP пакет

iptables -A INPUT -p tcp -j ACCEPT

Този пример приема OSPF (протокол номер 89)

iptables -A INPUT -p 89 -j ACCEPT

Този трафик изпуска всеки пакет, който не е NOT UDP

iptables -A INPUT -p !udp -j DROP

-s [!] (–source) адрес - Адрес на източника. Може да приема !, мрежова маска или порт. Адресът 0/0 отговаря на всички адреси и е подразбиращият се, ако не зададете опция -s.

-d [!] (–destination) адрес - Адрес на получателя, посоката на IP адреса . Същите критерии както за -s.
--sport [!] порт[:порт] - Валидна е само сле опция -р tcp или -р udp. Задава порт на източника или диапазон от портове ( диапазоните се задават чрез използване на знаковете - или : за разделяне на крайната и началната стойност на диапазона). Можете да я използвате с опцията -m multiport ( до 15 порта могат да бъдат зададени). Ето някои примерни фрагменти от правилата:

-p tcp --sport 0:1023
-m multiport -p tcp --sport 25,110

--dport [!] порт[:порт] - Валидна е само след някоя от опциите -р tcp или -p udp. Подобна е на опцията --sport, но задава порта (портовете) на местоназначението.

-i [!] име - Име на входния интерфейс. Приема в името на интерфейса наставка +, която обозначава всички интерфейси от съответния тип; тоест ррр+ означава всички РРР интерфейси (ррр0 - рррN). Тази опция може да се отнася само към входния интерфейс, така че не може да бъде използвана във веригите OUTPUT или POSTROUTING (или във вериги, извикани от тези вериги).
-o [!] име - Име на изходния интерфейс. Подобна е на опцията -i, но се прилага само за изходния интерфейс и съответните вериги.
-j цел - Действието (целта) за правилното (име на потребителски дефинирана верига или специална стойност), ако пакетът отговаря на него. Специалните стойности ACCEPT ( propuskane na paketa), DROP ( отхвърляне на пакета), QUEUE ( предаване на пакета към пространството на потребителя ) или RETURN ( спиране на изпълнението на тази верига и продължаване от следващото правило в предходната [извикваща] верига ), завършват веригата.
-n - Указва адресите и портовете да се изведат като числа. По подразбиране iptables се опитва да ги преобразува.
-v - Режим на подробно извеждане. Извежда интерфейсния адрес , опциите на правилата (ако има такива), TOS маските и броячите на пакетите и байтовете. Използвайте -vv (2 v-та) за изключително подробно извеждане.
-x Разширяване на числата. Когато броячите на пакетите и байтовете се визуализират, не се използват съкращенията K, M или G, а се визуализират само нули.
[!] -f - Вторият и следващите фрагменти. Може да бъде предшествана от !.
--line-numbers - Използва се при извеждане на правилата и показва номерата на редовете преди спецификациите.
--tcp-flags [!] списък с флагове - Валидна е само след опцията -р tcp. Тази опция изследва списъка с флагове и дава съвпадение само ако те са единствените вдигнати флагове. Възможните флагове включват: SYN, ACK, FIN, RST, URG, PSH и ALL NONE. Ако искате да изследвате флаговете SYN, ACK, RST и FIN, но да приемате само тези, които са с вдигнати SYN и ACK флагове (отговор за нова конекция), фрагментът от правилото ще изглежда по следния начин:
-p tcp --tcp-flags SYN,ACK,RST,FIN SYN,ACK
[!]--syn - Валидна е само след опцията -p tcp. Еквивалентна е на следното:
--tcp-flags SYN,RST,ACK SYN
--icmp-type [!]ICMP [под]тип - Валидна е само с опцията -p icmp.
Следват валидните ICMP типове и подтипове ( с отместване навътре под главния тип):

echo-replay (pong)
destination-unreachable
network-unreachable
host-unreachable
protocol-unreachable
port-unreachable
fragmentation-needed
source-route-failed
network-unknown
host-unknown
network-prohibited
host-prohibited
TOS-network-unreachable
TOS-host-unreachable
communication-prohibited
host-precedence-violation
precedence-cutoff
source-quench
redirect
network-redirect
host-redirect
TOS-network-redirect
TOS-host-redirect
echo-request (ping)
router-advertisement
router-solicitation
time-exceeded (ttl-exceeded)
ttl-zero-during-transmit
ttl-zero-during-reassembly
parameter-problem
ip-header-bad
required-option-missing
timestamp-request
timestamp-reply
address-mask-request
address-mask-reply

--mac-source [!]mac-адрес - Валидна само след опцята -m mac. Полезна е във веригите INPUT или PREROUTING. Фрагментът от правилото ще изглежда по следния начин:

-m mac --mac-source 00:00:ab:c0:45:a8

--limit скорост - Максималната скорост на съвпаденията (средна стойност). Стойността по подразбиране е 3/hour; всичко под тази скорост се отхвърля. Ако вашата система не може да поддържа повече от една нова конекция за секунда, можете да използвате limit със следния фрагмент от правило

-p tcp --syn

за да предпазите вашия сървър от претоварване, въпреки че това обикновено се използва с целта LOG, за да предпазите дневниците от прекалено бързо разрастване. Скоростта може да включва период от време( подразбиращата се стойност е /hour) - /minute, /second, /hour или /day. Ето един примерен фрагмент от правило:

-m limit --limit 1/sec

--limit-burst брой - Максималният начален брой пакети, които да съвпадат, преди да започне използването на предходящото --limit скорост. Тази стойност се увеличава с едно всеки път, когато предходящото условие --limit скорост не е изпълнено. Подразбиращата се стойност за --limit-burst е 5.
--port [порт[,порт]] - Валидна е само с опцията -p tcp или -p udp и сле опцията -m multiport ( вижте фрагмента от правилото, който следва).Съвпадение има само ако адресът на източника, и адресът на получателя са едни и същи и съвпадат с опционално зададения порт ( позволени са до 15 разделени със запетаи портове). Ето един примерен фрагмент от правиото за множество портове, който съвпада само с портовете 25 и 110:

-m multiport -p tcp -- port 25,110

--mark стойност[/маска] - Съвпада с пакетите с даден маркер (стойност без знак). Тази стойност трябва да бъде зададена чрез целта MARK.
--uid-owner uid -Валидна е само когато се използва във веригата OUTPUT. Идентифицира пакетите, създадени от определен потребител, и дори тогава работи само за някои локално създадени пакети.

iptables -F верига

iptables -P верига_цел

iptables -A верига -i интерфейс -j цел

Първият формат (-F) изчиства всички предишни правила от веригата. Вторият формат (-P) настройва подразбиращата се политика (или още цел) за веригата. Препоръчва се използването на DROP за подразбиращата се цел на веригата. Третият формат (-A) добавя текущата спецификация към веригата. Освен ако не се конкретизира таблица с аргумент -t , командите ще са прилагат към таблицата filter. Параметърът -i прилага правило към именуван интерфейс, а -j идентифицира целта.


Подбрал: mystical

Изтегли .odt вариант

Използвана литература:

http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=programs&key=360886781#ss3.1

www.dhstudio.eu/iptables.odt

http://myfreesoft.net/phpBB2/viewtopic.php?t=346

http://itservice-bg.net/?p=53

http://mytech.bg/uroci/19/Unix/1396/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%B8+iptables

http://megimg.info/mg/modules/booklists/knigi/Comp/Internet/NAT%20HOWTO.txt



<< Сигурно електронно банкиране с Firefox и Linux | Маскиране на VPN тунел >>