iptables հիմնական Linux հրակնճիռի կարգավորում¶
Այս հոդվածում
iptables-ը Linux միջուկում ցանցային երթևեկությունը ֆիլտրելու և կառավարելու ներկառուցված շրջանակն է: Այն թույլ է տալիս ճկուն կառավարել մուտքային, ելքային և տրանզիտային կապերը՝ հիմնվելով կանոնների վրա:
Նշում
iptables-ը նախապատված է գրեթե բոլոր Linux դիստրիբյուտիվներում:
Ավելի նոր համակարգերում (RHEL 8+, Ubuntu 20.04+) լռելյայն կարող է լինել nftables (nft հրամանը), սակայն iptables-ը մնում է համատեղելի legacy ինտերֆեյսի iptables-legacy միջոցով:
Թափանցիկ կամ VPS սերվերների համար՝ ****setting** iptables կրիտիկական կարևորություն ունի անվտանգության համար:
Հիմնական հասկացություններ¶
Երեք շղթա (chains)¶
| Շղթա | Նպատակ |
|---|---|
INPUT | Մուտքային երթևեկություն սերվեր (SSH, HTTP և այլն) |
OUTPUT | Ելքային երթևեկություն սերվերից (նորմավորումներ, API հարցումներ) |
FORWARD | Երթևեկություն, որը անցնում է սերվերով (միայն ռուտինգի/NAT դեպքում) |
Նշում
Զգուշացեք INPUT-ի հետ:
22 պորտը արգելափակելը առանց թույլտվության կարող է կտրել ձեր կապը սերվերի հետ: Միշտ ստուգեք կանոնները կիրառելուց առաջ:
Ինչպես է այն աշխատում¶
- Փաթեթը մուտք է գործում համապատասխան շղթա՝
INPUT,OUTPUT,FORWARD: - Կանոնները գնահատվում են հերթականությամբ՝ ոչ թե համընկնում է գտնվում, կատարվում է նշված գործողությունը:
- Եթե համընկնում չի գտնվում, կիրառվում է լռելյայն քաղաքականությունը
policy:
Գործողություններ (targets)¶
| Գործողություն | Դրսևորում | Խորհուրդ |
|---|---|---|
ACCEPT | Թույլ տալ փաթեթը | Բարեկամական ծառայությունների համար (SSH, HTTP) |
DROP | Լռելյայն ընկղմել փաթեթը (պատասխան չկա) | ****Ամենալավ ընտրությունն անվտանգության համար****՝ թաքցնում է պորտի գոյությունը |
REJECT | Մերժել ICMP սխալով (օրինակ՝ port-unreachable) | Օգտագործեք, եթե անհրաժեշտ է հետադարձ կապ (օրինակ՝ թերությունների համար) |
Նշում
Անվտանգության կանոն
Լռելյայն՝ արգելել ամեն ինչ, ապա թույլ տալ միայն անհրաժեշտը:
Հիմնական հրամանի սինտաքսիս¶
Հիմնական տարբերակներ.¶
| Տարբերակ | Նպատակ |
|---|---|
-A | Ավելացնել կանոն վերջում շղթայի |
-I | Տեղադրել կանոն սկզբում (կամ կոնկրետ համարով՝ -I INPUT 1) |
-D | Կանոնի ջնջել (համարով կամ տողի պատճենմամբ) |
-L | Ցուցադրել կանոնները |
-F | Մաքրել բոլոր կանոնները շղթայում |
-P | Կարգավորել լռելյայն քաղաքականությունը ACCEPT, DROP) |
Հաճախ օգտագործվող չափանիշներ.¶
| Տարբերակ | Օրինակ | Նկարագրություն |
|---|---|---|
-p tcp/udp/icmp | -p tcp | Պրոտոկոլ |
--dport N | --dport 22 | Նպատակակետի պորտ |
-s IP/MASK | -s 192.168.1.5<br-s 203.0.113.0/24 | Աղբյուր (IP կամ ենթացանց) |
-i interface | -i eth0 | Մուտքային ինտերֆեյս |
-m state --state NEW,ESTABLISHED | -m state --state NEW | Կապի վիճակ |
-m connlimit | --connlimit-above 5 | Կապի սահմանափակում |
Ցուցադրում և խնդիրների լուծում¶
Ցուցադրել բոլոր կանոնները (կարդալի):¶
--n՝ անունները չլուծել (ավելի արագ); - -v՝ մանրամասն ելք; - --line-numbers՝ ցուցադրել կանոնների համարները (օգտակար է ջնջելիս): 
Ցուցադրել լռելյայն քաղաքականությունները.¶
Գործնական կանոնների օրինակներ¶
1. Անվտանգ հիմնական կարգավորում (խորհուրդ է տրվում!)¶
# 1. Թույլ տալ բոլոր երթևեկությունը loopback-ի վրա
sudo iptables -A INPUT -i lo -j ACCEPT
# 2. Թույլ տալ արդեն հաստատված կապերը (կարևոր է!)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 3. Թույլ տալ SSH (փոխարինեք 22-ը ձեր պորտով, եթե փոխված է!)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 4. Թույլ տալ HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 5. Ընկղմել ամեն ինչ այլ լռելյայն
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT # ← սովորաբար թույլ տալ ելքային
2. Մուտքի սահմանափակում¶
# Թույլ տալ MySQL (3306) միայն մեկ IP-ից
sudo iptables -A INPUT -s 203.0.113.15 -p tcp --dport 3306 -j ACCEPT
# Արգելափակել բոլոր երթևեկությունը կասկածելի IP-ից
sudo iptables -A INPUT -s 198.51.100.77 -j DROP
3. Հարձակումների պաշտպանություն¶
# Արգելափակել սխալ/անվավեր փաթեթներ
sudo iptables -A INPUT -m state --state INVALID -j DROP
# Պաշտպանություն SYN-flood-ից
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
# Սահմանափակել կապերը HTTP-ին (մեկ IP-ից ավելի քան 20 միաժամանակյա)
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP
4. Գրանցում¶
# Գրանցել փակ պորտերին միանալու փորձերը (րոպեում առաջին 5-ը)
sudo iptables -A INPUT -p tcp -m multiport --dports 22,3389,5900 \
-m limit --limit 5/min -j LOG --log-prefix "PORT-SCAN: " --log-level 4
# Ապա ընկղմել
sudo iptables -A INPUT -p tcp -m multiport --dports 22,3389,5900 -j DROP
Կանոնների պահպանում վերագործարկումից հետո¶
iptables կանոնները ավտոմատ չեն պահպանվում՝ դրանք գտնվում են միայն միջուկի հիշողության մեջ:
RHEL / CentOS 7 և ավելի վաղ տարբերակների համար.¶
Debian / Ubuntu-ի համար.¶
Պահպանման փաթեթի տեղադրում.
Տեղադրման ընթացքում համակարգը կխնդրի պահպանել ընթացիկ կանոնները՝ ընտրեք "Yes":Թարմացնել պահպանված կանոնները ավելի ուշ.
Նշում
Վերագործարկումից առաջ ստուգեք կանոնները.
-t դրոշմը միայն սինտաքսիսի ստուգում է, կիրառում չկա: Կանոնների հեռացում¶
Ըստ համարի ջնջել (տես --line-numbers):¶
Ըստ ճշգրիտ համընկնման ջնջել.¶
Մաքրել շղթա.¶
Վերականգնել լռելյայն քաղաքականությունները.¶
Տեղեկատվություն
- Ստուգեք կանոնները տեղում կամ կոնսոլի միջոցով (ոչ SSH!), հատկապես
INPUT-ը փոխելիս: - Օգտագործեք
screenկամtmux, որպեսզի սխալի դեպքում կորցնեք նիստը: -
Դիտարկեք անցում ավելի ժամանակակից գործիքներ.