La configuración de red de mis clientes es: IP: 192.168.1.x netmask: 255.255.255.0 Puerta de enlace: 192.168.1.1 DNSPrimario: 192.168.1.1 eth0 = internet ==> 200.27.4.7 eth1 = Lan ==> 192.168.1.1 Para configurar el IPTABLES hemos creado un script con la siguiente configuración:!/bin/bash FLUSH de reglas iptables -F iptables -X iptables -Z iptables -t nat -F Establecemos politica por defecto: DROP iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP Reglas para encontrar puertos dinamicos de escucha FTP modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp Ese peazo de bit que hay que habilitar echo 1 > /proc/sys/net/ipv4/ip_forward Que me haga log de todo el forward /sbin/iptables -A FORWARD -j LOG
/sbin/iptables -A INPUT -j LOG /sbin/iptables -A OUTPUT -j LOG Reenvío de paquetes desde una interfaz de red local (eth1) hacia una interfaz de red pública (eth0): /sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT He aqui el forward para la LAN, una regla mágica /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 192.168.1.1 Proxy Transparent: peticiones al puerto 80 redirigir al SQUID(3128) /sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128 /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 Empezamos a filtrar? no! empezamos a abrir! porque ahora esta TODO denegado. Debemos decir de manera explicita qué es lo que queremos abrir Operar en localhost sin limitaciones /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -o lo -j ACCEPT /sbin/iptables -A INPUT -i eth1 -j ACCEPT /sbin/iptables -A OUTPUT -o eth1 -j ACCEPT Permitir ping hacia fuera, desde la propia maquina /sbin/iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT && echo "Aceptamos ICMP request hacia fuera" /sbin/iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT && echo "Aceptamos ICMP reply hacia dentro" Permitir ping hacia fuera, desde la red interna
/sbin/iptables -A FORWARD -i eth1 -p icmp --icmp-type echo-request -j ACCEPT && echo "Aceptamos ICMP request a todos" /sbin/iptables -A FORWARD -i eth0 -p icmp --icmp-type echo-reply -j ACCEPT && echo "Aceptamos ICMP reply a todos" Aceptar reenviar los paquetes que son parte de conexiones existentes (ESTABLISHED) o relacionadas de tráfico entrante desde la interfaz eth1 para tráfico saliente por la interfaz eth0: /sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT Permitir paquetes en el propio muro cortafuegos para tráfico saliente a través de la interfaz eth0 que son parte de conexiones existentes o relacionadas: /sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT Permitimos que la maquina pueda salir a la web /sbin/iptables -A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT Si se desea permitir conexiones desde clientes Open SSH remotos /sbin/iptables -A INPUT -p tcp -m tcp --sport 22 -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 22 --tcp-flags ALL SYN -j LOG Ya tambien a webs seguras /sbin/iptables -A INPUT -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p tcp) para los puertos (--destination-port) de los protocolos SMTP (25), HTTP(80), HTTPS (443) y SSH (22): /sbin/iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 25 --syn -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 80 --syn -j ACCEPT /sbin/iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 443 --syn -j ACCEPT /sbin/iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 22 --syn -j ACCEPT SALIDA FTP - Para que el servidor se pueda conectar a FTPs /sbin/iptables -A INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -o eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT ftp activo /sbin/iptables -A INPUT -i eth0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A OUTPUT -o eth0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT ftp pasivo /sbin/iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -o eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state -- state ESTABLISHED,RELATED -j ACCEPT Permitimos la consulta a un primer DNS /sbin/iptables -A INPUT -s 200.29.4.65 -p udp -m udp --sport 53 -j ACCEPT /sbin/iptables -A OUTPUT -d 200.29.4.65 -p udp -m udp --dport 53 -j ACCEPT Permitimos la consulta a un segundo DNS /sbin/iptables -A INPUT -s 200.29.4.66 -p udp -m udp --sport 53 -j ACCEPT /sbin/iptables -A OUTPUT -d 200.29.4.66 -p udp -m udp --dport 53 -j ACCEPT A su vez no se desea que el servidor sea victima de ataques de fuerza bruta, se ingresa la siguiente sintaxis, De esta manera se rechazan las conexiones en la tarjeta publica del servidor (eth0) para el servicio SSH después de 2 intentos de conexión en un intervalo de 40 segundos. iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 40 --hitcount 2 -j DROP
Telnet solo Dejar salir hacia fuera, desde red interna y la propia maquina /sbin/iptables -A FORWARD -i eth1 -p tcp --dport 23 -s 192.168.1.0/24 -j ACCEPT && echo "Aceptamos telnet a traves" /sbin/iptables -A OUTPUT -p tcp --dport 23 -j ACCEPT && echo "Aceptamos Telnet hacia fuera" Dejar entrar paquetes de las conexiones establecidas, hacia la red interna y la propia maquina /sbin/iptables -A FORWARD -i eth0 -p tcp -m tcp --sport 23 -m state --state 'RELATED' --state 'ESTABLISHED' -j ACCEPT /sbin/iptables -A INPUT -p tcp -m tcp --sport 23 -m state --state 'RELATED' --state 'ESTABLISHED' -j ACCEPT También se pueden denegar algunos puertos élites de crackers por medio de la siguiente sintaxis; /sbin/iptables -A OUTPUT -o eth1 -p tcp --dport 31337 --sport 31337 -j DROP /sbin/iptables -A FORWARD -o eth1 -p tcp --dport 31337 --sport 31337 -j DROP /sbin/iptables -A OUTPUT -o eth1 -p tcp --dport 7100 --sport 31337 -j DROP /sbin/iptables -A FORWARD -o eth1 -p tcp --dport 7100 --sport 31337 -j DROP Y para la configuracion de Squid en modo transparente dentro del fichero squid.conf: Recommended minimum configuration: visible_hostname proxy acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl permitidos src "/etc/squid/listas/permitidos" acl limitados src "/etc/squid/listas/limitados" acl porno url_regex "/etc/squid/listas/porno" acl dominios-denegados dstdomain "/etc/squid/listas/dominios" acl extensiones urlpath_regex "/etc/squid/listas/extensiones" Example rule allowing access from your local networks. Adapt to list your (internal) IP networks from where browsing should be allowed acl localnet src 10.0.0.0/8 RFC1918 possible internal network acl localnet src 172.16.0.0/12 RFC1918 possible internal network acl localnet src 192.168.0.0/16 RFC1918 possible internal network acl localnet src fc00::/7 acl localnet src fe80::/10 RFC 4193 local private network range RFC 4291 link-local (directly plugged) machines acl SSL_ports port 443 acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 acl Safe_ports port 70 acl Safe_ports port 210 http ftp https gopher wais acl Safe_ports port 1025-65535 unregistered ports acl Safe_ports port 280 acl Safe_ports port 488 acl Safe_ports port 591 acl Safe_ports port 777 http-mgmt gss-http filemaker multiling http acl CONNECT method CONNECT acl FTP proto FTP always_direct allow FTP
Recommended minimum Access Permission configuration: Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager Deny requests to certain unsafe ports http_access deny!safe_ports Deny CONNECT to other than secure SSL ports http_access deny CONNECT!SSL_ports We strongly recommend the following be uncommented to protect innocent web applications running on the proxy server who think the only one who can access services on "localhost" is a local user http_access deny to_localhost INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS Example rule allowing access from your local networks. Adapt localnet in the ACL section to list your (internal) IP networks from where browsing should be allowed http_access allow localnet http_access allow localhost http_access allow permitidos http_access allow limitados!porno!dominios-denegados!extensiones And finally deny all other access to this proxy http_access deny all
Squid normally listens to port 3128 http_port 192.168.1.1:3128 intercept We recommend you to use at least the following line. hierarchy_stoplist cgi-bin? Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /var/spool/squid 5120 16 256 Leave coredumps in the first cache dir coredump_dir /var/spool/squid ftp_passive on ftp_sanitycheck on Add any of your own refresh_pattern entries above these. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/ \?) 0 0% 0 refresh_pattern. 0 20% 4320