Introducción
Este tutorial explica cómo proteger tu servidor de juegos de ataques DDoS mediante la configuración de un firewall básico y una limitación de velocidad. Ten en cuenta que, incluso con esta configuración, tu servidor no será inmune a los ataques DDoS. Sin embargo, un firewall seguro puede minimizar la superficie de ataque, y las reglas de limitación de velocidad pueden ayudar a evitar la sobrecarga de tu servidor.
Prerrequisitos:
- Servidor con Ubuntu (este tutorial fue probado con Ubuntu 22.04 pero debería funcionar también con otras versiones).
Paso 1 – Cortafuegos
Por razones de seguridad, deberías tener un firewall que bloquee todo el tráfico entrante por defecto. Puedes añadir excepciones para permitir el acceso a los protocolos/puertos necesarios para iniciar sesión en el servidor (SSH) y conectarte al juego (TCP/UDP). Si quieres reforzar aún más tu firewall, también puedes especificar direcciones IP que sean las únicas con acceso permitido. Las solicitudes procedentes de cualquier otra dirección IP se descartarán automáticamente. Este tutorial explica cómo bloquear todo el tráfico entrante y:
- Permitir que todos accedan al puerto del juego.
- Sólo las IP seleccionadas tienen acceso al puerto del juego.
El firewall predeterminado en Ubuntu es ufw. Este tutorial usa iptables. Asegúrate de usar solo un firewall. No se recomienda usar varios firewalls diferentes, ya que sus reglas podrían entrar en conflicto y generar confusión.
Para comprobar si ya tienes alguna regla, puedes utilizar lo siguiente:
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 Permitir que todos accedan al puerto del juego Con esta regla, todos pueden acceder a tu juego:
sudo iptables -A INPUT -p tcp --dport <your_game_port> -j ACCEPT sudo iptables -A INPUT -p udp --dport <your_game_port> -j ACCEPT
Ahora deberían añadirse nuevas reglas. Puede usar sudo iptables -L para verlas. Las reglas no son persistentes por defecto y desaparecerán en el siguiente reinicio. Para que sean persistentes, instale:
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 # Listar todas las reglas con números sudo iptables -D INPUT # Eliminar una regla de ENTRADA especificando el númeroمرحله 2 – محدود کردن نرخ
Configurar un firewall como se describe en el "Paso 1" ya ayuda a aumentar la seguridad. Sin embargo, exponer el puerto del juego al público expone la posible superficie de ataque. Iptables y Fail2Ban permiten limitar el número de solicitudes permitidas. Se explica cómo:
- Limite el número de solicitudes por IP.
- Limite el número de solicitudes de todas las IP juntas.
Paso 2.1 – Limitar el número de solicitudes por IP.
Este paso utiliza Fail2Ban para limitar las solicitudes e iptables para registrar las solicitudes.
Antes de comenzar, asegúrese de que tanto iptables como Fail2Ban estén disponibles. Puede usar systemctl status fail2ban para comprobar si Fail2Ban se está ejecutando. Instalación en 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.localAñadir contenido:
[game-server]
enabled = true
filter = gameserveraccess
logpath = /var/log/syslog
maxretry = 7
findtime = 30
bantime = 120La configuración anterior permite que cada IP envíe 7 solicitudes en 30 segundos. Si una IP supera este límite, se bloqueará durante 120 segundos. Si desea establecer un límite diferente, puede reemplazar los valores 7, 30 y 120 según corresponda.
Una vez que todo esté configurado, reinicie Fail2Ban:
sudo systemctl restart fail2banPaso 2.2 – Limitar la cantidad de solicitudes de todas las IP juntas
Con iptables, puede usar el módulo de límite para limitar el número total de nuevas conexiones dentro de un período específico. Al usar este módulo, las opciones –limit y –limit-burst establecen un período y un parámetro de límite.
Elimina la regla de firewall anterior. Si ya abriste el puerto del juego para todos en el "Paso 1", puedes eliminar la regla ahora. Con las reglas de limitación de velocidad que se indican a continuación, ya no la necesitas.
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 portEjecute los siguientes comandos para agregar nuevas reglas y establecer un parámetro de límite de 100 y un tiempo de ciclo de medio minuto (30 segundos). Si desea establecer límites diferentes, puede reemplazar los valores 100 y 2/min según corresponda.
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 DROPsudo iptables-save | sudo tee /etc/iptables/rules.v4La próxima vez que reinicie su servidor, se volverán a aplicar las reglas guardadas en el archivo.
Paso 3 – Reglas de bloqueo
Una vez alcanzado el límite de velocidad del "Paso 2", nadie podrá acceder al puerto TCP your_game_port. Sin embargo, mientras las solicitudes se encuentren dentro del límite, se concede acceso a todas, tanto a las legítimas como a las ilegítimas. La siguiente regla descarta las conexiones nuevas sin el indicador SYN:
sudo iptables -I INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROPCuando todo esté hecho, debes guardar tus reglas nuevamente:
sudo iptables-save | sudo tee /etc/iptables/rules.v4Resultado
Tenga en cuenta que estas configuraciones no son suficientes para prevenir completamente los ataques DDoS y que siempre se puede mejorar la seguridad con otras configuraciones de mitigación. Sin embargo, con las configuraciones proporcionadas en este tutorial, ahora cuenta con una primera línea de defensa contra ataques DDoS y una base sobre la que construir.









