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
Егер әдепкі саясатты өзгертпеген болсаңыз, барлық тізбектер үшін бастапқыда рұқсат беретін ережелер орнатылған.
Әдепкі ережені орнату үшін -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