Schutz von Spielservern vor DDoS-Angriffen

0 Aktien
0
0
0
0

Einführung

Dieses Tutorial erklärt, wie Sie Ihren Spielserver vor DDoS-Angriffen schützen, indem Sie eine einfache Firewall und Ratenbegrenzung einrichten. Beachten Sie jedoch, dass Ihr Server auch mit diesen Einstellungen nicht immun gegen DDoS-Angriffe ist. Eine sichere Firewall kann die Angriffsfläche jedoch minimieren, und Ratenbegrenzungsregeln können eine Überlastung Ihres Servers verhindern.

Voraussetzungen:
  • Server mit Ubuntu (Dieses Tutorial wurde mit Ubuntu 22.04 getestet, sollte aber auch mit anderen Versionen funktionieren.)

Schritt 1 – Firewall

Aus Sicherheitsgründen sollten Sie eine Firewall verwenden, die standardmäßig den gesamten eingehenden Datenverkehr blockiert. Sie können dann Ausnahmen hinzufügen, um den Zugriff auf die für die Serveranmeldung (SSH) und die Spielverbindung (TCP/UDP) erforderlichen Protokolle/Ports zu erlauben. Um Ihre Firewall noch weiter zu verstärken, können Sie auch IP-Adressen festlegen, von denen ausschließlich der Zugriff gestattet werden soll. Anfragen von anderen IP-Adressen werden automatisch verworfen. Dieses Tutorial erklärt, wie Sie den gesamten eingehenden Datenverkehr blockieren und:

  • Gewähre allen Zugriff auf den Spielport.
  • Nur ausgewählte IPs haben Zugriff auf den Spielport.

Die Standard-Firewall in Ubuntu ist ufw. Dieses Tutorial verwendet iptables. Stellen Sie sicher, dass Sie nur eine Firewall verwenden. Die Verwendung mehrerer Firewalls wird nicht empfohlen, da deren Regeln miteinander in Konflikt geraten und zu Problemen führen können.

Um zu überprüfen, ob Sie bereits Regeln haben, können Sie Folgendes verwenden:

sudo iptables -L

اگر فایروال هنوز قوانینی ندارد، اکنون می‌توانید آن‌ها را اضافه کنید. وقتی خط مشی پیش‌فرض برای ترافیک ورودی را روی «DROP» تنظیم می‌کنید، بلافاصله تمام اتصالات پایان می‌یابد. به همین دلیل، ابتدا باید مطمئن شوید که اتصالات SSH را مجاز کرده اید تا همچنان بتوانید به سرور خود دسترسی داشته باشید.

اگر از پورت پیش‌فرض SSH استفاده نمی‌کنید، حتماً در دستورات زیر 22 را جایگزین کنید.

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT 
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

اکنون که فایروال راه اندازی شده است، می توانید پورت بازی خود را باز کنید.فقط IP های انتخاب شده به پورت بازی دسترسی داشته باشند.اگر آی‌پی بازیکنانی که به بازی ملحق می‌شوند را می‌دانید و آی‌پی‌ها تغییر نمی‌کنند، می‌توانید فقط به آن IP‌ها دسترسی داشته باشید:

sudo iptables -A INPUT -s <203.0.113.1>,<198.51.100.1> -p tcp --dport <your_game_port> -j ACCEPT
sudo iptables -A INPUT -s <203.0.113.1>,<198.51.100.1> -p udp --dport <your_game_port> -j ACCEPT
 

Erlaube allen den Zugriff auf den Spielport. Mit dieser Regel kann jeder auf dein Spiel zugreifen:

sudo iptables -A INPUT -p tcp --dport <your_game_port> -j ACCEPT
sudo iptables -A INPUT -p udp --dport <your_game_port> -j ACCEPT

Neue Regeln sollten nun hinzugefügt worden sein. Sie können diese mit `sudo iptables -L` anzeigen. Die Regeln sind standardmäßig nicht persistent und gehen beim nächsten Neustart verloren. Um sie persistent zu machen, installieren Sie Folgendes:

sudo apt update && sudo apt install iptables-persistent

حالا قوانین خود را ذخیره کنید:

sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo ip6tables-save | sudo tee /etc/iptables/rules.v6

دفعه بعد که سرور خود را راه اندازی مجدد می کنید، قوانین ذخیره شده در فایل دوباره اعمال خواهند شد. هنگامی که قوانین جدید iptables را اضافه می کنید، باید دوباره دستور iptables-save را برای به روز رسانی فایل ها اجرا کنید.

sudo iptables -L --line-numbers # Listet alle Regeln mit Nummern auf sudo iptables -D INPUT # Löschen Sie eine INPUT-Regel, indem Sie die Nummer angeben

مرحله 2 – محدود کردن نرخ

Die Einrichtung einer Firewall wie in “Schritt 1” beschrieben trägt bereits zur Erhöhung der Sicherheit bei. Die öffentliche Freigabe des Spielports vergrößert jedoch die potenzielle Angriffsfläche. Mit Iptables und Fail2Ban lässt sich die Anzahl der zulässigen Anfragen begrenzen. Die Funktionsweise wird im Folgenden erläutert:

  • Begrenzen Sie die Anzahl der Anfragen pro IP-Adresse.
  • Begrenzen Sie die Anzahl der Anfragen von allen IPs zusammen.
Schritt 2.1 – Begrenzen Sie die Anzahl der Anfragen pro IP-Adresse.

Dieser Schritt nutzt Fail2Ban, um Anfragen zu begrenzen, und iptables, um Anfragen zu protokollieren.

