Начална » как да » Ръководство за начинаещи на iptables, защитната стена на Linux

    Ръководство за начинаещи на iptables, защитната стена на Linux

    Iptables е изключително гъвкава защитна стена, създадена за операционни системи Linux. Независимо дали сте начинаещ Linux компютър или системен администратор, вероятно има някакъв начин, по който iptables може да ви бъде от голяма полза. Прочетете, докато ви показваме как да конфигурирате най-универсалната защитна стена на Linux.

    Снимка от ezioman.

    За iptables

    iptables е помощна програма за защитна стена от командната линия, която използва вериги на политики, за да разрешава или блокира трафика. Когато връзката се опита да се установи на вашата система, iptables търси правило в списъка си, за да го съпостави. Ако не намери такъв, той прибягва до действието по подразбиране.

    iptables почти винаги идва предварително инсталирана на всяка дистрибуция на Linux. За да я актуализирате / инсталирате, просто извикайте пакета iptables:

    sudo apt-get install iptables

    Съществуват GUI алтернативи на iptables като Firestarter, но iptables не е толкова трудно, след като имате няколко команди надолу. Искате да бъдете изключително внимателни, когато конфигурирате правилата на iptables, особено ако сте SSH в сървър, защото една грешна команда може постоянно да ви блокира, докато не бъде ръчно фиксирана на физическата машина..

    Видове вериги

    iptables използва три различни вериги: вход, напред и изход.

    Вход - Тази верига се използва за контрол на поведението на входящите връзки. Например, ако потребител се опита да SSH във вашия компютър / сървър, iptables ще се опита да съпостави IP адреса и порта с правило в веригата за въвеждане.

    напред - Тази верига се използва за входящи връзки, които всъщност не се доставят локално. Помислете за рутер - данните винаги се изпращат до него, но рядко са предназначени за самия рутер; данните се препращат към целта. Освен ако не правите някакъв вид маршрутизация, NATing или нещо друго във вашата система, което изисква препращане, дори няма да използвате тази верига.

    Има един сигурен начин да проверите дали вашата система използва / се нуждае от веригата напред.

    iptables -L -v

    Снимката по-горе е на сървър, който се изпълнява от няколко седмици и няма ограничения за входящи или изходящи връзки. Както виждате, входната верига е обработила 11GB пакети и изходната верига е обработила 17GB. Веригата напред, от друга страна, не е необходима за обработка на един пакет. Това е така, защото сървърът не прави никакво препращане или се използва като устройство за преминаване.

    продукция - Тази верига се използва за изходящи връзки. Например, ако опитате да проверите ping howtogeek.com, iptables ще провери изходната си верига, за да види какви са правилата за пинг и howtogeek.com, преди да вземе решение да разреши или откаже опита за свързване.

    Уговорката

    Въпреки че pinging външен хост изглежда като нещо, което само ще трябва да премине през изходната верига, имайте предвид, че за да се върнат данните, ще се използва и входната верига. Когато използвате iptables за заключване на вашата система, не забравяйте, че много протоколи ще изискват двупосочна комуникация, така че и входните, и изходните вериги ще трябва да бъдат конфигурирани правилно. SSH е общ протокол, който хората забравят да разрешат и в двете вериги.

    Поведение по подразбиране на политиката по подразбиране

    Преди да влезете и да конфигурирате специфични правила, вие ще искате да решите какво искате да бъде поведението по подразбиране на трите вериги. С други думи, какво искате да направи iptables, ако връзката не отговаря на съществуващи правила?

    За да видите какво понастоящем са конфигурирани веригите ви за политики с несъчетания трафик, изпълнете iptables -L команда.

    Както виждате, използвахме командата grep, за да ни даде по-чист изход. В тази снимка на екрана, нашите вериги в момента са приети за приемане на трафик.

    Повече пъти, отколкото не, ще искате системата ви да приема връзки по подразбиране. Освен ако преди това не сте променили правилата на веригата на правилата, тази настройка трябва вече да бъде конфигурирана. Така или иначе, ето командата за приемане на връзки по подразбиране:

    iptables - политика INPUT ACCEPT
    iptables - policy OUTPUT ACCEPT
    iptables - политика ПРЕДПРИЕМАНЕ

    По подразбиране на правилото за приемане, можете да използвате iptables, за да отхвърлите конкретни IP адреси или номера на портове, като продължите да приемате всички други връзки. Ще стигнем до тези команди за минута.

    Ако предпочитате да откажете всички връзки и ръчно да определите кои искате да разрешите да се свържете, трябва да промените правилата по подразбиране на вашите вериги, за да ги пуснете. Това вероятно ще бъде полезно само за сървъри, които съдържат чувствителна информация и само някога имат същите IP адреси, които се свързват с тях.

    iptables - policy INPUT DROP
    iptables - politi OUTPUT DROP
    iptables --политика FORWARD DROP

    Отговорите, специфични за връзката

    Когато конфигурационните ви политики по подразбиране са конфигурирани, можете да започнете да добавяте правила към iptables, така че да знае какво да прави, когато срещне връзка от или към конкретен IP адрес или порт. В това ръководство ще прегледаме трите най-основни и често използвани „отговора“.

    приемам - Позволете връзката.

    Изпускайте - Пуснете връзката, действайте така, сякаш никога не се е случвало. Това е най-добре, ако не искате източникът да реализира вашата система.

    Отхвърляне - Не разрешавайте връзката, но изпратете грешка. Това е най-добре, ако не искате определен източник да се свързва с вашата система, но искате те да знаят, че защитната стена им е блокирала.

    Най-добрият начин да се покаже разликата между тези три правила е да се покаже как изглежда, когато компютър се опитва да пинг на Linux машина с iptables конфигурирани за всяка от тези настройки.

    Разрешаване на връзката:

    Отпадане на връзката:

    Отказване на връзката:

    Разрешаване или блокиране на специфични връзки

    С конфигурираните вериги на политики сега можете да конфигурирате iptables да разрешава или блокира конкретни адреси, диапазони на адреси и портове. В тези примери ще настроим връзките към ИЗПУСКАЙТЕ, но можете да ги превключите ACCEPT или REJECT, в зависимост от вашите нужди и как сте конфигурирали веригите за политики.

    Забележка: В тези примери ще използваме iptables -А да се добавят правила към съществуващата верига. iptables стартира в горната част на списъка и преминава през всяко правило, докато не открие такава, която съвпада. Ако трябва да вмъкнете правило над друго, можете да го използвате iptables -I [верига] [номер] , за да укажете номера, който трябва да бъде в списъка.

    Връзки от един IP адрес

    Този пример показва как да блокирате всички връзки от IP адреса 10.10.10.10.

    iptables -A INPUT -s 10.10.10.10 -j DROP

    Връзки от различни IP адреси

    Този пример показва как да блокирате всички IP адреси в обхвата на мрежата 10.10.10.0/24. Можете да използвате мрежова маска или стандартна носеща черта, за да укажете обхвата на IP адресите.

    iptables -A INPUT -s 10.10.10.0/24 -j DROP

    или

    iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

    Връзки към конкретен порт

    Този пример показва как да блокирате SSH връзките от 10.10.10.10.

    iptables -A вход -p tcp --dport ssh -s 10.10.10.10 -j DROP

    Можете да замените “ssh” с всеки протокол или номер на порт. Най- -p tcp част от кода казва на iptables какъв вид връзка използва протоколът. Ако сте блокирали протокол, който използва UDP, а не TCP, тогава -p udp вместо това е необходимо.

    Този пример показва как да блокирате SSH връзки от всеки IP адрес.

    iptables -А вход -p tcp --dport ssh -j DROP

    Съединения

    Както споменахме по-рано, много протоколи ще изискват двупосочна комуникация. Например, ако искате да разрешите SSH връзки към вашата система, входните и изходните вериги ще се нуждаят от правило, добавено към тях. Но какво, ако искате само SSH да влезе в системата ви, за да бъде позволено? Няма да добавяте правило към изходната верига също така да позволявате изходящи SSH опити?

    Това е мястото, където влизат състояния на връзката, които ви дават възможност да разрешите двупосочна комуникация, но само да позволявате установяването на еднопосочни връзки. Обърнете внимание на този пример, където са разрешени SSH връзки от 10.10.10.10, но SSH връзки към 10.10.10.10 не са. Системата обаче може да изпраща обратно информация по SSH, докато сесията вече е установена, което прави SSH комуникацията възможна между тези два хоста..

    iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m състояние - състояние NEW, ESTABLISHED -j ACCEPT

    iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m състояние - състояние ESTABLISHED -j ACCEPT

    Запазване на промените

    Промените, които правите във вашите правила за iptables, ще бъдат бракувани следващия път, когато услугата iptables бъде рестартирана, освен ако не изпълните команда, за да запишете промените. Тази команда може да се различава в зависимост от дистрибуцията ви:

    Ubuntu:

    sudo / sbin / iptables-save

    Red Hat / CentOS:

    / sbin / service iptables save

    Или

    /etc/init.d/iptables save

    Други команди

    Избройте текущо конфигурираните правила на iptables:

    iptables -L

    Добавяне на -V опцията ще ви даде информация за пакети и байтове и ще добавите -п ще изброи всичко числово. С други думи - имена на хостове, протоколи и мрежи са посочени като числа.

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

    iptables -F