RE:NODE

სახელმძღვანელოები11 წუთის საკითხავი

Rust RCON და WebRCON: დაყენება და უსაფრთხოება

ჩართე WebRCON Rust-ის სერვერზე, მიაერთე RustAdmin, BattleMetrics ან სკრიპტი, წაიკითხე JSON შეტყობინებები და არ დაუშვა, რომ rcon.password სუსტი წერტილი იყოს.

0 მკითხველი

Rust-ის დისტანციური კონსოლი WebSocket-ია. გაუშვი სერვერი +rcon.web 1 +rcon.port 28016 +rcon.password "..."-ით და ნებისმიერ ინსტრუმენტს, რომელსაც ws://your-ip:28016/your-password-ის გახსნა შეუძლია, შეუძლია კონსოლის ბრძანებების გაგზავნა და სერვერის ლოგის, ჩატისა და ბრძანებების შედეგის JSON-ად მიღება. სწორედ ასე ესაუბრებიან Rust-ის სერვერს RustAdmin, BattleMetrics, Discord-ის ბოტები და პანელების კონსოლების უმეტესობა. ეს ასევე ადმინისტრატორის ინტერფეისია ღია ინტერნეტში, დაცული ერთი პაროლით, რომელიც URL-ის შიგნით დაუშიფრავად მოგზაურობს, ამიტომ დაყენებას ოცდაათი წამი სჭირდება, უსაფრთხოება კი ოცდაათ წუთს იმსახურებს. ეს სტატია ორივეს განიხილავს.

რით განსხვავდება Rust-ის RCON სხვა თამაშებისგან#

თამაშების უმეტესობა Valve-ის Source RCON-ს იყენებს: უხეშ TCP პროტოკოლს ბინარული პაკეტების ფორმატით. Rust ოდესღაც მას იყენებდა და ჯერაც უჭერს მხარს, მაგრამ ნაგულისხმევი და ის, რასაც ყოველი თანამედროვე ინსტრუმენტი ელის, არის WebRCON, რომელიც rcon.web 1-ით ირთვება.

  • ტრანსპორტი: WebSocket rcon.port-ით დაყენებულ TCP პორტზე. ჩვეულებრივი ws:// და არა TLS.
  • ავთენტიფიკაცია: პაროლი URL-ის გზაა. ცალკე შესვლის ნაბიჯი არ არსებობს; არასწორი პაროლი და კავშირი უარყოფილია ან იხურება.
  • შეტყობინებები: JSON ორივე მიმართულებით, Identifier-ით, რომელსაც შენ ირჩევ, რომ პასუხები მოთხოვნებს დაუკავშირო.
  • ნაკადი: მიერთების შემდეგ იღებ ყველაფერს, რასაც კონსოლი ბეჭდავს - ლოგებს, ჩატს, მოთამაშეების მიერთებებს - და არა მხოლოდ პასუხებს შენს ბრძანებებზე.

სწორედ ნაკადის გამოა WebRCON სასარგებლო ბრძანებების გაგზავნის მიღმაც. ინსტრუმენტი, რომელიც მიერთებული რჩება, სერვერის ცოცხალ ნაკადს იღებს, და ასე იქმნება ჩატის ლოგები, kill feed-ები და Discord-ის რელეები. პროტოკოლების ოჯახს სხვადასხვა თამაშში განიხილავს სტატია RCON უსაფრთხოდ; ეს სტატია კონკრეტულად Rust-ის ვერსიაზეა.

WebRCON-ის ჩართვა#

RCON-ის convar-ები გაშვებისას იკითხება, ამიტომ მათი ადგილი გაშვების ხაზი ან პანელის გაშვების ცვლადებია და არა server.cfg.

bash
./RustDedicated -batchmode -nographics \  +server.identity "main" +server.port 28015 \  +rcon.web 1 +rcon.port 28016 +rcon.password "Xr7qL2vN9pTf4KwB8mZc"
convarრას აკეთებს
rcon.web1 WebRCON-ისთვის (WebSocket), 0 ძველი, Source-ის სტილის TCP RCON-ისთვის
rcon.portTCP პორტი, რომელზეც RCON უსმენს; ყველა სხვა პორტისგან უნდა განსხვავდებოდეს
rcon.passwordპაროლი; ასევე URL-ის გზა, რომელსაც კლიენტები უერთდებიან
rcon.ipრომელ ლოკალურ მისამართზე უსმინოს, რამდენიმე მისამართიანი მანქანებისთვის

