#!/bin/sh # 20070508 # # Simple y estupido script de firewall de hogar para correr en rc.local. # Esta pensado para IP dinamica, hace Masquerading (similar a NAT pero para IP # dinamica), confia y acepta todo lo que viene por eth0, niega todo lo que # viene por ppp0,ppp1, pensado para una red local 192.168.x.x. # No evita varios tipos de DoS, usar solamente en el hogar. # Probado/usado en Debian Etch y Ubuntu 6.10. # MiNombre=$(basename $0) if [ "$1" != "start" -a "$1" != "stop" ]; then cat < start activa el firewall y stop lo desactiva dejando todo abierto. FINT exit 1 fi echo "$MiNombre: iniciando..." cd /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter for mod in nf_nat_* ip_conntrack_* ip_nat_* ip_tables.ko; do mod=$(basename $mod .ko) modprobe $mod done for tabla in $(cat /proc/net/ip_tables_names); do iptables -t $tabla -F iptables -t $tabla -X done iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT if [ "$1" = "stop" ]; then iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT echo "$MiNombre: listo (totalmente abierto)!" exit 0 fi # Necesario sino perdemos este valor en la tabla mangle: /etc/ppp/ip-up.d/0clampmss iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth0 -j ACCEPT iptables -A INPUT -s 127.0.0.1 -i ppp+ -j LOG --log-prefix 'ip spoofing' iptables -A INPUT -s 127.0.0.1 -i ppp+ -j DROP iptables -A INPUT -s 192.168.0.0/16 -i ppp+ -j LOG --log-prefix 'ip spoofing' iptables -A INPUT -s 192.168.0.0/16 -i ppp+ -j DROP iptables -A INPUT -p udp --dport ipp -j REJECT iptables -A INPUT -p tcp --dport microsoft-ds -j REJECT iptables -A INPUT -p tcp --dport loc-srv -j REJECT iptables -A INPUT -p tcp --dport netbios-ssn -j REJECT iptables -A INPUT -p udp --dport netbios-ns -j REJECT iptables -A INPUT -p tcp --dport auth -j REJECT #iptables -A INPUT -p tcp --dport ssh -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #iptables -A INPUT -j LOG --log-prefix 'denegado input' --log-level debug iptables -A INPUT -j REJECT iptables -A FORWARD -i eth0 -j ACCEPT iptables -A FORWARD -p icmp -j ACCEPT # Sip, es necesario en el forward tambien: iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -j LOG --log-prefix 'denegado forward' --log-level debug iptables -A FORWARD -j REJECT iptables -A OUTPUT -o lo -j ACCEPT iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE cd /proc/sys/net/ipv4 echo 1 >ip_forward echo 1 >ip_dynaddr echo 1 >tcp_ecn echo 1 >tcp_syncookies echo 1 >conf/all/rp_filter echo "$MiNombre: listo!"