Mostrando entradas con la etiqueta iptables. Mostrar todas las entradas
Mostrando entradas con la etiqueta iptables. Mostrar todas las entradas

jueves, 10 de septiembre de 2015

iptables: Banear ips automaticamente con lista

Esta es una solución sencilla para tener una lista de ips baneadas que podemos administrar fácilmente.
Hay soluciones más complejas y avanzadas como esta. Yo he optado por la más simple ya que de momento el volumen de ataques no es demasiado alto.
Esta solución la he sacado de este enlace el script esta explicado muy bien. Tiene algún fallito. falta declarar la variable TEMP y falta poner el parametro "-f" en el comando cp de la función unban. Este es el script tal y como yo lo estoy utilizando.

Creamos la carpeta /etc/myOwnFirewall y el script myOwnFirewall dentro de ella

mkdir /etc/myOwnFirewall
vi /etc/myOwnFirewall/myOwnFirewall


El contenido del script sería el siguiente

#!/bin/bash

# myOwnFirewall v0.1
#
# Script para banear IPs
#
# Author: Rolando Caldas
# http://rolandocaldas.com
#
# https://github.com/rolando-caldas/myOwnFirewall

BANNED_IPS="/etc/myOwnFirewall/banList.txt"
LOCK="/etc/myOwnFirewall/.lock"
TEMP="/etc/myOwnFirewall/temp"

function banIP {
        if [ -f ${LOCK} ]
        then
                if [ $# -eq 0 ]
                then
                        echo "You must enter an ip address"
                else
                        ip=$1
                        exists=false
                        for i in `cat $BANNED_IPS`; do
                                if [ $i = $ip ]
                                then
                                        exists=true
                                fi
                        done

                        if [ $exists = false ]
                        then
                                echo $ip >> $BANNED_IPS
                                iptables -I INPUT -s $ip -j DROP
                                iptables -I OUTPUT -s $ip -j DROP
                                echo "IP ${ip} banned"
                        else
                                echo "IP ${ip} already in the list"
                        fi
                fi
        else
                echo "myOwnFirewall is not running"
        fi
}

function restartScript {
        stopScript
        startScript
}

function showHelp {
        echo "Usage: myOwnFirewall {start|stop|restart}"
}

function startScript {

        if [ -f ${LOCK} ]
        then
                echo "myOwnFirewall is already running"
                exit
        else
                ` > ${LOCK}`

                for i in `cat $BANNED_IPS`; do
                        iptables -I INPUT -s $i -j DROP
                        iptables -I OUTPUT -s $i -j DROP
                done

                echo "myOwnFirewall started"
        fi

}

function stopScript {
        if [ -f ${LOCK} ]
        then
                for i in `cat $BANNED_IPS`; do
                        iptables -D INPUT -s $i -j DROP
                        iptables -D OUTPUT -s $i -j DROP
                done
                rm ${LOCK}

                echo "myOwnFirewall stopped"
        else
                echo "myOwnFirewall is not running"
        fi
}

function unbanIP {
        if [ -f ${LOCK} ]
        then
                if [ $# -eq 0 ]
                then
                        echo "You must enter an ip address*"
                else
                        ip=$1
                        exists=false

                        for i in `cat $BANNED_IPS`; do
                                if [ $i = $ip ]
                                then
                                        exists=true
                                else
                                        echo $i >> $TEMP
                                fi
                        done

                        if [ $exists = false ]
                        then
                                echo "IP ${ip} doesn't in the list"
                        else
                                cp -f $TEMP $BANNED_IPS && rm $TEMP
                                iptables -D INPUT -s $ip -j DROP
                                iptables -D OUTPUT -s $ip -j DROP
                                echo "IP ${ip} unbanned"
                        fi
                fi
        else
                echo "myOwnFirewall is not running"
        fi
}

case "$1" in
        ban)
                banIP $2
                exit
                ;;
        restart)
                restartScript
                exit
                ;;
        start)
                startScript
                exit
                ;;
        stop)
                stopScript
                exit
                ;;
        unban)
                unbanIP $2
                exit
                ;;
        *)
                showHelp
                exit
                ;;
esac


En centos y redhat es algo distinto a debian el funcionamiento de iptables los cambios en las reglas no se guardan a no ser que lo forcemos con "service iptables save".
Yo no me he complicado mucho y ejecuto el script con el parámetro start en el inicio del sistema en el rc.local y borro el fichero .lock en el shutdown. He aprovechado el script de iptables en el init.d y he añadido la línea rm -f /etc/myOwnFirewall/.lock en la función stop(). De este modo cuando se detiene el servicio iptables borra el fichero .lock que le sirve al script para saber si el baneado de ips está activo.
El funcionamiento del script está muy bien explicado en este enlace

domingo, 15 de marzo de 2015

Guardar reglas iptables de forma permanente - Raspbian

Guardamos el fichero "iptables" con las reglas de iptables por ejemplo en la ruta: /etc/network/iptables

Añadimos la siguiente línea en el archivo /etc/network/interfaces al final de la sección eth0, no al final del archivo.

post-up iptables-restore < /etc/network/iptables


Fuentes:http://www.cyberciti.biz/faq/how-do-i-save-iptables-rules-or-settings/

domingo, 19 de octubre de 2014

Básico Iptables

Listar configuración iptables:

iptables -nL --line-number


Guardar configuración iptables en un fichero:

iptables-save > iptables.conf


Restaurar configuración iptables desde un fichero:

iptables-restore < iptables.conf


Guardar la configuración para que una vez reiniciado el firewall se mantenga:

service iptables save
service iptables restart


Eliminar la regla 4 de la cadena INPUT

iptables -D INPUT 4

Permitir el acceso por el puerto 2222

iptables -A INPUT -p tcp -m tcp -dport 2222 -j ACCEPT

Ejemplo de un firewal básico http://www.linuxtotal.com.mx/index.php?cont=info_seyre_002

# ---------------------------------------------------------------------------------
# www.linuxtotal.com.mx
# firewall para un solo equipo conectado a traves de modem o adsl
# por: sergio.gonzalez.duran@gmail.com

# (1) se eliminan reglas previas que hubiera y cadenas definidas por el usuario


# (2) se establecen politicas "duras" por defecto, es decir solo lo que se autorice
# explicitamente podra ingresar o salir del equipo


# (3)a la interface lo (localhost) se le permite todo


# (4) evitamos ataques syn-flood limitando el acceso de paquetes nuevos
# desde internet a solo 4 por segundo y los demas se descartan


# (5) se evitan paquetes tcp que sean nuevos y que no tengan el flag SYN
# es decir, hay ataques o escaneos que llegan como conexiones nuevas
# pero sin ser paquetes syn, definitivamente no nos interesan


# (6) todo lo que sea icmp (ping) y que intente entrar, se descarta
# con esto bloqueamos cualquier tipo de paquetes con protocolo icmp
# evitando ataques como el del ping de la muerte, aunque esta regla
# podria provocar problemas de comunicacion con algunos ISP.


# (7) por ultimo las dos siguientes reglas permiten salir del equipo 
# (output) conexiones nuevas que nosotros solicitamos, conexiones establecidas
# y conexiones relacionadas, y deja entrar (input) solo conexiones establecidas
# y relacionadas.

# ---------------------------------------------------------------------------------

jueves, 31 de enero de 2013

Detener Firewall y deshabilitar SElinux en CentOS



Para deshabilitar SElinux

vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


Nos aseguramos que está deshabilitado

sestatus


Para deterner el firewaall

service iptables stop

y que no vuelva a arrancar

chkconfig iptables off 
reboot 

Para asegurarnos que el firewall no funciona

iptables -L

Enlaces relacionados: http://www.cyberciti.biz/faq/fedora-redhat-centos-5-6-disable-firewall/

Tutorial iptables: http://wiki.centos.org/HowTos/Network/IPTables
Referencia rápida iptables: http://elbauldelprogramador.com/internet/20-ejemplos-de-iptables-para-sysadmins/#more-314
Enlaces relacionados:
chkconfig: http://www.thegeekstuff.com/2011/06/chkconfig-examples/