set_iptables

set_iptables(){
    clear
    f_banner
    echo -e "\e[34m---------------------------------------------------------------------------------------------------------\e[00m"
    echo -e "\e[93m[+]\e[00m Setting IPTABLE RULES"
    echo -e "\e[34m---------------------------------------------------------------------------------------------------------\e[00m"
    echo ""
    echo -n " Setting Iptables Rules..."
    spinner
    sh templates/iptables.sh
    cp templates/iptables.sh /etc/init.d/
    ln -s /etc/init.d/iptables.sh /etc/rc2.d/S99iptables.sh
    say_done
}

La función set_iptables configura las reglas de firewall del servidor Linux. Hace uso del script que se encuentra en templates/iptables.sh. Jshielder copia el script a /etc/init.d y crea el link simbólico correspondiente para que sea ejecutado en el inicio. Veamos que contiene el script iptables.sh:

iptables -F

#Defaults

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

#Rules for PSAD  

iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG

# INPUT

# Aceptar loopback input

iptables -A INPUT -i lo -p all -j ACCEPT

# Permitir Handshake de tres vias

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Detener Ataques Enmascarados

iptables -A INPUT -p icmp --icmp-type 13 -j DROP
iptables -A INPUT -p icmp --icmp-type 17 -j DROP
iptables -A INPUT -p icmp --icmp-type 14 -j DROP
iptables -A INPUT -p icmp -m limit --limit 1/second -j ACCEPT


# Descartar Paquetes Inválidos

iptables -A INPUT -m state --state INVALID -j DROP

iptables -A FORWARD -m state --state INVALID -j DROP

iptables -A OUTPUT -m state --state INVALID -j DROP


### Descartar Ataques de Spoofing
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -j DROP

iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

# Descartar paquetes RST Excesivos para Evitar Ataques Enmascarados

iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT



# Cualquier IP que intente un Escaneo de Puertos sera Bloqueada por 24 Horas.

iptables -A INPUT   -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# Pasadas las 24 Horas, remover la IP Bloqueada por Escaneo de Puertos

iptables -A INPUT   -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# Esta Regla agrega el Escaner de Puertos a la Lista de PortScan y Registra el Evento.

iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

# Permitir estos puertos desde Fuera

# smtp
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT

# http
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

# https
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# ssh & sftp
iptables -A INPUT -p tcp -m tcp --dport 372 -j ACCEPT

# Permitir el Ping

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

# OUTPUT

iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Permitir estos puertos desde Fuera

# smtp
iptables -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT

# http
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

# https
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT

# ssh & sftp
iptables -A OUTPUT -p tcp -m tcp --dport 372 -j ACCEPT

# Limit SSH connection from a single IP

iptables -A INPUT -p tcp --syn --dport 372 -m connlimit --connlimit-above 2 -j REJECT



# Permitir Pings

iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT

# No Permitir Forward

iptables -A FORWARD -j REJECT

No voy a explicar cada regla ya que las descripciones están ahí para que veamos para que es cada una. Actualmente nos encontramos trabajando en reglas mucho más estrictas y la capacidad de customizar las reglas durante la ejecución de JSHielder.