Снимка от 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
продукция - Тази верига се използва за изходящи връзки. Например, ако се опитате да ping howtogeek.com, iptables ще провери изходната си верига, за да види какви са правилата относно ping и howtogeek.com, преди да вземе решение да разреши или отрече опита за свързване.
Предпазливостта
Макар че pinging на външен хост изглежда като нещо, което ще трябва да премине само към изходната верига, имайте предвид, че за връщането на данните ще се използва и входната верига. Когато използвате iptables за заключване на вашата система, не забравяйте, че много протоколи ще изискват двупосочна комуникация, така че и двете входни и изходни вериги ще трябва да бъдат правилно конфигурирани. SSH е общ протокол, който хората забравят да разрешат и на двете вериги.
Поведенческо поведение по веригата на правилата
Преди да влезете и да конфигурирате конкретни правила, ще искате да решите какво искате да бъде по подразбиране поведението на трите вериги. С други думи, какво искате да правите от iptables, ако връзката не съответства на съществуващи правила?
За да видите какви вериги на правилата понастоящем са конфигурирани да правят с несравним трафик, изпълнете
iptables -L
команда.
Повече пъти, отколкото не, ще искате вашата система да приема връзки по подразбиране. Освен ако вече не сте променили правилата на веригата за правила, тази настройка вече трябва да бъде конфигурирана. Така или иначе, тук е командата за приемане на връзки по подразбиране:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Ако по подразбиране приемете правилото, можете да използвате iptables, за да откажете конкретни IP адреси или номера на портове, като същевременно продължите да приемате всички други връзки. Ще стигнем до тези команди след минута.
Ако предпочитате да откажете всички връзки и ръчно да определите кои от тях искате да позволите да се свържете, трябва да промените политиката по подразбиране на вашите вериги, за да изпуснете. Това може би е полезно само за сървъри, които съдържат чувствителна информация и имат само същите IP адреси, които се свързват с тях.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Отговори, специфични за връзката
При конфигурирани стандартни правила за веригата, можете да започнете да добавяте правила към iptables, така че да знае какво да прави, когато срещне връзка от или към определен IP адрес или порт. В това ръководство ще прегледаме трите най-основни и често използвани "отговори".
приемам - Разрешаване на връзката.
Изпускайте - Откачете връзката, действайте така, както никога не се е случвало. Това е най-добре, ако не искате източникът да осъзнае, че вашата система съществува.
Отхвърляне - Не допускайте връзката, но изпратете грешка. Това е най-добре, ако не искате конкретен източник да се свърже с вашата система, но искате да знаят, че вашата защитна стена е блокирана.
Най-добрият начин да покажете разликата между тези три правила е да покажете как изглежда, когато компютърът се опитва да пинг на Linux машина с iptables, конфигурирани за всяка една от тези настройки.
Разрешаване на връзката:
Разрешаване или блокиране на конкретни връзки
С конфигурацията на веригите Ви за правила вече можете да конфигурирате iptables, за да разрешите или блокирате конкретни адреси, диапазони на адреси и портове. В тези примери ще свържем връзките
DROP
но можете да ги включите
ACCEPT
или
REJECT
в зависимост от вашите нужди и начина, по който сте конфигурирали веригите си за правила.
Забележка: В тези примери ще използваме
iptables -A
да добавите правила към съществуващата верига. iptables започва в началото на списъка си и минава през всяко правило, докато не намери такъв, който съвпада. Ако трябва да вмъкнете правило над друго, можете да го използвате
iptables -I [chain] [number]
за да посочите номера, който трябва да бъде в списъка.
Връзки от един 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 INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Можете да замените "ssh" с всеки протокол или номер на порт. Най-
-p tcp
част от кода казва iptables какъв вид връзка използва протокола. Ако блокирахте протокол, който използва UDP, а не TCP, тогава
-p udp
би било необходимо вместо това.
Този пример показва как да блокирате SSH връзките от всеки IP адрес.
iptables -A INPUT -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 state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state 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
опция ще ви даде информация за пакети и байтове и добавяне
-n
ще изброи всичко число. С други думи - имената на хостове, протоколите и мрежите са изброени като номера.
За да изчистите всички текущо конфигурирани правила, можете да издадете командата флъш.
iptables -F