Hosts.deny - Linux Command - Unix Command

NAME

host_access - მასპინძელი დაშვების კონტროლის ფაილების ფორმატი

DESCRIPTION

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

წვდომის კონტროლის ენის გაფართოებული ვერსია აღწერილია მასპინძლების_პუბლიკაციებში (5) დოკუმენტში. გაფართოებები ჩართულია პროგრამების მშენებლობის დროს -DROCESS_OPTIONS- ით მშენებლობით.

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

ACCESS საკონტროლო ფაილები

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

*

დაშვება მოხდება, როდესაც (daemon, კლიენტი) წყვილი შედის შესვლისას /etc/hosts.allow ფაილი.

*

წინააღმდეგ შემთხვევაში, დაშვება უარყოფილი იქნება, როდესაც ( daemon , კლიენტი) წყვილი შედის შესვლისას /etc/hosts.deny ფაილი.

*

წინააღმდეგ შემთხვევაში, ხელმისაწვდომობა გაიცემა.

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

ACCESS კონტროლის წესები

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

*

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

*

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

*

ყველა სხვა ხაზი უნდა აკმაყოფილებდეს შემდეგ ფორმატს, რამე შორის [] ყოფნა სურვილისამებრ:


daemon_list: client_list [: shell_command]

daemon_list არის ერთი ან მეტი დემონიანი პროცესის სახელები (argv [0] ღირებულებები) ან ველური კარტების ჩამონათვალი (იხ. ქვემოთ).

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

უფრო რთული ფორმები daemon @ host და user @ host განმარტებულია სექციები სერვერის საბოლოო ნიმუშების და კლიენტის მომხმარებლის სახელი lookups, შესაბამისად.

სია ელემენტები უნდა გამოყოფილი იყოს ბლანკებითა და / ან მძიმით.

გარდა NIS (YP) netgroup lookups, ყველა წვდომის კონტროლის ამოწმებს შემთხვევაში insensitive.

PATTERNS

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

*

სიმებიანი, რომელიც იწყება `. ხასიათი. მასპინძელი სახელი შეესატყვისება, თუ მისი ბოლო კომპონენტები შეესაბამება მითითებულ ნიმუშს. მაგალითად, ნიმუში `.tue.nl 'ემთხვევა მასპინძელი სახელწოდების` wzv.win.tue.nl'.

*

სტრიქონი, რომელიც მთავრდება `. ხასიათი. მასპინძელი მისამართი შეესატყვისება, თუ მისი პირველი რიცხვითი ველი ემთხვევა მოცემულ სიას. მაგალითად, ნიმუში `131.155. შეესაბამება Eindhoven University ქსელის (131.155.xx) ყველა მასპინძელს (თითქმის).

*

სტრიქონი, რომელიც იწყება `@ 'სიმბოლოს, განიხილება როგორც NIS (ყოფილი YP) netgroup სახელი. მასპინძელი სახელი შეესატყვისება, თუ ის არის მითითებული ქსელის მასპინძელი წევრი. Netgroup მატჩები არ არის მხარდაჭერილი Daemon პროცესის სახელები ან კლიენტის მომხმარებლის სახელები.

*

ფორმის `nnnn / mmmm 'გამოხატვა განიხილება როგორც` net / mask' წყვილი. IPv4 მასპინძელი მისამართი შეესაბამება თუ `net 'უდრის bitwise და მისამართი და` ნიღაბი'. მაგალითად, ქსელის / ნიღაბი ნიმუში `131.155.72.0/255.255.254.0 'შეესაბამება ყველა მისამართს დიაპაზონში` 131.155.72.0' `131.155.73.255 '.

*

ფორმის `[n: n: n: n: n: n: n: n: n] / მ 'გამოხატულია` `net \ / prefixlen". IPv6 მასპინძელი მისამართი შეესატყვისება, თუ `პრეფიქსიანი 'ბიტი` net' უდრის მისამართზე `პრეფიქსიანი 'ბიტს. მაგალითად, [netff] / prefixlen ნიმუში `3ffe: 505: 2: 1 ::] / 64 'ემთხვევა ყველა მისამართს` 3ffe: 505: 2: 1 ::' 3ffe: 505: 2: 1: ffff: ffff: ffff: ffff '.