Bevor Sie beginnen, müssen Sie sicherstellen, dass sowohl iptables als auch Fail2Ban verfügbar sind. Sie können mit dem Befehl `systemctl status fail2ban` überprüfen, ob Fail2Ban ausgeführt wird. Installation unter Ubuntu:

apt install fail2ban
systemctl enable --now fail2ban

به iptables بگویید تلاش های دسترسی را ثبت کنند

sudo iptables -I INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -j LOG --log-level 6 --log-prefix "GameServerAccess: "

اکنون Iptables تمام تلاش‌ها برای دسترسی به پورت TCP <your_game_port> را در فایل /var/log/syslog ثبت می‌کند. وقتی فایل را مشاهده می کنید، خواهید دید که تمام تلاش ها برای دسترسی به پورت بازی پیشوند GameServerAccess داده می شود. قاعده را پایدار کنید:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

یک فیلتر اضافه کنید در فایل /var/log/syslog، فقط ورودی‌های با پیشوند GameServerAccess: مرتبط هستند. فایل زیر را ایجاد کنید تا به Fail2Ban بگویید آن ورودی ها را فیلتر کند:

sudo nano /etc/fail2ban/filter.d/gameserveraccess.conf

اضافه کردن محتوا:

[Definition]
failregex = GameServerAccess: .* SRC=<HOST>
ignoreregex =

به Fail2Ban بگویید تعداد درخواست‌های هر IP را محدود کند و برای IPهایی که از حد مجاز فراتر می‌روند، زمان ممنوعیت تعیین کنید. logpath به Fail2Ban می گوید که IP ها را از کجا دریافت کنید. فیلتری که ما ایجاد کردیم به Fail2Ban می‌گوید فقط IPهایی را که با پیشوند GameServerAccess ثبت شده‌اند نظارت کند.

sudo nano /etc/fail2ban/jail.local

Inhalte hinzufügen:

[game-server]
enabled = true
filter = gameserveraccess
logpath = /var/log/syslog
maxretry = 7
findtime = 30
bantime = 120

Die oben genannten Einstellungen erlauben jeder IP-Adresse, innerhalb von 30 Sekunden 7 Anfragen zu senden. Überschreitet eine IP-Adresse dieses Limit, wird sie für 120 Sekunden gesperrt. Um ein anderes Limit festzulegen, ersetzen Sie die Werte 7, 30 und 120 entsprechend.

Sobald alles eingerichtet ist, starten Sie Fail2Ban neu:

sudo systemctl restart fail2ban
Schritt 2.2 – Begrenzen Sie die Anzahl der Anfragen von allen IPs zusammen

Mit iptables können Sie mithilfe des Moduls „limit“ die Gesamtzahl neuer Verbindungen innerhalb eines bestimmten Zeitraums begrenzen. Bei Verwendung des Moduls „limit“ legen die Optionen „--limit“ und „--limit-burst“ einen Zeitraum und einen Grenzwert fest.

Löschen Sie die alte Firewall-Regel. Falls Sie den Spielport in “Schritt 1” bereits für alle geöffnet haben, können Sie die Regel jetzt löschen. Dank der unten aufgeführten Ratenbegrenzungsregeln ist diese Regel nicht mehr erforderlich.

sudo iptables -L --line-numbers # Get the line number of "ACCEPT anywhere tcp dpt:<your_game_port>"
sudo iptables -D INPUT <line-number> # Delete the rule that accepts all incoming requests to your game port

Führen Sie die folgenden Befehle aus, um neue Regeln hinzuzufügen und einen Grenzwert von 100 sowie eine Zykluszeit von einer halben Minute (30 Sekunden) festzulegen. Wenn Sie andere Grenzwerte festlegen möchten, ersetzen Sie die Werte 100 und 2/min entsprechend.

sudo iptables -A INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -m limit --limit 2/min --limit-burst 100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -j DROP
Die erste Regel erlaubt den Zugriff auf den Server. Sie gilt für alle Anfragen innerhalb des festgelegten Bereichs. Sobald das Limit erreicht ist, greift diese Regel nicht mehr. Die zweite Regel verweigert den Zugriff auf den Server. Sie greift, wenn die erste Regel nicht mehr zutrifft.
iptables-Regeln sind standardmäßig nicht persistent. Um die Regeln persistent zu machen, müssen Sie die Datei /etc/iptables/rules.v4 aktualisieren:
sudo iptables-save | sudo tee /etc/iptables/rules.v4

Beim nächsten Neustart Ihres Servers werden die in der Datei gespeicherten Regeln erneut angewendet.

Schritt 3 – Blockierungsregeln

Sobald das in “Schritt 2” festgelegte Limit erreicht ist, kann niemand mehr auf den TCP-Port your_game_port zugreifen. Solange die Anfragen jedoch innerhalb des Limits liegen, wird allen Anfragen Zugriff gewährt. Dies gilt sowohl für legitime als auch für illegitime Anfragen. Die folgende Regel verwirft neue Verbindungen ohne SYN-Flag:

sudo iptables -I INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

Wenn alles erledigt ist, müssen Sie Ihre Regeln erneut speichern:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Ergebnis

Bitte beachten Sie, dass diese Einstellungen nicht ausreichen, um DDoS-Angriffe vollständig zu verhindern. Die Sicherheit lässt sich durch weitere DDoS-Schutzmaßnahmen stets verbessern. Mit den in diesem Tutorial vorgestellten Einstellungen verfügen Sie jedoch nun über eine erste Verteidigungslinie gegen DDoS-Angriffe und eine gute Grundlage für zukünftige Optimierungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen