Извадете всичко от защитната стена!

Извадете всичко от защитната стена! / функции на iptables

Докучаев Дмитрий, известен още като Форб ([email protected])

Защитната стена е неразделна част от *nix системата. Но, както всеки софтуерен продукт, той се нуждае от внимателна настройка. Сега ще говоря за това как правилно да защитите вашия сървър с помощта на защитната стена iptables. Тази защитна стена е най-простата и надеждна, затова ви препоръчвам да се запознаете с този материал.

Компетентният администратор никога няма да забрави да инсталира защитна стена на своята машина. В крайна сметка защитната стена ви позволява да решавате много важни задачи. На първо място, той се "грижи" за сигурността на мрежата, като филтрира хакерските пакети. Ако желаете, можете също така да раздвижите местната сигурност, като забраните на потребителите да изтеглят порнофилми и програми Warez. Освен това с помощта на защитна стена наистина е възможно да се повиши NAT (превод на мрежови адреси), което позволява на локалните машини да използват пълноценно интернет ресурсите.

Ще се затворим от външни врагове

Ако сте работили с iptables, тогава знаете как работи тази защитна стена. Съдържа няколко таблици, всяка от които може да съдържа така наречените вериги. Филтърната таблица по подразбиране съдържа три вериги - INPUT, OUTPUT и FORWARD. Първият отговаря за входящите пакети, вторият за изходящите. Последният служи за контрол на обмена на данни между съседни възли. Най-популярният метод за конфигуриране на iptables е да добавите разрешаващи правила към веригата INPUT и след това да промените нейната политика. Всяка верига има своя собствена политика: ПРИЕМАНЕ, ОТХВЪРЛЯНЕ и ОТХВЪРЛЯНЕ. По подразбиране всички пакети преминават без ограничения. Но веднага щом политиката бъде променена на REJECT (забрана на връзката с RST флага, зададен в пакета за отговор) или DROP (просто игнориране на пакета), данните ще бъдат безмилостно филтрирани. Естествено, администраторът предварителноще предпише правилата, по които необходимите пакети ще преминат към сървъра без никакви проблеми.

Нека направим подобна настройка на защитната стена. Първо, нека се уверим, че пакетите преминават безпрепятствено през интерфейса за обратна връзка (не е необходимо да деактивираме локалните връзки). Нека изпълним проста команда:

iptables -A INPUT -i lo -j ACCEPT.

Както можете да видите, командата iptables разбира различни опции. Първият от тях предава веригата, в която ще бъдат въведени данните. Вторият сочи към интерфейса. Последният определя политиката на правилото. Буквално командата означава следното: „включете правило във веригата INPUT, което позволява приемането на пакети от lo интерфейса. Просто? Все пак би :).

По-нататък малко по-трудно. Всеки пакет може да има 4 различни състояния. NEW е нормален пакет, който инициира нова връзка. ESTABLISHED - пакет от вече установена връзка. СВЪРЗАНО - Новият пакет данни, създаден от старата връзка. И накрая, INVALID е неизвестен пакет. Трябва да разрешите само два вида - СВЪРЗАНИ и УСТАНОВЕНИ, защото те са надеждни. Без допълнителни инструменти iptables не знае как да прави разлика между състоянията. Специалното състояние на модула му помага в това.

iptables -A ВХОД -p tcp -m състояние -състояние СВЪРЗАНО, УСТАНОВЕНО -j ПРИЕМАНЕ.

Правилото се усложни с три нови опции. Параметърът -p показва, че правилото се прилага към TCP протокола (без този флаг не можете да използвате модула за състояние). Опцията -m ви позволява да включвате допълнителни модули. Третият параметър състояние се отнася за модула със същото име. Това показва, че правилото обработва пакети от определен вид.

Следващата стъпка е да настроите връзка с услугите. Да приемем, че сървърът има инсталирани proftpd, postfix и popa3d. Всъщност може да има повече услуги, въпросът еза да не забравите за всеки от тях. Да кажем, че postfix трябва да приеме данни от хост 192.168.1.1. Само клиенти от сегмента 192.168.0.0/24 имат право да се свързват с proftpd и всеки може да премахва поща. Нека организираме такава политика под формата на три прости правила. За удобство препоръчвам да създадете допълнителна верига от услуги и да я свържете към основния INPUT.

iptables –N услуги

iptables –A INPUT –j услуги

iptables -A услуги -p tcp -dport 25 -s 192.168.1.1 -j ПРИЕМАНЕ

iptables -A услуги -p tcp -dport 21 -s 192.168.0.0/24 -j ПРИЕМАНЕ

iptables -A услуги -p tcp -dport 110 -j ПРИЕМАНЕ

iptables -P INPUT DROP

