Iptables ձեռնարկ


Iptables-ը հրամանի տող firewall է, որը զտում է փաթեթները ըստ սահմանված կանոնների։ Iptables-ի միջոցով օգտվողները կարող են ընդունել, մերժել կամ շարունակել կապերը. այն աներևակայելի բազմակողմանի է և լայնորեն օգտագործվում է, չնայած այն փոխարինվել է nftable-ներով:

Այս ձեռնարկը կարդալուց հետո դուք կհասկանաք Iptables-ի քաղաքականությունը և կսահմանեք Iptables-ի կանոնները՝ ձեր տնային ցանցը պաշտպանելու համար:

Նշում. sudo հրամանն ավելացվել է ընթերցողների համար, ովքեր պետք է պատճենեն-տեղադրեն այս iptables ձեռնարկում նշված կանոնները:

Iptables բառարան.

ԹԻՐԱԽ. iptables-ն օգտագործելիս թիրախը գործողություն է, որը ցանկանում եք, որ Iptables-ը կիրառի, երբ փաթեթը համապատասխանում է կանոնին:

Շղթան. շղթան կանոնների ցանկ է. հասանելի ներկառուցված շղթաներն են՝ ՄՈՒՏՔ, ԵԼՔ, ԱՌԱՋ, ՆԱԽԱՊԱՏՈՒՄ և ՀԵՏԱՓՈԽՈՒՄ:

ԱՂՅՈՒՍԱԿ. Աղյուսակները iptables-ի գործառույթներն են յուրաքանչյուր նպատակի համար: Օրինակ, կա աղյուսակ՝ առաջադրանքների երթուղման համար և մեկ այլ աղյուսակ՝ առաջադրանքների զտման համար; յուրաքանչյուր աղյուսակ պարունակում է կանոնների շղթաներ:

Հասանելի աղյուսակներն են՝ զտիչ, nat, հում, անվտանգություն և մանգլ: Յուրաքանչյուր աղյուսակ պարունակում է ներկառուցված (կանոն) շղթաներ: Հետևյալ ցանկը ցույց է տալիս, թե ինչ շղթաներ են ներառում յուրաքանչյուր աղյուսակ.

FILTER INPUT OUTPUT FORWARD
NAT PREROUTING POSTROUTING OUTPUT
RAW PREROUTING OUTPUT
MANGLE PREROUTING POSTROUTING OUTPUT INPUT FORWARD
SECURITY INPUT OUTPUT FORWARD

Կախված այն գործողությունից, որը ցանկանում եք անել iptables-ը, դուք պետք է նշեք աղյուսակը՝ օգտագործելով -t տարբերակը, որին հաջորդում է աղյուսակի անունը: Այս ձեռնարկում -t տարբերակը չի օգտագործվում: Այս ձեռնարկը կենտրոնանում է զտման նպատակների վրա՝ օգտագործելով լռելյայն կիրառվող զտիչ աղյուսակը, երբ -t տարբերակը չի անցնում: Այս ձեռնարկը կարդալիս դուք կսովորեք վերը նշված հասկացություններից մի քանիսը:

Ինչպես տեղադրել:

Debian-ի և դրա վրա հիմնված Linux բաշխումների վրա Iptables-ը տեղադրելու համար գործարկեք.

sudo apt install iptables -y

Նախքան RedHat-ի վրա հիմնված Linux բաշխումների վրա տեղադրել Iptables, դուք պետք է անջատեք Firewalld-ը՝ գործարկելով.

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl mask --now firewalld

Այնուհետև տեղադրեք Iptables-ը՝ կատարելով.

sudo yum install iptables-services
sudo systemctl start iptables
sudo systemctl start ip6tables
sudo systemctl enable iptables
sudo systemctl enable ip6tables
sudo systemctl start ip6tables

Ինչպես սկսել Iptables-ով.

Նախքան սկսելը, ստուգեք նախորդ կանոնները՝ հրահանգելով iptables-ին ցուցակագրել առկա քաղաքականությունները և կանոնները՝ օգտագործելով -L (–list) պարամետրը:

sudo iptables -L

Վերևի ելքը ցույց է տալիս 3 տող՝Շղթայական INPUT, Chain FORWARD և Chain OUTPUT: Այնտեղ, որտեղ INPUT-ը վերաբերում է մուտքային տրաֆիկի քաղաքականությանը, OUTPUT-ը վերաբերում է ելքային տրաֆիկի նկատմամբ կիրառվող քաղաքականությանը, իսկ FORWARD-ը վերաբերում է երթուղային քաղաքականությանը:

Արդյունքը նաև ցույց է տալիս, որ չկան սահմանված կանոններ, և բոլոր սահմանված քաղաքականություններն ընդունված են:

Կան 3 տեսակի քաղաքականություն՝ ԸՆԴՈՒՆԵԼ, ՄԵՐԺԵԼ և ԲԱՑԵԼ:

ԸՆԴՈՒՆԵԼ քաղաքականությունը թույլ է տալիս կապեր. ՄԵՐԺԵԼ քաղաքականությունը մերժում է կապերը՝ վերադարձնելով սխալ. DROP քաղաքականությունը հրաժարվում է միացումներից՝ առանց սխալներ առաջացնելու: DROP օգտագործելիս, UDP փաթեթները հեռացվում են, և վարքագիծը կլինի նույնը, ինչ միանալուն նավահանգիստ առանց ծառայության: TCP փաթեթները կվերադարձնեն ACK/RST, որը նույն պատասխանն է, որով կպատասխանի բաց միացքը, որի վրա չկա ծառայություն: ՄԵՐԺՈՒՄ օգտագործելիս ICMP փաթեթը վերադարձնում է սկզբնաղբյուր հոսթին անհասանելի նպատակակետ:

Երբ գործ ունես Iptables-ի հետ, նախ պետք է յուրաքանչյուր շղթայի համար սահմանել երեք քաղաքականություն. դրանից հետո կարող եք ավելացնել բացառություններ և բնութագրեր: Քաղաքականությունների ավելացումն ունի հետևյալ տեսքը.

sudo iptables -P INPUT         <ACCEPT/DROP/REJECT>
sudo iptables -P OUTPUT     <ACCEPT/DROP/REJECT>
sudo iptables -P FORWARD <ACCEPT/DROP/REJECT>

Iptables-ի թույլատրելի և սահմանափակող քաղաքականություն՝

Դուք կարող եք կիրառել Iptables-ը թույլատրելի քաղաքականությամբ՝ ընդունելով բոլոր մուտքային կապերը, բացառությամբ դրանց, որոնք դուք հատուկ հրաժարվում կամ մերժում եք: Այս դեպքում յուրաքանչյուր կապ թույլատրվում է, քանի դեռ չեք սահմանել հատուկ կանոն՝ դրանից հրաժարվելու համար:

Ընդհակառակը, սահմանափակող քաղաքականությունը մերժում է բոլոր կապերը, բացառությամբ դրանց, որոնք դուք հատուկ ընդունում եք: Այս դեպքում ցանկացած կապ մերժվում է, քանի դեռ չեք սահմանել այն ընդունելու կանոն:

Iptables-ի հետ սահմանափակող քաղաքականության կիրառում.

Հետևյալ օրինակը ցույց է տալիս, թե ինչպես կիրառել սահմանափակող քաղաքականություն Iptables-ի հետ՝ բաց թողնելով բոլոր մուտքային տրաֆիկը, բացառությամբ թույլատրվածի:

Մուտքային երթևեկի արգելափակում:

ԿԱՐԵՎՈՐ. հետևյալ 3 կանոնների կիրառումը կարող է ձեզ թողնել առանց ինտերնետ կապի: Օգտագործելով «Iptables հավելվածի կանոններ և Iptables վիճակներ»-ում նշված կանոնները՝ դուք ավելացնում եք անհրաժեշտ բացառությունները՝ վերականգնելու ձեր մուտքը ինտերնետ: Դուք կարող եք հետևողականորեն կատարել sudo iptables -F կանոնները մաքրելու համար:

Դուք կարող եք արգելափակել բոլոր մուտքային տրաֆիկը, որը թույլ է տալիս միայն ելքային երթևեկին զննել համացանցը և ձեզ անհրաժեշտ հավելվածները:

sudo iptables -P INPUT DROP

sudo iptables -P OUTPUT ACCEPT

sudo iptables -P FORWARD DROP

Որտեղ:

-P=Քաղաքականություն

sudo iptables -P INPUT DROP.  հանձնարարեք iptables-ին հրաժարվել ամբողջ մուտքային տրաֆիկից՝ առանց աղբյուրին պատասխանելու:

sudo iptables -P OUTPUT ACCEPT. սահմանում է ACCEPT քաղաքականություն ելքային տրաֆիկի համար:

sudo iptables -P FORWARD DROP. հրահանգում է iptables-ին չկատարել երթուղային առաջադրանքները՝ թողնելով բոլոր փաթեթները, որոնք նախատեսված են այլ հոսթին (փորձելով անցնել firewalled սարքի միջով) առանց պատասխանի:

Վերոնշյալ օրինակը թույլ է տալիս զննել համացանցը և տեղական սարքի կողմից սկսված կապերը (-P OUTPUT ACCEPT), սակայն կկանխի այլ հոսթի նախաձեռնած կապերը (-P INPUT DROP), ինչպիսին է ssh-ը: ձեր սարքին մուտք գործելու փորձերը սխալ հաղորդագրություններ չեն վերադարձնում:

Երբ դուք ակտիվացնում եք Iptables-ը սահմանափակող քաղաքականությամբ, ինչպես նախորդ օրինակում, դուք պետք է ավելացնեք կանոններ՝ ձեր կազմաձևումը կարգավորելու համար: Օրինակ, եթե պահպանում եք վերը նշված կոնֆիգուրացիան՝ առանց loopback (lo) ինտերֆեյսի համար ողջամիտ բացառություն ավելացնելու, որոշ հավելվածներ կարող են ճիշտ չաշխատել: Դուք նաև պետք է թույլատրեք մուտքային տրաֆիկը, որը պատկանում է կամ կապված է ձեր սարքի կողմից սկսված կապի հետ:

Iptables Հավելված կանոններ և Iptables վիճակներ

Կարևոր է հասկանալ, որ Iptables-ը կանոնները կիրառում է պատվերով: Երբ դուք կանոն եք սահմանում նախորդ կանոնից հետո, երկրորդ կանոնը կվերագրի վերջինը, եթե փաթեթը համապատասխանում է նույն կանոնին:

Ինձ դուր է գալիս նախորդ օրինակը. դուք արգելափակել եք բոլոր մուտքային տրաֆիկը, դուք պետք է բացառություններ ավելացնեք loopback ինտերֆեյսի համար. դրան կարելի է հասնել՝ ավելացնելով -A (Append) պարամետրը:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Մոդուլը  (-m) conntrack –ctstate ՍՏԵՂԾՎԱԾ, RELATED հրահանգում է Iptables-ին հաստատել, արդյոք կապի վիճակը ՍՏԵՂԾՎԱԾ Է կամ ԿԱՊՎԱԾ Է գոյություն ունեցող կապի հետ՝ նախքան սահմանված կանոնների քաղաքականությունը կիրառելը:

Կան 4 հնարավոր վիճակներ, որոնք Iptable-ը կարող է ստուգել.

Iptables-ի վիճակը ՆՈՐ. փաթեթը կամ տրաֆիկը, որը դուք թույլ եք տալիս կամ արգելափակում եք, փորձում է նոր կապ սկսել:

Iptables-ի վիճակը ՍՏԵՂԾՎԱԾ Է. փաթեթը կամ տրաֆիկը, որը դուք թույլ եք տալիս կամ արգելափակում եք, հաստատված կապի մի մասն է:

Iptables վիճակը  ԿԱՊՎԱԾ է. փաթեթը կամ տրաֆիկը սկսում է նոր կապ, բայց կապված է գոյություն ունեցող կապի հետ:

Iptables վիճակն ԱՆՎԱՎԵՐ է. փաթեթը կամ տրաֆիկը անհայտ է առանց վիճակի:

Վերոնշյալ օրինակի առաջին տողը հրահանգում է Iptables-ին ընդունել մուտքային փաթեթներ տրաֆիկից, որը գալիս է կամ կապված է ձեր սարքի կողմից սկսված միացումներից: Երկրորդ տողը հանձնարարում է Iptables-ին ընդունել միայն ելքային տրաֆիկ արդեն հաստատված կապերից:

Iptables Հավելված է loopback տրաֆիկ ընդունելու և միջերեսներ սահմանելու համար.

Loopback ինտերֆեյսը օգտագործվում է ծրագրերի կողմից, որոնք պետք է փոխազդեն տեղական հոսթի հետ: Եթե դուք չեք թույլատրում շրջադարձային երթևեկությունը, որոշ հավելվածներ կարող են չաշխատել:

Հետևյալ հրամանը թույլ է տալիս շրջադարձ կապեր.

sudo iptables -A INPUT -i lo -j ACCEPT

sudo iptables -A OUTPUT -o lo -j ACCEPT

Որտեղ -i և -o-ն օգտագործվում են մուտքային տրաֆիկի (-i) և ելքային տրաֆիկի (-o) ցանցային սարքը նշելու համար:

