SASA DESIGN

Open Your mind, Open Your Source Code!

IPTABLES

19 декември, 2007 – 4:03 pm

IPTABLES е firewall с невероятни възможности.. С него можете да филтрирате пакети или да маскирате ip адреси или портове(ip masquerade, NAT, PAT) и тн..

За да извършва филтриране на пакети или маскиране iptables се води по така наречените вериги(chains)- логически групиран списък от правила. Всяко правило от веригата е тест, на който ip хедърът се подлага.

Веригите съдържат правила започващи от едно. Можете да задавате правилата или чрез спецификация, или чрез номер.

Спецификацията на правило( rule specification ) е правилото или ( наборът от правила ), на което пакетът трябва да отговаря – тестът. Едно и също основно правило може да съществува в няколко вериги, така че аргументът верига(вижте по-долу) обикновено е задължителен. Ако целта на веригата е една от следните: ACCEPT (пропускане на пакета), DROP (отхвърляне на пакета), REJECT (отхвърляне на пакета и връщане на съобщение за грешка) или MASQUERADE (маскиране на пакета), тази цел завършва веригата, така че в тази верига няма да бъдат изпълнявани повече правила.

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

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

Това е обобщение и синтаксисът на някои команди е леко модифициран.

Таблици на IPTABLES

Първата част от синтаксиса на iptables е незадължителната опция -t таблица.Подразбиращата се таблица е filter. Възможните таблици включват filter, mangle и nat. Таблицата mangle се използва, когато искате да модифицирате TOS(Type of Service) битове или да поставите върху пакета маркер, който netfilter може да използва за поставяне в опашка и на други неща. Таблицата nat се използва за SNAT(Source NAT), DNAT (Destination NAT) и маскиране(masquerade). Тя имплементира веригите PREROUTING или POSTROUTING(преди или след маршрутизиране).

За да разберете по-добре как работят таблиците, стартирайте всяка от следните команди и забележете резултата.

Код:
iptables -L -n
iptables -t filter -L -n
iptables -t mangle -L -n
iptables -t nat -L -n

Първите две команди са идентични. Третата и четвъртата ще изведат нещо много различно от тях и ще ви помогнат да разберете веригите, включени във всяка таблица.

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

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

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

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

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

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

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

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

-z (zero-нулиране)- Нулиране на броячите. Нулира броячите в зададена верига или във всички вериги, ако не е зададено име на верига.

-N (new-нова)- Създаване на потребителски дефинирана верига. Тази команда изисква само име на веригакато задължителен аргумент.

-X (Изтриване на потребителски дефинирана верига)- Тази команда изисква име на верига. Тази верига трябва да бъде празна. Подрабиращите се вериги не могат да бъдат изчистени.

-P (policy-политика)- Задаване на политика за дадена верига. Тази команда приема като задължителни аргументи име на верига и цел

-E (rename chain-преименуване на верига)- Тази команда приема като задължителни аргументи старо име на верига и ново име на верига.

-h (help-помощ)- Помощ за синтаксиса на командите..

Опции на IPTABLES

С известен брой опции можете да използвате знака ! за обръщане на значението им.

-p [!] протокол - Може да приема ! (например -р ! icmp, което отговаря на всички други съобщения , с изключение на icmp съобщенията) или all, което отговаря на всички протоколи.

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

-d [!] адрес -
Адрес на получателя. Същите критерии както за -s.

-i [!] име –
Име на входния интерфейс. Mже да приема !. Приема в името на интерфейса наставка +, която обозначава всички интерфейси от съответния тип; тоест ррр+ означава всички РРР интерфейси (ррр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 - Използва се при извеждане на правилата и показва номерата на редовете преди спецификациите.

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

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

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

–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 има и графични инструменти. Едни от най-популярните са Guarddog и Firestarter.

Напиши коментар