*

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

*

Wildcards `* 'და'? ' შეიძლება გამოყენებულ იქნას ჰოსტის ან IP მისამართების შესატყვისი. ამ მეთოდის გამოყენება არ შეიძლება გამოყენებულ იქნას `net / mask 'თანხვედრასთან ერთად, მასპინძელი დამთხვევის დაწყებისას`. ან IP მისამართი დამთავრებული დამთავრებული `.

WILDCARDS

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

ყველა

უნივერსალური wildcard, ყოველთვის შეესაბამება.

ადგილობრივი

შეესაბამება ნებისმიერ მასპინძელს, რომლის სახელიც არ შეიცავს dot ხასიათს.

უცნობი

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

შეიტყვეთ

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

PARANOID

შეესაბამება მასპინძლებს, რომელთა სახელი არ ემთხვევა მის მისამართს. როდესაც tcpd აშენდა -DPARANOID (default mode), ეს წვეთები ითხოვს ასეთ კლიენტებს, სანამ ეძებს წვდომის კონტროლის ცხრილებს. აშენების გარეშე - DARANOID, როდესაც გსურთ უფრო მეტი კონტროლი ასეთი მოთხოვნების შესაბამისად.

ოპერატორები

EXCEPT

განზრახული გამოყენების ფორმაა: `list_1 EXCEPT list_2 '; ეს ნამუშევარი შეესაბამება ყველაფერს, რაც შეესაბამება list_1 თუ იგი არ შეესაბამება სიაში . EXCEPT ოპერატორი შეიძლება გამოყენებულ იქნას daemon_lists- ში და კლიენტებში. EXCEPT ოპერატორს შეუძლია შეუკვეთოს: თუ საკონტროლო ენა აკრძალულია ფრჩხილების გამოყენებაზე, "EXCEPT EXCEPT c" დადებს, როგორც "EXCEPT (B EXCEPT გ)").

SHELL ბრძანებები

თუ პირველი შეტანილი წვდომის კონტროლის წესი შეიცავს shell ბრძანებას, ეს ბრძანება ექვემდებარება ჩანაცვლებას (იხ. მომდევნო სექციაში). შედეგი შესრულებულია / ბინი / შ ბავშვის პროცესში სტანდარტული შეყვანის, გამომავალი და შეცდომით / dev / null . დაასახელეთ `& ​​'ბრძანების ბოლოს, თუ არ გინდათ რომ დაველოდოთ.

Shell ბრძანებები არ უნდა დაეყრდნოს inetd- ის PATH პარამეტრი. ამის ნაცვლად, მათ უნდა გამოიყენონ აბსოლუტური ბილიკის სახელები, ან ისინი უნდა დაიწყონ ცალსახად PATH = ნებისმიერი განცხადება.

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

EXPANSIONS

შემდეგი გაფართოებები ხელმისაწვდომია შელის ბრძანებებში:

%აა)

კლიენტი (სერვერი) მასპინძელი მისამართი.

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

% d

Daemon პროცესის სახელი (argv [0] მნიშვნელობა).

% h (% H)

კლიენტი (სერვერი) მასპინძელი სახელი ან მისამართი, თუ მასპინძელი სახელი მიუწვდომელია.

% n (% N)

კლიენტი (სერვერი) მასპინძელი სახელი (ან "უცნობი" ან "პარანოიდი").

% p

Daemon პროცესის id.

% s

სერვერი ინფორმაცია: daemon @ host, daemon @ address, ან უბრალოდ daemon სახელი, რაც დამოკიდებულია იმაზე, თუ რამდენად ხელმისაწვდომია ინფორმაცია.

u

კლიენტის მომხმარებლის სახელი (ან "უცნობი").

%%

გაფართოვდება ერთი `% 'სიმბოლოზე.

სიმბოლოების გაფართოება, რომელიც შეიძლება გაურკვეველი ჭურვი შეცვალა underscores.

SERVER ENDPOINT PATTERNS

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


process_name @ host_pattern: client_list ...

მსგავსი ტიპის ნიმუშები შეიძლება გამოყენებულ იქნას, როდესაც მანქანა სხვადასხვა ინტერნეტ ჰოსტინგებთან განსხვავებული ინტერნეტ მისამართებია. სერვისის პროვაიდერებს შეუძლიათ ისარგებლონ ამ დაწესებულებაში FTP, GOPHER ან WWW არქივების შეთავაზება ინტერნეტ-სახელებით, რაც შეიძლება სხვადასხვა ორგანიზაციებს ეკუთვნოდეს. იხილე ასევე "twist" პარამეტრი hosts_options (5) დოკუმენტში. ზოგიერთი სისტემა (Solaris, FreeBSD) შეიძლება ჰქონდეს ერთზე მეტი ინტერნეტ მისამართი ერთი ფიზიკური ინტერფეისი; სხვა სისტემებთან, რომლებსაც შეიძლება მიმართოთ SLIP ან PPP ფსევდო ინტერფეისი, რომელიც ცხოვრობს ერთგულ ქსელში.

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

კლიენტი USERNAME LOOKUP

კლიენტის მასპინძელი მხარს უჭერს RFC 931 პროტოკოლს ან მის შთამომავალს (TAP, IDENT, RFC 1413) შეფუთვა პროგრამებს შეუძლიათ მიიღონ დამატებითი ინფორმაცია კავშირის მფლობელის შესახებ. კლიენტის მომხმარებლის სახელი ინფორმაცია, როდესაც ხელმისაწვდომია, შესულია კლიენტის მასპინძელი სახელთან ერთად და შეიძლება გამოყენებულ იქნას ისეთი ნიმუშების შესაქმნელად, როგორიცაა:


daemon_list: ... user_pattern @ host_pattern ...

Daemon შეფუთვა შეიძლება დაკონფიგურირებდეს შედგენის დროს, რათა განახორციელოს წესი ორიენტირებული მომხმარებლის სახეს საძიებო სისტემებში (default) ან ყოველთვის დაკითხოთ კლიენტის ჰოსტი. წესით ორიენტირებული მომხმარებლის სახელის ძიებისას ზემოთ მოცემული წესი გამოიწვევს მომხმარებლის სახელის ძიებას მხოლოდ მაშინ, როდესაც daemon_list და host_pattern მატჩი.

მომხმარებლის ნიმუში აქვს იგივე სინტაქსი, როგორც დემონი პროცესის ნიმუში, ასე რომ იგივე ველების გამოყენებაა (netgroup გაწევრიანება არ არის მხარდაჭერილი). ერთი არ უნდა გაიტაცეს მომხმარებლის სახელი lookups, თუმცა.

*

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

*

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

*

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

*

მომხმარებლის საძიებო შეიძლება გამოიწვიოს შესამჩნევი დაგვიანებით არასამთავრობო UNIX მომხმარებლებს. მომხმარებლის სახელის ნახვისთვის ნაგულისხმევი დროითი დროა 10 წამი: ძალიან მოკლეა, რათა გაუმკლავდეს ნელი ქსელების, მაგრამ ხანგრძლივი საკმარისი იმისათვის, რომ გაღიზიანება PC მომხმარებლებს.

შერჩევითი მომხმარებლის სახელი lookups შეიძლება შემსუბუქება ბოლო პრობლემა. მაგალითად, წესი, როგორიცაა:


daemon_list: @pcnetgroup ALL @ ALL

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

დააკმაყოფილებთ ADDRESS SPOOFING ATTACKS

ბევრი TCP / IP შესრულების რიგითობის გენერატორის შეცდომა საშუალებას იძლევა intruders ადვილად impersonate სანდო მასპინძლებს და დაარღვიოს მეშვეობით, მაგალითად, დისტანციური Shell მომსახურება. IDENT (RFC931 და ა.შ.) სერვისი შეიძლება გამოყენებულ იქნას ისეთი და სხვა მასპინძლების მისამართების გამოვლენის მიზნით.

კლიენტის მოთხოვნის მიღებამდე შეფუთვისა შეუძლია გამოიყენოს პირადობის მოწმობა, რათა გაირკვეს, რომ კლიენტი საერთოდ არ გაგზავნის მოთხოვნას. კლიენტის მასპინძელი უზრუნველყოფს IDENT სერვისს, უარყოფითი IDENT საძიებელი შედეგი (კლიენტი მატჩები "UNKNOWN @ host") მტკიცებულებაა სპოფტების თავდასხმის ძლიერი მტკიცებულება.

დადებითი IDENT საძიებელი შედეგი (კლიენტის მატჩები "KNOWN @ host") ნაკლებად სანდოა. შესაძლებელია intruder რომ spoof როგორც კლიენტის კავშირი და IDENT საძიებელი, თუმცა ამის გაკეთება ბევრად უფრო რთული, ვიდრე spoofing მხოლოდ კლიენტის კავშირი. ასევე შეიძლება იყოს ის, რომ კლიენტის IDENT სერვერი ცრუობს.

შენიშვნა: IDENT lookups არ მუშაობენ UDP სერვისებთან.

მაგალითები

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

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

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

ყველაზე მეტად დახურულია

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

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

/etc/hosts.deny: ყველა: ყველა

ეს უარყოფს ყველა სერვისს ყველა მასპინძელს, თუ ისინი დაშვებულია დაშვებულ ფაილში შესვლის საშუალებით.

მკაფიოდ უფლებამოსილი მასპინძლები ჩამოთვლილ ფაილშია ჩამოთვლილი. მაგალითად:

/etc/hosts.allow: ALL: LOCAL @some_netgroup
ALL: .foobar.edu EXCEPT terminalserver.foobar.edu

პირველი წესი ნებადართულია ადგილობრივ დომენში მასპინძელი სტუმრების (მასპინძლის სახელით) დაშვება და ზოგიერთ_განახლების ჯგუფის წევრები. მეორე წესი იძლევა ყველა მასპინძელს foobar.edu დომენის ხელმისაწვდომობას (შეამჩნევთ წამყვან წერტილს), გარდა ტერმინალიზერ.ფაობარ.დუს გარდა .

მეტწილად ღიაა

აქ წვდომას მიენიჭება მხოლოდ მკაფიოდ მითითებულ მასპინძლებს უარი ეთქვათ.

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

/etc/hosts.deny: ყველა: some.host.name, .some.domain
ყველას გარდა

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

BOOBY TRAPS

მომდევნო მაგალითს უფლებას აძლევს ადგილობრივ დომენში მასპინძელი tftp თხოვნას (შეამჩნევთ წამყვან წერტილს). ნებისმიერი სხვა მასპინძელი თხოვნა უარყო. მოთხოვნილი ფაილის ნაცვლად, თითის გამოძიება იგზავნება დამნაშავე მასალებზე. შედეგი გადაეგზავნა superuser- ს.

/etc/hosts.allow:

in.tftpd: LOCAL, .my.domain /etc/hosts.deny: in.tftpd: ყველა: spawn (/ some / where / safe_finger -l @% h | \ / usr / ucb / mail -s% d-% თ root)

Safe_finger ბრძანება მოდის tcpd wrapper და უნდა იყოს დამონტაჟებული შესაფერისი ადგილი. ის ზღუდავს დისტანციური თითის სერვერის მიერ გაგზავნილი მონაცემების შესაძლო დაზიანებას. ის უკეთეს დაცვას იძლევა, ვიდრე სტანდარტული თითი ბრძანება.

% H- ის (კლიენტის მასპინძელი) და% d (სერვისის სახელი) სეგმენტების გაფართოება აღწერილია შელი ბრძანებებში განყოფილებაში.

გაფრთხილება: არ გამოიყენოთ თითის დემენი, თუ თქვენ მზად ხართ უსასრულო თითის მარყუჟებისთვის.

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

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

დაკავშირებული სტატიები