Antes de empezar la guía, vamos a ver primero que es un ataque mediante DDoS.
DDoS viene de la abreviación en inglés de "Distributed Denial Of Service", que en español viene a ser "Ataque de Degeneración de Servicio". Básicamente este tipo de ataques se basa en sobrecargar los recursos de la máquina o lo que se vaya a atacar. Es un ataque bastante común y que está jodiendo bastante, así que aquí la guía para para el ataque DDoS en nuestros servidores de Metin2 por FreeBsd.
Primero vamos a activar el cortafuegos(firewall) y para ello debemos agregar las siguientes líneas al archivo rc.conf el cual se encuentra en la carpeta /etc/:
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
Ahora vamos a configurar el firewall, para ello vamos a /etc/pf.conf/ y lo abrimos con el editor de texto que utilicemos y le añadimos las siguientes líneas:
block in all
pass in quick on lo0
pass out quick on lo0
table persist file "/var/db/lalista(lo llamamos como queramos)"
block quick from
pass in quick on sis0 proto tcp from any to any port 22 keep state
pass in quick on sis0 proto tcp from any to any port 80 keep state
pass in quick on sis0 proto tcp from any to any port 3690 keep state
pass out all keep state
De esta manera bloqueamos las entradas.
Ahora vamos a crear "lalista"(o el nombre que hayan escogido ustedes) y para ello la damos el siguiente permiso:
touch /var/db/lalista
chmod 644 /var/db/lalista
Ahora vamos a crear el script al cual vamos a llamarlo bloqueo y para guardarlo le daremos permiso chmod 751 :
#!/usr/bin/perl
use strict;
my @assholes = ();
open (IN, "/var/log/auth.log");
while () {
if ($_ =~ /Invalid user.*from ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {
push(@assholes, $1);
}
if ($_ =~ /Did not receive identification string from ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {
push(@assholes, $1);
}
}
close (IN);
@assholes = sort {lc($a) cmp lc($b)} @assholes;
my @allowedIPs = ();
open (IN, "/var/db/allowed-ips");
while () {
if ($_ =~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {
push(@allowedIPs, $_);
}
}
close (IN);
chop(@allowedIPs);
my $tmp = "";
foreach my $asshole (@assholes) {
if ($asshole eq $tmp) {
$asshole = "";
} else {
if ($asshole =~ /127\.0\.0\.1/) {
$asshole = "";
}
if ($asshole =~ /192\.168\.[0-9]+\.[0-9]+/) {
$asshole = "";
}
foreach my $allowedIP (@allowedIPs) {
if ($asshole =~ /$allowedIP/) {
$asshole = "";
}
}
$tmp = $asshole;
}
}
@assholes = sort {lc($b) cmp lc($a)} @assholes;
my $popCount = 0;
foreach my $asshole (reverse @assholes) {
if ($asshole eq "") {
$popCount++;
}
}
for (my $i = 0; $i < $popCount; $i++) {
pop (@assholes);
}
my $list = "";
foreach my $asshole (@assholes) {
$list = $list . $asshole . " ";
}
exec "/sbin/pfctl -t bloqueo -T add $list";
Ahora vamos a /etc/syslog.conf y lo abrimos para editarlo y añadirle la siguiente línea:
auth.info;authpriv.info | exec /usr/bin/perl /sbin/bloqueo.pl
de esta manera nos ejecutará el script para el bloqueo de ips externas.
Espero que les sirva :miau: