Ingredientes 1 Debian GNU/Linux 1 Iptables 1 squid 1 p3scan 1 clamav 1 spamassassin Comencemos a cocinar El objetivo del documento es conseguir instalar un servidor que haga las veces de enrutador, cortafuegos, pasarela y proxy transparente de web y POP3, entre una red local (LAN) e Internet. Es decir que sin tocar nada en los equipos clientes de la red local, podamos disponer de un cortafuegos que ademas filtre el tráfico http y analice la descarga de correo (POP3) en busca de spam y virus. Todos los manuales que he encontrado para filtrar spam y antivirus se basan en instalar un servidor de correo y filtrar el protocolo SMTP. Eso te obliga a tener cuentas de correo, usuarios... Mi intención era únicamente analizar el tráfico en busca de virus y spam en los correos de los clientes, independientemente de cual sea su servidor (direcciones personales, empresariales...). La solución es p3scan, un proxy transparente de POP3. Pero ni siquiera en su web he encontrado un manual de instalación. Este Post pretende ser una guia permita instalar y configurar un proxy transparente de POP3 integrado en un cortafuegos y a su vez que tenga un proxy transparente de web y redireccionamientos NAT. Para ello vamos a utilizar Debian GNU/Linux con, principalmente, iptables, squid, p3scan, clamav y spampd (SpamAssassin). Instalación del sistema base Vamos a utilizar un CD de Debian que nos permitirá de forma facil y sencilla instalar un sistema básico. Recordemos que puesto que vamos a instalar un firewall, es mejor no instalar paquetes innecesarios. Realizamos una instalación minima arrancando desde el CD (sin utilizar repositorios en red) instalando solo el sistema base. Una vez instalado el sistema desde el CD, configuramos algunos detalles. Activar framebuffer en consola (OPCIONAL) dijo:# vi /boot/grub/menu.lst (...) kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/hda3 ro vga=791 (...) Configuración de la red Configuramos las interfaces. # vi /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface #allow-hotplug eth0 #iface eth0 inet dhcp ### Interfaz EXTERNA iface eth0 inet static address 280.280.280.280 # Aquí debe ir la IP pública del equipo # Esta es una IP ficticia. De hecho no es una IP válida. # Es la que usaremos como ejemplo netmask 255.255.255.0 gateway 280.280.280.1 up route add default gw 280.280.280.1 ### Interfaz INTERNA iface eth1 inet static address 192.168.0.10 netmask 255.255.255.0 auto eth0 auto eth1 Configuramos la resolucion DNS. Tengo disponible una lista de servidores de DNS. Aquí pongo un par de servidores de ejemplo. dijo:# vi /etc/resolv.conf nameserver 80.58.0.33 nameserver 80.58.32.97 Ahora si pueden actualizar el sistema dijo:# aptitude update # aptitude upgrade # aptitude dist-upgrade Instalamos algunos paquetes utiles y/o necesarios dijo:# aptitude install less vim lynx lsof telnet tofrodos # aptitude install openssh-server nmap iptables ... y el entorno grafico si lo deseamos (NO SE RECOMIENDA) # aptitude install xserver-xorg xserver-common xfonts-base gnome Quitamos servicios innecesarios (El servicio portmap puede ser necesario matarlo con kill -9) dijo:# /etc/init.d/portmap stop # update-rc.d -f portmap remove # update-inetd --disable chargen # update-inetd --disable ident # update-inetd --disable discard Opcionalmente y según lo que hayamos instalado (RECOMENDADO) # /etc/init.d/cups stop # update-rc.d -f cups remove # update-rc.d -f gdm remove Servicios a quitar si no se ha realizado la instalación básica indicada dijo:# /etc/init.d/lpd stop # update-rc.d -f lpd remove # /etc/init.d/nfs-common stop # update-rc.d -f nfs-common remove # /etc/init.d/pcmcia stop # update-rc.d -f pcmcia remove # /etc/init.d/ppp stop # update-rc.d -f ppp remove # /etc/init.d/exim4 stop # update-rc.d -f exim4 remove # /etc/init.d/bittorrent stop # update-rc.d -f bittorrent remove # update-rc.d -f ntpdate remove # update-inetd --disable time # update-inetd --disable daytime # update-inetd --disable echo Configuración de ssh Configuramos ssh para cambiar el puerto, reducir el tiempo de login, denegar conexiones de root, autorizar el acceso solo a ciertos usuarios y con fichero de clave privada, etc. Instalación de la pasarela -gateway- con enrutador y cortafuegos Copiamos los archivos para gestionar iptables en el directorio /etc/network/iptables. dijo:# mkdir /etc/network/iptables # cd /etc/network/iptables # wget http://www.guimi.net/datos/tec-docs/firewall/guimi_iptables.tgz # tar xzf guimi_iptables.tgz Tendremos los siguientes ficheros: ipflush.sh anula cortafuegos y enrutador. Es el script que se ejecuta al hacer "iptables stop". ipgw_flush.sh activa el enrutador sin cortafuegos (permitiendo todo el tráfico). MUY PELIGROSO. iprules.sh activa el enrutador y cortafuegos. Es el más importante y al que más tiempo habrá que dedicar para adaptarlo a nuestras necesidades. Es el script que se ejecuta al hacer "iptables start". iptables utilizado para des/activar enrutador y cortafuegos. iptables-check muestra las reglas de iptables activas en el sistema. iptables.flush contiene la salida de iptables-save > iptables.flush tras ejecutar ipflush.sh Ahora se puede ver el contenido de iprules.sh que nos permite: generar un cortafuegos con todas las acciones por omisión a "DROP" (si un paquete no se ha aceptado explícitamente, se descarta) hacer DNAT para un par de servidores FTP y web (redirige peticiones FTP y web de la dirección pública a servidores internos) hacer NAT de salida para la intranet (los equipos de la LAN pueden navegar con la ip pública del servidor) utilizar un par de proxys transparentes de web y POP3 redireccionando las peticiones de los equipos clientes (cuando un cliente pretende navegar o leer un correo el servidor "secuestra" la conexión y la analiza antes de permitirla) dijo:#!/bin/bash # # # Para guardar las reglas #+ iptables-save > reglas #+ iptables-restore < reglas # # Miramos si tenemos un parametro en linea de comando if [ -n "$1" ] && [ "$1" = "q" ] then QUIET="1" else QUIET="0" fi # Registramos el inicio del firewall #FECHA=$(date +"%C%y-%m-%d %H:%M" #echo $FECHA #/usr/bin/logger -p kern.notice -t NETFILTER # "====== Iniciado Cortafuegos: $FECHA =========" if [ $QUIET = "0" ]; then echo " www.Taringa.Net" echo " ------------------------------------------" fi # PARAMETRIZACION DEL SCRIPT ########################################## ### Definimos constantes para usar en el ###+ script if [ $QUIET = "0" ]; then echo " Cargando parametros..." fi # Binario de iptables IPTABLES=/sbin/iptables # INTERFACES # eth0 - conectado a internet con IP FIJA EXT_IF=eth0 EXT_IP=280.280.280.280 # eth1 - conectado a LAN LAN_IF=eth1 LAN_IP=192.168.0.1 LAN_RED=192.168.0.0/24 # lo - interfaz de loopback LOO_RED=127.0.0.0/8 # cualquier red ANY_RED=0.0.0.0/0 # MAQUINAS INTERNAS IP_SERVIDOR_FTP=192.168.0.2 if [ $QUIET = "0" ]; then echo " Cargando modulos..." fi ########################################## ### Nos aseguramos que tenemos cargados ###+ los modulos necesarios modprobe ip_conntrack_irc modprobe ip_conntrack_ftp modprobe ip_nat_irc modprobe ip_nat_ftp if [ $QUIET = "0" ]; then echo " Limpiando FW..." fi ########################################## ### Limpiamos la configuracion existente # Limpiamos (flush) las reglas $IPTABLES -F # Borramos 'cadenas' de usuario $IPTABLES -X # Ponemos a cero paquetes y contadores $IPTABLES -Z # Limpiamos las reglas de NAT $IPTABLES -t nat -F # Borramos 'cadenas' de usuario de NAT $IPTABLES -t nat -X if [ $QUIET = "0" ]; then echo " Estableciendo politicas..." fi ########################################## ### Establecemos las politicas por omision ###+ de las 'cadenas' # Por omision descartamos los paquetes $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP # PREROUTING - NAT sobre la IP destino: normalmente desde inet hacia LAN # POSTROUTING - NAT sobre la IP origen: normalmente desde LAN hacia inet $IPTABLES -t nat -P PREROUTING DROP $IPTABLES -t nat -P POSTROUTING DROP # Relajamos la politica de salida #+ Dejamos salir paquetes de LAN_IP por LAN_IF $IPTABLES -A OUTPUT -o $LAN_IF -s $LAN_IP -j ACCEPT #+ Dejamos salir paquetes de EXT_IP por EXT_IF $IPTABLES -A OUTPUT -o $EXT_IF -s $EXT_IP -j ACCEPT if [ $QUIET = "0" ]; then echo " -> Denegacion de redes invalidas..." fi ########################################## # No admitimos desde el exterior redes locales (RFC 1918) $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 192.168.0.0/16 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 10.0.0.0/8 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 172.16.0.0/12 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 224.0.0.0/4 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 240.0.0.0/5 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s $LOO_RED -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 0.0.0.0/8 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 169.254.0.0/16 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 255.255.255.255 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_IF -s $EXT_IP -j DROP # Desde el interior solo admitimos nuestra red LAN $IPTABLES -t nat -A PREROUTING -i $LAN_IF -s ! $LAN_RED -j DROP if [ $QUIET = "0" ]; then echo " -> Denegacion de broadcast de NetBIOS..." fi ########################################## # Bloquear paquetes broadcast de NetBios salientes iptables -A FORWARD -p tcp --sport 137:139 -o $EXT_IF -j DROP iptables -A FORWARD -p udp --sport 137:139 -o $EXT_IF -j DROP iptables -A OUTPUT -p tcp --sport 137:139 -o $EXT_IF -j DROP iptables -A OUTPUT -p udp --sport 137:139 -o $EXT_IF -j DROP if [ $QUIET = "0" ]; then echo " Activando NAT..." fi ########################################## # Activamos el bit de forward echo 1 > /proc/sys/net/ipv4/ip_forward # Enmascaramos la salida de la LAN $IPTABLES -t nat -A POSTROUTING -s $LAN_RED -o $EXT_IF -j MASQUERADE if [ $QUIET = "0" ]; then echo " Acceso local permitidos..." fi ########################################## ### Permitimos ciertos accesos a la maquina if [ $QUIET = "0" ]; then echo " -> loopback..." fi # Permitimos todas las conexiones del interfaz loopback #$IPTABLES -A INPUT -i lo -j ACCEPT #$IPTABLES -A OUTPUT -o lo -j ACCEPT $IPTABLES -A INPUT -i lo -s $LOO_RED -d $LOO_RED -j ACCEPT $IPTABLES -A OUTPUT -o lo -s $LOO_RED -d $LOO_RED -j ACCEPT # Permitimos el PostEnrutado de paquetes enviados localmente $IPTABLES -t nat -A POSTROUTING -o lo -s $LOO_RED -j ACCEPT if [ $QUIET = "0" ]; then echo " -> LAN..." fi # Damos acceso desde la red local $IPTABLES -A INPUT -s $LAN_RED -i $LAN_IF -j ACCEPT $IPTABLES -A OUTPUT -d $LAN_RED -o $LAN_IF -j ACCEPT if [ $QUIET = "0" ]; then echo " -> DNS..." fi # Aceptamos conexiones DNS $IPTABLES -A INPUT -s $ANY_RED -i $EXT_IF -p udp -m udp --sport 53 --dport 1024:65535 -j ACCEPT $IPTABLES -A OUTPUT -d $ANY_RED -o $EXT_IF -p udp -m udp --dport 53 --sport 1024:65535 -j ACCEPT if [ $QUIET = "0" ]; then echo " -> ntpd..." fi # Aceptamos conexiones ntpd $IPTABLES -A INPUT -p udp -m udp --dport 123 -i $EXT_IF -s $ANY_RED -j ACCEPT $IPTABLES -A OUTPUT -p udp -m udp --sport 123 -j ACCEPT if [ $QUIET = "0" ]; then echo " -> icmp..." fi # Permitimos paquetes ICMP (ping, traceroute...) #+ con limites para evitar ataques de DoS # Aceptamos ping y pong $IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/s -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -m limit --limit 2/s -j ACCEPT $IPTABLES -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 2/s -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -m limit --limit 2/s -j ACCEPT # Aceptamos redirecciones $IPTABLES -A INPUT -p icmp --icmp-type redirect -m limit --limit 2/s -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type redirect -m limit --limit 2/s -j ACCEPT # Aceptamos tiempo excedido $IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -m limit --limit 2/s -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type time-exceeded -m limit --limit 2/s -j ACCEPT # Aceptamos destino inalcanzable $IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -m limit --limit 2/s -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -m limit --limit 2/s -j ACCEPT if [ $QUIET = "0" ]; then echo " -> ssh..." fi # Abrimos el puerto xxxx para ssh #$IPTABLES -A INPUT -p tcp -i $EXT_IF -s $ANY_RED -m tcp --dport xxxx --sport 1024:65535 -j ACCEPT $IPTABLES -A INPUT -p tcp -s $ANY_RED -m tcp --dport xxxx --sport 1024:65535 -m state --state NEW -j LOG --log-prefix "[FW - SSH] " $IPTABLES -A INPUT -p tcp -s $ANY_RED -m tcp --dport xxxx --sport 1024:65535 -j ACCEPT # ...y conexiones salientes relacionadas $IPTABLES -A OUTPUT -p tcp -m tcp --sport xxxx -m state --state RELATED,ESTABLISHED -j ACCEPT if [ $QUIET = "0" ]; then echo " Redirecciones..." fi ########################################## ### Generamos redireccionamientos ###+ transparentes para el resto de maquinas if [ $QUIET = "0" ]; then echo " -> Proxy web transparente (Squid)..." fi #+ Con la redireccion activa (primera linea) #+ no se llega a la segunda linea #+ Para bloquear todo acceso a la web comentar #+ solo la primera linea #+ Para anular el proxy comentar las dos reglas $IPTABLES -t nat -A PREROUTING -i $LAN_IF -s $LAN_RED -p tcp --dport 80 -j REDIRECT --to-port 3128 $IPTABLES -A FORWARD -i $LAN_IF -p tcp --dport 80 -j DROP if [ $QUIET = "0" ]; then echo " -> Filtro de correo (P3Scan)..." fi #+ Con la redireccion activa (primera linea) #+ no se llega a la segunda linea #+ Para bloquear todo acceso a POP comentar #+ solo la primera linea #+ Para anular el filtrado comentar las dos reglas $IPTABLES -t nat -A PREROUTING -i $LAN_IF -s $LAN_RED -p tcp --dport 110 -j REDIRECT --to-port 8110 $IPTABLES -A FORWARD -i $LAN_IF -p tcp --dport 110 -j DROP ###$IPTABLES -t nat -A OUTPUT -p tcp --dport 110 -m owner --owner-id p3scan -j ACCEPT ###$IPTABLES -t nat -A OUTPUT -p tcp --dport 110 -j REDIRECT --to-port 8110 if [ $QUIET = "0" ]; then echo " -> DNAT (21 y 20)..." fi # Redirigimos "$EXT_IP":2220-1 a "$IP_SERVIDOR_FTP":20-1 ###$IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -p tcp --dport 21 -j LOG --log-prefix "[FW - FTP] " $IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -p tcp --dport 220 -j DNAT --to "$IP_SERVIDOR_FTP":20 $IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -p tcp --dport 221 -j DNAT --to "$IP_SERVIDOR_FTP":21 # ...y conexiones salientes relacionadas (ftp pasivo) $IPTABLES -t nat -A PREROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT # Permitimos postruteos a "$IP_SERVIDOR_FTP":20-1 $IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_SERVIDOR_FTP -p tcp --dport 20 -j ACCEPT $IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_SERVIDOR_FTP -p tcp --dport 21 -j ACCEPT # Permitimos reenvios desde el exterior a "$IP_SERVIDOR_FTP":20-1 $IPTABLES -A FORWARD -i $EXT_IF -d $IP_SERVIDOR_FTP -p tcp --dport 20 -j ACCEPT $IPTABLES -A FORWARD -i $EXT_IF -d $IP_SERVIDOR_FTP -p tcp --dport 21 -j ACCEPT if [ $QUIET = "0" ]; then echo " Reenvios..." fi ########################################## ### Aceptamos algunos reenvios if [ $QUIET = "0" ]; then echo " -> icmp..." fi # Permitimos paquetes ICMP (ping, traceroute...) #+ con limites para evitar ataques de DoS # Aceptamos ping y pong $IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 2/s -j ACCEPT $IPTABLES -A FORWARD -p icmp --icmp-type echo-reply -m limit --limit 2/s -j ACCEPT # Aceptamos redirecciones $IPTABLES -A FORWARD -p icmp --icmp-type redirect -m limit --limit 2/s -j ACCEPT # Aceptamos tiempo excedido $IPTABLES -A FORWARD -p icmp --icmp-type time-exceeded -m limit --limit 2/s -j ACCEPT # Aceptamos destino inalcanzable $IPTABLES -A FORWARD -p icmp --icmp-type destination-unreachable -m limit --limit 2/s -j ACCEPT # Aceptamos todas en LAN_IF $IPTABLES -t nat -A PREROUTING -i $LAN_IF -p icmp --icmp-type any -m limit --limit 2/s -j ACCEPT $IPTABLES -t nat -A POSTROUTING -o $LAN_IF -p icmp --icmp-type any -m limit --limit 2/s -j ACCEPT if [ $QUIET = "0" ]; then echo " Salida general..." fi ########################################## ### Aceptamos conexiones salientes # Permitimos cualquier salida tcp desde la propia maquina $IPTABLES -A OUTPUT -o $EXT_IF -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT # ...y conexiones entrantes relacionadas $IPTABLES -A INPUT -i $EXT_IF -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # Permitimos el reenvio de paquetes enviados desde la LAN $IPTABLES -A FORWARD -i $LAN_IF -j ACCEPT # ...y conexiones salientes relacionadas $IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # Permitimos el NAT de paquetes enviados desde la LAN $IPTABLES -t nat -A PREROUTING -i $LAN_IF -j ACCEPT # ...y conexiones salientes relacionadas $IPTABLES -t nat -A PREROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT # Permitimos el NAT de paquetes enviados desde inet hacia la IP publica $IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -j ACCEPT # ...y conexiones salientes relacionadas $IPTABLES -t nat -A PREROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT # Permitimos el NAT de paquetes enviados desde la IP publica hacia inet $IPTABLES -t nat -A POSTROUTING -o $EXT_IF -s $EXT_IP -j ACCEPT # ...y conexiones salientes relacionadas $IPTABLES -t nat -A POSTROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT # Permitimos el PostEnrutado de paquetes enviados localmente $IPTABLES -t nat -A POSTROUTING -o $LAN_IF -s $LAN_RED -j ACCEPT if [ $QUIET = "0" ]; then echo " Cerrando puertos restringidos..." fi ########################################## ### Puertos restringidos (telnet, ftp, imap, pop3, etc.) ###+ Reiterativo: para pruebas $IPTABLES -A INPUT -p tcp --dport 1:1024 -j DROP $IPTABLES -A INPUT -p udp --dport 1:1024 -j DROP ###echo " ACTIVADO DEBUG..." ########################################## ### Reglas utilizadas en debug para detectar #+ paquetes no tratados todavia #+ -j LOG --log-prefix "--PR> " ###$IPTABLES -t nat -A PREROUTING -j LOG --log-prefix "[FW - PR] " ###$IPTABLES -t nat -A POSTROUTING -j LOG --log-prefix "[FW - PO] " ###$IPTABLES -A FORWARD -j LOG --log-prefix "[FW - FW] " ###$IPTABLES -A INPUT -j LOG --log-prefix "[FW - IN] " ###$IPTABLES -A OUTPUT -j LOG --log-prefix "[FW - OU] " if [ $QUIET = "0" ]; then echo " Configuracion FW terminada." echo "" echo " A continuacion podria desear:" echo " - verificar reglas: iptables -nvL && iptables -nvL -t nat" echo " - guardar reglas: iptables-save > reglas" echo " - restaurar reglas: iptables-restore < reglas" fi ########################################## exit 0 Para dejar iptables perfectamente configurado aplicamos y guardamos las reglas del cortafuegos dijo:# cd /etc/network/iptables # ./iprules.sh # iptables-save > iptables.rc Configuramos la red para que active y desactive la pasarela cuando se levante o se tumbe la tarjeta de red conectada con internet. dijo:# vi /etc/network/interfaces (...) ### Interfaz EXTERNA iface eth0 inet static (...) pre-up /etc/network/iptables/iptables start post-down /etc/network/iptables/iptables stop ### Interfaz INTERNA (...) Si queremospodemos filtrar tráfico P2P. Configuración de proxy web transparente (Squid) Para que funcione debe existir una redirección del puerto 80 al squid. Esa redirección la hemos realizado con el fichero iprules.sh. Prestá atención que en el ejemplo solo se utiliza el proxy para las conexiones al puerto 80, es decir, las conexiones de https (puerto 443) se reenvían directamente. dijo:# aptitude install squid # vi /etc/squid/squid.conf http_port 3128 transparent # proxy icp # hostname type port port options # -------------------- -------- ----- ----- ----------- #cache_peer 1.2.3.4 parent 8080 0 no-query cache_dir aufs /var/spool/squid 600 16 256 visible_hostname mi_pasarela acl our_networks src 192.168.0.0/16 http_access allow our_networks #nonhierarchical_direct off Reiniciamos el servicio dijo:# /etc/init.d/squid restart Si quereshacer pruebas, un modo sencillo es comentar en /etc/squid/squid.conf la linea que dice http_access allow our_networks y probar a navegar por la web desde la intranet. El navegador debería mostrarnos una página generada por Squid indicándonos que no tenemos permiso para navegar. Configuración de antivirus (ClamAV) Realizamos una instalación manteniendo la configuración por omisión dijo:# aptitude install clamav clamav-daemon Comprobamos los permisos de la base de datos y los logs dijo:# ls -al /var/lib/clamav/ total 8216 drwxr-xr-x 2 clamav clamav 4096 2012-02-30 09:55 . drwxr-xr-x 45 root root 4096 2012-02-29 12:29 .. -rw-r--r-- 1 clamav clamav 1460245 2012-02-30 09:55 daily.cvd -rw-r--r-- 1 clamav clamav 6924820 2012-02-29 12:30 main.cvd # ls -al /var/log/clamav/ total 28 drwxr-xr-x 2 clamav clamav 4096 2012-02-29 12:30 . drwxr-xr-x 12 root root 4096 2012-02-30 10:02 .. -rw-r----- 1 clamav adm 12287 2012-02-30 11:25 clamav.log -rw-r----- 1 clamav adm 5233 2012-02-30 11:29 freshclam.log Configuramos el demonio Clamav (este ejemplo es para una máquina con pocos recursos) dijo:# vi /etc/clamav/clamd.conf ... #ArchiveMaxFiles 1000 ArchiveMaxFiles 100 #ArchiveMaxFileSize 10M ArchiveMaxFileSize 2M #ArchiveMaxCompressionRatio 250 ArchiveMaxCompressionRatio 50 ArchiveLimitMemoryUsage false ArchiveBlockEncrypted false #MaxDirectoryRecursion 15 MaxDirectoryRecursion 6 FollowDirectorySymlinks false FollowFileSymlinks false #ReadTimeout 180 ReadTimeout 60 #MaxThreads 12 MaxThreads 10 #MaxConnectionQueueLength 15 MaxConnectionQueueLength 8 #StreamMaxLength 10M StreamMaxLength 7M ... MailFollowURLs false Probamos el antivirus Para hacer pruebas utilizamos el test eicar de eicar.org. El test eicar es una firma utilizada para probar los antivirus. No hace absolutamente nada pero todos los antivirus la reconocen. Podemos crear un fichero de texto detectable haciendo que contenga unicamente la siguiente linea: X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* NOTA: en equipos en que no se dispone del demonio de clamav se puede utilizar la herramienta clamscan, pero es tremendamente más lenta: dijo:$ clamscan /home/servi3/eicar/ /home/servi3/eicar/eicar.com.txt: Eicar-Test-Signature FOUND /home/servi3/eicar/eicar.com: Eicar-Test-Signature FOUND /home/servi3/eicar/eicar_com.zip: Eicar-Test-Signature FOUND ----------- SCAN SUMMARY ----------- Known viruses: 235757 Engine version: 0.90.1 Scanned directories: 1 Scanned files: 3 Infected files: 3 Data scanned: 0.00 MB Time: 51.074 sec (0 m 51 s) Configuración de SpamPd (SpamAssasin) SpamPD es un filtro contra spam que utiliza spamassasin. Configuraremos p3scan para que utilice el cliente spampd. dijo:# aptitude install spampd Configuramos spampd para que utilice el mismo usuario del antivirus. Al usar un usuario para todo lo que tiene que ver con correo (p3scan, clamav, spampd) simplificamos los permisos dijo:# vi /etc/default/spampd USERID=clamav GRPID=clamav Activamos SA dijo:# vi /etc/default/spamassassin ENABLED=1 Configuramos SA # vi /etc/spamassassin/init.pre # URIDNSBL - look up URLs found in the message against several DNS # blocklists. # loadplugin Mail::SpamAssassin:lugin::URIDNSBL # Hashcash - perform hashcash verification. # loadplugin Mail::SpamAssassin:lugin::Hashcash # SPF - perform SPF verification. # loadplugin Mail::SpamAssassin:lugin::SPF ### Plugin para comprobar el lenguaje del mensaje loadplugin Mail::SpamAssassin:lugin::TextCat # vi /etc/spamassassin/local.cf ### Indicamos en la cabecera del mensaje que es probable spam rewrite_header Subject *****SPAM***** ### El mensaje original lo incluimos como un anexo en MIME report_safe 1 ### Marcamos el umbral de puntuacion para que un mensaje sea ###+ considerado spam required_score 4.0 ### Utilizamos el filtro bayesiano use_bayes 1 ### Activamos el autoaprendizaje del filtro bayesiano bayes_auto_learn 1 ### bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status ### Aceptamos mensajes en frances y espanyol ###+ El resto puntua como posible spam ok_languages fr es ### Aceptamos el juego de caracteres occidental ###+ El resto puntua como posible spam ok_locales en ### Anyadimos cabeceras a los mensajes ### Solo a los que son spam add_header spam Flag _YESNOCAPS_ ### A todos add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ autolearn=_AUTOLEARN_ version=_VERSION_ bayes=_BAYES_ add_header all Level _STARS(*)_ add_header all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_) on _HOSTNAME_ ### Cambiamos el valor de algunas reglas score UNWANTED_LANGUAGE_BODY 3.7 score FROM_ENDS_IN_NUMS 1.88 score FROM_STARTS_WITH_NUMS 1.337 ### Generamos unas cuantas listas blancas whitelist_from_rcvd *@taringa.net whitelist_from [email protected] Preparamos un script que mantenga las reglas de SA actualizadas dijo:# vi /root/bin/actualiza_sa.sh #!/bin/bash # # Script para actualizar las reglas de SpamAssassin Cambiamos al directorio adecuado dijo:cd /etc/spamassassin/ Actualizamos las reglas dijo:wget http://mywebpages.comcast.net/mkettler/sa/antidrug.cf wget http://www.nospamtoday.com/download/mime_validate.cf wget http://www.rulesemporium.com/rules/70_sare_adult.cf wget http://www.rulesemporium.com/rules/70_sare_bayes_poison_nxm.cf wget http://www.rulesemporium.com/rules/70_sare_evilnum0.cf wget http://www.rulesemporium.com/rules/70_sare_genlsubj0.cf wget http://www.rulesemporium.com/rules/70_sare_genlsubj_eng.cf wget http://www.rulesemporium.com/rules/70_sare_header0.cf wget http://www.rulesemporium.com/rules/70_sare_header_eng.cf wget http://www.rulesemporium.com/rules/70_sare_html0.cf wget http://www.rulesemporium.com/rules/70_sare_html_eng.cf wget http://www.rulesemporium.com/rules/70_sare_obfu0.cf wget http://www.rulesemporium.com/rules/70_sare_oem.cf wget http://www.rulesemporium.com/rules/70_sare_random.cf wget http://www.rulesemporium.com/rules/70_sare_specific.cf wget http://www.rulesemporium.com/rules/70_sare_spoof.cf wget http://www.rulesemporium.com/rules/70_sare_stocks.cf wget http://www.rulesemporium.com/rules/70_sare_unsub.cf wget http://www.rulesemporium.com/rules/70_sare_uri0.cf wget http://www.rulesemporium.com/rules/72_sare_bml_post25x.cf wget http://www.rulesemporium.com/rules/72_sare_redirect_post3.0.0.cf wget http://www.rulesemporium.com/rules/88_FVGT_body.cf wget http://www.rulesemporium.com/rules/88_FVGT_headers.cf wget http://www.rulesemporium.com/rules/88_FVGT_rawbody.cf wget http://www.rulesemporium.com/rules/88_FVGT_subject.cf wget http://www.rulesemporium.com/rules/88_FVGT_uri.cf wget http://www.rulesemporium.com/rules/99_FVGT_DomainDigits.cf wget http://www.rulesemporium.com/rules/99_FVGT_meta.cf wget http://www.rulesemporium.com/rules/99_FVGT_Tripwire.cf wget http://www.rulesemporium.com/rules/99_sare_fraud_post25x.cf wget http://www.stearns.org/sa-blacklist/random.current.cf wget http://www.timj.co.uk/linux/bogus-virus-warnings.cf wget http://www.yackley.org/sa-rules/evilnumbers.cf Reiniciamos los servicios dijo:/etc/init.d/spamassassin restart /etc/init.d/spampd restart Programamos el sistema para que actualice al menos una vez a la semana dijo:# crontab -e #m h dom mon dow command 00 05 * * 1 /root/bin/actualiza-sa.sh Configuración de proxy POP3 (p3scan) dijo:# aptitude install p3scan Utilizamos el mensaje de virus en español dijo:# cd /etc/p3scan/ # rm p3scan.mail # ln -s p3scan-sp.mail p3scan.mail Configuramos p3scan dijo:# vi /etc/p3scan/p3scan.conf targetip = 0.0.0.0 targetport = 8110 user = clamav scannertype = basic scanner = /usr/bin/clamdscan --no-summary virusregexp = .*: (.*) FOUND demime checkspam spamcheck = /usr/bin/spamc subject = [Virus - mi_pasarela] Un mensaje enviado contenia virus: Hacemos todos los usuarios de los tres grupos aunque en realidad solo utilizamos el usuario clamav dijo:# vi /etc/group clamav:x:110:spamc,spampd,p3scan p3scan:x:111:clamav,spamc,spampd spampd:x:112:clamav,spamc,p3scan Damos permisos al usuario dijo:# chown clamav:clamav -R /var/spool/p3scan # chown clamav:clamav -R /var/run/p3scan # /etc/init.d/p3scan restart # /etc/init.d/spamassassin restart # /etc/init.d/spampd restart Si no arranca p3scan automaticamente: dijo:update-rc.d p3scan defaults Algunas comprobaciones dijo:# lsof -i | grep LISTEN p3scan xxxx clamav 3u IPv4 xxxx TCP *:8110 (LISTEN) sshd xxxx root 3u IPv6 xxxx TCP *:xxxx (LISTEN) squid xxxx proxy 13u IPv4 xxxx TCP *:3128 (LISTEN) spampd xxxx clamav 5u IPv4 xxxxx TCP localhost:10025 (LISTEN) spampd xxxx clamav 5u IPv4 xxxxx TCP localhost:10025 (LISTEN) spampd xxxx clamav 5u IPv4 xxxxx TCP localhost:10025 (LISTEN) spampd xxxx clamav 5u IPv4 xxxxx TCP localhost:10025 (LISTEN) spamd xxxx root 5u IPv4 xxxxx TCP localhost:spamd (LISTEN) spamd xxxx clamav 5u IPv4 xxxxx TCP localhost:spamd (LISTEN) spamd xxxx root 5u IPv4 xxxxx TCP localhost:spamd (LISTEN) # nmap localhost -p 1-5000,8110,10024-10026 Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-01-02 17:12 CET Interesting ports on localhost (127.0.0.1): Not shown: 4999 closed ports PORT STATE SERVICE 783/tcp open spamassassin xxxx/tcp open unknown 3128/tcp open squid-http 8110/tcp open unknown 10025/tcp open unknown Nmap finished: 1 IP address (1 host up) scanned in 0.362 seconds Eso es todo por hoy... Saludos!
Receta para un Router/Firewall con Proxys transparentes
Datos archivados del Taringa! original
127puntos
615visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos: