Firewall Linux-ზე მნიშვნელოვან როლს ასრულებს კომპიუტერული სისტემის უსაფრთხოებაში. ის მოქმედებს როგორც ბარიერი, აკონტროლებს და ფილტრავს ქსელის ტრაფიკს, რათა დაიცვას სისტემა არაავტორიზებული წვდომისგან, თავდასხმებისგან და სხვა საფრთხეებისგან. სათანადოდ კონფიგურირებული 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 ძირითადი ზონა:
- საჯარო: ეს ზონა განკუთვნილია ქსელებისთვის, რომლებსაც თქვენ თვლით სახიფათო;
- პირადი: ვრცელდება სახლის ქსელებზე ან სხვა სანდო ქსელურ კავშირებზე;
- შინაგან: გამოიყენება შიდა ქსელებისთვის, როგორიცაა ორგანიზაციის ან კორპორატიული ქსელის შიგნით;
- 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
სადაც წესი წესის ტიპია (მაგ., პორტი, სერვისი, მდიდარი წესი და ა.შ.), ხოლო 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-ს აქვს ოთხი ძირითადი ცხრილი: filter, nat, mangle და raw . თითოეული მათგანი შექმნილია გარკვეული ტიპის პაკეტების დასამუშავებლად და აქვს საკუთარი წესების ჯაჭვი:
- გავფილტროთ: ეს არის ყველაზე ხშირად გამოყენებული ცხრილი, რომელიც შეიცავს პაკეტების ფილტრაციის წესებს. იგი გამოიყენება გადაწყვეტილების მისაღებად პაკეტების დაშვების ან უარყოფის შესახებ.
- 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
ჯაჭვის გამომავალი :
- გამავალი ტრაფიკის დაშვება 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 წესებს წესები.v4 ფაილში. გადატვირთვის შემდეგ აღსადგენად შეიყვანეთ:
iptables-restore < /etc/iptables/rules.v4
ეს ბრძანება აღადგენს წესებს წესები.v4 ფაილიდან.
დასკვნა
Firewall-ის კონფიგურაცია Linux-ზე firewalld-ის ან iptables-ის გამოყენებით სერვერის უსაფრთხოების უზრუნველსაყოფად მნიშვნელოვანი ასპექტია. ორივე ინსტრუმენტი გვთავაზობს ქსელური ტრაფიკის მართვის საიმედო საშუალებებს და სისტემის დაცვას არაავტორიზებული წვდომისა და კიბერშეტევებისგან. Firewall-სა და iptables-ს შორის არჩევანი დამოკიდებულია მომხმარებლის სპეციფიკურ საჭიროებებზე და პრეფერენციებზე, მათი განსხვავებული ფუნქციონირებისა და ძლიერი მხარეების გათვალისწინებით.