Ochrona serwera
Od HLDS.pl
Spis treści |
Opis
Ochrona serwera przed różnymi atakami i nadużyciami. Można wyróżnić kilka typów:
- spam w grze przez graczy
- tekstowy - do tego istnieje kilka pluginów, warto się rozejrzeć
- głosowy - tutaj przydaje się obecność admina który potrafi słyszeć wszystkich
- DOS (denial of service) i DDOS (disturbed denial of service czyli kilka komputerów atakuje jedną maszynę)
- najczęściej flood na rcon
Ochrona może być wprowadzona na różnych poziomach:
- pluginu gry
- konfigu w grze
- konfiguracji serwera na poziomie sytsemu operacyjnego
Oczywiście wszystko zależy od tego jaki mamy dostęp do maszyny oraz zdolności administracyjnych.
Ogolne praktyki bezpieczeństwa
- Nie rozpowszechniać haseł, zastanów się trzy razy jak ktoś pyta się o hasło.
- Patrz w jaki sposób podajesz hasło, najlepiej aby nikt inny nie widział ;)
- Nie dawać rcon'a nikomu, jedynie bardzo zaufanym osobom.
- absolutnie nie dawać dostępu do paneli administracyjnych serwerami w firmach hostujących gry.
- Każdy admin powinen mieć własne kontoi hasło jeśli w ogóle mają mieć dostęp.
- Zmieniać rcon co dodanie/usunięcie admina.
- Regularnie skanuj komputer co jakiś czas na wypadek wirusów / trojanów i keyloggerów.
Config
Najprosztszą metodą jest ustawienie zmiennych w konfigu serwea:
sv_rcon_banpenalty 5 --- Number of minutes that a player can be banned 1 - 60 max sv_rcon_maxfailures 10 --- Number of times a player can retry to enter a password 1 - 20 max before being banned. sv_rcon_minfailures 5 --- Number of times a player can retry to enter a password 1 - 20 max before being banned. sv_rcon_minfailuretime 30 --- Number of seconds that a player has to wait until entering a password again 1 second - 60 minutes max.
Pluginy
- Uwaga, część z nich może być już niedostępna, ew istnieją lepsze metody ochrony.
- Należy wystrzegać się przed ładowaniem zbyt dużej ilości pluginów, bo wpływa to na stabilność serwera, szczególnie jeśli robia to samo.
Różne
Sourcemod
- Kigen's Anti-Cheat
- SRCDS DOS Protect (same as SourceOP but its a MetaMod plugin)
- Forlix FloodCheck - chat spam i command flood.
- Rcon Locker / exploit fix - przeciwko zmianom rcon
- Command Blocker - blokowanie komend u graczy
Eventscripts=
- Miauw Mzx's Anti-Exploits - blokwanie exploitow
- [1] - blokowanie przed nie podłączonymi graczami, rconem i channel overflow
- Exploit Coverup - blokowanie przed komendami crashujacymi serwer.
- IronWall - whatever ;D
- Rcon LOCK - Locks players from unloading the plugin and stops players changing your rcon password.
- Block crash -- ochrona przed reliable channel overflow exploit.
- Anti-cheat - unconnected exploit i sv_cheat 1
- ServSecurity - skrypt zapobiegający crash'om
Firewall
Ochrona na innym poziomie, dzięki temu twój serwer gry nawet nie będzie świadom ataku ;) zakładamy, że eth0 to interfejs sieciowy na którym mamy ip danego serwera gry.
# Create chain reject on udp 28 flood
iptables -N REJECT_FLOOD28
iptables -A REJECT_FLOOD28 -j LOG --log-prefix 'IPTABLES-FLOOD LENGTH 28: ' --log-level info
iptables -A REJECT_FLOOD28 -j DROP
# Drope the udp packets of given length
iptables -A INPUT -i eth0 -p udp --dport 27015 -m length --length 28 -j REJECT_FLOOD28
iptables -A INPUT -i eth0 -p udp --dport 27025 -m length --length 28 -j REJECT_FLOOD28
iptables -A INPUT -i eth0 -p udp --dport 27050 -m length --length 28 -j REJECT_FLOOD28
iptables -A INPUT -i eth0 -p udp --dport 28000 -m length --length 28 -j REJECT_FLOOD28
iptables -A INPUT -i eth0 -p udp --dport 29000 -m length --length 28 -j REJECT_FLOOD28
# Create chain reject on udp 28 flood
iptables -N REJECT_FLOOD46
iptables -A REJECT_FLOOD46 -j LOG --log-prefix 'IPTABLES-FLOOD LENGTH 46: ' --log-level info
iptables -A REJECT_FLOOD46 -j DROP
# Drope the udp packets of given length
iptables -A INPUT -i eth0 -p udp --dport 27015 -m length --length 46 -j REJECT_FLOOD46
iptables -A INPUT -i eth0 -p udp --dport 27025 -m length --length 46 -j REJECT_FLOOD46
iptables -A INPUT -i eth0 -p udp --dport 27050 -m length --length 46 -j REJECT_FLOOD46
iptables -A INPUT -i eth0 -p udp --dport 28000 -m length --length 46 -j REJECT_FLOOD46
iptables -A INPUT -i eth0 -p udp --dport 29000 -m length --length 46 -j REJECT_FLOOD46
Fail2ban
Powyższy kod można bardzo wygodnie wykorzystać używając pakietu Fail2Ban. Przykład instalki na Debianie. Warto jednak wcześniej zaznajomić się z manualem fail2ban.
- instalacja pakietu
apt-get install fail2ban
- stworzenie nowego configa dla ddos gry
nano /etc/fail2ban/filter.d/game-ddos.conf
- dodajemy tam poniższy kod:
[Definition] failregex= IPTABLES-FLOOD LENGTH (28|48): IN=eth0 OUT= MAC=[a-zA-F0-9:]+ SRC=<HOST> DST=([0-9]{1,3}\.?){4} LEN=28
- rozszerzamy wpis w jail.conf
nano /etc/fail2ban/jail.conf [game-ddos] enabled = true port = 27015,27025,27050,28000,29000 protocol = udp filter = game-ddos logpath = /var/log/messages.log maxretry = 3 bantime = 6000
- następnie restart fail2ban
/etc/init.d/fail2ban stop /etc/init.d/fail2ban start
- a potem od czasu do czasu patrzymy na /var/log/fail2ban.log