Selkfoster firewall
rc.fireball
is a simple and powerful firewall script for a Home PC. The most recent version of this script can be found here: http://selkfoster.com.ar/scripts/rc.fireball.gz
#!/bin/sh # Start/stop/restart/status # # Versión: 0.3 Mié Ago 30 16:42:25 ART 2006 # # Escrito por Matías A. Fonzo <selkfoster@gmail.com>, <http://selkfoster.com.ar>. IPT=/usr/sbin/iptables fireball_start() { # INTERFACE POR DEFECTO: IFACE="ppp0" # Flush de reglas: $IPT -F; $IPT -X; $IPT -Z # Políticas por defecto: $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT # Bloquea las conexiones nuevas, excepto, si vienen desde adentro: $IPT -N block $IPT -A block -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A block -m state --state NEW -i ! $IFACE -j ACCEPT $IPT -A block -m state --state NEW,INVALID -i $IFACE -j DROP $IPT -A block -p tcp ! --syn -m state --state NEW -i $IFACE -j DROP $IPT -A block -j DROP # Prevención de ataques SYN flood: $IPT -N syn-flood $IPT -A INPUT -i $IFACE -p tcp --syn -j syn-flood $IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN $IPT -A syn-flood -j LOG --log-prefix "SYN flood: " $IPT -A syn-flood -j DROP # Descartar paquetes fragmentados: $IPT -A INPUT -i $IFACE -f -j DROP $IPT -A INPUT -i $IFACE -f -j LOG --log-prefix "pkt frag: " # Recibir PING's desde el exterior: $IPT -A INPUT -i $IFACE -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Loguear peticiónes de Ping: $IPT -A INPUT -i $IFACE -p icmp --icmp-type echo-request -j LOG --log-prefix "ping request: " # Activar protección contra IGMP's: $IPT -A INPUT -i $IFACE -p igmp -j DROP # Evitar Spoofing: $IPT -A INPUT -i $IFACE -s 127.0.0.0/8 -j REJECT --reject-with icmp-host-prohibited $IPT -A INPUT -i $IFACE -s 192.168.0.1/16 -j REJECT --reject-with icmp-host-prohibited ## Saltar a la cadena block desde las cadenas INPUT y FORWARD: $IPT -A INPUT -j block $IPT -A FORWARD -j block # Evitar técnicas del tipo "OS fingerprint guessing": $IPT -A OUTPUT -p icmp -o $IFACE --icmp-type 3/4 -j DROP $IPT -A OUTPUT -p icmp -o $IFACE --icmp-type 5 -j DROP $IPT -A OUTPUT -p icmp -o $IFACE --icmp-type 13 -j DROP $IPT -A OUTPUT -p icmp -o $IFACE --icmp-type 14 -j DROP $IPT -A OUTPUT -p icmp -o $IFACE --icmp-type 15 -j DROP $IPT -A OUTPUT -p icmp -o $IFACE --icmp-type 16 -j DROP $IPT -A OUTPUT -p icmp -o $IFACE --icmp-type 17 -j DROP $IPT -A OUTPUT -p icmp -o $IFACE --icmp-type 18 -j DROP # Verificación de dirección. for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo "1" > $f done # Envio de mensajes de redireccion. for f in /proc/sys/net/ipv4/conf/*/send_redirects ; do echo "0" > $f done # FORWARD entre interfaces (routing). echo "0" > /proc/sys/net/ipv4/ip_forward # Redireccion de interfaces. for f in /proc/sys/net/ipv4/conf/*/accept_redirects ; do echo "0" > $f done # Para gateway o enrutador. for f in /proc/sys/net/ipv4/conf/*/accept_source_route ; do echo "0" > $f done # IP dinámica (SLIP, PPP o DHCP). echo "1" > /proc/sys/net/ipv4/ip_dynaddr # Ignorar respuestas extrañas de ICMP. echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Ignorar broadcasts. echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Protección TCP SYN Cookie. echo "1" > /proc/sys/net/ipv4/tcp_syncookies # Log marciano (paquetes con direcciónes imposibles). echo "1" > /proc/sys/net/ipv4/conf/all/log_martians # Timestamps. echo "0" > /proc/sys/net/ipv4/tcp_timestamps # Reducir la habilidad de los DoS, reduciendo los timeouts. # Defaults: 60 - 7200 - 16384 echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout echo "3600" > /proc/sys/net/ipv4/tcp_keepalive_time echo "4096" > /proc/sys/net/ipv4/tcp_max_orphans echo "1" > /proc/sys/net/ipv4/tcp_window_scaling echo "0" > /proc/sys/net/ipv4/tcp_sack echo "fireball start on $IFACE" } fireball_stop() { # flush de reglas... $IPT -F; $IPT -X; $IPT -Z # set de políticas... $IPT -P INPUT ACCEPT $IPT -P FORWARD ACCEPT $IPT -P OUTPUT ACCEPT # remover modulos... # para kernel 2.6.16+ for modules in ipt_REJECT xt_limit ipt_LOG xt_tcpudp xt_state iptable_filter ip_conntrack ip_tables x_tables ; do rmmod $modules 2> /dev/null done # anterior a 2.6.16 y de la serie 2.4 #for modules in ipt_REJECT ipt_limit ipt_LOG ipt_state iptable_filter ip_conntrack ip_tables ; do # rmmod $modules 2> /dev/null #done echo "fireball stopped" } fireball_restart() { echo -n "Restarting... " fireball_start } fireball_status() { $IPT -L -n -v } case "$1" in 'start') fireball_start ;; 'stop') fireball_stop ;; 'restart') fireball_restart ;; 'status') fireball_status ;; *) echo "uso $0 start|stop|restart|status" esac