Iptables-ի հետ թույլատրելի քաղաքականության կիրառում.

Կարող եք նաև սահմանել թույլատրելի քաղաքականություն, որը թույլ է տալիս բոլոր երթևեկությունը, բացառությամբ նշված հեռացվածի կամ մերժվածի: Դուք կարող եք միացնել ամեն ինչ, բացառությամբ որոշակի IP-ի կամ IP միջակայքի, կամ կարող եք հրաժարվել փաթեթներից՝ հիմնվելով դրանց վերնագրերի վրա, ի թիվս այլ հնարավորությունների:

Հետևյալ օրինակը ցույց է տալիս, թե ինչպես կիրառել թույլատրելի քաղաքականություն, որը թույլ է տալիս ամբողջ տրաֆիկը, բացառությամբ ssh ծառայության համար արգելափակված IP տիրույթի:

sudo iptables -P INPUT ACCEPT

sudo iptables -P OUTPUT ACCEPT

sudo iptables -P FORWARD DROP

sudo iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.1.100-192.168.1.110 -j REJECT

Վերոնշյալ օրինակը կիրառում է թույլատրելի քաղաքականություն, սակայն արգելափակում է ssh մուտքը 192.168.1.100 և 192.168.1.110 տիրույթին պատկանող բոլոր IP-ներին:

Այնտեղ, որտեղ -p-ն նշում է արձանագրությունը, –dport (կամ  –destination-port) նպատակակետ նավահանգիստը (22,ssh), իսկ մոդուլի iprange-ը արգումենտով –src-range (աղբյուրի տիրույթ) թույլ է տալիս սահմանել IP միջակայքը: -j (–jump) տարբերակը հրահանգում է iptables-ին, թե ինչ անել փաթեթի հետ; այս դեպքում մենք ներկայացնում ենք ՄԵՐԺՈՒՄԸ:

Նավահանգիստների արգելափակում Iptables-ով

Հետևյալ օրինակը ցույց է տալիս, թե ինչպես արգելափակել հատուկ նավահանգիստ բոլոր կապերի համար՝ ssh պորտը:

sudo iptables -A INPUT -p tcp --destination-port 22 -j DROP

Պահպանելով Iptables փոփոխությունները

Iptables-ի կանոնները համառ չեն. վերագործարկումից հետո կանոնները չեն վերականգնվի: Ձեր կանոնները հաստատուն դարձնելու համար գործարկեք հետևյալ հրամանները, որտեղ առաջին տողը պահպանում է կանոնները ֆայլում /etc/iptables.up.rules, իսկ երկրորդ տողը՝ ֆայլը ստեղծելու համար, որպեսզի iptables-ը սկսվի վերաբեռնումից հետո:

sudo  iptables-save > /etc/iptables.up.rules

nano /etc/network/if-pre-up.d/iptables

Ավելացրեք հետևյալը ֆայլին և փակեք պահպանման փոփոխությունները (CTRL+X):

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules

Ի վերջո, տվեք ֆայլի կատարման թույլտվությունները՝ գործարկելով.

chmod +x /etc/network/if-pre-up.d/iptables

Iptables-ի լվացման կամ հեռացման կանոններ.

Դուք կարող եք հեռացնել Iptables-ի ձեր բոլոր կանոնները՝ գործարկելով հետևյալ հրամանը.

sudo iptables -F

Հատուկ շղթա հեռացնելու համար, ինչպիսին է INPUT-ը, կարող եք  գործարկել՝

sudo iptables -F

Եզրակացություն:

Iptable-ները շուկայում ամենաբարդ և ճկուն firewall-ներից են: Չնայած այն փոխարինվել է, այն մնում է որպես ամենատարածված պաշտպանական և երթուղային ծրագրերից մեկը:

Դրա իրականացումը կարող է արագ սովորել Linux-ի նոր օգտվողները՝ TCP/IP-ի հիմնական գիտելիքներով: Երբ օգտվողները հասկանում են շարահյուսությունը, կանոնների սահմանումը դառնում է հեշտ խնդիր:

Կան ավելի շատ լրացուցիչ մոդուլներ և տարբերակներ, որոնք չեն լուսաբանվել այս ներածական ձեռնարկում: Դուք կարող եք տեսնել ավելի շատ iptables օրինակներ Iptables-ում սկսնակների համար:

Հուսով եմ, որ այս Iptables ձեռնարկը օգտակար էր: Շարունակեք հետևել Linux ակնարկին՝ Linux-ի լրացուցիչ խորհուրդների և ձեռնարկների համար: