Linux-ի վրա Firewall-ը կենսական դեր է խաղում համակարգչային համակարգի ապահովման գործում: Այն գործում է որպես խոչընդոտ՝ վերահսկելով և զտելով ցանցային երթևեկությունը՝ համակարգը պաշտպանելու չարտոնված մուտքից, հարձակումներից և այլ սպառնալիքներից: Առանց պատշաճ կազմաձևված Firewall-ի, սերվերը կարող է խոցելի լինել տարբեր տեսակի կիբերհարձակումների նկատմամբ՝ հանգեցնելով տվյալների անվտանգության և գաղտնիության համար լուրջ հետևանքների:
Այս հոդվածում մենք կանդրադառնանք Linux Firewall-ը կարգավորելու երկու հիմնական գործիքներին՝ firewalld-ին և iptables-ին: Մենք կանցկացնենք դրանց առանձնահատկությունների, ֆունկցիոնալության և առավելությունների համեմատական վերլուծություն: Բացի այդ, մենք կտրամադրենք մանրամասն հրահանգներ այս գործիքներից յուրաքանչյուրը կարգավորելու և օգտագործելու համար, ինչպես նաև կքննարկենք ձեր համակարգը Linux հարթակում Firewall-ով պաշտպանելու լավագույն փորձը: Բոլոր գործողությունները կցուցադրվեն root մուտք ունեցող վիրտուալ սերվերի վրա:
Firewall-ի կարգավորում Linux-ում
Firewalld-ը (Firewall Daemon) Linux օպերացիոն համակարգերում firewall-ը կառավարելու ծրագիր է: Այն տրամադրում է օգտագործողի ինտերֆեյս՝ firewall-ի կանոնները կարգավորելու, ցանցային ծրագրերի միացումները թույլատրելու կամ արգելափակելու համար: Այն նախապես տեղադրված է լռելյայնորեն սերվերային բաշխումների մեծ մասում: Եթե Firewalld-ը նախապես տեղադրված չէ, այն կարող է տեղադրվել բաշխման պաշտոնական պահոցներից անկախ:
Red Hat համակարգերի համար (օրինակ՝ RHEL, CentOS, Fedora) տեղադրումն իրականացվում է հրամանով.
yum install firewalld
Debian/Ubuntu-ի համար.
apt-get install firewalld
Տեղադրվելուց հետո այն կարելի է սկսել և ակտիվացնել անմիջապես հրամանով.
systemctl start firewalld
Հաջորդը, դուք պետք է ավելացնեք ծառայությունը գործարկմանը.
systemctl enable firewalld
Այս պահին խորհուրդ ենք տալիս անջատել ufw-ն, քանի որ այս գործիքի միաժամանակյա օգտագործումը firewalld-ի կամ iptables-ի հետ խորհուրդ չի տրվում: Ստուգեք կարգավիճակը.
systemctl status ufw
Դա դադարեցնելու համար մուտքագրեք հրամանը.
systemctl stop ufw
Ամբողջական ապաակտիվացման համար.
ufw disable
Այս գործողություններից հետո կարող եք անցնել firewall-ի կազմաձևմանը:
Նախ, անհրաժեշտ է սահմանել վստահության գոտիներ: Firewalld-ը օգտագործում է գոտիների հայեցակարգը՝ ցանցային ինտերֆեյսների վստահության մակարդակը որոշելու համար: Յուրաքանչյուր ինտերֆեյսի հատկացվում է մեկ գոտի, և firewall-ի կանոնները կիրառվում են գոտու հիման վրա: Բոլոր հասանելի գոտիների ցանկը բացվում է հրամանով.
firewall-cmd --get-zones
Սովորաբար օգտագործվում են 4 հիմնական գոտիներ.
- PublicԱյս գոտին նախատեսված է այն ցանցերի համար, որոնք դուք համարում եք ոչ անվտանգ;
- ԱնձնականԿիրառվում է տնային ցանցերին կամ այլ վստահելի ցանցային միացումներին;
- ՆերքինՕգտագործվում է ներքին ցանցերի համար, ինչպիսիք են կազմակերպության կամ կորպորատիվ ցանցի ներսում;
- DMZԱյս գոտին այն է, որտեղ սովորաբար տեղադրվում են սերվերներ, որոնք պետք է հասանելի լինեն ինտերնետից:
Այնուամենայնիվ, սա ընդամենը մեկ օրինակ է։ Դուք կարող եք ավելացնել ձեր սեփական գոտին՝ օգտագործելով հրամանը.
firewall-cmd --permanent --new-zone=nameyourzone
Ավելացնելուց հետո անհրաժեշտ է վերաբեռնում.
firewall-cmd --reload
Գոտին ջնջելու համար օգտագործվում է նմանատիպ մեթոդ
firewall-cmd --permanent --delete-zone=nameyourzone
Գոտիներ սահմանելուց հետո անհրաժեշտ է թույլատրել երթևեկությունը անհրաժեշտ ծառայությունների և նավահանգիստների համար: Որոշակի ծառայություն թույլատրելու համար օգտագործեք հրամանը.
firewall-cmd --zone=public --add-service=name
Որտեղ name-ը ծառայության անունն է։ Օրինակ՝ Apache-ի համար տրաֆիկ թույլատրելու համար՝
firewall-cmd --zone=public --add-service=http
Թույլատրելի նավահանգիստները սահմանելու համար օգտագործեք հրամանը.
firewall-cmd --zone=public --add-port=number/protocol
Օրինակ, ստանդարտ 22 պորտը SSH-ի համար այսպիսի տեսք կունենա.
firewall-cmd --zone=public --add-port=22/tcp
Այս փուլում հիմնական կանոնները արդեն ստեղծված են։ Հաջորդը, որոշեք, թե ինչպես է մշակվելու երթևեկությունը՝ կախված աղբյուրից, նպատակակետից, նավահանգստից և այլ չափանիշներից։ Կանոն ավելացնելու համար ( օրինակ՝ հանրային գոտին օգտագործելով).
firewall-cmd --zone=public rule
Օրինակ՝ ցանկացած աղբյուրից 80 նավահանգիստ (HTTP) մուտքային տրաֆիկ թույլատրելու համար.
firewall-cmd --zone=public --add-port=80/tcp --permanent
Կանոնը հեռացնելու համար.
firewall-cmd --permanent --remove-rule=rule_specification
Որտեղ կանոնը կանոնի տեսակն է (օրինակ՝ port, service, rich-rule և այլն), իսկ rule_specification-ը կանոնի սպեցիֆիկացիան է։
Firewalld-ի կազմաձևում փոփոխություններ կատարելուց հետո անհրաժեշտ է պահպանել և կիրառել դրանք: Փոփոխությունները պահպանելու համար օգտագործեք հրամանը.
firewall-cmd --runtime-to-permanent
Փոփոխությունները կիրառելու համար.
firewall-cmd --reload
Կարգավորումն ավարտելուց հետո դուք կարող եք ստուգել ընտրված պարամետրերը՝ բացելով բոլոր կանոնների ցանկը.
firewall-cmd --list-all
Եթե որևէ խնդիր առաջանա, ստուգեք Firewalld-ի տեղեկամատյանները՝ հրամանով.
journalctl -u firewalld
Նշում. Մենք անդրադարձել ենք միայն կապը կարգավորելու ընդհանուր ալգորիթմին: Գործիքն ունի լայն ֆունկցիոնալություն: Բոլոր հասանելի տարբերակների վերաբերյալ ամբողջական տեղեկատվության համար կարող եք օգտագործել պաշտոնական փաստաթղթերը կամ բացել օգնությունը.
firewall-cmd --help
iptable-ների կարգավորում Linux-ում
Ի տարբերություն Firewalld-ի, iptables-ը ավելի հին, բայց դեռ լայնորեն օգտագործվող գործիք է Linux-ում՝ firewall-ը կառավարելու համար: Այն ապահովում է ավելի անմիջական և ճկուն մոտեցում փաթեթների զտման կանոններին Linux միջուկի մակարդակում: Այնուամենայնիվ, iptables-ը պահանջում է ավելի առաջադեմ գիտելիքներ և փորձ՝ համեմատած Firewalld-ի հետ՝ դարձնելով այն ավելի քիչ հասանելի սկսնակների համար: Ստուգեք գործիքի նախապես տեղադրված տարբերակը հրամանով.
iptables -V
Եթե գործիքը տեղադրված չէ, ապա այն պետք է տեղադրվի: Ubuntu, Debian-ում տեղադրման հրամանը.
apt install iptables
Red Hat համակարգերի համար (օրինակ՝ CentOS, Fedora).
yum install iptables
Տեղադրումից հետո ակտիվացման հրամանը.
systemctl start iptables
Գործարկմանը ավելացնելու համար կատարեք՝
systemctl enable iptables
Նախքան iptables-ի կազմաձևումը սկսելը, կարևոր է հասկանալ, թե ինչպես է այն աշխատում: Դրան օգնում է ծրագրի շարահյուսությունը։ Այն հետևյալ տեսքն ունի.
iptables -t table action chain additional_parameters
Եկեք ավելի խորանանք յուրաքանչյուր կետի մեջ:
Iptables-ը ունի չորս հիմնական աղյուսակ՝ filter, nat, mangle և raw : Յուրաքանչյուրը նախատեսված է որոշակի տեսակի փաթեթներ մշակելու համար և ունի իր սեփական կանոնների շղթաները՝
- ԶտումՍա ամենահաճախ օգտագործվող աղյուսակն է, որը պարունակում է փաթեթների զտման կանոններ: Այն օգտագործվում է փաթեթները թույլատրելու կամ մերժելու վերաբերյալ որոշումներ կայացնելու համար:
- նատԱյս աղյուսակը օգտագործվում է փաթեթներում ցանցի հասցեները և նավահանգիստները փոփոխելու համար: Այն հաճախ օգտագործվում է դիմակահանդեսի (NAT) ստեղծման համար:
- մանգրովԱյս աղյուսակում դուք կարող եք փոփոխել փաթեթների վերնագրերը: Այն օգտագործվում է մասնագիտացված փաթեթային գործառնությունների համար, ինչպիսիք են մակնշումը:
- հումԱյս աղյուսակը օգտագործվում է կանոնների կազմաձևման համար, որոնք կիրառվում են նախքան կապի հետևման համակարգը անցնելը: Այն սովորաբար օգտագործվում է կանոններ սահմանելու համար, որոնք չպետք է փոփոխվեն հետևող համակարգի կողմից, օրինակ՝ որոշակի հասցեներից փաթեթներ թողնելու համար:
Յուրաքանչյուր աղյուսակ պարունակում է մի շարք շղթաներ: Շղթաները կանոնների հաջորդականություն են, որոնք ստուգվում են հաջորդաբար: Կան երեք նախապես սահմանված շղթաներ.
- INPUT (մուտքային). Այս շղթայի կանոնները որոշում են, թե ինչ անել մուտքային փաթեթների հետ:
- OUTPUT (ելքային). Այս շղթան վերաբերում է բոլոր փաթեթներին, որոնք ձեր համակարգիչը ուղարկում է ցանցի այլ սարքերին կամ համակարգիչներին:
- ԱՌԱՋ (փոխանցում). Այս շղթայի կանոնները սահմանում են, թե ինչ անել փոխանցված փաթեթների հետ:
Ի վերջո, յուրաքանչյուր շղթա ունի որոշակի գործողություն (թիրախ): Գործնականում օգտագործվում են 5 հիմնական գործողություններ.
- ԸՆԴՈՒՆԵԼԹույլ տվեք փաթեթին անցնել firewall-ով:
- ԻջնելՄերժեք փաթեթը և մերժեք այն առանց որևէ պատասխանի:
- ՄերժելՄերժեք փաթեթը և ուղարկողին ուղարկեք ICMP սխալի հաղորդագրություն:
- ՄուտքՄուտքագրեք փաթեթը համակարգի գրանցամատյանում և կատարեք մեկ այլ գործողություն (օրինակ՝ ԸՆԴՈՒՆԵԼ կամ ԿԱՌՆԵԼ):
- ՎԵՐԱԴԱՐՁԴադարեցրեք ընթացիկ շղթայի կանոնների ստուգումը և վերադարձեք զանգահարող շղթային (եթե կիրառելի է):
Կարգավորումը սկսելու համար բացեք գոյություն ունեցող կանոնների ցանկը հրամանով.
iptables -L
Որպես Iptables-ի կազմաձևման ուղեցույց, եկեք դիտարկենք առավել հաճախ օգտագործվող հրամանների գործնական օրինակները: Հարմարության համար մենք օրինակները կբաժանենք 3 խմբի՝ կախված կոնկրետ շղթայից։
Շղթայի մուտքագրում ՝
- Թույլատրել մուտքային տրաֆիկը TCP արձանագրության միջոցով 80 նավահանգստի վրա.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Թույլատրել մուտքային տրաֆիկը 22-րդ նավահանգստի UDP արձանագրության միջոցով.
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Արգելափակել մուտքային տրաֆիկը կոնկրետ IP հասցեից.
iptables -A INPUT -s 192.168.1.100 -j DROP
Շղթայի ելքային հզորություն ՝
- Թույլատրել ելքային տրաֆիկը TCP արձանագրության միջոցով 443 նավահանգստի վրա.
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Թույլատրել ելքային տրաֆիկը UDP արձանագրության միջոցով 80-րդ նավահանգստի վրա.
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Արգելափակել ելքային տրաֆիկը դեպի կոնկրետ նավահանգիստ (օրինակ՝ 21).
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Շղթա առաջ :
- Արգելափակել փոխանցվող երթևեկությունը IP հասցեների որոշակի տիրույթից.
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Արգելափակել փաթեթների վերահասցեավորումը հատուկ ցանցային ինտերֆեյսից.
iptables -A FORWARD -i eth1 -j DROP
3. Սահմանափակեք միաժամանակյա միացումների քանակը կոնկրետ նավահանգստի համար (այս օրինակում՝ 10-րդ նավահանգստում րոպեում 80 միացում).
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Ինչպես տեսնում եք, յուրաքանչյուր առանձին դեպքում օգտագործվում է լրացուցիչ փաստարկ (հրաման): Հնարավոր փաստարկների ամբողջական ցանկը և գործիքի ֆունկցիոնալության ընդհանուր աջակցությունը ստանալու համար մուտքագրեք՝
iptables -h
Պարամետրերը ճիշտ լինելու համար, նորից մուտքագրեք հրամանը՝ կանոնների ցանկը դիտելու համար.
iptables -L
Հատուկ կանոն ջնջելու համար օգտագործեք հրամանը.
iptables -D chain rule_number
Օրինակ, եթե ցանկանում եք ջնջել թիվ 1 կանոնը INPUT շղթայից, հրամանը կունենա հետևյալ տեսքը.
iptables -D INPUT 1
Բոլոր կանոնները մեկ հրամանով ջնջելու համար.
iptables -F
Կարևոր նշում . iptables-ի կանոնները չեն պահպանվում ավտոմատ կերպով համակարգը կամ ծառայությունը վերագործարկելուց հետո: Կանոնները պահպանելու համար դրանք պետք է ավելացվեն կարգավորման ֆայլին և վերականգնվեն վերագործարկումից հետո: Այս հարցում կարող են օգնել iptables-save և iptables-restore ծրագրերը: Կանոնները պահպանելու համար մուտքագրեք հետևյալ հրամանը՝
iptables-save > /etc/iptables/rules.v4
Սա պահպանում է iptables-ի ընթացիկ կանոնները rules.v4 ֆայլում: Վերագործարկումից հետո վերականգնելու համար մուտքագրեք.
iptables-restore < /etc/iptables/rules.v4
Այս հրամանը վերականգնում է կանոնները rules.v4 ֆայլից:
Եզրափակում
Firewall-ի կարգավորումը Linux-ում firewalld-ի կամ iptables-ի միջոցով սերվերի անվտանգության ապահովման կարևոր ասպեկտ է: Երկու գործիքներն էլ առաջարկում են ցանցային տրաֆիկի կառավարման հուսալի միջոցներ և համակարգը պաշտպանելու չարտոնված մուտքից և կիբերհարձակումներից: Firewall-ի և iptables-ի միջև ընտրությունը կախված է օգտագործողի հատուկ կարիքներից և նախասիրություններից՝ հաշվի առնելով դրանց տարբեր ֆունկցիոնալությունն ու ուժեղ կողմերը: