Firewall Linux-ზე მნიშვნელოვან როლს ასრულებს კომპიუტერული სისტემის უსაფრთხოებაში. ის მოქმედებს როგორც ბარიერი, აკონტროლებს და ფილტრავს ქსელის ტრაფიკს, რათა დაიცვას სისტემა არაავტორიზებული წვდომისგან, თავდასხმებისგან და სხვა საფრთხეებისგან. სათანადოდ კონფიგურირებული Firewall-ის გარეშე, სერვერი შეიძლება იყოს დაუცველი სხვადასხვა სახის კიბერშეტევების მიმართ, რაც გამოიწვევს სერიოზულ შედეგებს მონაცემთა უსაფრთხოებისა და კონფიდენციალურობისთვის.
ამ სტატიაში განვიხილავთ Linux Firewall-ის კონფიგურაციის ორ მთავარ ინსტრუმენტს: firewalld და iptables. ჩვენ ჩავატარებთ მათი მახასიათებლების, ფუნქციონალურობისა და უპირატესობების შედარებით ანალიზს. გარდა ამისა, ჩვენ მოგაწვდით დეტალურ ინსტრუქციებს თითოეული ამ ხელსაწყოს დაყენებისა და გამოყენების შესახებ, ასევე განვიხილავთ საუკეთესო პრაქტიკას თქვენი სისტემის დაცვის Firewall-ით Linux პლატფორმაზე. ყველა ქმედება იქნება დემონსტრირებული ა ვირტუალური სერვერი ძირეული წვდომით.
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 ძირითადი ზონა:
- საჯარო: ეს ზონა განკუთვნილია ქსელებისთვის, რომლებსაც თქვენ თვლით სახიფათო;
- პირადი: ვრცელდება სახლის ქსელებზე ან სხვა სანდო ქსელურ კავშირებზე;
- შინაგან: გამოიყენება შიდა ქსელებისთვის, როგორიცაა ორგანიზაციის ან კორპორატიული ქსელის შიგნით;
- DMZ: ეს ზონაა, სადაც ჩვეულებრივ განთავსებულია სერვერები, რომლებიც ხელმისაწვდომი უნდა იყოს ინტერნეტიდან.
თუმცა, ეს მხოლოდ ერთი მაგალითია. თქვენ შეგიძლიათ დაამატოთ თქვენი საკუთარი ზონა ბრძანების გამოყენებით:
firewall-cmd --permanent --new-zone=nameyourzone
დამატების შემდეგ საჭიროა გადატვირთვა:
firewall-cmd --reload
ზონის წასაშლელად, მსგავსი მეთოდი გამოიყენება
firewall-cmd --permanent --delete-zone=nameyourzone
ზონების განსაზღვრის შემდეგ აუცილებელია ტრაფიკის დაშვება საჭირო სერვისებისა და პორტებისთვის. გარკვეული სერვისის დასაშვებად გამოიყენეთ ბრძანება:
firewall-cmd --zone=public --add-service=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
სად გამორიცხავს არის წესის ტიპი (მაგ., პორტი, სერვისი, მდიდრული წესი და ა.შ.) და წესი_სპეციფიკაცია არის თავად წესის დაზუსტება.
Firewalld-ის კონფიგურაციაში ცვლილებების შეტანის შემდეგ აუცილებელია მათი შენახვა და გამოყენება. ცვლილებების შესანახად გამოიყენეთ ბრძანება:
firewall-cmd --runtime-to-permanent
ცვლილებების გამოსაყენებლად:
firewall-cmd --reload
დაყენების დასრულების შემდეგ, შეგიძლიათ გადაამოწმოთ არჩეული პარამეტრები ყველა წესის სიის გახსნით:
firewall-cmd --list-all

თუ რაიმე პრობლემა წარმოიქმნება, შეამოწმეთ Firewalld ჟურნალები ბრძანებით:
journalctl -u firewalld
შენიშვნა: ჩვენ განვიხილეთ მხოლოდ ზოგადი ალგორითმი კავშირის დასაყენებლად. ხელსაწყოს აქვს ფართო ფუნქციონირება. ყველა შესაძლო ვარიანტის შესახებ სრული ინფორმაციის მისაღებად შეგიძლიათ გამოიყენოთ ოფიციალური დოკუმენტაცია ან გახსენით დახმარება:
firewall-cmd --help
iptables-ის კონფიგურაცია 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-ს აქვს ოთხი ძირითადი ცხრილი: ფილტრი, nat, mangle და ნედლეული. თითოეული განკუთვნილია გარკვეული ტიპის პაკეტების დასამუშავებლად და აქვს საკუთარი წესების ჯაჭვები:
- გავფილტროთ: ეს არის ყველაზე ხშირად გამოყენებული ცხრილი, რომელიც შეიცავს პაკეტების ფილტრაციის წესებს. იგი გამოიყენება გადაწყვეტილების მისაღებად პაკეტების დაშვების ან უარყოფის შესახებ.
- nat: ეს ცხრილი გამოიყენება ქსელის მისამართების და პორტების შესაცვლელად პაკეტებში. ის ხშირად გამოიყენება მასკარადის (NAT) დასაყენებლად.
- mangle: ამ ცხრილში შეგიძლიათ შეცვალოთ პაკეტის სათაურები. იგი გამოიყენება სპეციალიზებული პაკეტის ოპერაციებისთვის, როგორიცაა მარკირება.
- ნედლეული: ეს ცხრილი გამოიყენება წესების კონფიგურაციისთვის, რომლებიც გამოიყენება კავშირის თვალთვალის სისტემის გავლამდე. ის ჩვეულებრივ გამოიყენება წესების დასაყენებლად, რომლებიც არ უნდა შეიცვალოს თვალთვალის სისტემის მიერ, როგორიცაა პაკეტების ჩამოგდება გარკვეული მისამართებიდან.
თითოეული მაგიდა შეიცავს ჯაჭვების კომპლექტს. ჯაჭვები არის წესების თანმიმდევრობა, რომელიც შემოწმდება თანმიმდევრობით. არსებობს სამი წინასწარ განსაზღვრული ჯაჭვი:
- INPUT (შემომავალი). ამ ჯაჭვის წესები განსაზღვრავს რა უნდა გააკეთოს შემომავალ პაკეტებთან.
- OUTPUT (გამავალი). ეს ჯაჭვი ვრცელდება ყველა პაკეტზე, რომელსაც თქვენი კომპიუტერი უგზავნის სხვა მოწყობილობებს ან კომპიუტერებს ქსელში.
- FORWARD (გადაგზავნა). ამ ჯაჭვის წესები განსაზღვრავს რა უნდა გააკეთოს გადაგზავნილ პაკეტებთან.
და ბოლოს, თითოეულ ჯაჭვს აქვს გარკვეული მოქმედება (მიზანი). პრაქტიკაში გამოიყენება 5 ძირითადი მოქმედება:
- მიღება: მიეცით საშუალება პაკეტს გაიაროს Firewall-ში.
- ვარდნა: უარყავით პაკეტი და გადააგდეთ იგი ყოველგვარი პასუხის გარეშე.
- ᲣᲐᲠᲧᲝᲡ: უარყავით პაკეტი და გაუგზავნეთ გამგზავნს ICMP შეცდომის შეტყობინება.
- შესვლა: შეიტანეთ პაკეტი სისტემის ჟურნალში და შეასრულეთ სხვა მოქმედება (მაგ., ACCEPT ან DROP).
- დაბრუნების: შეწყვიტეთ წესების შემოწმება მიმდინარე ჯაჭვში და დაუბრუნდით გამოძახების ქსელს (ასეთის არსებობის შემთხვევაში).
დაყენების დასაწყებად, გახსენით არსებული წესების სია ბრძანებით:
iptables -L

როგორც Iptables-ის კონფიგურაციის სახელმძღვანელო, მოდით გადავხედოთ ყველაზე ხშირად გამოყენებული ბრძანებების პრაქტიკულ მაგალითებს. მოხერხებულობისთვის მაგალითებს დავყოფთ 3 ჯგუფად, კონკრეტული ჯაჭვის მიხედვით.
ქსელი შეტანა:
- შემომავალი ტრაფიკის დაშვება TCP პროტოკოლით 80 პორტზე:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. შემომავალი ტრაფიკის დაშვება UDP პროტოკოლით პორტ 22-ზე:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. დაბლოკეთ შემომავალი ტრაფიკი კონკრეტული IP მისამართიდან:
iptables -A INPUT -s 192.168.1.100 -j DROP
ქსელი OUTPUT:
- გამავალი ტრაფიკის დაშვება 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
ქსელი FORWARD:
- გადაგზავნილი ტრაფიკის დაბლოკვა 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 წესები ავტომატურად არ შეინახება სისტემის ან სერვისის გადატვირთვის შემდეგ. წესების შესანახად, ისინი უნდა დაემატოს კონფიგურაციის ფაილს და აღდგეს გადატვირთვის შემდეგ. The iptables-შენახვა მდე iptables-აღდგენა კომუნალური საშუალებები ამაში დაგეხმარებათ. წესების შესანახად შეიყვანეთ ბრძანება:
iptables-save > /etc/iptables/rules.v4
ეს ინახავს მიმდინარე iptables წესებს წესები.v4 ფაილში. გადატვირთვის შემდეგ აღსადგენად შეიყვანეთ:
iptables-restore < /etc/iptables/rules.v4
ეს ბრძანება აღადგენს წესებს წესები.v4 ფაილიდან.
დასკვნა
Firewall-ის კონფიგურაცია Linux-ზე firewalld-ის ან iptables-ის გამოყენებით სერვერის უსაფრთხოების უზრუნველსაყოფად მნიშვნელოვანი ასპექტია. ორივე ინსტრუმენტი გვთავაზობს ქსელური ტრაფიკის მართვის საიმედო საშუალებებს და სისტემის დაცვას არაავტორიზებული წვდომისა და კიბერშეტევებისგან. Firewall-სა და iptables-ს შორის არჩევანი დამოკიდებულია მომხმარებლის სპეციფიკურ საჭიროებებზე და პრეფერენციებზე, მათი განსხვავებული ფუნქციონირებისა და ძლიერი მხარეების გათვალისწინებით.