პაროლს ორი თვისება სჭირდება. ის გრძელი და შემთხვევითი უნდა იყოს, რადგან ეს ერთადერთია, რაც სერვერზე სრულ კონტროლს იცავს. და ის URL-ისთვის უსაფრთხო უნდა იყოს, რადგან ის თავად URL-ია. მხოლოდ ასოები და ციფრები, ოცი სიმბოლო ან მეტი. მოერიდე /, ?, #, %, ჰარებსა და ბრჭყალებს: ისინი ან URL-ს ფუჭებენ, ან სხვადასხვა ინსტრუმენტი მათ სხვადასხვანაირად აღიქვამს, სიმპტომი კი არის "პაროლი სწორია, მაგრამ ვერაფერი უერთდება".

ინსტრუმენტის მიერთება#

შესვლის სამი გავრცელებული გზა არსებობს.

ინსტრუმენტირა არისრისთვის კარგია
Facepunch WebRCONFacepunch-ის მიერ გამოქვეყნებული პატარა ბრაუზერის კლიენტისწრაფი შემოწმებები ნებისმიერი კომპიუტერიდან
RustAdminWindows-ის დესკტოპ აპლიკაციაყოველდღიური ადმინისტრირება, მოთამაშეების სიები, ჩატი, ბანები
BattleMetrics RCONჰოსტინგზე გაშვებული ვებ-სერვისიგუნდები, საერთო ბანების სიები, ტრიგერები და ლოგები
შენი საკუთარი სკრიპტი ან ბოტიკოდი WebSocket ბიბლიოთეკითავტომატიზაცია, Discord-ის რელეები

ყოველი ინსტრუმენტი ერთსა და იმავე სამ მნიშვნელობას ითხოვს: IP ან hostname, RCON პორტი, პაროლი. თუ ინსტრუმენტი პროტოკოლსაც გეკითხება, აირჩიე WebRCON ან WebSocket.

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

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

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

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

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

json
{ "Identifier": 1001, "Message": "status", "Name": "WebRcon" }

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

json
{ "Message": "hostname: Longship | EU ...", "Identifier": 1001, "Type": "Generic", "Stacktrace": "" }

შეტყობინებები, რომლებსაც სერვერი საკუთარი ინიციატივით აგზავნის - ლოგის ხაზები, ჩატი - მოდის იდენტიფიკატორით 0 ან -1 და Type-ით, როგორიცაა Generic, Log, Warning, Error ან Chat. ჩატის შეტყობინებები Message-ში საკუთარ JSON შიგთავსს ატარებს მოთამაშის სახელით, SteamID-ითა და ტექსტით. ინსტრუმენტი Type-ითა და Identifier-ით ფილტრავს, რომ პასუხები ფონური ნაკადისგან გამოყოს.

მინიმალური Python სკრიპტი, რომელიც ერთ ბრძანებას უშვებს და პასუხს ბეჭდავს:

python
import asyncio, jsonimport websockets  # pip install websocketsURI = "ws://203.0.113.10:28016/Xr7qL2vN9pTf4KwB8mZc"async def rcon(command: str, ident: int = 1001) -> str:    async with websockets.connect(URI) as ws:        await ws.send(json.dumps({"Identifier": ident, "Message": command, "Name": "script"}))        while True:            reply = json.loads(await ws.recv())            if reply.get("Identifier") == ident:                return reply["Message"]print(asyncio.run(rcon("serverinfo")))

serverinfo აბრუნებს JSON ობიექტს hostname-ით, მოთამაშეებისა და რიგის რაოდენობით, frame rate-ით, entity-ების რაოდენობით, მეხსიერებითა და მუშაობის დროით - ყველაფერს, რაც სტატუსის ბოტს ან მონიტორინგის შემოწმებას ერთ გამოძახებაში სჭირდება. როგორ გამოაქვეყნო ასეთი მონაცემები იქ, სადაც მოთამაშეები დაინახავენ, აჩვენებს სტატია Discord webhook-ები სერვერის სტატუსისთვის.

ავტომატიზაცია RCON-ით#

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

სტატუსის შემოწმებები. სკრიპტი, რომელიც ყოველ ხუთ წუთში serverinfo-ს იძახებს და მოთამაშეებს, frame rate-ს, entity-ების რაოდენობასა და მეხსიერებას იწერს, თითქმის ძალისხმევის გარეშე მთელი wipe-ის ისტორიას გაძლევს. როცა ვინმე ამბობს "წუხელ სერვერი ჭედავდა", შეგიძლია ნახო, ასე იყო თუ არა - და ეს მოთამაშეების რაოდენობა იყო, entity-ები თუ მეხსიერება. ამისთვის კავშირი ხანმოკლე დატოვე: მიუერთდი, იკითხე, გამოეთიშე.

ჩატისა და ლოგის რელეები. ხანგრძლივი კავშირი ყოველ ჩატის შეტყობინებასა და ლოგის ხაზს იღებს, როგორც კი ხდება. გაფილტრე Type, რომელიც Chat-ის ტოლია, გააანალიზე შიდა JSON მოთამაშის სახელისა და ტექსტისთვის და გადაგზავნე Discord-ის არხში. ორი დეტალი წყვეტს, ასეთი რელე სასიამოვნო იქნება თუ შემაწუხებელი. ის თავისით უნდა მიუერთდეს თავიდან, დაყოვნებით, რომელიც ყოველი ჩავარდნის შემდეგ იზრდება, რადგან სერვერი გადაიტვირთება და socket ითიშება. და მან უნდა შეზღუდოს, რამდენს აქვეყნებს, რადგან დატვირთული სერვერის ლოგი არხს წალეკავს და webhook-ს შეზღუდვას მოუტანს.

დაგეგმილი განცხადებები და რესტარტები. cron სხვა მანქანაზე, ან დაგეგმილი ამოცანა შენს პანელში, ფიქსირებულ დროს შეიძლება აგზავნიდეს say შეტყობინებებს და restart 600 "Daily restart"-ს. ყოველ საქმეზე ერთი მექანიზმი გამოიყენე: რესტარტი, რომელსაც RCON სკრიპტიც და პანელის განრიგიც იწვევს, ადრე თუ გვიან ორჯერ გაეშვება.

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

ძველი RCON rcon.web 0-ით

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

რას აკეთებ რეალურად RCON-ით#

ყველაფერი, რისი აკრეფაც სერვერის კონსოლში შეგიძლია, RCON-ითაც შეგიძლია გაგზავნო. ყოველდღიური სია:

  • მოთამაშეების მართვა: status და players, რომ ნახო, ვინ არის ონლაინ, SteamID-ებითა და ping-ით; kick, ban, banid, unban. სრული ცნობარი მოცემულია სტატიაში Rust-ის ადმინისტრატორის ბრძანებები.
  • შეტყობინებები: say "Restart in 10 minutes" მთელი სერვერისთვის განცხადებებისთვის.
  • შენახვა და რესტარტი: server.save ნებისმიერი სარისკო მოქმედების წინ; restart 300 "Update" უკუთვლით რესტარტისთვის შეტყობინებით.
  • შენარჩუნება: server.writecfg ნებისმიერი ownerid, moderatorid ან ბანის ცვლილების შემდეგ, თორემ რესტარტზე დაიკარგება.
  • plugin-ები: oxide.reload <name> ან c.reload <name> კონფიგის რედაქტირების შემდეგ.
  • ჯანმრთელობა: serverinfo frame rate-ისთვის, entity-ებისა და მეხსიერებისთვის ერთ ხაზზე.

რისი გაკეთებაც RCON-ს არ შეუძლია, არის ყველაფერი თამაშის პროცესის გარეთ: ის არ განაახლებს სერვერს, არ შეცვლის ფაილებს, არ აღადგენს backup-ს და არ გადატვირთავს ავარიულად გათიშულ სერვერს. ამისთვის ჰოსტის პანელი, SSH ან SFTP გჭირდება.

მისი დაცვა#

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

  1. გამოიყენე გრძელი, შემთხვევითი, URL-ისთვის უსაფრთხო პაროლი, ამ სერვერისთვის უნიკალური. არა შენი პანელის პაროლი, არა სერვერის პაროლი, არა სიტყვა.
  2. დახურე პორტი, თუ არავინ იყენებს. თუ შენი კონსოლი RCON-ის გარეშე მუშაობს, წაშალე RCON პორტის განაწილება ან დაბლოკე. დახურულ პორტზე გამოცნობას ვერავინ შეეცდება.
  3. შეზღუდე მისამართით, სადაც შეგიძლია. მანქანაზე, რომელსაც აკონტროლებ, RCON პორტი დაუშვი მხოლოდ შენი ადმინების მისამართებიდან ან VPN-იდან. ამ მიდგომას განიხილავს სტატია firewall-ის წესები, რომლებიც მნიშვნელოვანია.
  4. შეცვალე გუნდის ცვლილებებისას. ყველას, ვისაც ოდესმე ჰქონია პაროლი, ის აქვს, სანამ არ შეცვლი. შეცვალე, როცა მოდერატორი მიდის და როცა ინსტრუმენტს, რომლის გამოყენებაც შეწყვიტე, ის შენახული ჰქონდა.
  5. სანაცვლოდ გუნდს თამაშშიდა უფლებები მიეცი. მოდერატორებს, რომლებიც მხოლოდ kick-სა და ban-ს აკეთებენ, moderatorid სჭირდებათ და არა RCON პაროლი. RCON ფაქტობრივად owner-ის წვდომაა.
  6. ადევნე თვალი აუხსნელ ბრძანებებს. ადმინის ინსტრუმენტებსა და plugin-ებს შეუძლიათ RCON-ით გაცემული ბრძანებების ლოგირება; ownerid, რომელიც შენ არ გაგიცია, ყველაფრის შეცვლის სიგნალია.

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

RCON და პანელის კონსოლი#

Pterodactyl-ზე დაფუძნებულ ჰოსტინგზე Rust-ის ბევრი egg პანელის კონსოლს WebRCON-ით მართავს: კონტეინერის შიგნით პატარა wrapper სერვერის საკუთარ RCON პორტს უერთდება და იმას გადასცემს, რასაც აკრეფ. აქედან ორი პრაქტიკული შედეგი გამომდინარეობს. rcon.web-ის გამორთვამ შეიძლება პანელის კონსოლი გააფუჭოს, ხოლო RCON პაროლი ხშირად გაშვების ცვლადია, რომელსაც პანელი აყენებს და wrapper კითხულობს. შეცვალე ის იქ და არა მხოლოდ ინსტრუმენტში.

RE:NODE-ის პანელზე ადმინის, RCON-ისა და მონაცემთა ბაზის პაროლები ჩვენ მიერ ჰოსტინგზე განთავსებული თამაშებისთვის თითო სერვერზე გენერირდება, კონსოლს აქვს ბრძანებების ისტორია და tab-ით შევსება, პორტები კი - RCON-ის ჩათვლით - Network ჩანართზე ემატება და იშლება. Rust კატალოგის თამაშებს შორის არ არის, მაგრამ თუ მას ჩვენი გამოყოფილი სერვერების ხაზის VDS-ზე უშვებ, firewall-ს პირდაპირ აკონტროლებ, რაც RCON პორტის შენს საკუთარ მისამართებზე შეზღუდვას ერთხაზიან წესად აქცევს.

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

კავშირის პრობლემების მოგვარება#

ინსტრუმენტი საერთოდ ვერ უერთდება. შეამოწმე, რომ პორტი TCP-ა და განაწილებულია, რომ rcon.web 1 დაყენებულია და რომ RCON პორტს იყენებ და არა სათამაშოს.

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

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

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

ძველი ინსტრუმენტები ვერ მუშაობს, ბრაუზერის კლიენტი კი მუშაობს. ინსტრუმენტი Source RCON-ს ელის. rcon.web-ის 0-ზე გადართვის ნაცვლად WebRCON-ის მხარდამჭერი ინსტრუმენტი გამოიყენე.

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

FAQ#

რომელ პორტს იყენებს Rust RCON?

რაზეც rcon.port არის დაყენებული; 28016 შეთანხმებაა, ნაგულისხმევ სათამაშო პორტზე ერთით მეტი. ის TCP-ა, სათამაშო და query პორტებისგან განსხვავებით, რომლებიც UDP-ა.

როგორ მივუერთდე Rust WebRCON-ს?

გახსენი WebSocket ws://<server-ip>:<rcon.port>/<rcon.password>-ზე ნებისმიერი WebRCON ინსტრუმენტით, როგორიცაა Facepunch-ის ბრაუზერის კლიენტი, RustAdmin ან BattleMetrics. შეიყვანე IP, პორტი და პაროლი.

Rust RCON დაშიფრულია?

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

უნდა მივცე მოდერატორებს RCON პაროლი?

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

შეუძლია RCON-ს ავარიულად გათიშული Rust-ის სერვერის გადატვირთვა?

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


კომენტარები

სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.

0/2000