iptables წესების თანმიმდევრობა. DROP წესების შექმნა. Firewall-ის დაყენება arno-iptables-firewall კონფიგურატორის გამოყენებით

არსებობს მრავალი გადაწყვეტა Linux-ზე ფაირვოლ-ის დასაყენებლად, მაგრამ ბევრი მათგანი რეალურად მხოლოდ ფრონტენტებია iptables-ის დასაყენებლად, ზოგი კი მთლად წარმატებული არ არის. პრინციპში, კარგია, რომ შეგეძლოთ სწრაფად დააყენოთ firewall, მაგრამ როგორც კი მიიღებთ iptables-ს, თქვენ შეძლებთ ამის გაკეთებას უფრო სწრაფად და კარგად. iptables-ის დახვეწილი რეგულირება ჩვეულებრივ მიუწვდომელია ფრონტენტებისთვის.

Დავიწყოთ. დავიწყოთ მარტივით, შემდეგ კი გავართულებთ კონფიგურაციას. აქ საიტზე უკვე არის სტატია iptables წესების ავტომატური ჩატვირთვის შესახებ, ამიტომ ჩვენ ახლა არ განვიხილავთ ჩატვირთვის წესებს, არამედ თავად წესებზე გავამახვილებთ ყურადღებას. Firewall ყოველთვის კონფიგურირებულია root ანგარიშის ქვეშ.

ქსელის კავშირის სცენარები

Firewall-ის დაყენებამდე, თქვენ უნდა გქონდეთ ზუსტი გაგება, თუ რა ქსელური კავშირები და როგორ უნდა დამყარდეს სისტემის მუშაობის დროს, რათა ყველა სერვისმა ნორმალურად იმუშაოს. რაც უფრო ზუსტია ჩვენი სურათი ქსელის სერვისების ფუნქციონირების შესახებ, როგორც ჩვენს სერვერზე, ასევე სხვა სერვერებზე, მით უფრო დეტალურად შეგვიძლია სისტემის კონფიგურაცია. აქედან გამომდინარე, მიზანშეწონილია ყოველთვის აღწეროთ სცენარები, თუ როგორ უნდა იმუშაოს ყველაფერი და მხოლოდ ამის შემდეგ დაიწყოთ firewall-ის დაყენება. სკრიპტის დაწერა შესაძლებელია ნებისმიერ ტექსტურ რედაქტორში. პირველ რიგში, ჩვენ აღვწერთ ყველა გარე სერვისს, რომლითაც მუშაობს სერვერი, შემდეგ კი ყველა სერვისს, რომელიც მუშაობს სერვერზე. რატომ არის ეს საჭირო? ზუსტად წარმოაჩინოს თავად სამუშაო პროცესი, ტექნიკურ ნაწილში ჩაღრმავების გარეშე. ყველაზე ზუსტი სკრიპტის დაწერის შემდეგ, შეგიძლიათ დაიწყოთ firewall-ის დაყენება. სკრიპტის აღწერა ასე უნდა გამოიყურებოდეს:

1) ყველა მომხმარებელს შეუძლია საიტის ნახვა. ნაგულისხმევად საიტი რუსულ ენაზეა.
2) თუ მომხმარებლები მივიდნენ მისამართებიდან<список-адресов-или-маска-подсети>, მაშინ მათ უნდა აჩვენონ საიტი უკრაინულად. ჩვენს მაგალითში, ეს იქნება, მაგალითად, ონლაინ მაღაზია ერთი დომენის სახელით, გამოსახული რუსულ ან უკრაინულ ენაზე და აქვს საკუთარი ნაკრები იყიდება რუსეთსა და უკრაინაში. ჩვენ უბრალოდ გვექნება ორი საიტი, ერთი რუსულად, მეორე უკრაინულად და მისამართი, საიდანაც კლიენტი მოვიდა, განსაზღვრავს რომელ საიტზე წავა. მაგალითი ჩემი თავიდან არის აღებული, რა თქმა უნდა, ასეთი საკითხები სხვაგვარად წყდება. თქვენ ასევე შეგიძლიათ არ დაუშვათ საიტის ნახვა ჩინური მისამართებიდან ჩინურ კომენტარებში მუდმივი სპამის გამო.
3) ფოსტა ხელმისაწვდომი უნდა იყოს ოფისიდან;
4) შესაძლებელი უნდა იყოს VPN-თან დაკავშირება გარედან
5) ჩვენ შეგვიძლია გამოვიყენოთ მხოლოდ რამდენიმე DNS სერვერი, რომელსაც ვენდობით. ყველა სხვა DNS სერვერი მიუწვდომელი უნდა იყოს
6) …..

Და ასე შემდეგ. ვფიქრობ, ეს საკმარისია მარტივი მაგალითისთვის. საქმე იმაშია, რომ რაც შეიძლება ზუსტად განსაზღვროს ქსელის ურთიერთქმედების სურათი. ნებისმიერ სკრიპტს აქვს მხოლოდ ერთი მიზანი - გააფორმოს ურთიერთქმედება მომხმარებლებთან და სერვისებთან კავშირის აღწერილობების შედგენამდე, მათ შორის პორტი, პროტოკოლი, წყაროს მისამართი, დანიშნულების მისამართი თითოეული კავშირისთვის.

iptables-ის დაყენება: უმარტივესი კონფიგურაცია

თუ ვსაუბრობთ საბრძოლო სერვერებზე, ორ სერვერზე firewall-ის პარამეტრები შეიძლება მნიშვნელოვნად განსხვავდებოდეს, რაც დამოკიდებულია ამ სერვერების დავალებებს. ამიტომ, შევეცდები აღვწერო ზოგადი პრინციპები, რომლებიც შეიძლება გამოყენებულ იქნას ნებისმიერი სერვერისთვის firewall-ის დაყენებისას. ეს მხოლოდ საფუძველია შემდგომი პერსონალიზაციისთვის.

უპირველეს ყოვლისა, თქვენ უნდა გაასუფთავოთ დატვირთული წესები:

Iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD

INPUT, OUTPUT, FORWARD - ეს არის სამი ძირითადი ჯაჭვი, რომლებზეც პაკეტები მიედინება, შემომავალი, გამავალი და გადადის ინტერფეისიდან ინტერფეისზე.

ამის შემდეგ, თქვენ უნდა დააყენოთ ნაგულისხმევი პოლიტიკა. მათგან მხოლოდ ორია - ACCEPT და DROP, მიიღეთ პაკეტები თუ არა. წარმოების სერვერისთვის ყოველთვის უნდა აირჩიოთ DROP და შემდეგ გახსნათ ყველაფერი, რაც საჭიროა და მეტი არაფერი.

ასეთი პოლიტიკის დასაყენებლად, ჯერ უნდა დაუშვათ კავშირები SSH-ის საშუალებით, ჩვენ ვივარაუდებთ, რომ ჩვენ არ შევცვალეთ სტანდარტული პორტი (რაც ჩვეულებრივ უნდა გაკეთდეს წარმოების სერვერებზე SSH სერვერის დაყენებისთანავე).

Iptables -t ფილტრი -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

და ამის შემდეგ შეგიძლიათ დაიწყოთ ნაგულისხმევი პოლიტიკის შეცვლა:

Iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP

OUTPUT ჯაჭვისთვის, ახლა შეგიძლიათ დატოვოთ ნაგულისხმევი ACCEPT პოლიტიკა, რომელიც საშუალებას გაძლევთ გადახვიდეთ მასზე INPUT ჯაჭვის დაყენების შემდეგ, როდესაც ჩვენ კრძალავთ შემომავალ კავშირებს. ბევრ სერვერზე საკმარისია INPUT ჯაჭვის სწორად კონფიგურაცია, მაგრამ ჩვენ ასევე მოგვიანებით გადავხედავთ OUTPUT კონფიგურაციას უფრო მკაცრი კონფიგურაციისთვის.

Ისე. ამ დროისთვის, ჩვენ გვაქვს მხოლოდ SSH სერვერის პორტი ღია შემომავალი კავშირებისთვის. ახლა თქვენ უნდა დაამატოთ კავშირების მიღება სხვა სერვისების პორტებთან, თუ ისინი მუშაობენ თქვენს სერვერზე.

Iptables -t ფილტრი -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT

DNS (ჩვეულებრივ UDP-ის დაშვება საკმარისია, მაგრამ ასევე შეგიძლიათ დაამატოთ TCP):

Iptables -t ფილტრი -A INPUT -p udp -m udp --dport 53 -j ACCEPT

Iptables -t ფილტრი -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Iptables -t ფილტრი -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT

Iptables -t ფილტრი -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

მაგრამ ეს ყველაფერი არ არის. პორტები ღიაა, სერვისები ხელმისაწვდომია გარედან, მაგრამ ფოსტა არ მუშაობს და დომენის სახელები არ არის გადაწყვეტილი. ფაქტია, რომ DNS სერვერების მოთხოვნისას, მოთხოვნა იგზავნება თვითნებური უფასო პორტიდან არაპრივილეგირებულთაგან, ისევე როგორც სხვა ფოსტის სერვერთან კავშირი. და ეს სერვისები პასუხს აგზავნიან იმავე პორტში. და ეს პორტი, როგორც გესმით, ჩვენთვის დაკეტილია. ჩვენ შეგვიძლია გავხსნათ ეს პორტი, მაგრამ არ ვიცით რომელი პორტიდან იქნება გამავალი კავშირი. ამიტომ, ჩვენ შეგვიძლია გავაკეთოთ უმარტივესი რამ - დაუშვათ კავშირები დისტანციური კომპიუტერის კონკრეტული პორტებიდან:

Iptables -t filter -A INPUT -p tcp -m tcp --sport 25 -j ACCEPT

Iptables -t filter -A INPUT -p udp -m udp --sport 53 -j ACCEPT

ეს ორი წესი იძლევა შემომავალ კავშირებს 25/tcp და 53/udp პორტებიდან, ასე რომ, როდესაც შესაბამისი პროტოკოლის მქონე პაკეტები ჩამოვა ამ პორტებიდან, ისინი მიიღება. თუ გეგმავთ სისტემის, პროგრამული უზრუნველყოფის განახლებას ან მუშაობისთვის საჭირო პაკეტების დაყენებას, მაშინ მოგიწევთ დაუშვათ კავშირები დისტანციური მანქანების 80-ე პორტიდან.

ახლა ჩვენ მზად გვაქვს iptables-ის უმარტივესი კონფიგურაცია.

წესების ცხრილებში შეყვანის შემდეგ, თქვენ უნდა შეინახოთ ისინი. ამისათვის შეგიძლიათ გამოიყენოთ, მაგალითად, სკრიპტი.

კავშირის წყაროს მართვა

Განაგრძე. ჩვენ გვჭირდება კავშირი გარკვეულ პორტებზე არა მთელ ინტერნეტთან, არამედ გარკვეულ მანქანებთან, გარკვეული IP მისამართებით. ამიტომ, ჩვენ შეგვიძლია ცოტა გავართულოთ წესები მათში პაკეტის წყაროს მისამართის დამატებით.

Iptables -t ფილტრი -A INPUT -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACCEPT

ეს წესი საშუალებას გაძლევთ მიიღოთ პაკეტები პორტ 22-ზე TCP-ის საშუალებით მხოლოდ წყაროდან 123.123.123.123 მისამართით, ეს მითითებულია "-s" პარამეტრით (წყარო, წყარო). ამ გზით, თქვენ შეგიძლიათ შეზღუდოთ კავშირები სერვერთან SSH-ის მეშვეობით ერთი კონკრეტული IP მისამართით, ან კონკრეტულ ქვექსელთან, თუ მიუთითებთ ქვექსელის ნიღაბს, საიდანაც ნებადართულია კავშირები კონკრეტული IP მისამართის ნაცვლად.

თუ თქვენ ყოველთვის იყენებთ იმავე ფოსტის კარიბჭეს, რომლის მეშვეობითაც თქვენი სერვერი აგზავნის ფოსტას, მაშინ შეგიძლიათ, მაგალითად, შეზღუდოთ კავშირები პორტიდან 25/tcp, ამ კარიბჭის წყაროდ მითითებით.

წესები კონკრეტული ქსელის ინტერფეისისთვის ან IP მისამართისთვის

სერვერს შეიძლება ჰქონდეს რამდენიმე ქსელური ინტერფეისი. როგორც წესი, მათგან ორია - გარე ქსელის ინტერფეისი და ეგრეთ წოდებული loopback ინტერფეისი 127.0.0.1, რომელზე წვდომა შეუძლებელია გარედან, თუ არ არის შესაბამისი პაკეტის გადამისამართება. თქვენ ასევე შეიძლება გქონდეთ მინიმუმ ერთი სხვა IP მისამართი გაზიარებული ქსელის ინტერფეისის მეტსახელით, ან სხვა ფიზიკური ქსელის ინტერფეისით. და თითოეულ IP მისამართს ან ქსელურ ინტერფეისს შეუძლია კონკრეტული სერვისების გაშვება. მაგალითად, ერთს აქვს Apache ვებ სერვერი, ხოლო მეორეს აქვს bind9 დომენის სერვისის სერვერი. და როდესაც თქვენ დაუშვებთ კავშირებს კონკრეტულ პორტზე ამ ქსელის ინტერფეისის მითითების გარეშე, თქვენ ხსნით წვდომას ამ პორტზე ყველა ინტერფეისზე. აქედან გამომდინარე, ნებართვის ფარგლების შემცირების ორი გზა არსებობს.

პირველი გზა არის IP მისამართის მითითება, რომელზეც დაშვებული იქნება წვდომა.

Iptables -t ფილტრი -A INPUT -d 234.234.234.234 -p tcp -m tcp --dport 22 -j ACCEPT

ეს მაგალითი გვიჩვენებს, თუ როგორ შეიძლება დანიშნულების მისამართის გამოყენება iptables წესში. თქვენ ასევე შეგიძლიათ გამოიყენოთ წყაროს მისამართი:

Iptables -t ფილტრი -A INPUT -s 123.123.123.123 -d 234.234.234.234 -p tcp -m tcp --dport 22 -j ACCEPT

ამ მაგალითში, ჩვენ უკვე ვზღუდავთ წვდომას ორ მისამართზე, რაც საშუალებას გაძლევთ შეხვიდეთ სერვერზე 234.234.234.234 მეშვეობით SSH მისამართიდან 123.123.123.123. თქვენ ვერ შეძლებთ წვდომას სხვა მისამართებიდან.

მეორე გზა არის ქსელის ინტერფეისის სახელის მითითება. ეს მეთოდი ასევე გამოიყენება, როდესაც გარე მისამართი შეიძლება შეიცვალოს. თუ ქსელის ინტერფეისის მისამართი შეიცვლება, წინა პარამეტრით თქვენ დაკარგავთ სერვერზე წვდომას. ინტერფეისის სახელი მითითებულია შემდეგნაირად:

Iptables -t ფილტრი -A INPUT -i eth0 -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACCEPT

ეს პარამეტრი საშუალებას იძლევა SSH წვდომა eth0 ქსელის ინტერფეისზე SSH წვდომა არ იქნება ხელმისაწვდომი სხვა ქსელურ ინტერფეისებზე.

ყველაფერი, რაც ახლა ვნახეთ, მხოლოდ დასაწყისია, შემდეგი ნაწილი გაგრძელდება...

ყველაფერი ძალიან მარტივია, კიდევ ერთხელ აუხსენით ფორუმზე Linux-ის სამყაროში ახალმოსულებს, რომ დიახ, როგორც მე მესმის, ინტერნეტში ვერ იპოვით ერთობლივ სტატიას, რომელიც ხსნის არა მხოლოდ iptables-ის პარამეტრებს, არამედ ქსელის ზოგიერთ საფუძვლებსაც.
ასე რომ, მე წარმოგიდგენთ თქვენს ყურადღებას მოკლე ექსკურსიას Linux-ში firewall-ის დაყენებაში. უბრალოდ ჩავუღრმავდეთ netfilter/iptables-ის დაყენებას, უდავოდ შევეხებით სხვა პრაქტიკულ საკითხებსაც, რადგან ჩვენს კითხვებზე ამომწურავი პასუხები გვაკლია... და ვეცდები აქ რაც შეიძლება ნათლად წარმოვადგინოთ.

Რას გავს

ჩვენ განვიხილავთ ოფისებისა და ბინების ტიპურ სქემას, დიახ, ბინებს! რამდენიმე ადამიანს აქვს საკუთარი პატარა სერვერი სახლში მაგიდის ქვეშ, მაგრამ სახლში ინტერნეტის უმეტესი ნაწილი ნაწილდება როუტერის საშუალებით და უმეტესწილად ისინი ასევე არიან პროგრამული უზრუნველყოფა Linux-ით.
ეს არის ტიპიური პატარა ოფისის განლაგება. როდესაც 1 კომპიუტერი (სერვერი) არის დაკავშირებული ინტერნეტთან, ხოლო დანარჩენი დაკავშირებულია ინტერნეტთან ამ სერვერის საშუალებით.

წავიდეთ, ნელ-ნელა...

და რა გვაქვს:
  • სერვერი 2 ქსელური ბარათით და მასზე დაყენებული Debian Lenny
  • ნაგულისხმევი Debian Lenny firewall - netfilter/iptables
  • N კომპიუტერების ლოკალური ქსელი, ყველა დაკავშირებული გადამრთველის საშუალებით, სერვერის ჩათვლით