Можем да кажем, че сега вашият сървър е защитен от любопитни очи. Въпреки това, има много начини за заобикаляне на защитните стени, един от които е да напишете connback скрипт. Последният сам се свързва с хакерската машина. За да спрете подобни действия, е необходимо да филтрирате изходящия трафик. Не е необходимо да променяте политиката на веригата, просто трябва да добавите няколко ограничителни правила, включващи модула собственик.

Защитната стена ще покаже кой е шефът!

Библиотеката owner.so е много полезна. Той е създаден, за да попречи на локалния потребител да има достъп до мрежови ресурси. Често хакерите извършват своите зверства от мрежата и стандартната настройка на защитната стена не помага. Ако обвържете модула собственик, можете да го направите така, че httpd процесът да не може да отваря портове, още по-малко да се свързва с машини на други хора. Това се постига само с две команди:

iptables –A ИЗХОД -m собственик -uid-собственик 99 -p tcp -dport 80 -j ПРИЕМАНЕ

iptables -A ИЗХОД -m собственик -uid-собственик 99 -j DROP

Модулът ви позволява да анализирате UID на локален потребител. Ако е равно на 99 (което съответства на името за влизане nobody),правилото ще забрани достъпа до неизвестни портове. Второто правило забранява всякакви действия под никого. Трябва да е под първия, защото iptables анализира правилата от конкретни към общи.

Има и друг проблем, с който може да се сблъскате. Ако други потребители са регистрирани на вашия сървър и не искате те да изтеглят филми и музика през машината, ще трябва да добавите няколко правила, които са подобни на предишното. Време е да режем мрежовите права на потребителя до уши :). Трябва да се помни, че на потребителя трябва да бъде позволено да пропуска пакети RELATED и ESTABLISHED, в противен случай той няма да може да качва файлове на локалния FTP.

iptables –A ИЗХОД –p tcp –m състояние –състояние! СВЪРЗАНИ, УСТАНОВЕНИ –m собственик –uid-собственик 31337 –j DROP.

Това правило ще ви позволи да филтрирате всички пакети, изпратени от потребител 31337. В допълнение към uid, можете също да ограничите gid, както и да забраните достъпа до произволна мрежова команда. Ако се интересувате от този модул, можете да видите всичките му опции, като напишете iptables –help –m owner.

iptables -t nat -A POSTROUTING -s 192.68.0.2 -j MASQUERADE

iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp -dport 80 -j REDIRECT -to-port 3138

iptables –t nat –A PREROUTING –s 194.225.226.3 –p tcp –dport 3389 –j DNAT –to-destination 10.50.40.255:3389

Искаш ли още? Сложете лепенки!

Въпреки толкова широките възможности, iptables не надминава pf на OpenBSD по отношение на функционалност. Неговият конкурент е в състояние да разграничи операционните системи чрез сложни пръстови отпечатъци, да защити сървъра от сканиране на портове и т.н. Време е да отвърнем на удара. И така, срещаме нов пач за iptables, наречен Patch-o-Matic. Комплектът POM е предназначен за администратори, които нямат достатъчностандартни функции на защитната стена. Той включва набор от модули, които ви позволяват да създавате невероятни неща. Вярно е, че за да закърпиш защитната стена, трябва да преминеш през седем кръга на ада. Първо се уверете, че вашето ядро ​​е изградено от изходния код. Инсталаторът на POM ще се нуждае от сортиране на ядрото, тъй като всички таблици и вериги се създават в ядрото. Ако вашата система е изградена на RPM пакети, ще трябва да прекомпилирате ядрото, след като го изтеглите от ftp.kernel.com (или от диск). Не забравяйте да включите поддръжка за ipfiltering и други мрежови неща в ядрото. След като приключите с ядрото, изтеглете най-новите iptables (http://netfilter.org/files/iptables-1.2.11.tar.bz2) и корекцията, която идва с него (http://netfilter.org/files/patch-o-matic-ng-20040621.tar.bz2). Сега разопаковайте защитната стена и я компилирайте. След като изпълните всички тези стъпки, е време да инсталирате корекцията.

И така, всички корекции са инсталирани и вие сте нетърпеливи да ги приложите на практика. Преди да можете да направите това, ще трябва да изпълните две последни стъпки. Първо отидете в изходната директория на ядрото и стартирайте make menuconfig. След това отидете в секцията ipfiltering и изберете всички пачове, които са били инсталирани от скрипта runme. Запазете всички промени и отворете .config за редактиране. Ако сте инсталирали актуализациите на TARPIT и OSF, уверете се, че двете директиви за инсталиране са налице и ако липсват, добавете ги сами.

Второ, прекомпилирайте iptables и въведете make install, така че всички модули да бъдат копирани в директорията /lib/iptables. Ако всичко е минало без усложнения, можем да кажем, че POM е инсталиран успешно.

Време е за лека тренировка след тежката настройка. Нека да разгледаме модулите от колекцията POM, които наистина ще улеснят живота ви. Първата библиотека, която наистина харесах,се нарича време.така. Това ще помогне да активирате правилото в определен момент. Това е много удобно, с него можете или да отворите нощния интернет, или да ограничите достъпа до някои популярни ресурси в час пик. Просто трябва да добавите едно правило към веригата INPUT.

iptables -A INPUT -p tcp -dport 80 -m time -timestart 13:00 -timestop 15:00 -days Mon,Tue,Wed,Thu,Fri -j REJECT

Тези правила забраняват достъпа до мрежата през деня. Както казах, можете да използвате time.so като интернет ограничител. За да направите това, добавете правило към веригата POSTROUTING на таблицата nat. Следващият модул се нарича random.so. Позволява ви да коригирате вероятността на правилото. В някои ситуации библиотеката е просто незаменима. Освен това можете да повишите шефа си за надграждане, като му покажете голямо натоварване на сървъра. Преди това, разбира се, ще напишете сложно правило, което определя 33% шанс за свързване към уеб сървър.

iptables -A INPUT -p tcp -dport 80 -m random -average 33 -j REJECT.

iptables -A INPUT -p tcp -m mport -dports 21,22,25,110,4000:5000 -j ПРИЕМАНЕ

iptables -A INPUT -p tcp -m iprange -src-range 192.168.0.1-192.168.0.100 -j ПРИЕМАНЕ.

Свързване с празнотата

Понякога трябва да симулирате връзка. За целта администраторът пише специална програма, която слуша определен порт. Сега можете да постигнете резултата с помощта на модула tarpit.so. Необходимо е за отваряне на празен порт. Освен това портът ще свети в изхода на netstat след действителната връзка. Тази библиотека може да бъде полезна, ако администраторът реши да напише инструмент за защитна стена срещу сканиране на определени портове и след това да регистрира всички опити за свързване. Няма да те мъча, просто ще напиша правило.

iptables -A INPUT -p tcp -dport31337 –j TARPIT

Сега iptables може да търси подниз в пакет. Модулът string.so му помага за това. Например, искате да настроите защита срещу изпращане на shell кодове до вашата машина или просто не искате потребителят да качва двоичния файл на сървъра. Ако по-рано беше необходимо да се извърши корекция на ядрото и да се инсталира допълнителен модул, сега е достатъчно да управлявате само едно правило:

iptables -A INPUT -p tcp -dport 21 -m string -string '7FELF' -j DROP

Тъй като говорим за ограничения, ще ви кажа как да предупредите машината си от DoS атака. Трябва да използвате модула limit.so, който ви позволява да ограничите честотната лента. Ако видите, че вашият FTPD изяжда процесора и се задушава в данните, направете ограничение от 5 пакета в секунда.

iptables -A INPUT -p tcp -dport 21 -m limit -limit 5/sec -j REJECT

iptables -A INPUT -p tcp -syn -dport 22 -m connlimit -connlimit-горе 3 -j ОТХВЪРЛЯ.

Мисля, че този материал ще ви бъде достатъчен не само да овладеете основите на iptables, но и да защитите компетентно вашия сървър. За щастие защитната стена позволява това :). Синтаксисът на iptables е прост като три пенита, мисля, че разбрахте всичко след първото правило. Сега всичко зависи само от вас, но мога да пожелая малко търпение и изобретателност. Останалите ще бъдат добавени след инсталиране на Patch-o-Matic :).

Образователна програма за iptables

Ето някои команди, които можете да използвате, когато работите с iptables.

iptables -N верига - създаване на нова верига

iptables -F верига - изчистване на произволна верига

iptables -X верига - премахване на верига

iptables -D номер на правило за верига - премахване на правило от конкретна верига

iptables -P верига политика - промяна на верига политика

service iptables save/restore - запазване (възстановяване) на всички правила вотделна конфигурация

service iptables start/stop - стартиране (спиране) на защитната стена

Двоичните файлове /sbin/iptables-save и /sbin/iptables-restore ще ви помогнат да запазите или възстановите правилата.

Прегледайте POM директориите и прочетете документацията за всеки модул. Вярно, там няма много информация.

В допълнение към основните пачове, POM съдържа корекции за iptables общността с eggdrop, warcraft и quake3 :).

За да разберете какви опции разбира определен модул, изпълнете командата iptables -help -m име_на_модул.

Не съм тествал POM с ядрото 2.6.x. Разработчиците също мълчат за съвместимостта. Следователно не гарантирам стабилността на работата с такива ядра.

Има специален модул netmap, който прави NAT по-удобен. В ядрото се създава NETMAP цел, след което можете да направите статично свързване 1:1 към всяка мрежа.