Көмек

iptables брандмауэрін баптау

Iptables – Linux операциялық жүйелеріне арналған, желілік трафиктің өтуін басқаруды қамтамасыз ететін желіаралық экран. Серверге қосылуға (немесе серверден сұраныс жіберуге) әрекет жасалған кезде Iptables нақты қосылым үшін ережелер тізбегін тексеріп, берілген баптауларды қолданады.

Iptables барлық заманауи Linux дистрибутивтерінде әдепкі бойынша орнатылған.

Тізбектер түрлері

iptables тізбектерінің үш түрі бар – INPUT, OUTPUT және FORWARD.

  • INPUT – бұл тізбек кіріс қосылымдарын өңдеу үшін қолданылады.
  • OUTPUT – шығыс қосылымдары үшін қолданылады.
  • FORWARD – транзиттік трафикті өңдеу үшін қолданылады, мысалы, маршрутизатор жағдайында. Егер маршруттауды баптамасаңыз, бұл түрдегі ережелер сізге қажет болмайды.

Тізбек – ережелердің реттелген жиынтығы. Әрбір ереже критерийді (мысалы, пакет көзінің IP-мекенжайын) және осы критерийге сәйкес келетін пакетке қолданылатын әрекетті (мысалы, "рұқсат ету") қамтиды. Егер критерий болмаса, ереже барлық пакеттерге қолданылады.

Пакетке қатысты әрекетті анықтау кезінде iptables тиісті тізбекті ережелер тізімінің басынан бастап қарап, сәйкестік тапқанша оларды ретімен тексереді. Егер сәйкестік табылмаса (қосылым жасалған ережелердің ешқайсысына сәйкес келмесе), әдепкі ереже қолданылады.

iptables ережелерін баптау кезінде көптеген порттар үшін деректерді сәтті жіберу қосылым орнатуды және жауап алуды талап ететінін есте сақтаған жөн. Сондай-ақ өзіңізге қолжетімділікті абайсызда бұғаттап алмауға сақ болыңыз, мысалы, серверге SSH арқылы қашықтан қосылу да кіріс қосылымы болып табылады.

Қосылымдармен әрекеттер

Қосылымдарға қолданылатын әрекеттердің үш түрі бар:

Accept – қосылымға рұқсат ету.

Drop – бұғаттау туралы көзге хабарлама жібермей, қосылымды елемеу (бұғаттау). Бұл интернетке қосылған порттардағы трафикті өңдеу үшін ұсынылады, себебі бұл жағдайда шабуылдаушылар порттарды сканерлеу кезінде ең аз ақпарат алады.

Reject – сұраныс көзіне бұғаттау туралы хабарлап, қосылымды қабылдамау. Әдепкі бойынша "icmp-port-unreachable" жауап пакеті жіберіледі, бірақ хабарламаны қосымша баптау да қолжетімді (мысалы, "icmp-host-unreachable", "icmp-net-prohibited", "icmp-host-prohibited" және басқалар).

Ережелерді баптау

Бұл мақалада ережелерді баптаудың жалпы форматы келесідей болады:

iptables әрекет тізбек ереже

Бұл форматта кестені атап өтпейміз, себебі iptables командаларында әдепкі бойынша көзделетін негізгі сүзгілеу кестесі filter үшін баптауды қарастырамыз. Бұл кестені қосымша көрсету қажет емес.

Бұл контекстегі әрекет – ережеге қатысты жасалуы тиіс қадам (мысалы, оны қосу немесе жою).

iptables-тегі қолжетімді әрекеттердің мысалдары:

  • -A – тізбекке ереже қосу;
  • -I – нөмірін көрсетіп, тізбекке ереже қосу;
  • -D – ережені жою;
  • -F – барлық ережелерді жою;
  • -L – ағымдағы тізбектегі барлық ережелерді шығару;
  • -P – әдепкі әрекетті орнату.

Қосымша опциялар:

  • -p – пакет протоколын көрсету;
  • -s – пакет көзінің IP-мекенжайын көрсету;
  • -j – пакетті қалай өңдеу керектігін анықтау (рұқсат ету, бұғаттау және т.б.).

Бар ережелерді қарау

Барлық ережелерді шығару үшін келесі команданы пайдаланыңыз:

iptables -L

Немесе толығырақ шығыс беретін команданы:

iptables -L -n -v

Сондай-ақ нақты тізбектің, мысалы, INPUT тізбегінің ережелерін қарауға болады:

iptables -L INPUT

Әдепкі ережелер

Егер жасалған ережелердің ешқайсысы кіріс пакетке сәйкес келмесе, әдепкі ереже қолданылады.

Әдепкі ережелерді қарау үшін келесі команданы орындаңыз:

iptables -L | grep policy

Егер әдепкі саясатты өзгертпеген болсаңыз, барлық тізбектер үшін бастапқыда рұқсат беретін ережелер орнатылған.

iptables брандмауэрін баптау

Әдепкі ережені орнату үшін -P опциясын пайдаланыңыз, мысалы:

iptables -P FORWARD DROP

Баптау мысалдары

Бар тізбекке ереже қосу үшін келесі команданы орындаңыз:

iptables -A

Егер ережені тізімнің соңына емес, басқа орынға қою қажет болса, команданың келесі форматын пайдаланып, тізімдегі ереже нөмірін көрсете аласыз:

iptables -I тізбек нөмір ереже

Мысалы, келесі ереже INPUT тізбегінде бірінші болады:

iptables -I INPUT 1 --dport 80 -j ACCEPT

Белгілі бір IP-мекенжайдан келетін барлық кіріс қосылымдарын бұғаттау үшін:

iptables -A INPUT -s 1.2.3.4 -j DROP

Белгілі бір ішкі желіден келетін қосылымдарды бұғаттау үшін:

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

Көз ретінде IP-мекенжайды да, хостты да көрсетуге болады. Мысалы, test.domain.ru хостынан келетін барлық қосылымдарға тыйым салу үшін:

iptables -A INPUT -s test.domain.ru -j DROP

test.domain.ru-дан басқа хосттардан келетін қосылымдарға тыйым салу үшін:

iptables -A INPUT ! -s test.domain.ru -j DROP

25 (SMTP) портына барлығына қолжетімділікке рұқсат беру үшін:

iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

25 (SMTP) портын барлығы үшін бұғаттау үшін (ACCEPT мәнін DROP-қа ауыстырыңыз):

iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j DROP

Apache порттарына барлығына қолжетімділік ашу үшін:

iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT 
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

Нақты IP-мекенжай үшін 3306 (MySQL) портына қолжетімділікке рұқсат беру үшін:

iptables -A INPUT -s 1.2.3.4 -p tcp -m tcp --dport 3306 -j ACCEPT

Журналға жазуды баптау үшін:

iptables -A INPUT -p tcp -m multiport --dports 22,53,8080,139,445 -j LOG --log-level INFO --log-prefix "New connection from 1.2.3.4/24:" 
iptables -A INPUT -s 1.2.3.4/24 -m multiport --dports 22,8080,139,445 -j ACCEPT

Мұндай баптау кезінде 1.2.3.4/24 ішкі желісінен серверге жасалған әрбір жаңа қосылым журналға тіркеледі.

Кең таралған шабуылдардан қорғану үшін келесі баптауларды қосуға болады:

Барлық "танылмаған" пакеттерді бұғаттау үшін:

iptables -A INPUT -m state --state INVALID -j DROP

Нөлдік пакеттерді бұғаттау үшін:

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

syn-flood шабуылынан қорғану үшін:

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP 
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

Фрагменттелген пакеттерді бұғаттау және ping flood-тан қорғану үшін:

iptables -A INPUT -p icmp --fragment -j LOG --log-prefix "ping flooding" 
iptables -A INPUT -p icmp --fragment -j DROP

ping-ті бұғаттау үшін:

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP 
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP

Белгілі бір мекенжайлардан ping-ке рұқсат беру үшін:

iptables -A INPUT -s 1.2.3.4 -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -s 1.22.33.44 -p icmp --icmp-type echo-request -j ACCEPT

80 порты үшін бір мезгілдегі қосылымдар санына 5-ке тең шектеу (connlimit) орнату үшін:

iptables -A INPUT -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 5 --connlimit-mask 32 -j DROP

Өзгерістерді сақтау

Жасалған ережелер жүйе қайта жүктелгеннен кейін де күшінде қалуы үшін оларды сақтау қажет.

CentOS үшін келесі команданы пайдаланыңыз:

/sbin/service iptables save

Егер Debian немесе Ubuntu пайдалансаңыз, ережелерді сақтау үшін iptables-persistent пакетін орнату ұсынылады. Оны келесі командамен орнатуға болады:

apt install iptables-persistent

Орнату барысында ағымдағы ережелерді сақтау ұсынылады. "Иә" (Yes) деп жауап беріңіз.

iptables ережелеріне өзгерістер енгізгеннен кейін оларды келесі команданы орындап сақтаңыз:

netfilter-persistent save

Ережелерді жою

Нақты ережені жою үшін -D опциясын пайдаланыңыз, мысалы:

iptables -D INPUT -s 1.2.3.4 -j DROP

Барлық ережелерді жою үшін келесі команданы орындаңыз:

iptables -F

Белгілі бір тізбектің ережелерін жою үшін келесі команданы орындаңыз:

iptables -F INPUT

Сұрақтарыңыз бар болса, жазыңыз