რა არის NAT
პირველ რიგში, ჩვენ უნდა გვესმოდეს, რომ ჩვენ დავაყენებთ ყველაზე ჩვეულებრივ NAT-ს (ქსელის მისამართის თარგმანი). ვისაც სწყურია, ბოლოს ასევე მოვიხსენიებ პროქსი სერვერს, რომელიც მაგალითად squid-ს იყენებს. როგორც უკვე ვთქვი, თითქმის ყველაფერს დავღეჭავთ.
რა არის NAT? სინამდვილეში, ყველაფერი მარტივია, ყველა კომპიუტერს აქვს ფიზიკური (MAC) და ქსელის (IP) მისამართი. ჩვენ ამჟამად დაინტერესებული ვართ IP მისამართებით. IP მისამართი იმავე ქსელში უნდა იყოს უნიკალური! და ამჟამინდელი IPv4 სტანდარტით, მხოლოდ 4,294,967,296 (2 32) შეიძლება იყოს უნიკალური, რაც სულაც არ არის ბევრი და ისინი თითქმის გაქრა. მაგრამ არ ინერვიულოთ, IPv6 მალე გავრცელდება და იქ უამრავი მისამართია!
მაგრამ აქ შეიძლება შეამჩნიოთ, რომ გაცილებით მეტი კომპიუტერია, ვიდრე IPv4 იძლევა, ან შეიძლება თქვათ, რომ სახლში მეგობარს იგივე მისამართი აქვს, როგორც თქვენ! და სწორედ აქ ვსაუბრობთ NAT-ზე - ის საშუალებას გაძლევთ დააკავშიროთ კომპიუტერული ქსელები ერთმანეთთან ერთი, თქვენი IP მისამართის გამოყენებით, firewall-ის მოქმედებას ეწოდება SNAT (Source NAT ან წყაროს მისამართის ჩანაცვლება). იმათ. 99% შემთხვევაში, თქვენი მთელი ოფისი წვდება ინტერნეტს 1 IP მისამართის ქვეშ, მაშინ როცა ოფისში ყველას აქვს თავისი. შეგიძლიათ წაიკითხოთ IP მისამართების კლასების შესახებ ინტერნეტში.

ახლა, როდესაც ჩვენ ვიცით რა არის NAT და რისთვის არის საჭირო, შეგვიძლია პირდაპირ გავაგრძელოთ სერვერის დაყენება.

სატრანზიტო მოძრაობა
ყველა ბრძანება შესრულებულია როგორც root (superuser). Debian-ში ეგრეთ წოდებული სატრანზიტო ტრაფიკი ნაგულისხმევად გამორთულია, ე.ი. ნაგულისხმევად, ოპერაცია მოწოდებულია მხოლოდ როგორც ერთი მანქანა. როგორც თქვენ ალბათ მიხვდით, სატრანზიტო ტრაფიკის გარეშე არ არსებობს NAT. მის გასააქტიურებლად, უბრალოდ შეცვალეთ 1 ციფრი - $ echo 1 > /proc/sys/net/ipv4/ip_forward, მაგრამ ეს პარამეტრი გაქრება გადატვირთვის შემდეგ, ამიტომ სჯობს კონფიგურაციის გამოსწორება - $ nano /etc/sysctl.confშემდეგ ჩვენ ვეძებთ ხაზს #net.ipv4.ip_forward=1და ამოიღეთ ჰეში (კომენტარის სიმბოლო) ხაზის დასაწყისში და შეამოწმეთ, რომ მნიშვნელობა არის 1! ახლა შეგიძლიათ პირდაპირ გააგრძელოთ iptables-ის კონფიგურაცია.
iptables-ის დაყენება
ინტერნეტში არის ბევრი სტატია იმის შესახებ, თუ როგორ უნდა დაწეროთ წესები iptables-ში და რა შეგიძლიათ გააკეთოთ მათთან, მე ეს ყველაზე სრულყოფილი და სასიამოვნო წასაკითხად მივიჩნიე.
ასე რომ, მოდით დავიწყოთ. ჯერ გავასუფთავოთ ცხრილები არასაჭირო წესებისგან, თუ რამე ზედმეტი იყო...
$ iptables -F
$ iptables -t nat -F
$ iptables -t mangle -F

ჭარბი გაიწმინდა. ძალიან მნიშვნელოვანია გვესმოდეს და გახსოვდეთ, რომ iptables-ში წესები გამოიყენება იერარქიულად, ე.ი. ზემოთ მოყვანილი წესი ადრე შესრულდება. ყველა ჯაჭვს ნაგულისხმევად აქვს ACCEPT პოლიტიკა - ისინი ყველაფერს უშვებენ. რომელიც ამ ჯაჭვის წესებს არ ექვემდებარება.
მოდით შევთანხმდეთ, რომ ლოკალური ქსელის წინაშე არსებული ინტერფეისი არის eth0, ხოლო ინტერნეტის ინტერფეისი არის eth1, ლოკალურ ქსელს აქვს მისამართები 192.168.0.0/24, ხოლო პროვაიდერმა მოგვცა სტატიკური მისამართი 10.188.106.33 (თუმცა არა „თეთრი“ - ასევე შეგიძლიათ ისაუბროთ IP მისამართების ტიპებზე, რომელთა მოძიებაც შეგიძლიათ ინტერნეტში). და ასე ვწერთ:
$ iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -j ACCEPT
$ iptables -A FORWARD -i eth1 -o eth0 -d 192.168.0.0/24 -j ACCEPT
$ iptables -P FORWARD DROP

ამრიგად, ჩვენ მივეცით ტრანზიტული პაკეტების გავლა Firewall-ში ჩვენი IP მისამართების დიაპაზონისთვის და ჩვენ ვკრძალავთ ყველაფერს.
ახლა თავად NAT:
$ iptables -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --წყარომდე 10.188.106.33
ეს საკმარისია იმისათვის, რომ NAT იმუშაოს.
წვრილმანები...
კლიენტებზე, ჩვენ აღვნიშნავთ ip-ს არჩეული დიაპაზონიდან და მივუთითებთ ჩვენი სერვერის ip მისამართს, როგორც კარიბჭეს (ჩვეულებრივ, ის პირველად ენიჭება ქვექსელიდან - ამას თქვენი შეხედულებისამებრ დავტოვებ). ყველა ქსელის პარამეტრი სერვერზე შეიძლება გაკეთდეს ასე:
$ nano /etc/ქსელი/ინტერფეისებიის განსაზღვრავს თქვენი ქსელის ინტერფეისის პარამეტრებს.
ქსელის სიღრმეში წვდომა კარიბჭის ან DNAT-ის მეშვეობით
შემდეგ მიხვდით, რომ თქვენ გაქვთ Windows სერვერი ქსელში, რომელზეც ყოველთვის გქონდათ მარტივი წვდომა RDP-ის საშუალებით და შემდეგ გამოვიდა ეს შემაშფოთებელი Debian კარიბჭე! ყველაფერი ძალიან მარტივია - თქვენ უბრალოდ უნდა დაამატოთ DNAT წესი ჩვენს iptable-ებს.
როგორი მხეცი არის DNAT? DNAT (დანიშნულების NAT ან მიმღების მისამართის ჩანაცვლება) - ქსელის ბარათები მუშაობს ისეთ რეჟიმში, რომ ისინი იღებენ მხოლოდ პაკეტებს, რომლებიც სპეციალურად მათთვისაა მიმართული, მაგრამ შეგიძლიათ ჩვენს სერვერზე წასვლა, თუ IP, რომლითაც ის ინტერნეტში შედის, არის ათეული სხვა აპარატი. თქვენს ოფისში? როგორ მიაღწევს მას მოთხოვნა? სინამდვილეში, ამ ტიპის ყველა მოთხოვნა ეწინააღმდეგება ჩვენს კარიბჭეს. და ყველაფერი რაც უნდა გავაკეთოთ არის ასეთი პაკეტებით მუშაობის წესების დადგენა.
$ iptables -A PREROUTING -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --დანიშნულების ადგილამდე 192.168.0.2
ეს მარტივი წესი გადამისამართებს ყველა პაკეტს, რომელიც მიდის კარიბჭეში ინტერნეტიდან TCP პორტში 3389 (ამას იყენებს RDP პროტოკოლი) თქვენს შიდა Windows სერვერზე. და, ვოილა, ყველაფერი შენთვის მუშაობს.
რაც შეეხება თქვენს საყვარელ კალმარს
და მიუხედავად იმისა, რომ ახლა ყველაფერი მუშაობს, ყველას აქვს ინტერნეტი და ყველაფერი მუშაობს, ზოგიერთს მაინც სჭირდება პროქსი სერვერი. კალმარის დაყენებაზე არ ვისაუბრებ, გაჩვენებ წესს, რომელიც მას „გამჭვირვალეს“ გახდის. Squid-ში თქვენ უბრალოდ უნდა დაწეროთ ჯადოსნური სიტყვა გამჭვირვალე ადგილას და ის დაიწყებს მასზე დაცემული მოთხოვნების სწორად დამუშავებას.
Ჩვენ ვწერთ $ iptables -A PREROUTING -d! 192.168.0.0/24 -i eth0 -p tcp -m მრავალპორტი --dports 80,443 -j REDIRECT --პორტებში 3128.
და რას გვაძლევს ეს? ახლა ყველა მოთხოვნა ვებ გვერდებზე თქვენი სამუშაო სადგურებიდან http((80) და https(443) პროტოკოლებით გადამისამართდება პორტში, რომელსაც squid უსმენს. თქვენ იღებთ კონტენტის ფილტრაციას, ინფორმაციას იმის შესახებ, თუ ვინ სად იყო და რას აკეთებდა ინტერნეტში, მომხმარებელი არაფერს აკეთებს ეჭვის გარეშე, რომ ის მუშაობს როგორც ადრე...
ცოტა უსაფრთხოება
თქვენ მინიმუმ მინიმუმამდე უნდა დაიცვათ თქვენი კარიბჭე, ასე რომ, მოდით დავამატოთ კიდევ რამდენიმე წესი
$ iptables -A INPUT -i lo -j ACCEPT
$ iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT
$ iptables -A INPUT -i eth1 -m conntrack --ctstate RELATED,SETABLISHED -j ACCEPT
$ iptables -P INPUT DROP

ამრიგად, აკრძალული იყო ნებისმიერი კომუნიკაცია პირდაპირ კარიბჭესთან, გარდა უკვე დამყარებული კავშირებისა, ე.ი. თქვენ მიერ ინიცირებული და თქვენ უბრალოდ იღებთ მათზე პასუხებს. ნუ გეშინია, ჩვენი დნმ უბრალოდ ვერ აღწევს ამ წესებს...
რატომ ასე ცოტა?
სტატია არ არის რეზინი და მაინც ვერ გეტყვით ყველაფერზე... მოვიყვანე მინიმალურიმოქმედებებისა და ცნებების ნაკრები, ასე რომ თქვენ შეგიძლიათ დაიწყოთ ისეთი კოლოსის დაუფლება, როგორც კარიბჭე Linux-ზე. აქ შეგიძლიათ ისაუბროთ ძალიან, ძალიან დიდი ხნის განმავლობაში, განიხილოთ netfilter-ის მრავალი ასპექტი და შესაძლებლობები.

სულ

როგორც ვხედავთ, ყველაფერი ძალიან მარტივია! მთავარია, გაიგოთ ქსელის მუშაობის პრინციპი და არ შეგეშინდეთ დიდი სახელმძღვანელოების დაყენებისა და წაკითხვის.
ვიმედოვნებ, რომ შევძელი საკმარისი ინფორმაციის შეგროვება, რათა დაეწყო თქვენი მეგობრობა Linux-ზე დაფუძნებულ პროგრამულ მარშრუტიზატორებთან.

ტეგები: iptables, netfilter, NAT

iptables-ის ძირითადი ცნებებია:

    წესი - შედგება კრიტერიუმის, მოქმედებისა და მრიცხველისაგან. თუ პაკეტი აკმაყოფილებს კრიტერიუმებს, მასზე მოქმედება ხდება და ის ითვლება მრიცხველში. შეიძლება არ იყოს კრიტერიუმი - მაშინ კრიტერიუმი "ყველა პაკეტი" ირიბად არის ნავარაუდევი. ასევე არ არის აუცილებელი მოქმედების დაზუსტება - მოქმედების არარსებობის შემთხვევაში, წესი იმუშავებს მხოლოდ როგორც მრიცხველი. თითოეული ჯაჭვის წესები ამოქმედდება მათი გამოჩენის თანმიმდევრობით, ამიტომ თანმიმდევრობა მნიშვნელოვანია.

    • კრიტერიუმები - ლოგიკური გამოხატულება, რომელიც აანალიზებს პაკეტის ან/და კავშირის თვისებებს და ადგენს, ექვემდებარება თუ არა ეს კონკრეტული პაკეტი მიმდინარე წესს. კრიტერიუმები დაკავშირებულია ლოგიკური "AND"-ით.

      მოქმედება - მოქმედების აღწერა, რომელიც უნდა განხორციელდეს პაკეტთან და/ან კავშირთან, თუ ისინი ამ წესის ფარგლებშია. მოქმედებები უფრო დეტალურად იქნება აღწერილი ქვემოთ.

      მრიცხველი არის წესის კომპონენტი, რომელიც უზრუნველყოფს პაკეტების რაოდენობის აღრიცხვას, რომლებიც ექვემდებარება მოცემული წესის კრიტერიუმებს. მრიცხველი ასევე ითვალისწინებს ასეთი პაკეტების მთლიან მოცულობას ბაიტებში.

    ჯაჭვი არის წესების მოწესრიგებული თანმიმდევრობა. ჯაჭვები შეიძლება დაიყოს საბაჟო და საბაზისო.

    • საბაზისო ჯაჭვი არის ჯაჭვი, რომელიც იქმნება ნაგულისხმევად ცხრილის ინიციალიზაციისას. თითოეული პაკეტი, იმისდა მიხედვით, არის თუ არა იგი განკუთვნილი თავად ჰოსტისთვის, მის მიერ გენერირებული თუ არის ტრანზიტი, უნდა გაიაროს მისთვის მინიჭებული სხვადასხვა ცხრილების ძირითადი ჯაჭვების ნაკრები. გარდა ამისა, ძირითადი ჯაჭვი განსხვავდება მომხმარებლის ჯაჭვისგან „ნაგულისხმევი პოლიტიკის“ არსებობით. ეს ქმედება ეხება იმ პაკეტებს, რომლებიც არ არის დამუშავებული ამ ჯაჭვის სხვა წესებით და მისგან გამოძახებულ ჯაჭვებზე. საბაზისო ჯაჭვის სახელები ყოველთვის იწერება დიდი ასოებით (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).

      მომხმარებლის ჯაჭვი - მომხმარებლის მიერ შექმნილი ჯაჭვი. შეიძლება გამოყენებულ იქნას მხოლოდ საკუთარ მაგიდასთან. რეკომენდირებულია არ გამოიყენოთ დიდი სახელები ასეთი ჯაჭვებისთვის, რათა თავიდან იქნას აცილებული დაბნეულობა ბაზის ჯაჭვებთან და ჩაშენებულ მოქმედებებთან.

    ცხრილი არის ძირითადი და მომხმარებლის ჯაჭვების კოლექცია, რომელიც გაერთიანებულია საერთო ფუნქციური მიზნებით. ცხრილების სახელები (ისევე, როგორც კრიტერიუმების მოდულები) იწერება მცირე ასოებით, რადგან პრინციპში ისინი არ ეწინააღმდეგებიან მომხმარებლის ჯაჭვების სახელებს. iptables ბრძანების გამოძახებისას ცხრილი მითითებულია ფორმატში -t table_name. თუ ცალსახად არ არის მითითებული, გამოიყენება ფილტრის ცხრილი.

გარჩევა:

# ნაგავსაყრელი ფილტრის ცხრილის წესები$ sudo iptables-save -c -t filter # Table filter * filter # INPUT, FORWARD, OUTPUT ჯაჭვები, მათი პოლიტიკა და მრიცხველები:INPUT ACCEPT [19302:9473669] :FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [5462736:4247599532] # წესი: "" - წესების მრიცხველი, "-A INPUT" - ჯაჭვი, "-i em1 -p tcp -m tcp --dport 22" - კრიტერიუმები, "-j ACCEPT" - მოქმედება[17:1020] -A INPUT -i em1 -p tcp -m tcp --dport 22 -j ACCEPT COMMIT

არქიტექტურა

ქსელის ფილტრის სისტემაში პაკეტები გადის ჯაჭვებში. ჯაჭვი არის წესების მოწესრიგებული სია და თითოეული წესი შეიძლება შეიცავდეს კრიტერიუმებს და მოქმედებას ან გადასვლას. როდესაც პაკეტი გადის ჯაჭვში, ქსელის ფილტრის სისტემა სათითაოდ ამოწმებს, აკმაყოფილებს თუ არა პაკეტი შემდეგი წესის ყველა კრიტერიუმს და თუ ასეა, ასრულებს მოქმედებას (თუ წესში კრიტერიუმები არ არის, მაშინ მოქმედება შესრულებულია. ყველა პაკეტისთვის, რომელიც გადის წესს). ბევრი შესაძლო კრიტერიუმია. მაგალითად, პაკეტი ემთხვევა –source 192.168.1.1 კრიტერიუმს, თუ პაკეტის სათაური მიუთითებს, რომ წყარო არის 192.168.1.1. ნახტომის უმარტივესი ტიპი, - jump, უბრალოდ აგზავნის პაკეტს სხვა ჯაჭვის დასაწყისში. თქვენ ასევე შეგიძლიათ მიუთითოთ მოქმედება –jump-ის გამოყენებით. ყველა ჯაჭვში ხელმისაწვდომი სტანდარტული ქმედებებია ACCEPT (გამოტოვება), DROP (წაშლა), QUEUE (გაგზავნა გარე პროგრამაში ანალიზისთვის) და RETURN (დაბრუნება წინა ჯაჭვში ანალიზისთვის). მაგალითად, ბრძანებები

Iptables -A INPUT --წყარო 192.168.1.1 --jump ACCEPT iptables -A INPUT --jump other_chain

ნიშნავს "დაამატეთ შემდეგი წესები INPUT ჯაჭვის ბოლოს: გამოტოვეთ პაკეტები 192.168.1.1-დან და გააგზავნეთ ყველაფერი, რაც რჩება ანალიზისთვის other_chain-ზე."

ჯაჭვები

სისტემაში ჩაშენებულია 5 ტიპის სტანდარტული ჯაჭვები:

    PREROUTING - შემომავალი პაკეტების საწყისი დამუშავებისთვის.

    INPUT - შემომავალი პაკეტებისთვის, რომლებიც მიმართულია უშუალოდ ლოკალურ პროცესს (კლიენტს ან სერვერს).

    FORWARD - გამოსავალზე გადაგზავნილი შემომავალი პაკეტებისთვის (გაითვალისწინეთ, რომ გადაგზავნილი პაკეტები ჯერ გადიან PREROUTING ჯაჭვში, შემდეგ FORWARD და POSTROUTING).

    OUTPUT - ლოკალური პროცესებით წარმოქმნილი პაკეტებისთვის.

    POSTROUTING - გამავალი პაკეტების საბოლოო დამუშავებისთვის.

თქვენ ასევე შეგიძლიათ შექმნათ და გაანადგუროთ თქვენი საკუთარი ჯაჭვები iptables პროგრამის გამოყენებით.

მაგიდები

ჯაჭვები დაყოფილია 4 ცხრილად:

    Raw - ნახულია პაკეტის მდგომარეობის გამოვლენის სისტემაში გადაცემამდე. იშვიათად გამოიყენება, მაგალითად, პაკეტების აღსანიშნავად, რომლებიც არ უნდა იყოს დამუშავებული სახელმწიფო აღმოჩენის სისტემის მიერ. ამისათვის წესი განსაზღვრავს NOTRACK მოქმედებას. შეიცავს PREROUTING და OUTPUT ჯაჭვებს.

    Mangle - შეიცავს IP პაკეტების (ჩვეულებრივ სათაურის) შეცვლის წესებს. სხვა საკითხებთან ერთად, ის მხარს უჭერს TTL (ცხოვრების დრო), TOS (მომსახურების ტიპი) და MARK მოქმედებებს (TTL და TOS ველების შესაცვლელად და პაკეტის მარკერების შესაცვლელად). იშვიათად არის საჭირო და შეიძლება საშიში იყოს. შეიცავს ხუთივე სტანდარტულ ჯაჭვს.

    Nat - უყურებს მხოლოდ პაკეტებს, რომლებიც ქმნიან ახალ კავშირს (შტატის გამოვლენის სისტემის მიხედვით). მხარს უჭერს DNAT, SNAT, MASQUERADE, REDIRECT მოქმედებებს. შეიცავს PREROUTING, OUTPUT და POSTROUTING ჯაჭვებს.

    ფილტრი - ძირითადი ცხრილი, რომელიც გამოიყენება ნაგულისხმევად, თუ ცხრილის სახელი არ არის მითითებული. შეიცავს INPUT, FORWARD და OUTPUT ჯაჭვებს.

ჯაჭვები იმავე სახელწოდებით, მაგრამ სხვადასხვა ცხრილებში, სრულიად დამოუკიდებელი ობიექტებია. მაგალითად, raw PREROUTING და mangle PREROUTING ჩვეულებრივ შეიცავს წესების განსხვავებულ კომპლექტს; პაკეტები ჯერ გადის უმი PREROUTING ჯაჭვის, შემდეგ კი მანგლის PREROUTING ჯაჭვის გავლით.

შტატები

netfilter სისტემაში, თითოეულ პაკეტს, რომელიც გადის მდგომარეობის მექანიზმში, შეიძლება ჰქონდეს ოთხი შესაძლო მდგომარეობიდან:

    NEW - პაკეტი ხსნის ახალ სესიას. კლასიკური მაგალითია TCP პაკეტი SYN დროშით.

    დაარსდა - პაკეტი უკვე არსებული სესიის ნაწილია.

    დაკავშირებული - პაკეტი ხსნის ახალ სესიას, რომელიც დაკავშირებულია უკვე ღია სესიასთან. მაგალითად, პასიური FTP სესიის დროს კლიენტი უერთდება სერვერის 21-ე პორტს, სერვერი ეუბნება კლიენტს მეორე, შემთხვევით შერჩეული პორტის რაოდენობას, რის შემდეგაც კლიენტი უერთდება მეორე პორტს ფაილების გადასატანად. ამ შემთხვევაში, მეორე სესია (ფაილის გადაცემა მეორე პორტზე) ასოცირდება უკვე არსებულ სესიასთან (ორიგინალური კავშირი პორტთან 21).

    არასწორი - ყველა სხვა პაკეტი.

მაგიდების და ჯაჭვების გავლის დიაგრამა

მაგიდების და ჯაჭვების გავლის გამარტივებული დიაგრამა:

დეტალური დიაგრამა:

ძირითადი კონფიგურაცია

ქვემოთ მოცემულია ძირითადი სტატიკური iptables კონფიგურაციის მაგალითი. ასეთი კონფიგურაციის შენახვისა და ჩატვირთვისას უნდა გაითვალისწინოთ მასში ცვლილებების შესაძლებლობა სხვა სერვისებიდან, მაგალითად Fail2ban. გარდა ამისა, IPv6 მისამართის გამოყენებისას, IPv6-ის კონფიგურაცია უნდა განხორციელდეს IPv4-ისგან დამოუკიდებლად.

IPv4

sudo iptables-save

შექმენით სკრიპტი iptables წესების ამონაწერით:

sudo nano / etc/ network/ if-up.d/ iptables-rules

დააკოპირეთ შემდეგი კოდი:

#!/sbin/iptables-restore -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j REJECT --უარყოფა-icmp-host-აკრძალულია -A FORWARD -m conntrack -- ctstate დაკავშირებული, დაარსებული -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -j REJECT --უარყოფა-icmp-მასპინძლისთან-აკრძალულია #-A OUTPUT -p icmp -j ACCEPT #-A OUTPUT -o lo - j მიღება #-A OUTPUT -j REJECT --უარყოფა-icmp-host-აკრძალულიაჩადენა

ჩვენ ვავსებთ აუცილებელ წესებს iptables-save-ის გათვალისწინებით.

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

IPv6

მიმდინარე კონფიგურაციის ნახვა:

sudo ip6tables-save

შექმენით სკრიპტი ip6tables წესების ამონაწერით:

sudo nano / etc/ network/ if-up.d/ ip6tables-rules

დააკოპირეთ შემდეგი კოდი:

#!/sbin/ip6tables-restore # ფილტრის მაგიდა და მისი ჯაჭვები* ფილტრი: INPUT ACCEPT [ 0 :0 ] : FORWARD ACCEPT [ 0 :0 ] : OUTPUT ACCEPT [ 0 :0 ] # დაუშვით დაკავშირებული და დამყარებული კავშირები-A INPUT -m conntrack --ctstate RELATED,SETABLISHED -j ACCEPT # სერვისის icmp ტრაფიკის დაშვება-A INPUT -p ipv6-icmp -j ACCEPT # დაუშვით სანდო ტრაფიკი loopback ინტერფეისში-A INPUT -i lo -j ACCEPT # INPUT ჯაჭვის დამატებითი წესები შეიძლება ჩასვათ აქ # გამორთეთ ყველაფერი INPUT-ისთვის-A INPUT -j REJECT --უარყოფა-with icmp6-adm-აკრძალულია # FORWARD და OUTPUT ჯაჭვების წესების თანმიმდევრობა და მნიშვნელობა INPUT-ის მსგავსია-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT -A FORWARD -j REJECT --უარი - icmp6-adm-აკრძალულია # OUTPUT ჯაჭვის გაფილტვრა მკაცრად აკრძალულია #-A OUTPUT -m contrack --ctstate RELATED,SETABLISHED -j ACCEPT #-A OUTPUT -p ipv6-icmp -j ACCEPT#-A OUTPUT -o lo -j ACCEPT #-A OUTPUT -j REJECT --უარყოფა-with icmp6-adm-აკრძალულიაჩადენა

ჩვენ ვავსებთ აუცილებელ წესებს ip6tables-save-ის გათვალისწინებით.

შეინახეთ და დახურეთ: Ctrl + O, Enter, Ctrl + X

გააკეთეთ სკრიპტი შესრულებადი და ჩატვირთეთ iptables წესები:

sudo chmod +x / etc/ network/ if-up.d/ ip6tables-rules sudo / etc/ network/ if-up.d/ ip6tables-rules

დამატებითი წესები

ქვემოთ მოცემულია რამდენიმე შედარებით ხშირად გამოყენებული წესი. INPUT/OUTPUT ჯაჭვები გამოიყენება ადგილობრივი ტრაფიკის გასაფილტრად. სატრანზიტო მოძრაობისთვის, თქვენ უნდა გამოიყენოთ FORWARD ჯაჭვი.

დისტანციური წვდომა

# remote.ssh -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT # remote.rdp -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 3389 -j ACCEPT # remote.vnc -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 5900 -j ACCEPT

ვებ და ფაილური სერვისები

# web.http, web.https -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 21 -j ACCEPT

ფოსტა და მყისიერი შეტყობინებები

# mail.pop3, mail.pop3s -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 110,995 -j ACCEPT # mail.imap, mail.imaps -A INPUT -p tcp -m conntrack -- ctstate NEW -m მრავალპორტი --dports 143 ,993 -j ACCEPT # mail.smtp, mail.smtps -A INPUT -p tcp -m conntrack --ctstate NEW -m მრავალპორტი --dports 25 ,465 -j ACCEPT # im. xmpp -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 5222 ,5223 -j ACCEPT # im.icq.oscar -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -- dport 5190 -j ACCEPT

ქსელის სერვისები

# network.openvpn.vpn -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 1194 -j ACCEPT # network.squid.proxy -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 3128 -j ACCEPT # network.dns -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT # network.ntp -A INPUT -p udp -m conntrack --ctstate NEW -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 69 -j ACCEPT # network.dhserver.dhcp.discover-request-A INPUT -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT # network.dhclient.dhcp.discover-request #-A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT # network.dhserver.dhcp.offer-ack #-A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 67 --dport 68 -j ACCEPT

ტესტირება და გამართვა

იხილეთ IPv4 და IPv6 მიმდინარე კონფიგურაცია:

sudo iptables-save sudo ip6tables-save

ხე-ტყე

მიკვლევა

ბირთვის მოდულები

დატვირთული მოდულების ნახვა:

lsmod | grep -E "^ip|^nf" | დალაგება

დამატებითი მოდულების ჩასატვირთად მოსახერხებელია ავტომატური შევსების გამოყენება: 2x Tab

sudo modprobe nf sudo modprobe modules-load.d

ამ სტატიაში განვიხილავთ ცხრილებისა და ჯაჭვების გადაკვეთის თანმიმდევრობას iptables-ის თითოეულ ცხრილში. ინფორმაცია სასარგებლო იქნება წესების შედგენისას და გაგაცნობთ თანმიმდევრობას, რომლითაც პაკეტი გადის ყველა ცხრილსა და iptables ჯაჭვში, განსაკუთრებით მაშინ, როდესაც წესების ნაკრები მოიცავს მოქმედებებს, როგორიცაა DNAT, SNAT და TOS.

ფირვოლზე შემოსული პაკეტი პირველად აღწევს ქსელურ მოწყობილობას, აკავებს დრაივერს და გადაეცემა სისტემის ბირთვს. შემდეგი, პაკეტი გადის რამდენიმე ცხრილს და, ამ ცხრილების წესებიდან გამომდინარე, წყდება მისი შემდგომი ბედი.

ცხრილი 1. FORWARD პაკეტების გადაცემის თანმიმდევრობა

ნაბიჯი მაგიდა ჯაჭვი შენიშვნა
1 კაბელი (მაგ. ინტერნეტი)
2
3 მანგლელი პრეროუტინგი როგორც წესი, ეს ჯაჭვი გამოიყენება პაკეტის სათაურში ცვლილებების შესატანად, როგორიცაა TOS ბიტების შეცვლა და ა.შ.
4 ნატ პრეროუტინგი ეს ჯაჭვი გამოიყენება დანიშნულების ქსელის მისამართის თარგმნისთვის. წყაროს ქსელის მისამართის თარგმანი შესრულებულია მოგვიანებით, სხვა ჯაჭვში. ამ ჯაჭვში ნებისმიერი სახის ფილტრაცია შესაძლებელია მხოლოდ გამონაკლის შემთხვევებში
5 შემდგომი მარშრუტიზაციის შესახებ გადაწყვეტილების მიღება, ე.ი. ამ ეტაპზე წყდება სად წავა პაკეტი - ლოკალურ აპლიკაციაში თუ სხვა ქსელის კვანძში.
6 ფილტრი წინ მხოლოდ ის პაკეტები, რომლებიც მიდიან სხვა ჰოსტში, შედიან FORWARD ჯაჭვში. არ დაგავიწყდეთ, რომ ტრაფიკი გადის ამ ჯაჭვში ორივე მიმართულებით, აუცილებლად გაითვალისწინეთ ეს ფილტრაციის წესების დაწერისას.
7 მანგლელი წინ შემდეგ პაკეტი შედის FORWARD> ჯაჭვში mangle ცხრილი, რომელიც უნდა იქნას გამოყენებული მხოლოდ გამონაკლის შემთხვევებში, როდესაც საჭიროა გარკვეული ცვლილებების შეტანა პაკეტის სათაურში ორ მარშრუტულ გადაწყვეტილების წერტილს შორის.
8 შემდგომი მარშრუტიზაციის შესახებ გადაწყვეტილების მიღება, ე.ი. ამ ეტაპზე, მაგალითად, წყდება, რომელ ინტერფეისზე წავა პაკეტი.
9 ნატ პოსტტროუტინგი ეს ჯაჭვი ძირითადად განკუთვნილია წყაროს ქსელის მისამართის თარგმნისთვის. არ გამოიყენოთ იგი ფილტრაციისთვის, თუ აბსოლუტურად აუცილებელი არ არის. აქ ტარდება მასკარადაც.
10 მანგლელი პოსტტროუტინგი ეს ჯაჭვი მიზნად ისახავს ცვლილებების შეტანას პაკეტის სათაურში ბოლო მარშრუტიზაციის გადაწყვეტილების მიღების შემდეგ.
11 გამომავალი ქსელის ინტერფეისი (მაგალითად, eth1).
12 კაბელი (ეს იყოს LAN).

როგორც ხედავთ, პაკეტი გადის რამდენიმე ეტაპს გადაცემამდე. თითოეულ მათგანზე შესაძლებელია პაკეტის შეჩერება, იქნება ეს iptables ჯაჭვით თუ სხვა, მაგრამ ჩვენ ძირითადად გვაინტერესებს iptables. გაითვალისწინეთ, რომ არ არსებობს ინტერფეისის სპეციფიკური ჯაჭვები ან მსგავსი რამ. ყველა პაკეტი, რომელიც მოძრაობს ჩვენს ფეიერვოლში/როუტერში, გადის FORWARD ჯაჭვში. არ გამოიყენოთ INPUT ჯაჭვი სატრანზიტო პაკეტების გასაფილტრად, ისინი უბრალოდ იქ არ მიდიან! მხოლოდ ის პაკეტები, რომლებიც განკუთვნილია მოცემული ჰოსტისთვის, მოძრაობს ამ ჯაჭვში.

ცხრილი 2. INPUT პაკეტების გადაადგილების თანმიმდევრობა

ნაბიჯი მაგიდა ჯაჭვი შენიშვნა
1 კაბელი (მაგ. ინტერნეტი)
2 ქსელის შეყვანის ინტერფეისი (მაგალითად, eth0)
3 მანგლელი პრეროუტინგი ჩვეულებრივ გამოიყენება პაკეტის სათაურში ცვლილებების შესატანად, როგორიცაა TOS ბიტების დაყენება და ა.შ.
4 ნატ პრეროუტინგი მისამართის თარგმანი (Destination Network Address Translation). პაკეტის ფილტრაცია აქ მხოლოდ გამონაკლის შემთხვევებშია დაშვებული.
5 მარშრუტის გადაწყვეტილებების მიღება.
6 მანგლელი INPUT პაკეტი მთავრდება მანგლის ცხრილის INPUT ჯაჭვში. ეს შეიტანს ცვლილებებს პაკეტის სათაურში, სანამ ის გადაეცემა ადგილობრივ აპლიკაციას.
7 ფილტრი INPUT შემომავალი ტრაფიკი აქ გაფილტრულია. გახსოვდეთ, რომ ჩვენთვის მიმართული ყველა შემომავალი პაკეტი გადის ამ ჯაჭვს, მიუხედავად იმისა, თუ რომელი ინტერფეისიდან მოვიდა.
8 ლოკალური პროცესი/აპლიკაცია

OUTPUT პაკეტებს აქვთ საპირისპირო მიმდევრობა ცხრილების მეშვეობით. გავლის თანმიმდევრობა მოცემულია ცხრილში 3.

ცხრილი 3. OUTPUT პაკეტების რიგი

ნაბიჯი მაგიდა ჯაჭვი შენიშვნა
1 ლოკალური პროცესი
2 მანგლელი გამომავალი ეს არის სადაც ცვლილებები ხდება პაკეტის სათაურში. ამ ჯაჭვში შესრულებულმა ფილტრაციამ შეიძლება გამოიწვიოს უარყოფითი შედეგები.
3 ნატ გამომავალი ეს ჯაჭვი გამოიყენება ქსელის მისამართების თარგმნისთვის (NAT) პაკეტებში, რომლებიც წარმოიქმნება ლოკალური firewall პროცესებიდან.
4 ფილტრი გამომავალი გამავალი ტრაფიკი აქ გაფილტრულია.
5 მარშრუტის გადაწყვეტილებების მიღება. აქ წყდება სად წავა პაკეტი შემდეგში.
6 ნატ პოსტტროუტინგი აქ ხდება წყაროს ქსელის მისამართის თარგმანი (SNAT). თქვენ არ უნდა განახორციელოთ პაკეტის ფილტრაცია ამ ჯაჭვში არასასურველი გვერდითი ეფექტების თავიდან ასაცილებლად. თუმცა, აქაც შეგიძლიათ შეაჩეროთ პაკეტები ნაგულისხმევი პოლიტიკის გამოყენებით ვარდნა.
7 მანგლელი პოსტტროუტინგი Mangle ცხრილის POSTROUTING ჯაჭვი, ძირითადად, გამოიყენება წესებისთვის, რომლებიც საჭიროებენ ცვლილებების შეტანას პაკეტის სათაურში, სანამ ის დატოვებს firewall-ს, მაგრამ მარშრუტიზაციის გადაწყვეტილების მიღების შემდეგ. ყველა პაკეტი, როგორც ტრანზიტი, ასევე ადგილობრივი ბუხარის პროცესებით შექმნილი, ამ ჯაჭვში ხვდება.
8 ქსელის ინტერფეისი (მაგ. eth0)
9 კაბელი (მაგ. ინტერნეტი)

და პაკეტების ვიზუალური წარმოდგენა:

ეს მაჩვენებელი საკმაოდ ნათელ წარმოდგენას იძლევა იმის შესახებ, თუ რა თანმიმდევრობით გადის პაკეტები სხვადასხვა ჯაჭვებში. მარშრუტის გადაწყვეტილების პირველ წერტილში, მოცემული ჰოსტისთვის განკუთვნილი ყველა პაკეტი იგზავნება INPUT ჯაჭვში, დანარჩენი იგზავნება FORWARD ჯაჭვში.

გთხოვთ, გაითვალისწინოთ ის ფაქტიც, რომ ფირვოლზე დანიშნულების მისამართის მქონე პაკეტებმა შეიძლება გაიაროს ქსელის მისამართის თარგმნა (DNAT) nat ცხრილის PREROUTING ჯაჭვში და, შესაბამისად, შემდგომი მარშრუტიზაცია პირველ წერტილში განხორციელდება განხორციელებული ცვლილებების მიხედვით.

ამ სტატიაში ჩვენ გეტყვით, თუ როგორ უნდა დააკონფიგურიროთ iptables Linux-ზე. თქვენ გაიგებთ რა არის და რატომ გჭირდებათ ამ ფუნქციის კონფიგურაცია. iptables-ის დაყენება Linux-ზესაკმაოდ მარტივია.

iptables-ის დაყენება Linux-ზე: რა არის iptables?

Iptables არის ბრძანების ხაზის firewall პროგრამა, რომელიც იყენებს მიჯაჭვულ პოლიტიკას ტრაფიკის დასაშვებად ან დაბლოკვის მიზნით. როდესაც კავშირი ცდილობს თავის დამკვიდრებას თქვენს სისტემაში, iptables ეძებს წესს მის სიაში, რომელიც შეესაბამება მას. თუ ის ვერ პოულობს, ის მიმართავს ნაგულისხმევ მოქმედებას.

Iptables თითქმის ყოველთვის არის წინასწარ დაინსტალირებული Linux-ის ნებისმიერ დისტრიბუციაზე. მისი განახლებისთვის/ინსტალაციისთვის, უბრალოდ გადმოწერეთ iptables პაკეტი:

sudo apt-get დააინსტალირეთ iptables

არსებობს iptable-ების GUI ალტერნატივები, როგორიცაა Firestarter, მაგრამ iptables არც ისე რთულია, თუ მხოლოდ რამდენიმე ბრძანებას აწარმოებთ. იყავით უკიდურესად ფრთხილად iptables-ის წესების დაყენებისას, განსაკუთრებით თუ იყენებთ SSH'd-ს სერვერზე, რადგან ერთმა არასწორმა ბრძანებამ შეიძლება დიდი ხნით დაგიბლოკოს, სანამ ის ხელით არ იქნება ჩართული ფიზიკურ მანქანაზე.

iptable-ების დაყენება Linux-ზე დუმებისთვის

სხვათა შორის, ამაზე ადრე უკვე ვისაუბრეთ. ალბათ ეს თქვენთვისაც საინტერესო იქნება. ბმული შეგიძლიათ იხილოთ ზემოთ.

iptables-ის დაყენება Linux-ზე, როგორც ზემოთ ვთქვით, საკმაოდ მარტივია. მაგრამ სანამ დაყენებას დაიწყებთ, თქვენ უნდა გაეცნოთ ვარიანტის ზოგად კონცეფციებს.

მიკროსქემის ტიპები

Iptables იყენებს სამ განსხვავებულ წრეს: შეყვანა, წინსვლა და გამომავალი.

შეყვანა- ეს ჯაჭვი გამოიყენება შემომავალი კავშირების ქცევის გასაკონტროლებლად. მაგალითად, თუ მომხმარებელი ცდილობს SSH თქვენს კომპიუტერში/სერვერში შეყვანას, iptables შეეცდება დააკავშიროს IP მისამართი და პორტი შეყვანის ჯაჭვის წესთან.

წინ- ეს ჯაჭვი გამოიყენება შემომავალი კავშირებისთვის, რომლებიც რეალურად არ არის მიწოდებული ადგილობრივად. იფიქრეთ როუტერზე - მონაცემები ყოველთვის იგზავნება მას, მაგრამ იშვიათად არის განკუთვნილი თავად როუტერისთვის; მონაცემები უბრალოდ გადამისამართებულია სადესანტო გვერდზე. თუ თქვენ არ აკეთებთ რაიმე მარშრუტიზაციას, NAT-ს ან სხვა რამეს თქვენს სისტემაში, რომელიც მოითხოვს გადამისამართებას, თქვენ არც კი გამოიყენებთ ამ ჯაჭვს.

არსებობს ერთი საიმედო გზა იმის შესამოწმებლად, იყენებს თუ არა თქვენს სისტემას წინა ჯაჭვს.

ეს ეკრანის სურათი არის სერვერზე, რომელიც მუშაობს რამდენიმე კვირის განმავლობაში და არ აქვს შეზღუდვები შემომავალ და გამავალ კავშირებზე. როგორც ხედავთ, შეყვანის ჯაჭვმა დაამუშავა 11 GB პაკეტები, ხოლო გამომავალი ჯაჭვი დაამუშავა 17 GB. მეორეს მხრივ, წინა ჯაჭვს არ სჭირდება ერთი პაკეტის დამუშავება. ეს არის იმის გამო, რომ სერვერი არ ახორციელებს გადამისამართებას ან არ გამოიყენება როგორც ბოლომდე-ის მოწყობილობა.

გამომავალი - ეს ჯაჭვი გამოიყენება გამავალი კავშირებისთვის. მაგალითად, თუ ცდილობთ linuxinsider საიტის პინგს, iptables შეამოწმებს მის გამომავალ ჯაჭვს, რათა დაინახოს რა წესები ვრცელდება ping-სა და linuxinsider-ზე, სანამ გადაწყვეტს, დაუშვას თუ უარყოს კავშირის მცდელობა.

გაფრთხილება

მიუხედავად იმისა, რომ გარე ჰოსტის შემოწმება ჰგავს რაღაცას, რომელსაც მხოლოდ გამომავალი ჯაჭვის გავლა სჭირდება, გახსოვდეთ, რომ შეყვანის ჯაჭვი ასევე გამოყენებული იქნება მონაცემების დასაბრუნებლად. როდესაც იყენებთ iptables სისტემის დაბლოკვისთვის, გახსოვდეთ, რომ ბევრი პროტოკოლი მოითხოვს ორმხრივ კომუნიკაციას, ამიტომ შეყვანის და გამომავალი ჯაჭვები სწორად უნდა იყოს კონფიგურირებული. SSH არის საერთო პროტოკოლი, რომლის ჩართვაც ადამიანებს ავიწყდებათ ორივე ჯაჭვზე.

ნაგულისხმევი პოლიტიკის ქცევა

სანამ კონკრეტული წესების კონფიგურაციას დაიწყებთ, უნდა გადაწყვიტოთ, როგორი უნდა იყოს ამ სამი ჯაჭვის ნაგულისხმევი ქცევა. სხვა სიტყვებით რომ ვთქვათ, რისი გაკეთება გსურთ iptables-მა, თუ კავშირი არ ემთხვევა არსებულ წესებს?

იმის სანახავად, თუ რომელი პოლიტიკის ჯაჭვებია კონფიგურირებული შეუსაბამო ტრაფიკის დასამუშავებლად, გაუშვით iptables -L ბრძანება.

როგორც ხედავთ, ჩვენ ასევე გამოვიყენეთ grep ბრძანება უფრო სუფთა შედეგის მისაღებად. ამ ეკრანის სურათზე ჩვენი ჯაჭვები ამჟამად კონფიგურირებულია ტრაფიკის მისაღებად.

უფრო მეტჯერ, ვიდრე არა, გსურთ, რომ თქვენსმა სისტემამ მიიღოს კავშირები ნაგულისხმევად. თუ ადრე არ შეცვალეთ წესების ჯაჭვის წესები, ეს პარამეტრი უკვე კონფიგურირებული უნდა იყოს. ნებისმიერ შემთხვევაში, აქ არის ბრძანება ნაგულისხმევი კავშირების მისაღებად:

iptables --პოლიტიკა INPUT ACCEPT
iptables --პოლიტიკა OUTPUT ACCEPT
iptables --პოლიტიკა FORWARD ACCEPT

ნაგულისხმევად, მიღების წესით, შეგიძლიათ გამოიყენოთ iptables კონკრეტული IP მისამართების ან პორტის ნომრების უარსაყოფად, ხოლო ყველა სხვა კავშირის მიღებას განაგრძობთ. ამ ბრძანებებს ერთ წუთში მივაღწევთ.

თუ გირჩევნიათ უარი თქვან ყველა კავშირზე და ხელით მიუთითოთ რომელი კავშირების დაკავშირება გსურთ, უარის თქმის შესახებ უნდა შეცვალოთ თქვენი სქემების ნაგულისხმევი პოლიტიკა. ეს, ალბათ, სასარგებლო იქნება მხოლოდ სენსიტიური ინფორმაციის შემცველი სერვერებისთვის და მხოლოდ ერთი და იგივე IP მისამართებით იქნება დაკავშირებული.

iptables --პოლიტიკა INPUT DROP
iptables --პოლიტიკა OUTPUT DROP
iptables --პოლიტიკა FORWARD DROP

კავშირის პასუხები

ნაგულისხმევი ჯაჭვის პოლიტიკის კონფიგურაციით, შეგიძლიათ დაიწყოთ წესების დამატება iptables-ში, რათა მან იცოდეს რა უნდა გააკეთოს, როდესაც შეხვდება კავშირს კონკრეტულ IP მისამართთან ან პორტთან. ამ სახელმძღვანელოში ჩვენ განვიხილავთ სამ ყველაზე გავრცელებულ და ხშირად გამოყენებულ „პასუხს“.

მიღება- დაუშვით კავშირი.

ჩამოაგდეს- შეწყვიტე კავშირი, ისე მოიქეცი, თითქოს არასდროს მომხდარა. ეს საუკეთესოა, თუ არ გინდათ, რომ წყარომ გააცნობიეროს, რომ თქვენი სისტემა არსებობს.

Უარი თქვას— უარი თქვით კავშირზე, მაგრამ გაგზავნეთ შეცდომის შესახებ შეტყობინება. ეს საუკეთესოა, თუ არ გსურთ კონკრეტული წყაროს დაკავშირება თქვენს სისტემასთან, მაგრამ გსურთ მათ იცოდნენ, რომ თქვენმა ფაირვოლმა დაბლოკა ისინი.

ამ სამ წესს შორის განსხვავების ჩვენების საუკეთესო გზაა იმის ჩვენება, თუ როგორ გამოიყურება, როდესაც კომპიუტერი ცდილობს ლინუქსის აპარატის პინგს თითოეული ამ ვარიანტისთვის კონფიგურირებული iptables-ით.

კავშირის ნებართვა:

კავშირის მოხსნა:

კავშირის უარყოფა:

ქსელის ნიღაბი ან მახასიათებელი IP მისამართების დიაპაზონის მითითებისთვის.

iptables-ის დაყენება Linux-ზე: კავშირის მეთოდები

თუ ვსაუბრობთ თემაზე "iptables-ის დაყენება Linux-ზე", მაშინ უნდა ვისაუბროთ კავშირის მეთოდებზე.

დაუშვით ან დაბლოკეთ კონკრეტული კავშირები
კონფიგურირებული პოლიტიკით, შეგიძლიათ iptable-ების კონფიგურაცია, რათა დაუშვას ან დაბლოკოს კონკრეტული მისამართები, მისამართების დიაპაზონი და პორტები. ამ მაგალითებში ჩვენ დავაყენებთ კავშირებს DROP-ზე, მაგრამ თქვენ შეგიძლიათ გადართოთ ისინი ACCEPT-ზე ან REJECT-ზე, თქვენი საჭიროებიდან და იმის მიხედვით, თუ როგორ დააკონფიგურირეთ თქვენი პოლიტიკის ჯაჭვები.

Შენიშვნა. ამ მაგალითებში ჩვენ გამოვიყენებთ iptables -A არსებულ ჯაჭვს წესების დასამატებლად. Iptables იწყება სიის სათავეში და გადის თითოეულ წესს, სანამ არ იპოვის შესაბამისს. თუ თქვენ გჭირდებათ წესის ჩასმა მეორეზე მაღლა, შეგიძლიათ გამოიყენოთ iptables -I, რათა მიუთითოთ რიცხვი, რომელიც უნდა იყოს სიაში.

კავშირები იგივე IP მისამართიდან

ეს მაგალითი გვიჩვენებს, თუ როგორ უნდა დაბლოკოთ ყველა კავშირი IP მისამართიდან 10.10.10.10..

iptables -A INPUT -s 10.10.10.10 -j DROP

კავშირები IP მისამართების სპექტრიდან

ეს მაგალითი გვიჩვენებს, თუ როგორ უნდა დაიბლოკოს ყველა IP მისამართი ქსელის დიაპაზონში 10.10.10.0/24. შეგიძლიათ გამოიყენოთ ქსელის ნიღაბი ან სტანდარტული წინსვლა, IP მისამართების დიაპაზონის დასაზუსტებლად.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

კავშირები კონკრეტულ პორტთან

ეს მაგალითი გვიჩვენებს, თუ როგორ უნდა დაბლოკოს SSH კავშირები 10.10.10.10-დან.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

თქვენ შეგიძლიათ შეცვალოთ "ssh" ნებისმიერი პროტოკოლით ან პორტის ნომრით. კოდის -p tcp ნაწილი ეუბნება iptables-ს, თუ რა პროტოკოლს იყენებს კავშირი. თუ თქვენ ბლოკავდით პროტოკოლს, რომელიც იყენებს UDP-ს და არა TCP-ს, ამის ნაცვლად საჭირო იქნება -p udp.

ეს მაგალითი გვიჩვენებს, თუ როგორ უნდა დაბლოკოთ SSH კავშირები ნებისმიერი IP მისამართიდან.

iptables -A INPUT -p tcp --dport ssh -j DROP

კავშირის მდგომარეობა

როგორც უკვე აღვნიშნეთ, ბევრი პროტოკოლი მოითხოვს ორმხრივ კომუნიკაციას. მაგალითად, თუ გსურთ დაუშვათ SSH კავშირები თქვენს სისტემაში, შეყვანის და გამომავალი სქემებს დასჭირდებათ მათზე დამატებული წესი. მაგრამ, რა მოხდება, თუ გსურთ, რომ თქვენს სისტემაში SSH შესვლა იყოს დაშვებული? გამომავალი ჯაჭვში წესის დამატება ასევე არ გამოიწვევს გამავალ SSH მცდელობებს?

აქ ჩნდება კავშირის მდგომარეობა, რაც საშუალებას გაძლევთ დაუშვათ ორმხრივი კომუნიკაცია, მაგრამ მხოლოდ ცალმხრივი კავშირების განხორციელების საშუალებას. შეხედეთ ამ მაგალითს, სადაც SSH კავშირები 10.10.10.10-დან დაშვებულია, მაგრამ SSH კავშირები 10.10.10.10-მდე არა. თუმცა, სისტემას უფლება აქვს გაგზავნოს ინფორმაცია SSH-ზე, სანამ სესია უკვე ჩამოყალიბებულია, რაც შესაძლებელს ხდის SSH კომუნიკაციას ორ ჰოსტს შორის.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m მდგომარეობა --მდგომარეობა NEW,SETABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m მდგომარეობა --state ESTABLISHED -j ACCEPT

ცვლილებების შენახვა

iptables-ის წესებში თქვენ მიერ შეტანილი ცვლილებები გაუქმდება შემდეგ ჯერზე iptables სერვისის გადატვირთვისას, თუ არ გასცემთ ბრძანებას ცვლილებების შესანახად. ეს ბრძანება შეიძლება განსხვავდებოდეს თქვენი განაწილების მიხედვით:

sudo /sbin/iptables-save

Red Hat/CentOS:

/sbin/service iptables შენახვა

/etc/init.d/iptables save

სხვა ბრძანებები

ამჟამად კონფიგურირებული iptables წესების სია:

-v ოფციის დამატება მოგცემთ პაკეტებისა და ბაიტების ინფორმაციას, ხოლო -n-ის დამატება შეიცავს ყველა ციფრულ მნიშვნელობას. სხვა სიტყვებით რომ ვთქვათ, ჰოსტების სახელები, პროტოკოლები და ქსელები ჩამოთვლილია რიცხვებად.

ყველა ამჟამად კონფიგურირებული წესის გასასუფთავებლად, შეგიძლიათ გაუშვათ flush ბრძანება.

თარგმანი შესანიშნავი ინგლისური რესურსიდან HowToGeek.

თუ ჯერ კიდევ გაქვთ შეკითხვები თემაზე „iptables-ის დაყენება Linux-ზე დუმებისთვის“, შეგიძლიათ დაწეროთ ისინი ჩვენს ვებ-გვერდზე განთავსებული კომენტარების ფორმაში.

თუ შეცდომას იპოვით, გთხოვთ, მონიშნეთ ტექსტის ნაწილი და დააწკაპუნეთ Ctrl+Enter.



გაქვთ შეკითხვები?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: