
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.