Անցնել պարունակությանը

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 պորտը արգելափակելը առանց թույլտվության կարող է կտրել ձեր կապը սերվերի հետ: Միշտ ստուգեք կանոնները կիրառելուց առաջ:

Ինչպես է այն աշխատում

  1. Փաթեթը մուտք է գործում համապատասխան շղթա՝ INPUT, OUTPUT, FORWARD:
  2. Կանոնները գնահատվում են հերթականությամբ՝ ոչ թե համընկնում է գտնվում, կատարվում է նշված գործողությունը:
  3. Եթե համընկնում չի գտնվում, կիրառվում է լռելյայն քաղաքականությունը policy:

Գործողություններ (targets)

Գործողություն Դրսևորում Խորհուրդ
ACCEPT Թույլ տալ փաթեթը Բարեկամական ծառայությունների համար (SSH, HTTP)
DROP Լռելյայն ընկղմել փաթեթը (պատասխան չկա) ****Ամենալավ ընտրությունն անվտանգության համար****՝ թաքցնում է պորտի գոյությունը
REJECT Մերժել ICMP սխալով (օրինակ՝ port-unreachable) Օգտագործեք, եթե անհրաժեշտ է հետադարձ կապ (օրինակ՝ թերությունների համար)

Նշում

Անվտանգության կանոն
Լռելյայն՝ արգելել ամեն ինչ, ապա թույլ տալ միայն անհրաժեշտը:

Հիմնական հրամանի սինտաքսիս

iptables [options] CHAIN [criteria] -j ACTION

Հիմնական տարբերակներ.

Տարբերակ Նպատակ
-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 Կապի սահմանափակում

Ցուցադրում և խնդիրների լուծում

Ցուցադրել բոլոր կանոնները (կարդալի):

sudo iptables -L -n -v --line-numbers
- -n՝ անունները չլուծել (ավելի արագ); - -v՝ մանրամասն ելք; - --line-numbers՝ ցուցադրել կանոնների համարները (օգտակար է ջնջելիս):

Ցուցադրել լռելյայն քաղաքականությունները.

sudo iptables -S | grep '^:'
# Կամ.
sudo iptables -L | head -3

Գործնական կանոնների օրինակներ

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 և ավելի վաղ տարբերակների համար.

sudo /sbin/service iptables save
# կամ
sudo iptables-save > /etc/sysconfig/iptables

Debian / Ubuntu-ի համար.

Պահպանման փաթեթի տեղադրում.

sudo apt update && sudo apt install iptables-persistent
Տեղադրման ընթացքում համակարգը կխնդրի պահպանել ընթացիկ կանոնները՝ ընտրեք "Yes":

Թարմացնել պահպանված կանոնները ավելի ուշ.

sudo netfilter-persistent save
# կամ ուղղակի.
sudo iptables-save > /etc/iptables/rules.v4

Նշում

Վերագործարկումից առաջ ստուգեք կանոնները.

sudo iptables-restore -t < /etc/iptables/rules.v4
-t դրոշմը միայն սինտաքսիսի ստուգում է, կիրառում չկա:

Կանոնների հեռացում

Ըստ համարի ջնջել (տես --line-numbers):

sudo iptables -D INPUT 3   # ջնջել #3 կանոնը INPUT շղթայում

Ըստ ճշգրիտ համընկնման ջնջել.

sudo iptables -D INPUT -s 198.51.100.77 -j DROP

Մաքրել շղթա.

sudo iptables -F INPUT      # միայն INPUT
sudo iptables -F            # բոլոր շղթաներ

Վերականգնել լռելյայն քաղաքականությունները.

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

Տեղեկատվություն

  1. Ստուգեք կանոնները տեղում կամ կոնսոլի միջոցով (ոչ SSH!), հատկապես INPUT-ը փոխելիս:
  2. Օգտագործեք screen կամ tmux, որպեսզի սխալի դեպքում կորցնեք նիստը:
  3. Դիտարկեք անցում ավելի ժամանակակից գործիքներ.

    • ufw՝ պարզեցված ինտերֆեյս iptables-ի համար (Ubuntu/Debian);
    • firewalld՝ դինամիկ հրակնճիռ RHEL/CentOS-ի համար;
    • nftables՝ Linux միջուկի ապագան (ավելի արդյունավետ և կոնկրետ սինտաքսիս):
question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×