iptables წესების დაყენება. სერვისებზე წვდომის უზრუნველყოფა კარიბჭეზე. დაუშვით და დაბლოკეთ კონკრეტული კავშირები

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

შექმნის ისტორია

მანამდე Linux-ზე IPTables იყენებდნენ IPFW firewall-ს, ნასესხები BSD-დან. შემდეგ, Linux-ის ბირთვის 2.4 ვერსიით, მან დაიწყო Netfilter firewall-ის და IPTables უტილიტას მართვა მისი მართვისთვის. მისი მუშაობის მეთოდოლოგიაში ყველა ასპექტი იყო დაცული და ოდნავ გაფართოვდა ფუნქციურად.

IPTables-ის სტრუქტურა და დიზაინი

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

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

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

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

წინასწარ დაყენებული ჯაჭვები მოდის შემდეგ კატეგორიებში:

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

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

IPTables წესების ნახვა და მართვა

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

ბრძანების ფორმატი ასე გამოიყურება: iptables [-t დამუშავებული ცხრილის სახელი] ბრძანება სახელწოდებით [კრიტერიუმები] [შესრულებული მოქმედება].

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

IPTables წესების შექმნისა და ნახვის ბრძანებები

  • დანართი (-A).ბრძანების გამოყენებისას თქვენ მიუთითებთ ჯაჭვს და ცხრილს, რომელზედაც გსურთ საჭირო წესის დამატება. გუნდის ღირებულება არის ის, რომ ის ამას აკეთებს სიის ბოლოს.
  • წაშლა (-D).როგორც სახელი გვთავაზობს, ის შლის წესს. როგორც პარამეტრები, შეგიძლიათ მიუთითოთ როგორც სრული სახელი, ასევე მათთვის მინიჭებული ნომრები.
  • გადარქმევა-ჯაჭვი (-E).ცვლის ჯაჭვის სახელს. ბრძანება განსაზღვრავს ძველ სახელს, შემდეგ ახალ სახელს.
  • ფლეში (-F).გარკვეული ცხრილის აბსოლუტურად ყველა წესის გასუფთავება.
  • ჩასმა (-I).ეს ბრძანება ათავსებს საჭირო წესს ნომრით მითითებულ ადგილას.
  • სია (-L).იხილეთ Iptables წესები. თუ ცხრილი არ არის მითითებული, გამოყენებული იქნება ნაგულისხმევი ფილტრი.
  • პოლიტიკა (-P).გამოყენებულია ნაგულისხმევი პოლიტიკა მითითებული ჯაჭვისთვის.
  • ჩაანაცვლეთ (-R).ცვლის წესს მითითებულ რიცხვში საჭიროზე.
  • წაშლა-ჯაჭვი (-X).ეს ბრძანება შლის ყველა შექმნილ ჯაჭვს. დარჩება მხოლოდ წინასწარ დაინსტალირებული.
  • ნულოვანი (-Z).აღადგენს მითითებულ ჯაჭვში გადაცემული მონაცემების მრიცხველებს.

ცოტა რამ პაკეტის შერჩევის პარამეტრების შესახებ

ისინი შეიძლება დაიყოს სამ ტიპად:

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

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

  • პროტოკოლი (-p).მიუთითებს ოქმს.
  • წყარო(-ები).ეს პარამეტრი განსაზღვრავს წყაროს IP მისამართს, საიდანაც მოვიდა პაკეტი. მისი დაზუსტება შესაძლებელია რამდენიმე გზით. კონკრეტული ჰოსტი, მისამართი ან მთელი ქვექსელი.
  • დანიშნულება (-დ).პაკეტის დანიშნულების მისამართი. ისევე, როგორც წინა, ის შეიძლება აღწერილი იყოს რამდენიმე გზით.
  • ინტერფეისი (-i).განსაზღვრავს პაკეტის შემომავალ ინტერფეისს. ძირითადად გამოიყენება NAT-ისთვის ან მრავალი ინტერფეისის მქონე სისტემებზე.
  • გარე ინტერფეისი (-o).გამავალი ინტერფეისი.

რამდენიმე მაგალითი

იმისათვის, რომ ნახოთ IPTables nat წესები? თქვენ უნდა გამოიყენოთ ბრძანება - "iptables -L -t nat". შეიტყვეთ firewall-ის ზოგადი სტატუსი - "iptables -L -n -v". გარდა ამისა, ეს ბრძანება საშუალებას გაძლევთ ნახოთ IPTables წესები, რომლებიც ხელმისაწვდომია მთელ სისტემაში. ჩადეთ წესი ცხრილში გარკვეულ ადგილას, მაგალითად, პირველ და მეორე სტრიქონებს შორის - “iptables -I INPUT 2 -s 202.54.1.2 -j DROP”. შემდეგ ნახეთ, დამატებულია თუ არა - "iptables -L INPUT -n --line-numbers".

კონკრეტული მისამართის დასაბლოკად, მაგალითად, 12.12.12.12 - "iptables -A INPUT -s 12.12.12.12 -j DROP".

დახმარება iptables - "man iptables". თუ გჭირდებათ ინფორმაცია კონკრეტულ ბრძანებაზე, გამოიყენეთ "iptables -j DROP -h".

ბოლოს და ბოლოს

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

დაყენების პრინციპი

iptable-ების გამოყენების ზოგადი სინტაქსია:

iptables -ტ<таблица> <команда> <цепочка>[ნომერი]<условие> <действие>

<таблица>

netfilter წესები განაწილებულია 4 ცხრილზე, რომელთაგან თითოეულს აქვს საკუთარი მიზანი (დაწვრილებით ქვემოთ). იგი მითითებულია -t გადამრთველით, მაგრამ თუ ეს პარამეტრი არ არის მითითებული, მოქმედება შესრულდება ნაგულისხმევი ცხრილისთვის - ფილტრისთვის.

<команда>

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

<цепочка>

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

[ნომერი]

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

<условие>

პირობა აღწერს კონკრეტული წესის შემუშავების კრიტერიუმებს.

<действие>

ისე, რეალურად, რა ვუყოთ პაკეტს, თუ ის აკმაყოფილებს პირობის კრიტერიუმებს?

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

iptables გასაღებები და მათი გამოყენების მაგალითები

ცხრილებთან მუშაობა (iptables -t)

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

გუნდები

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

Გასაღები აღწერა და მაგალითები
-ა სიის ბოლოს წესის დამატება:
iptables -A INPUT -s 192.168.0.15 -j DROP
უარყოთ შემომავალი შეტყობინებები 192.168.0.15-დან.
-დ წესის წაშლა:
iptables -D INPUT 10
წაშალეთ წესი INPUT ჯაჭვში ნომრით 10.
-ᲛᲔ წესის ჩასმა სიის კონკრეტულ ნაწილში:
iptables -I INPUT 5 -s 192.168.0.15 -j DROP
ჩადეთ მე-5 წესი სიაში.
-რ წესის შეცვლა.
iptables -R OUTPUT 5 -s 192.168.0.15 -j ACCEPT
შეცვალეთ ჩვენი მე-5 წესი აკრძალვიდან დასაშვებამდე.
-ფ წესების გადატვირთვა ჯაჭვში.
iptables -F INPUT
-ზ სტატისტიკის გადატვირთვა.
iptables -Z INPUT
-ნ ჯაჭვის შექმნა.
iptables -N CHAINNEW
-X ჯაჭვის წაშლა.
iptables -X CHAINNEW
-პ განსაზღვრეთ ნაგულისხმევი წესი.
iptables -P INPUT DROP
-ე გადარქმევა ჯაჭვი.
iptables -E CHAINNEW CHAINOLD

პირობები

ეს კლავიშები განსაზღვრავს წესის პირობებს.

Გასაღები აღწერა და მაგალითები
-გვ ქსელის პროტოკოლი. მოქმედი ვარიანტებია TCP, UDP, ICMP ან ALL.
iptables -A INPUT -p tcp -j ACCEPT
დაუშვით ყველა შემომავალი tcp კავშირი.
-ს წყაროს მისამართი - ჰოსტის სახელი, IP მისამართი ან ქვექსელი CIDR ნოტაციით.
iptables -A INPUT -s 192.168.0.50 -j DROP
უარყოთ შემომავალი შეტყობინებები კვანძიდან 192.168.0.50
-დ Დანიშნულების მისამართი. გამოყენების პრინციპი მსგავსია წინა გასაღების -s.
iptables -A OUTPUT -d 192.168.0.50 -j DROP
უარყოთ გამავალი კვანძი 192.168.0.50
-მე ქსელის ადაპტერი, რომლის მეშვეობითაც პაკეტები ჩამოდის (INPUT).
iptables -A INPUT -i eth2 -j DROP
გამორთეთ შემომავალი ტრაფიკი Ethernet ინტერფეისისთვის eth2.
-ო ქსელის ადაპტერი, საიდანაც იგზავნება პაკეტები (OUTPUT).
iptables -A OUTPUT -o eth3 -j ACCEPT
გამავალი შეტყობინებების დაშვება eth3 Ethernet ინტერფეისიდან.
--დპორტი Დანიშნულების პორტი.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
შემომავალი ზარების დაშვება პორტ 80-ზე.
-- სპორტი წყაროს პორტი.
iptables -A INPUT -p tcp --sport 1023 -j DROP
აკრძალოს შემომავალი შეტყობინებები პორტიდან 1023.

ჩამოთვლილი გასაღებები ასევე მხარს უჭერს მშენებლობას ნიშნის გამოყენებით ! . ის აბრუნებს მდგომარეობას, მაგალითად,
iptables -A INPUT -s ! 192.168.0.50 -j DROP
უარს იტყვის კავშირზე ყველა ჰოსტთან, გარდა 192.168.0.50.

მოქმედებები

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

მაგიდა მოქმედება აღწერა
ფილტრი მიღება საშუალებას აძლევს პაკეტს.
ვარდნა უარყოფს პაკეტს.
ᲣᲐᲠᲘ ᲗᲥᲕᲐᲡ კრძალავს შეტყობინების გაგზავნას წყაროზე.
ნათ მასკარადი გამავალი პაკეტებისთვის, ცვლის წყაროს IP მისამართს ინტერფეისის მისამართით, საიდანაც ტოვებს პაკეტი.
SNAT MASQUERADE-ის მსგავსი, მაგრამ მიუთითებს კონკრეტულ ქსელურ ინტერფეისზე, რომლის მისამართიც გამოყენებული იქნება გაყალბებისთვის.
DNAT მისამართის ჩანაცვლება შემომავალი პაკეტებით.
გადამისამართება გადამისამართებს მოთხოვნას იმავე სისტემის სხვა პორტზე.
მანგლელი T.O.S. TOS ველის მოდიფიკაცია (ტრაფიკის პრიორიტეტიზაცია).
DSCP იცვლება DSCP (ასევე ტრაფიკის პრიორიტეტიზაცია).
TTL შეცვალეთ TTL (პაკეტის სიცოცხლის ხანგრძლივობა).
ჰ.ლ. TTL-ის მსგავსი, მაგრამ IPv6-ისთვის.
მარკ პაკეტის მარკირება. გამოიყენება შემდგომი ფილტრაციის ან ფორმირებისთვის.
CONNMARK კავშირის მარკირება.
TCPMSS MTU მნიშვნელობის შეცვლა.

ხშირად გამოყენებული iptables ბრძანებების მაგალითები

ზოგადი ბრძანებები

იხილეთ წესები მათი ნომრებით:

iptables -L --line-numbers

თითოეული ცხრილისთვის საჭიროა ცალკე გაეცნოთ წესებს:

iptables -t nat -L --line-numbers

წაშალეთ ყველა წესი:

დააყენეთ ნაგულისხმევი წესები:

iptables -P INPUT DROP

iptables -P OUTPUT DROP

* ამ მაგალითებში, ნაგულისხმევად, უარყოფის წესი (DROP) იმუშავებს ყველა შემომავალი (INPUT) და გამავალი (OUTPUT) პაკეტისთვის.

დაუშვით ყველა

მეთოდი 1: წესის დამატებით:

iptables -I INPUT 1 -j ACCEPT

iptables -I OUTPUT 1 -j ACCEPT

iptables -I FORWARD 1 -j ACCEPT

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

მეთოდი 2. წესების დასუფთავება:

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

მეთოდი 3. სერვისის გამორთვა (პრობლემების დიაგნოსტიკისთვის მოსახერხებელია ფაირვოლის დროებით გამორთვა):

სერვისის iptables გაჩერება

წესებით მუშაობა

სიის ბოლოს დაამატეთ წესი:

iptables -A INPUT -p tcp --dport 25 -j ACCEPT

iptables -A INPUT -p tcp -s ! 192.168.0.25 --dport 993 -i eth0 -j ACCEPT

დაამატეთ პორტის დიაპაზონი:

iptables -A INPUT -p tcp --dport 3000:4000 -j ACCEPT

* ამ შემთხვევაში 3000-დან 4000-მდე.

წესის ჩასმა:

iptables -I FORWARD 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ACCEPT

დაბლოკეთ კონკრეტული IP მისამართი 25-ე პორტზე დასაკავშირებლად:

iptables -I INPUT 1 -s 1.1.1.1 -p tcp --dport 25 -j DROP

Პორტის გადამისამართება

დაყენების ორი მეთოდი არსებობს.

1. პრეპროუტინგი + პოსტტროუტინგის წესები:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 --dport 22 -j DNAT --დანიშნულების ადგილამდე 192.168.1.15:2222

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 --sport 2222 -j SNAT --წყარომდე 19.8.232.80:22

* სად 19.8.232.80 — მისამართი, რომელზეც ვუსმენთ კავშირის მოთხოვნებს; 22 - პორტი გადამისამართებისთვის; 192.168.1.15 — შიდა IP მისამართი, რომელზეც ჩვენ გადავცემთ ყველა მოთხოვნას; 2222 - შიდა პორტი.

2. PREROUTING + FORWARD წესები:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT --დანიშნულების ადგილამდე 192.168.1.15:2222

iptables -A FORWARD -p tcp -d 192.168.1.15 --dport 22 -m მდგომარეობა --მდგომარეობა ახალი, დაარსებული, დაკავშირებული -j ACCEPT

საგანმანათლებლო პროგრამა

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

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

სხვა სიტყვებით რომ ვთქვათ, თუ ქსელის ინტერფეისზე შემოსული პაკეტი არ არის აღწერილი რაიმე წესით, მაშინ ის მუშავდება ნაგულისხმევი პოლიტიკით. აქედან გამომდინარეობს, რომ თქვენ შეგიძლიათ დააკონფიგურიროთ Iptables (და ნებისმიერი firewall) ორი გზით/პოლიტიკით:
1. ნებადართულია ყველაფერი, რაც არ არის აკრძალული. იმათ. ყველაფერი ნებადართულია.
2. ყველაფერი აკრძალულია გარდა იმისა, რაც პირდაპირ არის დაშვებული.
ცხადია, მეორე მიდგომა უფრო სწორია, რომელიც შემდგომში იქნება განხილული. მე ვთავაზობ, რომ პოლიტიკა OUTPUT-ისთვის დატოვოთ როგორც ACCEPT, წინააღმდეგ შემთხვევაში თქვენ მოგიწევთ გაუმკლავდეთ უამრავ ხარვეზს. როდესაც საკმარისად კარგად იცნობთ Iptables-ს, მიხვდებით რატომ და შეგიძლიათ მისი კონფიგურაცია DROP-ში.
და კიდევ ერთი მნიშვნელოვანი შენიშვნა. გასაგებია, რომ წესები გამოიყენება სკრიპტით და არ შედის კონსოლიდან სათითაოდ. ამ უკანასკნელ შემთხვევაში, ბრძანების iptable -P INPUT DROP-ის შემდეგ დაიკარგება დადგენილი SSH სესიის კავშირი. სკრიპტით წესების გამოყენებისას სესია არ ირღვევა, რადგან შემდეგი მოდის წესი, რომელიც საშუალებას გაძლევთ მიიღოთ უკვე შექმნილი კავშირები.

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

Iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P iptables -P iptables ტ mangle -P OUTPUT ACCEPT iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle -X

iptables წესების მინიმალური ნაკრები დესკტოპისთვის

ამოცანა: დაბლოკეთ ყველა შემომავალი კავშირი. გამავალი ზარები შეუზღუდავია.

# ნაგულისხმევი წესები iptable -P INPUT DROP iptable -P FORWARD DROP iptable -P OUTPUT ACCEPT # შემომავალი კავშირების დაშვება ლოკალური მასპინძლის iptables-დან -A INPUT -i lo -j ACCEPT # უკვე დამკვიდრებული შემომავალი კავშირების დაშვება iptables -A INPUT -m მდგომარეობა -- სახელმწიფო ESTABLISHED,RELATED -j ACCEPT

iptables წესების მინიმალური ნაკრები აპლიკაციით სერვერისთვის

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

# ნაგულისხმევი წესები iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # შემომავალი კავშირების დაშვება ლოკალური მასპინძლის iptables -A INPUT -i lo -j ACCEPT # უკვე დამკვიდრებული შემომავალი კავშირების დაშვება iptables -m მდგომარეობა --PUT მდგომარეობა ESTABLISHED,RELATED -j ACCEPT # დაშვება SSH iptables -A INPUT -p TCP --dport 22 -j ACCEPT # დაშვება HTTP პორტის iptables -A INPUT -p TCP --dport 80 -j ACCEPT

iptables წესების მინიმალური ნაკრები კარიბჭისთვის

ამოცანა: 1. გაავრცელეთ ინტერნეტი ლოკალურ ქსელში NAT-ის გამოყენებით. 2. ნება მიეცით მანქანებს ლოკალური ქსელიდან, ჰქონდეთ წვდომა გარე HTTP, HTTPS და DNS სერვერებზე 3. გადაიტანეთ პორტი ამ ლოკალურ ქსელში მდებარე ვებ სერვერზე.

### ცვლადები # ინტერფეისი, რომელიც ეძებს ინტერნეტს INET_IF="eth0" # თეთრი IP მისამართი, რომელიც ეკუთვნის $INET_IF INET_IP="x.x.x.x" # TCP პორტებს, რომლებითაც ლოკალური ქსელის მანქანებს აქვთ წვდომა ინტერნეტში FORWARD_TCP_PORTS="53,80,443 " # UDP პორტები, რომლებითაც ლოკალური ქსელის მანქანებს აქვთ წვდომა ინტერნეტში FORWARD_UDP_PORTS="53" # ლოკალური ქსელი LOCAL_NET="192.168.0.0/24" # ლოკალური ვებ სერვერის IP მისამართი WEB_SERVER="192.168.0.10" # გზა sysctl-ისკენ SYSCTL=" /sbin/sysctl -w" # ჩართეთ IPv4 პაკეტების გადაგზავნა ბირთვში if [ "$SYSCTL" = "" ] შემდეგ ექო "1" > /proc/sys/net/ipv4/ip_forward else $SYSCTL neto ACCEPT # ნებადართული კავშირების მიღება უკვე დაყენებული iptables -A INPUT -m მდგომარეობა --state ESTABLISHED,RELATED -j ACCEPT # Allow SSH iptables -A INPUT -p TCP --dport 22 -j ACCEPT ### FORWARD # დაშვება უკვე დამყარებული გადაგზავნილი კავშირების iptables -A FORWARD -m მდგომარეობა --state ESTABLISHED,RELATED -j ACCEPT # ლოკალური ქსელის აპარატებს ნება მიეცით ინტერნეტში წვდომა მითითებულ TCP პორტებზე iptables -A FORWARD -p TCP -s $LOCAL_NET -m მრავალპორტი --dport $FORWARD_TCP_PORTS -j ACCEPT iptables -A FORWARD -p TCP -d $LOCAL_NET -m მულტიპორტი --dport $FORWARD_TCP_PORTS -j ACCEPT # დაუშვით ლოკალური ქსელის აპარატებს ინტერნეტში წვდომა მითითებულ UDP პორტებზე iptables -A FORWARD -p UDP -s $LOCAL_NET -m მრავალპორტი --dport $FORWARD_UDP_PORTS -j ACCEPT iptables -A FORWARD -p UDP -d $LOCAL_NET -m მრავალპორტი --dport $FORWARD_UDP_PORTS -j ACCEPT ### NAT # ჩართეთ NAT ადგილობრივი ქვექსელისთვის iptables -t nat -A POSTROUTING s $LOCAL_NET -o $INET_IF -j SNAT - -წყარომდე $INET_IP # პორტის გადაგზავნა ადგილობრივ ვებ სერვერზე iptables -t nat -A PREROUTING -p TCP -d $INET_IP --dport 80 -j DNAT -- -დანიშნულების ადგილი $WEB_SERVER:80

უნდა აღინიშნოს, რომ თუ $FORWARD_TCP_PORTS სიის გარდა სხვა პორტი გადამისამართებულია, მაშინ ის იქ უნდა დაემატოს, რადგან ის ამოღებული იქნება ნაგულისხმევი პოლიტიკით.
შედეგად, iptables სკრიპტი კარიბჭისთვის ასე გამოიყურება. წინა წესებისგან განსხვავებული.

#!/bin/sh # iptables-ის ყველა წესის გასუფთავება -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTOUTPING ACCEPT iptables -t mangle -P PREROUTING ACCEPT iptables -t mangle -P OUTPUT ACCEPT iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle -X ### ცვლადები # ინტერფეისი ეძებს ინტერნეტს INET_IF="eth0" # თეთრი IP მისამართი, რომელიც ეკუთვნის $INET_IF INET_IP="x.x.x.x" # ლოკალური ქსელი LOCAL_NET="192.168.0.0/24" # ლოკალური ვებ სერვერის IP მისამართი WEB_SERVER="192.168.0.0" # ჩართეთ ბირთვის წინ IPv4 პაკეტებში # გზა sysctl SYSCTL="/sbin/sysctl -w" if [ "$SYSCTL" = "" ] მაშინ ექო "1" > /proc/sys/net/ipv4/ip_forward else $ SYSCTL net ipv4.ip_forward="1" fi ### ნაგულისხმევი წესები iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT ### INPUT # შემომავალი კავშირების დაშვება ლოკალური მასპინძლის iptables -i -A IN. j ACCEPT # დაშვება უკვე დამყარებული კავშირების მიღების უფლება iptables -A INPUT -m მდგომარეობა --state ESTABLISHED,RELATED -j ACCEPT # დაშვება SSH მხოლოდ ადგილობრივი ქსელის iptables -A INPUT -p TCP -s $LOCAL_NET --dport 22 -j ACCEPT # DNS სერვერის ქეშირების მოთხოვნების დაშვება მხოლოდ ადგილობრივი ქსელის iptables -A INPUT -p TCP -s $LOCAL_NET --dport 53 -j ACCEPT iptables -A INPUT -p UDP -s $LOCAL_NET --dport 53 -j ACCEPT ## # FORWARD # დაუშვით უკვე ჩამოყალიბებული გადამისამართების კავშირები iptables -A FORWARD -m მდგომარეობა --state ESTABLISHED,RELATED -j ACCEPT # TCP პორტები, რომლებზეც ლოკალური ქსელის მანქანებს აქვთ წვდომა ინტერნეტში FORWARD_TCP_PORTS="80,443" # მანქანების დაშვება ლოკალური ქსელი ინტერნეტში წვდომისთვის მითითებულ TCP პორტებზე iptables -A FORWARD -p TCP -s $LOCAL_NET -m მრავალპორტი --dport $FORWARD_TCP_PORTS -j ACCEPT iptables -A FORWARD -p TCP -d $LOCAL_NET -m მრავალპორტი --dport $FORWARD_TCP_PORTS -j ACCEPT ### NAT # ჩართეთ NAT ადგილობრივი ქვექსელისთვის iptables -t nat -A POSTROUTING -s $LOCAL_NET -o $INET_IF -j SNAT --წყარომდე $INET_IP # პორტის გადაგზავნა ადგილობრივ ვებ სერვერზე არასტანდარტული პორტისთვის iptables -t nat -A PREROUTING -p TCP - d $INET_IP --dport 80 -j DNAT --დანიშნულების ადგილამდე $WEB_SERVER:8090

მიმდინარე წესების გამომავალი

იხილეთ ფილტრის ცხრილის წესები, ე.ი. ბრძანება აჩვენებს iptables-ის ძირითად წესებს:

Iptables -L -n

კონკრეტული ცხრილისთვის, მაგალითად nat და mangle:

Iptables -t nat -L -n iptables -t mangle -L -n

შესავალი და ისტორია

Netfilter- firewall (aka firewall, aka firewall, aka firewall...) ჩაშენებულია Linux-ის ბირთვში 2.4 ვერსიიდან. Netfilter კონტროლდება კომუნალური პროგრამის მიერ iptables(IPv6 - ip6tables-ისთვის). მანამდე netfilter/iptablesიყო იპჩეინები, რომელიც შედიოდა Linux 2.2 ბირთვში. ipchain-მდე Linux-ში არსებობდა ე.წ ipfw (IPV4 firewall)პორტირებული BSD-დან. მართვის პროგრამა - ipfwadm. netfilter/iptables პროექტი დაარსდა 1998 წელს. ავტორია რასტი რასელი (ის ასევე ხელმძღვანელობდა წარსულში განვითარებულ მოვლენებს). 1999 წელს ჩამოყალიბდა Netfilter Core Team (შემოკლებით coreteam). განვითარებულ Firewall-ს ოფიციალურად ეწოდა netfilter. 2003 წლის აგვისტოში ჰარალდ ველტე გახდა გუნდის ხელმძღვანელი.

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

Netfilter/iptables არქიტექტურა

წინაპირობები ()

როგორც ზემოთ აღინიშნა, Netfilter-ის მუშაობისთვის გჭირდებათ ბირთვის ვერსია 2.6 (ან მინიმუმ 2.3.15). გარდა ამისა, საჭიროების შემთხვევაში, ხელმისაწვდომია შემდეგი პარამეტრები: CONFIG_NETFILTER, CONFIG_IP_NF_IPTABLES, CONFIG_IP_NF_FILTER (ფილტრის ცხრილი), CONFIG_IP_NF_NAT (nat table), CONFIG_BRIDGE_NETFILTER, ისევე როგორც მრავალი დამატებითი_CONFIGN_IPTRACK_მოდული: F_FTP (დამხმარე მოდული FTP თვალთვალისათვის კავშირები), CONFIG_IP _NF_MATCH_* (პაკეტების შესატყვისი შაბლონების დამატებითი ტიპები: LIMIT, MAC, MARK, MULTIPORT, TOS, TCPMSS, STATE, UCLEAN, OWNER), CONFIG_IP_NF_TARGET_* (დამატებითი მოქმედებები წესებში: REJERACT, REJERACT, REJERACT, ), CONFIG_IP_NF_COMPAT_IPCHAINS ipchains-თან თავსებადობისთვის, CONFIG_BRIDGE_NF_EBTABLES და CONFIG_BRIDGE_EBT_* ხიდის რეჟიმში მუშაობისთვის, სხვები CONFIG_IP_NF_* და CONFIG_IP6_NF_*. ასევე სასარგებლოა CONFIG_PACKET-ის მითითება.

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

მდგომარეობის გამოვლენის მექანიზმი (contrack)

ზემოთ ტექსტში რამდენჯერმე იყო ნახსენები ცნება „სახელმწიფოების განსაზღვრა“ ცალკე განსახილველ თემას იმსახურებს, მაგრამ, მიუხედავად ამისა, ამ საკითხს მოკლედ შევეხები მიმდინარე პოსტში. ზოგადად, მდგომარეობების განსაზღვრის მექანიზმი (aka state machine, aka კონნექცია სიმღერა ing, აკა კონტრაქტი) არის პაკეტის ფილტრის ნაწილი და გაძლევთ საშუალებას განსაზღვროთ რომელ კავშირს/სესიას ეკუთვნის ეს პაკეტი. კონტრაკიაანალიზებს ყველა პაკეტის მდგომარეობას, გარდა მონიშნულისა NOTRACK ნედლეულ ცხრილში. ამ მდგომარეობიდან გამომდინარე, განისაზღვრება პაკეტი, რომელსაც ეკუთვნის ახალიკავშირი (სახელმწიფო ახალი), უკვე შეიქმნაკავშირი (სახელმწიფო ᲨᲔᲘᲥᲛᲜᲐ), დამატებითიუკვე არსებულზე ( დაკავშირებული), ან " სხვას" (შეუცნობელი) კავშირი (მდგომარეობა არასწორი). პაკეტის მდგომარეობა განისაზღვრება გადაცემული TCP პაკეტის სათაურების ანალიზით. contrack მოდულისაშუალებას გაძლევთ განახორციელოთ სესიის დონის (მეხუთე) firewall. ამ მექანიზმის გასაკონტროლებლად გამოიყენეთ კომუნალური პროგრამა კონტრაქტი,ასევე iptables კომუნალური პარამეტრი: -მ კონტრაქტიან -მ სახელმწიფო(მოძველებული). conntrack ინახავს მიმდინარე კავშირების მდგომარეობას ბირთვში. მათი ნახვა შესაძლებელია ფაილში /proc/net/nf_conntrack (ან /proc/net/ip_conntrack) .

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

Netfilter ქსელის ფილტრაციის წესების მართვა (iptables ბრძანების გამოყენებით)

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

ზოგადად, ბრძანების ფორმატი შემდეგია:

Iptables [-t]

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

ქვემოთ მოცემულია iptables პროგრამის ბრძანებები და პარამეტრები:

Პარამეტრი აღწერა მაგალითი
გუნდები
--დანართი (-A) დაამატეთ მითითებული წესი სიის ბოლოს მითითებულ ჯაჭვში და მითითებულ ცხრილში. iptables -A FORWARD კრიტერიუმები -j ქმედება
-- წაშლა (-D) შლის რიცხვ(ებ)ით ან წეს(ებ)ით მითითებულ წეს(ებ)ს. პირველი მაგალითი წაშლის ყველა წესს 10,12 ნომრებით ყველა ჯაჭვში, ფილტრის ცხრილებში, მეორე მაგალითი წაშლის მითითებულ წესს მანგლის ცხრილიდან PREROUTING ჯაჭვში. iptables -D 10.12
iptables -t mangle -D PREROUTING კრიტერიუმები -j ქმედება
-- გადარქმევა-ჯაჭვი (-E) ჯაჭვის სახელის შეცვლა. iptables -E OLD_CHAIN ​​​​NEW_CHAIN
-- ფლეში (-F) ასუფთავებს მიმდინარე ცხრილის ყველა წესს. ყველა პაკეტისთვის, რომელიც დაკავშირებულია უკვე დამყარებულ კავშირებთან, გამოიყენეთ ტერმინალის მოქმედება ACCEPT - გამოტოვება iptables -F
-- ჩასმა (-I) ჩასვამს მითითებულ წესს ნომრით მითითებულ ადგილას. iptables -I FORWARD 5 კრიტერიუმი -j ქმედება
-- სია (შემოკლებით -L) არსებული წესების ნახვა (ცხრილის ცალსახად მითითების გარეშე - ნაჩვენებია ყველა ჯაჭვის ფილტრის ცხრილი). iptables -L
--პოლიტიკა (-P) ადგენს ნაგულისხმევ პოლიტიკას მოცემული ჯაჭვისთვის. iptables -t mangle -P PREROUTING DROP
-- ჩანაცვლება (-R) ცვლის ნომრით მითითებულ წესს კრიტერიუმებში მითითებული წესით. iptables -R POSROUTING 7 | კრიტერიუმები -j ქმედება
-- წაშლა-ჯაჭვი (-X) ამოიღეთ ყველა ხელით შექმნილი ჯაჭვი (შეინარჩუნეთ მხოლოდ სტანდარტული INPUT, OUTPUT, FORWARD, PREROUTING და POSTROUTING). iptables -X
--ნული (-Z) აღადგენს ჯაჭვში გადაცემული მონაცემების მრიცხველებს. iptables -Z INPUT
Პარამეტრები
-- რიცხვითი (-n) არ წყვეტს მისამართებს და პროტოკოლებს გამოსვლისას.
-- ხაზები-ნომრები გამომავალში მიუთითეთ წესების რიცხვები (შეიძლება გამოიყენოთ -L-თან ერთად). iptables -L --line-numbers
--დახმარება (-h) სად ვიქნებოდით მის გარეშე?
- t მაგიდა განსაზღვრავს ცხრილის სახელს, რომელზეც მოქმედება უნდა შესრულდეს. მაგალითი აღადგენს nat ცხრილს ყველა ჯაჭვში. iptables -t nat -F
--სიტყვიერი (-v) დეტალური დასკვნა. iptables -L -v

iptables ბრძანების ქსელური პაკეტების შერჩევის კრიტერიუმები (პარამეტრები).

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

შეიძლება გამოყენებულ იქნას ყველა კრიტერიუმით ნიშანი!კრიტერიუმის მნიშვნელობამდე. ეს ნიშნავს, რომ ეს წესი მოიცავს ყველა პაკეტს არ შეესაბამება ამ პარამეტრს. Მაგალითად: კრიტერიუმი --ოქმი ! tcpნიშნავს, რომ ყველა პაკეტი რომ არაარის თუ არა TCP პროტოკოლები ექვემდებარება წესს. თუმცა, iptables-ის უახლესი ვერსიები (კერძოდ, 1.4.3.2 და უფრო მაღალი) აღარ აქვს ამ სინტაქსის მხარდაჭერა და მოითხოვს --ოქმი ! tcp, ა ! -- პროტოკოლი tcp, რომელიც იძლევა შემდეგ შეცდომას:

ინტრაპოზიციური უარყოფის გამოყენება (`--ოპცია ! this`) მოძველებულია ექსტრაპოზიციის სასარგებლოდ (`! --ოპცია ეს`).

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

Პარამეტრი აღწერა მაგალითი
საერთო პარამეტრები
--ოქმი
(შემოკლებით -p)
განსაზღვრავს პროტოკოლს. ოფციები tcp, udp, icmp, ყველა ან ნებისმიერი სხვა პროტოკოლი, რომელიც განსაზღვრულია /etc/protocols-ში iptables -A INPUT -p tcp
--წყარო
(-s, --src)
პაკეტის წყაროს IP მისამართი. შეიძლება განისაზღვროს რამდენიმე გზით:
  • ერთი ჰოსტი: host.domain.tld, ან IP მისამართი: 10.10.10.3
  • მისამართების აუზი (ქვექსელი): 10.10.10.3/24 ან 10.10.10.3/255.255.255.0

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

iptables -A INPUT -s 10.10.10.3
-- დანიშნულება
(-დ)
პაკეტის დანიშნულების IP მისამართი. შეიძლება განისაზღვროს რამდენიმე გზით (იხ. --წყარო). iptables -A INPUT --დანიშნულების ადგილი 192.168.1.0/24
---ინტერფეისი
(-მე)
განსაზღვრავს ინტერფეისს, რომელზედაც ჩამოვიდა პაკეტი. სასარგებლოა NAT-ისთვის და მრავალი ქსელის ინტერფეისის მქონე მანქანებისთვის. გამოიყენება INPUT, FORWARD და PREROUTING ჯაჭვებში. შესაძლებელია "+" ნიშნის გამოყენება, მაშინ ეს ნიშნავს + სახელით დაწყებული ყველა ინტერფეისის გამოყენებას (მაგალითად, eth+ - ყველა eth ინტერფეისი). iptables -t nat -A PREROUTING --ინტერფეისში eth0
--გარეშე ინტერფეისი
(-o)
განსაზღვრავს ინტერფეისს, საიდანაც გადის პაკეტი. სასარგებლოა NAT-ისთვის და მრავალი ქსელის ინტერფეისის მქონე მანქანებისთვის. გამოიყენება OUTPUT, FORWARD და POSTROUTING ჯაჭვებში. შესაძლებელია "+" ნიშნის გამოყენება. iptables -t nat -A POSTROUTING --ინტერფეისში eth1
იმპლიციტური (არაგაზიარებული) პარამეტრები
-p პროტო -თ პროტოკოლის იმპლიციტურ პარამეტრებზე დახმარების ჩვენება. iptables -p icmp -h
--წყარო-პორტი
(--სპორტი)
წყაროს პორტი, შესაძლებელია მხოლოდ --protocol tcp ან --protocol udp პროტოკოლებისთვის iptables -A INPUT --პროტოკოლი tcp --source-პორტი 25
--დანიშნულების პორტი
(--dport)
დანიშნულების პორტი, შესაძლებელია მხოლოდ --protocol tcp, ან --protemocol udp პროტოკოლებისთვის iptables -A INPUT --პროტოკოლი udp --destination-port 67
აშკარა პარამეტრები
-m მდგომარეობა --სახელმწიფო (მოძველებული)
აკა
-m conntrack --ctstate

კავშირის სტატუსი. ხელმისაწვდომი ვარიანტები:

  • ახალი(ყველა პაკეტი ამყარებს ახალ კავშირს)
  • ᲨᲔᲘᲥᲛᲜᲐ(ყველა პაკეტი, რომელიც ეკუთვნის დამყარებულ კავშირს)
  • დაკავშირებული(პაკეტები, რომლებიც არ ეკუთვნის დამყარებულ კავშირს, მაგრამ დაკავშირებულია მასთან. მაგალითად, FTP აქტიურ რეჟიმში იყენებს სხვადასხვა კავშირებს მონაცემთა გადასაცემად. ეს კავშირები ასოცირდება.)
  • არასწორი(პაკეტები, რომელთა იდენტიფიცირება შეუძლებელია ამა თუ იმ მიზეზით. მაგალითად, ICMP შეცდომები, რომლებიც არ ეკუთვნის არსებულ კავშირებს)
  • და ა.შ. (დაწვრილებით დოკუმენტაციაში)
iptables -A INPUT -m მდგომარეობა --state NEW,ESTABLISHEDiptables -A INPUT -m conntrack --ctstate ახალი,დაარსებული
-m mac --mac-source განსაზღვრავს ქსელის კვანძის MAC მისამართს, რომელმაც გაგზავნა პაკეტი. MAC მისამართი უნდა იყოს მითითებული სახით XX:XX:XX:XX:XX:XX. -m mac --mac-source 00:00:00:00:00:0

მოქმედებები პაკეტებზე

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

პაკეტებზე მოქმედებები შეიძლება იყოს შემდეგი მნიშვნელობები:

  • მიღება- პაკეტი ტოვებს ამ ჯაჭვს და გადადის შემდეგზე (სიტყვასიტყვით - ACCEPT).
  • ვარდნა- გადააგდეთ პაკეტი, რომელიც აკმაყოფილებს პირობას, ხოლო პაკეტი არ გადაეცემა სხვა ცხრილებს/ჯაჭვებს.
  • ᲣᲐᲠᲘ ᲗᲥᲕᲐᲡ- გააუქმეთ პაკეტი გამგზავნისთვის ICMP შეტყობინების გაგზავნით, ხოლო პაკეტი არ გადაეცემა სხვა ცხრილებს/ჯაჭვებს.
  • ᲓᲐᲑᲠᲣᲜᲔᲑᲘᲡ- დააბრუნეთ პაკეტი წინა ჯაჭვში და გააგრძელეთ მისი გავლა შემდეგი წესიდან.
  • SNAT წყაროპაკეტში. გამოყენება შესაძლებელია მხოლოდ ჯაჭვებში POSTROUTING და OUTPUTნატის ცხრილებში.
  • DNAT- მიმართოს თარგმანის გამოყენება დანიშვნებიშეფუთვაში. შეიძლება გამოყენებულ იქნას ჯაჭვში პრეროუტინგინატის მაგიდაზე. (გამონაკლის შემთხვევებში - OUTPUT ჯაჭვში)
  • ჟურნალი- ჩაწერეთ პაკეტი (გაგზავნა დემონს) და დაამუშავეთ სხვა წესებით.
  • მასკარადი- ნაცვლად გამოიყენება SNATთუ არის კავშირი დინამიურ IP-სთან (დაშვებულია მიუთითოთ მხოლოდ ჯაჭვში პოსტტროუტინგი nat მაგიდები).
  • მარკ- გამოიყენება პაკეტებზე ეტიკეტების დასაყენებლად და გადაცემის შემდგომ წესებზე.
  • და ა.შ.

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

ქვემოთ მოცემულ ცხრილში მოცემულია დამატებითი პარამეტრების მაგალითები და აღწერილობები:

Პარამეტრი აღწერა მაგალითი
DNAT (დანიშნულების ქსელის მისამართის თარგმანი)
--დანიშნულების ადგილამდე განსაზღვრავს რომელი IP მისამართი უნდა შეიცვალოს დანიშნულების მისამართად. მაგალითში, ყველა tcp პროტოკოლის პაკეტში, რომელიც მიდის 1.2.3.4 მისამართზე, ეს მისამართი შეიცვლება 4.3.2.1-ით. iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -j DNAT --დანიშნულების ადგილამდე 4.3.2.1
ჟურნალი
--ლოგის დონე გამოიყენება შესვლის დონის დასაყენებლად (). მაგალითში, შესვლის მაქსიმალური დონე დაყენებულია ყველა tcp პაკეტისთვის FORWARD ჯაჭვის ფილტრის ცხრილში. iptables -A FORWARD -p tcp -j LOG --ლოგის დონის გამართვა
--ლოგი-პრეფიქსი განსაზღვრავს ტექსტს (პრეფიქსს), რომელიც წინ უძღვის ყველა შეტყობინებას iptables. (ძალიან მოსახერხებელია მოგვიანებით) პრეფიქსი შეიძლება შეიცავდეს 29 სიმბოლოს, ინტერვალის ჩათვლით. მაგალითში, INPUT ჯაჭვის ფილტრის ცხრილის ყველა tcp პაკეტი INRUT-ფილტრის პრეფიქსით იგზავნება syslog-ში. iptables -A INPUT -p tcp -j LOG --log-პრეფიქსი "INRUT-ფილტრი"
--log-ip-ოფციები საშუალებას გაძლევთ შეიყვანოთ სხვადასხვა ინფორმაცია IP პაკეტის სათაურიდან. iptables -A FORWARD -p tcp -j LOG --log-ip-options
და ა.შ..

ეს ასკვნის თეორიას netfilter/iptables ქსელის ფილტრის შესახებ. მომდევნო სტატიაში ამ თეორიის დაუფლების პრაქტიკულ მაგალითებს მოვიყვან.

Შემაჯამებელი

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

ლიტერატურა

საკმაოდ ბევრი საინტერესო ინფორმაცია რუსულ ენაზეა აქ:

  • http://www.opennet.ru/docs/RUS/iptables/
  • http://ru.wikibooks.org/wiki/Iptables

უფრო სიღრმისეული მასალა ხელმისაწვდომია ბურჟუაზიულ ენაზე აქ:

  • http://www.frozentux.net/documents/ipsysctl-tutorial/
  • http://www.netfilter.org/documentation/index.html

პატივისცემით, მაკსიმ!

Linux-ს აქვს ჩაშენებული firewall სახელად Netfilter. პროექტის ოფიციალური ვებგვერდის მიხედვით:

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

Linux-ში firewall-ს მართავს iptables პროგრამა, რომელსაც აქვს IPv4 ფილტრაციის ფუნქციები, ip6tables ფილტრები IPv6. ეს სახელმძღვანელო გეტყვით, თუ როგორ უნდა ისწავლოთ Netfilter-ის (iptables) გამოყენება CentOS / RHEL / Fedora / Redhat Enterprise Linux-ზე. ამ სტატიაში მოცემულია Linux-ზე iptables-ის კონფიგურაციის ძირითადი მაგალითები შეჭრისგან დაცვის მიზნით.

Iptables გამოყენების მაგალითები

  • ამ სტატიაში ჩამოთვლილი ქმედებების უმეტესობა დაწერილია იმ ვარაუდით, რომ ისინი შესრულდება როგორც root მომხმარებელი bash-დან ან ნებისმიერი სხვა თანამედროვე ჭურვიდან. არ შეიყვანოთ ბრძანებები დისტანციურ სისტემაში, რადგან შეიძლება გამორთოთ წვდომა.
  • დემო მიზნებისთვის გამოვიყენე ubuntu 10.04, მაგრამ ბრძანებები უნდა მუშაობდეს ნებისმიერ თანამედროვე დისტრიბუციაზე.
ნაჩვენებია თქვენი firewall-ის სტატუსი
შეიყვანეთ შემდეგი ბრძანება, როგორც root:
# iptables -L -n -v
პასუხის ნიმუში:
ჯაჭვის INPUT (პოლიტიკა ACCEPT 0 პაკეტი, 0 ბაიტი) pkts ბაიტი სამიზნე უარის თქმის წყაროს დანიშნულება Chain FORWARD (პოლიტიკა ACCEPT 0 პაკეტი, 0 ბაიტი) pkts ბაიტი სამიზნე პროტ უარი წყაროს დანიშნულება Chain OUTPUT (პოლიტიკა ACCEPT 0 პაკეტები, 0 ბაიტი ) pkts ბაიტი სამიზნე prot უარის თქმა წყაროს დანიშნულებაზე
ეს პასუხი ნიშნავს, რომ firewall არ არის აქტიური.
და, მაგალითად, ეს აჩვენებს, რომ ლინუქსის ბუხარი აქტიურია:

ჯაჭვის შეყვანა (პოლიტიკის ACCEPT 1810K პაკეტები, 126M ბაიტი) pkts ბაიტი მიზანმიმართული უარის თქმა წყაროს დანიშნულება 7418K 1070M ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp 594p dpt81: eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 დროშები: 0x17/0x02 მდგომარეობა NEW Chain FORWARD (პოლიტიკის ACCEPT 5628K პაკეტები, 482M ბაიტი) pkts ბაიტი სამიზნე prot PT0-დან გამოსვლის დანიშნულების ადგილი - eth0 tun0 0.0 .0.0/0 0.0.0.0/0 tcp dpt:1111 მდგომარეობა ახალი, დაკავშირებული, დაარსებულია 599K 539M ACCEPT udp -- eth0 * 0.0.0.0/0 10.1.1.dpt:111D OUTPUT (პოლიტიკის ACCEPT 4959K პაკეტები, 880M ბაიტი) pkts ბაიტი სამიზნე პროტ უარის თქმა წყაროს დანიშნულებაზე
მაგალითში გასაღებები ნიშნავს:

  • : ჩამოთვალეთ წესები.
  • : აჩვენებს დეტალურ ინფორმაციას. ეს ღილაკი გამოსცემს ინტერფეისის სახელს, წესის პარამეტრებს და TOS ნიღბებს. პაკეტების და ბაიტების მრიცხველები ასევე ნაჩვენები იქნება სიაში, "K" სუფიქსით, "M" ან "G" საჭირო მამრავლის მიხედვით.
  • : არ გადაჭრათ IP მისამართები, აჩვენეთ ციფრული ფორმით. აჩქარებს გაყვანას.
ხაზების ნომრებით წესების სანახავად, დაამატეთ --line-numbers გადამრთველი, მაგალითად:
# iptables -n -L -v --ხაზი-ნომრები
INPUT ან OUTPUT წესების სანახავად აკრიფეთ:
# iptables -L INPUT -n -v # iptables -L OUTPUT -n -v --ხაზი-ნომრები
შეაჩერე, გადატვირთე, გაუშვით firewall
თუ გაქვთ CentOS / RHEL / Fedora Linux, შეიყვანეთ:
# სერვისის iptables გაჩერება # სერვისის iptables დაწყება # სერვისის iptables გადატვირთვა
iptables წესების გასასუფთავებლად საკუთარი საშუალებების გამოყენებით, შეიყვანეთ:
# iptables -F # iptables -X # iptables -t nat -F # iptables -t nat -X # iptables -t mangle -F # iptables -t mangle -X # iptables -P INPUT ACCEPT # iptables -P OUTPUT ACCEPT # iptables -P წინ მიიღე
მაგალითში გასაღებები ნიშნავს:
  • : ყველა წესის წაშლა (გამორეცხვა).
  • X: ჯაჭვის წაშლა
  • <таблица>: აირჩიეთ ცხრილი და წაშალეთ წესები.
  • : დააყენეთ ნაგულისხმევი პოლიტიკა (როგორიცაა DROP, REJECT ან ACCEPT).
Firewall-ის წესების წაშლა
ხაზის ნომრის საჩვენებლად არსებული წესების შესახებ სხვა ინფორმაციასთან ერთად, შეიყვანეთ:
# iptables -L OUTPUT -n --line-numbers # iptables -L OUTPUT -n --სტრიქონების რიცხვები | ნაკლები # iptables -L OUTPUT -n --line-numbers | grep 8.8.8.8
თქვენ მიიღებთ IP-ების სიას. შეხედეთ ნომერს მარცხნივ და შეიყვანეთ ნომერი მის წასაშლელად. მაგალითად, მე-4 სტრიქონის წაშლით, შეიყვანეთ:
# iptables -D INPUT 4
ან იპოვნეთ წყარო IP 202.54.1.1 და ამოიღეთ იგი წესიდან:
# iptables -D INPUT -s 202.54.1.1 -j DROP
მაგალითში გასაღები ნიშნავს:
  • : ამოიღეთ ერთი ან მეტი წესი მითითებული ჯაჭვიდან
Firewall-ის წესების დამატება
მითითებულ ჯაჭვში ერთი ან მეტი წესის ჩასართავად, ჩვეულებრივ გამოიყენება შემდეგი სინტაქსი. ჯერ გაარკვიეთ ხაზის ნომერი:
# iptables -L INPUT -n --ხაზი-ნომრები
გამომავალი მაგალითად:
ჯაჭვის შეყვანა (პოლიტიკის DROP) num target prot opt ​​source დანიშნულება 1 DROP ყველა -- 202.54.1.1 0.0.0.0/0 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 მდგომარეობა ახალი, დაარსებული
1-დან 2-მდე წესის ჩასასმელად, შეიყვანეთ:
# iptables -I INPUT 2 -s 8.8.8.8 -j DROP
განახლებული წესების სანახავად შეიყვანეთ:
# iptables -L INPUT -n --ხაზი-ნომრები
გამომავალი მაგალითად:
ჯაჭვის INPUT (პოლიტიკის DROP) num target prot opt ​​source დანიშნულება 1 DROP ყველა -- 202.54.1.1 0.0.0.0/0 2 DROP all -- 8.8.8.8 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0 0.0/0 მდგომარეობა ახალი, დაარსებული
Firewall-ის წესების შენახვა
Firewall-ის წესების შესანახად CentOS/RHEL/Fedora Linux-ზე, შეიყვანეთ:
# სერვისის iptables შენახვა
სხვა დისტრიბუციებზე
iptables-save > /root/my.active.firewall.rules
ან
iptables-შენახვა
Firewall-ის წესების აღდგენა
Firewall-ის წესების აღსადგენად /root/my.active.firewall.rules ფაილიდან, შეიყვანეთ:
# iptables-აღდგენა< /root/my.active.firewall.rules
Firewall-ის წესების აღსადგენად CentOS/RHEL/Fedora Linux-ზე, შეიყვანეთ:
# სერვისის iptables გადატვირთვა
Firewall-ის ნაგულისხმევი პოლიტიკის დაყენება
ყველა ტრაფიკის დაბლოკვა:
# iptables -P INPUT DROP # iptables -P OUTPUT DROP # iptables -P FORWARD DROP # iptables -L -v -n
მხოლოდ შემომავალი ტრაფიკის დაბლოკვა:
# iptables -P INPUT DROP # iptables -P FORWARD DROP # iptables -P OUTPUT ACCEPT
LAN ქსელის მისამართების დაბლოკვა გარე ინტერფეისზე
IP გაყალბება არის თავდასხმა, რომელიც გულისხმობს ჰოსტის IP მისამართის გამოყენებას, რომელსაც მსხვერპლი ენდობა, როგორც დაბრუნების მისამართი დაზარალებულისთვის გაგზავნილ IP პაკეტებში. პაკეტები, რომლებსაც არ აქვთ მარშრუტირებადი წყაროს მისამართები, უნდა იქნას უარყოფილი შემდეგი სინტაქსის გამოყენებით:
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
IPv4 მისამართის დიაპაზონი კერძო ქსელებისთვის (დარწმუნდით, რომ ისინი დაბლოკილია გარე ინტერფეისზე)
  • 10.0.0.0/8 -j (A)
  • 172.16.0.0/12 (B)
  • 192.168.0.0/16 ©
  • 224.0.0.0/4 (MULTICAST D)
  • 240.0.0.0/5 (E)
  • 127.0.0.0/8 (LOOPback)
IP მისამართების დაბლოკვა
IP მისამართის 1.2.3.4 დასაბლოკად, შეიყვანეთ:
# iptables -A INPUT -s 1.2.3.4 -j DROP
პორტზე შემომავალი მოთხოვნების დაბლოკვა
80 პორტზე ყველა მოთხოვნის დასაბლოკად, შეიყვანეთ:
# iptables -A INPUT -p tcp --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
80 პორტის დასაბლოკად მხოლოდ IP მისამართისთვის 1.2.3.4, შეიყვანეთ:
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
გამავალი IP მისამართის დაბლოკვა
კონკრეტული ჰოსტიდან ან დომენიდან გამავალი ტრაფიკის დასაბლოკად, როგორიცაა ვებსაიტი, ჩაწერეთ:
მასპინძელი -t საიტი
პასუხი იქნება:
ვებსაიტს აქვს მისამართი 95.211.41.31
ჩაწერეთ თქვენი IP მისამართი და შეიყვანეთ შემდეგი ბრძანება, რათა დაბლოკოთ ყველა გამავალი ტრაფიკი 95.211.41.31-დან:
# iptables -A OUTPUT -d 95.211.41.31 -j DROP
შეგიძლიათ გამოიყენოთ ნიღბები:
# iptables -A OUTPUT -d 192.168.1.0/24 -j DROP # iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP
თქვენ ასევე შეგიძლიათ გამოიყენოთ დომენის სახელი, შეიყვანეთ:
# iptables -A OUTPUT -p tcp -d www..ru -j DROP
მიუხედავად იმისა, რომ დოკუმენტაციაში ნათქვამია, რომ IP-ის ნაცვლად დომენის სახელის გამოყენება არ არის რეკომენდებული.
პაკეტების შესვლა და დაბლოკვა
შეიყვანეთ შემდეგი ბრძანება IP გაყალბების შესვლისა და დაბლოკვის მიზნით საჯარო ინტერფეისზე სახელად eth1:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-პრეფიქსი "IP_SPOOF A: " # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
ნაგულისხმევად ყველაფერი რეგისტრირებულია ფაილში /var/log/messages.

კომენტარი:

უმჯობესია არ გააკეთოთ ეს, განსაკუთრებით აშკარად მემარცხენე მოძრაობისთვის. LOG-ის ჩასმა შესაძლებელია მხოლოდ -m ლიმიტით, წინააღმდეგ შემთხვევაში ნებისმიერი DoS შეტევა ბევრჯერ ეფექტური იქნება: ფაქტობრივად, ირიბად, თავდამსხმელი იღებს პირდაპირი ზემოქმედების გზას უშუალოდ სერვერის ფაილურ სისტემაზე.
როგორ გავაკეთოთ ეს უფრო სწორად, ქვემოთ წერია
პაკეტების აღრიცხვა და დაბლოკვა ჟურნალის ჩანაწერების შეზღუდული რაოდენობით
-m ოფციას შეუძლია შეზღუდოს ჟურნალში ჩანაწერების რაოდენობა, რომლებიც შექმნილია დროის ერთეულზე. ეს გამოიყენება ჟურნალის ფაილის დატბორვის თავიდან ასაცილებლად. 5 წუთში მაქსიმუმ 7 ჩანაწერის ჩასაწერად შეიყვანეთ:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m ლიმიტი --ლიმიტი 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: " # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
დაბლოკეთ ან დაუშვით ტრაფიკი Mac მისამართიდან
გამოიყენეთ შემდეგი სინტაქსი:
# iptables -A INPUT -m mac --mac-source 00:19:99:3C:AB:23 -j DROP ## *მიიღება ტრაფიკი მხოლოდ TCP პორტისთვის #8080 mac 00:19:99:3C:AB: 22 * ## # iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:19:99:3C:AB:22 -j ACCEPT
აკრძალეთ ან დაუშვით ICMP მოთხოვნები პინგისთვის
შეიყვანეთ შემდეგი ბრძანება ICMP მოთხოვნების დასაბლოკად:
# iptables -A INPUT -p icmp --icmp ტიპის echo-მოთხოვნა -j DROP # iptables -A INPUT -i eth1 -p icmp --icmp ტიპის echo-მოთხოვნა -j DROP
Ping პასუხი ასევე შეიძლება შემოიფარგლოს გარკვეული ქსელებით ან ჰოსტებით:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp ტიპის echo-მოთხოვნა -j ACCEPT
შემდეგი მაგალითი იღებს მხოლოდ შეზღუდული ტიპის ICMP მოთხოვნებს:
### ** ვივარაუდეთ, რომ ნაგულისხმევი INPUT პოლიტიკა დაყენებულია DROP ** ############# iptables -A INPUT -p icmp --icmp ტიპის ექო-პასუხი -j ACCEPT iptables -A INPUT -p icmp --icmp-ტიპის დანიშნულება-მიუწვდომელი -j ACCEPT iptables -A INPUT -p icmp --icmp-ტიპის დრო-გადაჭარბებულია -j ACCEPT ## ** ყველა ჩვენი სერვერი პასუხობს პინგებს ** ## iptables -A INPUT -p icmp --icmp ტიპის echo-მოთხოვნა -j ACCEPT
IP მისამართების დიაპაზონის გახსნა
გამოიყენეთ შემდეგი სინტაქსი IP მისამართების დიაპაზონის გასახსნელად:
## მიიღება მხოლოდ tcp პორტთან 80 (Apache) კავშირი, თუ IP არის 192.168.1.100-დან 192.168.1.200 ## iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 191.1000. 192.168.1.200 -j ACCEPT
## nat მაგალითი ## iptables -t nat -A POSTROUTING -j SNAT --წყარომდე 192.168.1.20-192.168.1.25
საზოგადოებრივი პორტების დახურვა ან გახსნა
ქვემოთ მოცემულია სინტაქსი საერთო TCP და UDP პორტების გასახსნელად და დახურვისთვის:
ჩაანაცვლეთ ACCEPT DROP-ით პორტის დასაბლოკად: ## ღია პორტი ssh tcp პორტი 22 ## iptables -A INPUT -m მდგომარეობა --state NEW -m tcp -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168. 1.0/24 -m მდგომარეობა --state NEW -p tcp --dport 22 -j ACCEPT ## ღია ჭიქები (ბეჭდვის სერვისი) udp/tcp პორტი 631 LAN მომხმარებლებისთვის ## iptables -A INPUT -s 192.168.1.0/24 - p udp -m udp --dport 631 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT ## დაუშვას დროის სინქრონიზაცია NTP-ით lan მომხმარებლებისთვის (გახსენით udp პორტი 123) ## iptables -A INPUT -s 192.168.1.0/24 -m მდგომარეობა --state NEW -p udp --dport 123 -j ACCEPT ## გახსენით tcp პორტი 25 (smtp) ყველა ## iptable-სთვის -A INPUT - m მდგომარეობა --state NEW -p tcp --dport 25 -j ACCEPT # ღია dns სერვერის პორტები ყველა ## iptables -A INPUT -m მდგომარეობა --state NEW -p udp --dport 53 -j ACCEPT iptables -A INPUT -m მდგომარეობა --state NEW -p tcp --dport 53 -j ACCEPT ## გახსნა http/https (Apache) სერვერის პორტი ყველა ## iptable-ზე -A INPUT -m მდგომარეობა --state NEW -p tcp --dport 80 -j ACCEPT iptables -A INPUT -m მდგომარეობა --state NEW -p tcp --dport 443 -j ACCEPT ## გახსნა tcp პორტი 110 (pop3) ყველა ## iptables -A INPUT -m მდგომარეობა --state NEW -p tcp --dport 110 -j ACCEPT ## გახსნა tcp პორტი 143 (imap) ყველა ## iptable-ისთვის -A INPUT -m მდგომარეობა --state NEW -p tcp --dport 143 -j ACCEPT ## ღია წვდომა Samba ფაილის სერვერზე მხოლოდ lan მომხმარებლებისთვის ## iptables -A INPUT -s 192.168.1.0/24 -m მდგომარეობა --state NEW -p tcp --dport 137 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m მდგომარეობა -- მდგომარეობა NEW -p tcp --dport 138 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m მდგომარეობა --state NEW -p tcp --dport 139 -j ACCEPT iptables -A INPUT -s 192.168.1.0/ 24 -m მდგომარეობა --state NEW -p tcp --dport 445 -j ACCEPT ## ღია წვდომა პროქსი სერვერზე მხოლოდ lan მომხმარებლებისთვის ## iptables -A INPUT -s 192.168.1.0/24 -m მდგომარეობა --state NEW - p tcp --dport 3128 -j ACCEPT ## ღია წვდომა mysql სერვერზე მხოლოდ lan მომხმარებლებისთვის ## iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
შეზღუდეთ სერვერთან ერთდროული კავშირების რაოდენობა თითოეული კლიენტისთვის IP-ით
ასეთი ლიმიტების დასაყენებლად შეგიძლიათ გამოიყენოთ connlimit მოდული. თითო ჰოსტზე არაუმეტეს 3 SSH კავშირის შესაზღუდად, შეიყვანეთ:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-ზევით 3 -j REJECT
დააყენეთ HTTP მოთხოვნები 20-ზე:
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-ზევით 20 --connlimit-mask 24 -j DROP
მაგალითში მოცემული პარამეტრებია
  • --connlimit-3-ზე მეტი: არის თუ არა არსებული კავშირების რაოდენობა 3-ზე მეტი.
  • --connlimit-mask 24: ჯგუფი მასპინძლებს მიერ


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

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

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