Monitoring tools

top – When you want an overview of all the processes or threads running in the system: top is a good tool
htop – Htop is essentially an enhanced version of top. It’s easier to sort by processes.
apachetop – Apachetop monitors the overall performance of your apache webserver.
powertop – helps you diagnose issues that has to do with power consumption and power management Continue reading ‘Monitoring tools’ »

IPtables – подробно

Основи на iptables

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

Таблици и вериги на 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

Тази команда би изтрила четвъртото правило в 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 съобщение за грешка

 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 идентифицира целта.

What we have in /etc/

Конфигурационни файлове за настройка на програми и операционната система.

 

DIR_COLORS –  конфигурация за цветовете на ls

GREP_COLORS –  конфигурация за цветовете на програмата grep

adjtime – за настройка на хардуерният часовник

aliases – псевдоними за пощенски агенти

at.deny – списък с потребители на които им е забраненто да използват at

anacrontab – конфигурация на планировчика anacron

bash.rc – глобален конфигурационен файл за bash. Локалната конфигурация за потребителите се намира в домашните им директории

Continue reading ‘What we have in /etc/’ »