В тази статия ще покажем как да управляваме защитната стена на Linux, използвайки classic IPTABLES вместо firewalld в CentOS / RHEL 7 за филтриране на входящия и изходящия трафик. Тази статия описва как да конфигурирате iptables в CentOS 7, за да филтрирате входящия трафик, използвайки пример за облачен базиран виртуален сървър, разгърнат от нулата. myserver01, достъпен от интернет.
Съдържание:
- Деактивиране на firewalld в CentOS 7
- Правила за синтаксис и iptables в CentOS / Red Hat
- Създаване на правила за филтриране на трафика в iptables
- Активиране на iptables дневници
- Запазване и възстановяване на правила за филтриране на iptables
Деактивиране на firewalld в CentOS 7
CentOS 7 използва системната услуга за контрол на защитната стена по подразбиране firewalld. Той осигурява собствен интерфейс, но в крайна сметка работи и чрез iptables помощната програма. В същото време защитната стена трябва да се контролира или чрез firewalld или директно чрез iptables.
firewalld не е заместител, а обвивка около iptables, можете да използвате от него това, което ви харесва повече или по-подходящо в конкретни условия. iptables е по-универсален, той е основен инструмент, но е малко по-трудно да се овладее. firewalld предоставя по-опростен интерфейс, но например CentOS 6 не може да го използва, а за други дистрибуции трябва да имате необходимите инсталационни пакети. Освен това, ако използвате приложения, които правят настройките им в защитната стена, те трябва да са съвместими с firewalld (пример за такива приложения е docker, fail2ban).
Проверете състоянието на firewalld и го деактивирайте.
systemctl статус firewalld
В изхода на командата област, оградена в червено с думата активиран, означава, че стартирането е включено и областта обикаля в жълто с думата активен, означава, че услугата работи.
Спираме услугата и изключваме автоматично зареждане за нея:
systemctl stop firewalld
systemctl деактивира firewalld
Повторна проверка на състоянието:
Сега изходът на командата показва инвалиди за автоматично зареждане (изключено) и неактивен означава, че услугата е изключена.
Правила за синтаксис и iptables в CentOS / Red Hat
Iptables - това е помощна програма, която конфигурира правилата на защитната стена в Linux.
Iptables групират правила за защитна стена в таблици, основните от които са:
- маса филтър - използва се за филтриране на трафика, тоест позволява и отказва връзки
- маса NAT - използва се за превод на адрес (NAT)
- маса развалям - други модификации на заглавките на ip пакети.
Първо проверете дали iptables е инсталиран в системата (трябва да е по подразбиране):
rpm -q iptables
Резултатът от командата показва, че текущата инсталирана версия на iptables е 1.4.21.
Работата с iptables в командния ред изисква root права, така че ще продължим да работим като root.
За да покажете текущите правила, изпълнете командата:
IPTABLES [-t таблица] -L [верига] [параметри]
Например резултатът от команда iptables -L, когато все още не са създадени правила в таблици:
Обмислете по-подробно изхода на командата.
маса филтър съдържа три вида правила, така наречената верига (верига):
- INPUT - входящата ip пакети, предназначени за самия хост, се обработват в тази верига;
- ИЗХОД - изходящите ip пакети от самия хост се обработват в тази верига;
- НАПРЕД, тази верига е необходима за пренасочване на ip пакети. Използва се, ако искате да използвате сървъра като рутер.
Противоположна на всяка верига е политика по подразбиране, която определя какво трябва да се направи, ако връзката не попада в никое от правилата. Политиката по подразбиране може да приеме две стойности и определя подхода за организиране на самата защитна стена:
- ACCEPT - по подразбиране са разрешени всички връзки, правилата блокират нежеланите връзки;
- DROP - по подразбиране всички връзки са отказани, правилата позволяват необходимите връзки.
Създаване на правила за филтриране на трафика в iptables
Iptables филтрират по интерфейс
Нека започнем да създаваме правилата. Синтаксисът на командата за добавяне на ново правило в края на посочената верига изглежда така:
iptables [-t таблица] -A -j
Като начало, нека разрешим трафика през локалния loopback интерфейс (127.0.0.1), който е необходим за работа на някои приложения:
iptables -A INPUT -i lo -j ACCEPT
Нека анализираме по ред:
- Ние уточняваме веригата INPUT, т.е. правилото ще се прилага за входящи връзки.
- След това използвайте ключа -i (-интерфейс), за да определите входящия интерфейс, до който пристига ip пакета.
- Завършваме командата с ключа -j (-юмп), определяне на действието, което ще се извърши за всички ip пакети, които отговарят на критериите от клауза 2. В този случай ACCEPT е да разреши връзката. В допълнение, основните действия с връзки също включват:
- DROP - деактивирайте връзката, източникът на връзката не е информиран, ip пакетът просто се изхвърля;
- ОТКАЖЕТЕ - забранете връзката, източникът на връзка се информира чрез съобщението.
Iptables филтрират по порт, протокол или IP адрес
Сега добавете правило за разрешение за свързване към нашия Linux сървър чрез SSH на порт 22.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
В това правило пристанището и протоколът са критериите. Протоколът (tcp, udp, icmp, all) се задава от ключа -p (-протокол), дестинация порт (т.е. порта, към който ip пакетите ще дойдат на сървъра) -dport.
забележка: ако искате да използвате целевия или изходния порт в критериите (-dport или -спорт), след това посочете протокола.Можете да определите диапазон на порт например с двоеточие
--депо 6000: 6063
Ако знаем ip адресите на клиентите, от които ще се свържем със сървъра, ще бъде по-безопасно да разрешим достъп само от тези ip адреси. В този случай добавете -s (-src, -source) към критериите, посочвайки ip адреса или подмрежата на източника на връзка, например с това правило:
iptables -A INPUT -p tcp -s 94.41.174.122 --dport 22 -j ACCEPT
достъп до порт 22 ще бъде разрешен само от ip адрес 94.41.174.122.
Частично разрешаване на искания icmp, 3 вида:
iptables -A INPUT -p icmp --icmp тип echo-заявка -j ACCEPT
iptables -A INPUT -p icmp --icmp тип дестинация-недостижим -j ACCEPT
iptables -A INPUT -p icmp --icmp тип превишено време -j ACCEPT
Тези правила позволяват пинг, проследяване на комунални услуги и позволяват на механизма да определя MTU между два хоста.
Филтърът за състоянието на връзката се филтрира
За правилна работа ще трябва да създадете правило, което позволява вече установени връзки:
iptables -A INPUT -m състояние - състояние УСТАНОВЕНО, СВЪРЗАНО -j ПРИЕМАНЕ
Тук ключът се използва в критериите -m, да заредите модула на състоянието, което позволява да се определи текущото състояние на ip пакета от възможните:
- НОВО - се отнася до входящите ip пакети, участващи в установяването на връзка;
- УСТАНОВЕНО и СВЪРЗАНО - се отнася до входящи ip пакети, участващи във вече установени връзки, или връзки, инициирани от вече установени (свързани връзки);
- INVALID - се отнася до входящите ip пакети, ако нито едно от горните условия не се отнася за тях.
Задаване на политиката за iptables по подразбиране
Минималният набор от разрешителни правила за защитната стена е готов, остава да зададете политика по подразбиране, която забранява всички входящи връзки, които не съответстват на нашите правила. За целта използвайте ключа в командата iptables -P, задава политиката по подразбиране за дадената верига, в нашия случай:
iptables -P INPUT DROP
внимание: преди да използвате тази команда, трябва да се уверите, че текущите ви правила ви позволяват да се свържете със сървъра, в противен случай просто ще блокирате достъпа до себе си!
Нека да разгледаме получената таблица с правила за iptables, да добавим ключ -V, за да покажете по-подробен изход:iptables -L -v
Активиране на iptables дневници
Iptables ви позволява да пишете информация за предаване на ip пакети в системния дневник. Това се реализира чрез конкретно действие. LOG над връзката, след което ip пакетът продължава да се движи по веригата непокътнат. Например, създайте правило, което ще записва всички събития на връзка към порт 445 (tcp) в системния дневник:
iptables -A INPUT -p tcp --dport 445 -j LOG --log-префикс "IN SMB DROP:"
тук -лог-префикс задава префикса за всички съобщения, регистрирани от нашето правило. Това е удобно, ако имате няколко различни правила за регистрация или за по-нататъшна обработка на софтуера. Ако сега се опитате да се свържете външно към нашия сървър на порт 445, например чрез telnet, във файла / var / log / съобщения ще се появят записи:
Нека анализираме заключението:
В SMB DROP
: префикс, който задаваме с опцията -лог-префиксIN = eth0
интерфейсът, върху който се получава ip пакета, съдържа празна стойност за изходящи връзкиOUT =
интерфейсът, от който е изпратен ip пакета за входящи връзки, съдържа празна стойностMAC =
свързани заедно в следния ред: MAC адрес на дестинация, MAC адрес на източника, EtherType - 08:00 съответства на IPv4.Src =
ip адрес на източника, от който е изпратен ip пакетаDST =
дестинация ip адрес, до който е изпратен ip пакетаLEN =
размер на пакета ip в байтовеSPT =
изходен порт, от който е изпратен ip пакетаDPT =
дестинация порт, до който се изпраща ip пакета
Запазване и възстановяване на правила за филтриране на iptables
В заключение конфигурирайте автоматично зареждане на правилата, след рестартиране на сървъра. За целта трябва да бъде инсталиран пакет. IPTABLES-услуги и услугата се активира. Инсталирайте пакета чрез yum:
yum инсталирайте iptables-услуги
systemctl активиране на iptables
Проверете състоянието на услугата iptables:
iptables за състоянието на systemctl
Опцията за стартиране е зададена на активиран (on) параметър активен показва, че услугата работи.
При зареждане услугата ще прочете съдържанието на файла / etc / sysconfig / iptables, и възстановяване на запазените правила. За да запишем правилата си към него, използваме командата:
iptables-save> / etc / sysconfig / iptables
Можете да възстановите правилата от файла с командата:
IPTABLES-възстановяване < /etc/sysconfig/iptables
Сега можете да рестартирате сървъра и да се уверите, че правилата на защитната стена са възстановени по време на зареждане.
В следващата статия ще покажем как да използваме iptables за създаване на правила за пренасочване на трафик на NAT за шлюз за достъп, базиран на CentOS, от / към вътрешната мрежа на организацията.