Iptables е изключително гъвкава програма за защитна стена, изградена за операционни системи Linux. Независимо дали сте начинаещ оператор на Linux или системен администратор, вероятно има някакъв начин, че iptables може да ви бъде от голяма полза. Прочетете, докато ви показваме как да конфигурирате най-гъвкавата защитна стена на Linux.
Снимка от ezioman.
iptables е помощна програма за защитна стена на командния ред, която използва вериги от правила за разрешаване или блокиране на трафика. Когато дадена връзка се опитва да се установи във вашата система, iptables търси правило в своя списък, за да съответства на него. Ако не намери такъв, той прибягва до действието по подразбиране.
iptables почти винаги идва предварително инсталиран на всяко разпределение на Linux. За да го актуализирате / инсталирате, просто изтеглете пакета iptables:
sudo apt-get инсталирате iptables
Има алтернативи на GUI за iptables като Firestarter, но iptables не е толкова трудно, след като имате няколко команди надолу. Искате да бъдете изключително внимателни при конфигурирането на правилата на iptables, особено ако сте SSH в сървър, защото една грешна команда може да ви заключи за постоянно, докато не бъде ръчно фиксирана на физическата машина.
iptables използва три различни вериги: вход, напред и изход.
Вход - Тази верига се използва за управление на поведението на входящите връзки. Например, ако даден потребител се опита да SSH в компютъра / сървъра, iptables ще се опита да съчетае IP адреса и порта с правило във веригата за въвеждане.
напред - Тази верига се използва за входящи връзки, които всъщност не се доставят на място. Помислете за маршрутизатор - данните винаги се изпращат до него, но рядко всъщност са предназначени за самия маршрутизатор; данните се препращат към целта. Освен ако не правите някакъв маршрут, NATing или нещо друго на вашата система, което изисква пренасочване, вие дори няма да използвате тази верига.
Има един сигурен начин да проверите дали вашата система използва / се нуждае от веригата напред.
iptables -L -v
Горното изображение на екрана е на сървър, който работи няколко седмици и няма ограничения за входящи или изходящи връзки. Както можете да видите, входната верига е обработила 11GB пакети и изходната верига е обработена с 17GB. Задната верига, от друга страна, не е трябвало да обработва един пакет. Това е така, защото сървърът не прави каквото и да е пренасочване или се използва като пропускащо устройство.
продукция - Тази верига се използва за изходящи връзки. Например, ако се опитате да ping howtogeek.com, iptables ще провери изходната си верига, за да види какви са правилата относно ping и howtogeek.com, преди да вземе решение да разреши или отрече опита за свързване.
Предпазливостта
Макар че pinging на външен хост изглежда като нещо, което ще трябва да премине само към изходната верига, имайте предвид, че за връщането на данните ще се използва и входната верига. Когато използвате iptables за заключване на вашата система, не забравяйте, че много протоколи ще изискват двупосочна комуникация, така че и двете входни и изходни вериги ще трябва да бъдат правилно конфигурирани. SSH е общ протокол, който хората забравят да разрешат и на двете вериги.
Преди да влезете и да конфигурирате конкретни правила, ще искате да решите какво искате да бъде по подразбиране поведението на трите вериги. С други думи, какво искате да правите от iptables, ако връзката не съответства на съществуващи правила?
За да видите какви вериги на правилата понастоящем са конфигурирани да правят с несравним трафик, изпълнете iptables -L
команда.
Както можете да видите, ние също използвахме командата Grep, за да ни даде по-чиста мощност. В тази екранна снимка, нашите вериги понастоящем са приети да приемат трафик.
Повече пъти, отколкото не, ще искате вашата система да приема връзки по подразбиране. Освен ако вече не сте променили правилата на веригата за правила, тази настройка вече трябва да бъде конфигурирана. Така или иначе, тук е командата за приемане на връзки по подразбиране:
iptables - политика INPUT ACCEPT
iptables - политика ПОЛУЧАВАНЕ НА ИЗХОД
iptables - политика FORWARD ACCEPT
Ако по подразбиране приемете правилото, можете да използвате iptables, за да откажете конкретни IP адреси или номера на портове, като същевременно продължите да приемате всички други връзки. Ще стигнем до тези команди след минута.
Ако предпочитате да откажете всички връзки и ръчно да определите кои от тях искате да позволите да се свържете, трябва да промените политиката по подразбиране на вашите вериги, за да изпуснете. Това може би е полезно само за сървъри, които съдържат чувствителна информация и имат само същите IP адреси, които се свързват с тях.
iptables - политика INPUT DROP
iptables - политика ПОЛИТИКА НА ИЗХОД
iptables - политика FORWARD DROP
При конфигурирани стандартни правила за веригата, можете да започнете да добавяте правила към iptables, така че да знае какво да прави, когато срещне връзка от или към определен IP адрес или порт. В това ръководство ще прегледаме трите най-основни и често използвани "отговори".
приемам - Разрешаване на връзката.
Изпускайте - Откачете връзката, действайте така, както никога не се е случвало. Това е най-добре, ако не искате източникът да осъзнае, че вашата система съществува.
Отхвърляне - Не допускайте връзката, но изпратете грешка. Това е най-добре, ако не искате конкретен източник да се свърже с вашата система, но искате да знаят, че вашата защитна стена е блокирана.
Най-добрият начин да покажете разликата между тези три правила е да покажете как изглежда, когато компютърът се опитва да пинг на Linux машина с iptables, конфигурирани за всяка една от тези настройки.
Разрешаване на връзката:
Отказване на връзката:
Отказване на връзката:
С конфигурацията на веригите Ви за правила вече можете да конфигурирате iptables, за да разрешите или блокирате конкретни адреси, диапазони на адреси и портове. В тези примери ще свържем връзките ИЗПУСКАЙТЕ
, но можете да ги включите ACCEPT
или REJECT
, в зависимост от вашите нужди и начина, по който сте конфигурирали веригите си за правила.
Забележка: В тези примери ще използваме iptables -A
да добавите правила към съществуващата верига. 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 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 състояние - състояние НОВО, учредено -j ПРИЕМА
iptables -А OUTPUT -p tcp - спорт 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 запишете
Или
/etc/init.d/iptables запишете
Посочете правилата на iptables, които вече са конфигурирани:
iptables -L
Добавяне на -V
опция ще ви даде информация за пакети и байтове и добавяне -н
ще изброи всичко число. С други думи - имената на хостове, протоколите и мрежите са изброени като номера.
За да изчистите всички текущо конфигурирани правила, можете да издадете командата флъш.
iptables -F