Конфигуриране на Linux защитна стена с помощта на iptables на CentOS / RHEL 7

В тази статия ще покажем как да управляваме защитната стена на 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

Нека анализираме по ред:

  1. Ние уточняваме веригата INPUT, т.е. правилото ще се прилага за входящи връзки.
  2. След това използвайте ключа -i (-интерфейс), за да определите входящия интерфейс, до който пристига ip пакета.
  3. Завършваме командата с ключа -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, от / към вътрешната мрежа на организацията.