Squid3 en Debian Squeezy & Wheezy

Posted by Unknown | Posted on 9:03

2


Para comenzar hay que instalar el paquete squid3

#aptitude install squid3

Luego de esto se procede a colocar el proxy en modo transparente

Para colocarlo de modo transparente debemos colocar la palabra tranparent luego del puerto que esta configurado por defecto el 3128

#vim /etc/squid3/squid.conf

# NETWORK OPTIONS
# —————
#
http_port 3128 transparent

Añadimos la red o las redes locales que pasaremos por el proxy

acl localnet src 192.168.20.0/24

ahora permitimos el acceso para esa red

http_access allow localnet

Redireccionamos todo lo que vaya para el puerto 80 al 3128, con la siguiente regla de iptables.

en caso de tener dos tarjeta de red

#iptables -t nat -A PREROUTING -p tcp -s 192.168.20.0/24 --dport 80 -j DNAT --to-destination 10.16.106.140:3128

en caso de tener una sola tarjeta de red

#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Ya con esto se tiene el proxy de modo trasparente. Para la configuración del cache y la optimización del squid debemos realizar lo siguiente.

Editamos el archivo de configuración de squid y añadimos lo siguiente.

#vim /etc/squid3/squid.conf

Creacion del direcctorio de cache de squid, donde el valor 51200 sera la cantidad de disco a utilizar, este esta definido en MB.

cache_dir ufs /var/cache/squid 51200 36 256

Definiendo la ruta donde se guardara el cache.

coredump_dir /var/cache/squid

Tiempo que se desea conservar el cache segun su tipo.
Tiempo mínimo antes de descargar nuevamente (minutos), el porcentaje de vida (%) y el tiempo máximo para envejecer (minutos).

refresh_pattern -i \.(html|htm|html\?|htm\?)$ 9440 90% 100000 override-expire reload-into-ims
refresh_pattern -i \.(gif|png|jpg|jpeg|ico|bmp|tiff|webp|bif|gif\?|png\?|jpg\?|jpeg\?|ico\?|bmp\?|tiff\?|webp\?|bif\?)$ 36000 90% 100000 override-expire reload-into-ims ignore-reload
refresh_pattern \.(swf|swf\?|js|js\?|wav|css|css\?|class|dat|zsci)$ 36000 90% 100000 override-expire reload-into-ims
refresh_pattern -i \.(bin|deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|docx|tiff|pdf|uxx|gz|xls|xlsx|psd|crl|msi|dll|dll\?|crx|enc|skl|arc)$ 36000 90% 100000 override-expire override-lastmod reload-into-ims ignore-reload
refresh_pattern -i \.(xml)$ 0 90% 100000
refresh_pattern -i \.(json|json\?)$ 1440 90% 5760 override-expire reload-into-ims
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern ^ftp: 5440 90% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i . 0 90% 5760

Tamaño minimo por objeto

minimum_object_size 0 KB

Tamaño máximo por objeto

maximum_object_size 250 MB

Tamaño maximo por objeto en ram

maximum_object_size_in_memory 1 MB

Visibilidad del nombre del proxy
visible_hostname shadow

Tamaño del cache en memoria, (esto dependera de la cantidad del memoria ram del equipo).

cache_mem 768 MB

Tabla de direcciones IP

ipcache_size 8192

Tabla de nombres completos de máquinas

fqdncache_size 8192

Pools de memoria

memory_pools on

Tamaño maximo de los headers http

request_header_max_size 256 KB

Creamos los directorios de cache

#squid3 -z

2012/11/19 10:41:25| Making directories in /var/spool/squid3/11
2012/11/19 10:41:25| Making directories in /var/spool/squid3/12
2012/11/19 10:41:25| Making directories in /var/spool/squid3/13
2012/11/19 10:41:25| Making directories in /var/spool/squid3/14
2012/11/19 10:41:25| Making directories in /var/spool/squid3/15
2012/11/19 10:41:25| Making directories in /var/spool/squid3/16
2012/11/19 10:41:25| Making directories in /var/spool/squid3/17
2012/11/19 10:41:25| Making directories in /var/spool/squid3/18
2012/11/19 10:41:25| Making directories in /var/spool/squid3/19
2012/11/19 10:41:25| Making directories in /var/spool/squid3/1A

Reiniciamos el servicio.

#/etc/init.d/squid3/restart

Para verificar que este funcionando el cache podemos observar los logs y observar el directorio /var/spool/squid3

#tail -f /var/log/squid3/access.log

#ls -l /var/spool/squid3/
total 604
drwxr-x--- 258 proxy proxy 4096 nov 14 09:57 00
drwxr-x--- 258 proxy proxy 4096 nov 14 09:57 01
drwxr-x--- 258 proxy proxy 4096 nov 14 09:57 02
drwxr-x--- 258 proxy proxy 4096 nov 14 09:57 03
drwxr-x--- 258 proxy proxy 4096 nov 14 09:57 04
drwxr-x--- 258 proxy proxy 4096 nov 14 09:57 05
drwxr-x--- 258 proxy proxy 4096 nov 14 09:57 06

Se observara un incremento en los directorios y dependiendo del tamaño definido se vara incrementado el tamaño de los directorios.

Fail2ban en Debian Squeezy & Wheezy

Posted by Unknown | Posted on 21:04

4


Hace unos días termine una guía para la instalación y configuración de fail2ban, algunos colegas cuando lean esto se reirán un poco.

Para comenzar hay que realizar la instalación de el paquete fail2ban

#aptitude install fail2ban

Copiamos el archivo de configuración del jail.conf a jail.local, donde tendremos nuestra configuración personalizada

#cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Al momento de editar veremos algo como esto, donde colocaremos en true los servicios que se requieran. Por defecto el único servicio que viene habilitado en el fail2ban es el ssh, si se requieren habilitar algún otro como por ejemplo apache, postfix, proftpd, se deben colocar en true y verificar los valores que vienen por defecto. Antes de habilitar algún servicio se debe personalizar los valores que vienen por defecto.

Tiempo de bloqueo, las ip de redes locales, el máximo de intentos.

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1 192.168.1.0/24
bantime = 1800
maxretry = 3


La dirección de correo de la persona que recibirá las alertas.

# Destination email address used solely for the interpolations in
# jail.{conf,local} configuration files.
destemail = root@localhost

El tipo de servicio que utiliza el sistema para enviar los correos electrónicos, el caso de fail2ban utiliza sendmail pero en caso de que el sistema utilice “mail” se puede cambiar la orden.

# email action. Since 0.8.1 upstream fail2ban uses sendmail
# MTA for the mailing. Change mta configuration parameter to mail
# if you want to revert to conventional 'mail'.
mta = sendmail

Cambiamos la acción para que envié el correo electrónico, al momento de un evento.

# Choose default action. To change, just override value of 'action' with the
# interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local
# globally (section [DEFAULT]) or per specific section
action = %(action_mwl)s

Parte del contenido del archivo

[ssh]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6

[apache]

enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

[proftpd]

enabled = false
port = ftp,ftp-data,ftps,ftps-data
filter = proftpd
logpath = /var/log/proftpd/proftpd.log
maxretry = 6

[postfix]

enabled = false
port = smtp,ssmtp
filter = postfix
logpath = /var/log/mail.log



En caso de que configuremos el fail2ban para proteger el apache debemos habilitar lo siguiente.

# HTTP servers
[apache]

enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

#
# default action is now multiport, so apache-multiport jail was left
# for compatibility with previous (<0 .7.6-2=".7.6-2" font="font" releases="releases">

[apache-multiport]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

# Para prevenir ejecucion de scripts
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6

# Para prevenir overflows
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

# Para prevenir ataques de inyeccion de codigo tipo GET.
[php-url-fopen]
enabled = true
port = http,https
filter = php-url-fopen
logpath = /var/www/vhosts/*/statistics/logs/access_log
maxretry = 1

#Para prevenir ataques de host que se conectan haciendo un “User Agent” sospechoso
[apache-badbots]
enabled = true
filter = apache-badbots
port = http,https
logpath = /var/log/apache*/*access.log
maxretry = 1
#Para prevenir busqueda de directorios en el servidor
[apache-nohome]
enabled = true
filter = apache-nohome
port = http,https
logpath = /var/log/apache*/*access.log
maxretry = 1

#Para prevenir SQL Injection
[sqli-attack]
enabled = true
port = 80
protocol = tcp
maxentry = 3
bantime = 90000
filter = apache-sqli-blocklist
logpath = /var/log/apache2/*.log

#Para prevenir RFI (Remote File Inclusion)
[rfi-attack]
enabled = true
port = 80
protocol = tcp
maxentry = 6
filter = apache-rfi-blocklist
logpath = /var/log/apache2/*.log


Para que las funciones de SQL Injection y RFI funcionen debemos crear los siguientes archivos de configuración dentro de /etc/fail2ban/filter.d/ con el siguiente contenido.

#vim apache-sqli-blocklist.conf

Agregamos

# Fail2Ban configuration file
#
# Author: Martin Schiftan
#
# $Revision: 510 $


[Definition]

# Option: failregex
# Notes.: regex to match the w00tw00t scan messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching.
# Values: TEXT
failregex = ^ .*\+SELECT.*
^ .*UNION\+ALL\+SELECT.*
^ (.*)UNION\+SELECT(.*)
^ (.*)1337+UNION+SELECT+(.*)
^ (.*)UNION(.*)SELECT(.*)
^ (.*)UNION(.*)DATABASE(.*)



# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT

ignoreregex =


#vim apache-rfi-blocklist.conf

Agregamos

# Fail2Ban configuration file
#
# Author: Martin Schiftan
#
# $Revision: 510 $


[Definition]

# Option: failregex
# Notes.: regex to match the w00tw00t scan messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching.
# Values: TEXT
failregex = ^ (.*)etc\/passwd(.*)
^ (.*)28sleep(.*)
^ (.*)acunetix_wvs_security_test(.*)
^ (.*)email.tst(.*)
^ (.*)appserv_root(.*)
^ (.*)proc/self/(.*)
^ (.*)proc\/self\/(.*)
^ (.*)FHScan(.*)
^ -.*"(GET|POST).*\?.*\=.*tt.*\:\/\/.* HTTP\/.*$


# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT

ignoreregex =

Por ultimo reiniciamos el servicio y observamos que se envío un correo electrónico a la dirección de destino, se aplicaron las reglas de iptables para los servicios habilitados.

#/etc/init.d/fail2ban restart
[ ok ] Restarting authentication failure monitor: fail2ban

#iptables -L -n

Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Hardening Debian Squeeze & Wheezy

Posted by Unknown | Posted on 15:15

0

Saludos a todos, tiempo sin escribir. Por aquí tengo una pequeña guía de ayuda para prevenir un poco la intrusión a nuestro servidor, un pequeño hardening para debian que sirve para squeeze y para wheezy. Agunas cosas las consegui en la web, con la ayuda de otros blog y algunas notas que tenia por alli. Claramente lo primero que debemos hacer es tener nuestro servidor montado e instalado.


Luego de una instalación por defecto verificamos que servicios tenemos escuchando:

# netstat -putan |grep LISTEN

Instalamos rcconf para bajar servicios que no utilizamos:

# aptitude install rcconf

# rcconf
Destildar todos los servicios que no vayamos a utilizar, como por ejemplo exim4, portmap, etc...



# reboot

Volvemos a verificar los servicios que escuchan luego de deshabilitar los que no son necesarios:

# netstat -putan|grep LISTEN

Todavia SSH nos queda escuchando en todas las ips y en ipv6, lo cambiamos:

# cp -pf /etc/ssh/sshd_config /etc/ssh/sshd_config.orig

# vim /etc/ssh/sshd_config
Port 2222
ListenAddress 192.168.1.x (colocamos esta opción en caso de solo utilizar ipv4)
Protocol 2
PermitRootLogin no
PermitEmptyPasswords no

# /etc/init.d/ssh restart


Volvemos a verificar que ahora no esta escuchando SSH en ipv6, fue cambiado el puerto y además restringida a una determinada ip:

# netstat -putan |grep LISTEN

Ips desde donde permitimos acceso ssh:

# vim /etc/hosts.allow
sshd : 192.168.1.0/255.255.255.0 : allow

# vim /etc/hosts.deny
sshd : ALL : deny

Eliminamos paquetes innecesarios como exim4, dhcpclient:

# aptitude remove --purge exim4-config exim4-base dhcp-client isc-dhcp-client isc-dhcp-common eject setserial fdutils discover info nano telnet makedev perl gcc libdiscover lighttpd sendmail

Deshabilitar el reinicio con ctrl+alt+del:

Comentamos la linea en el inittab

# vim /etc/inittab
#ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# telinit q

Eliminamos la linea de la disquetera del fstab:

# vim /etc/fstab
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0

Y si no usamos la lectora de cd:

/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0

Deshabilitamos las shells para los usuarios que no lo necesitan:

# vipw

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/false
bin:x:2:2:bin:/bin:/bin/false
sys:x:3:3:sys:/dev:/bin/false
games:x:5:60:games:/usr/games:/bin/false
man:x:6:12:man:/var/cache/man:/bin/false
lp:x:7:7:lp:/var/spool/lpd:/bin/false
mail:x:8:8:mail:/var/mail:/bin/false
news:x:9:9:news:/var/spool/news:/bin/false
uucp:x:10:10:uucp:/var/spool/uucp:/bin/false
proxy:x:13:13:proxy:/bin:/bin/false
www-data:x:33:33:www-data:/var/www:/bin/false
backup:x:34:34:backup:/var/backups:/bin/false
list:x:38:38:Mailing List Manager:/var/list:/bin/false
irc:x:39:39:ircd:/var/run/ircd:/bin/false
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/false
nobody:x:65534:65534:nobody:/nonexistent:/bin/false
libuuid:x:100:101::/var/lib/libuuid:/bin/false
sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin


Eliminar bits suid y guid:

# find / -path /proc -prune -o -type f -perm +6000 -ls
1646604 72 -rwsr-xr-x 1 root root 68316 Jan 25 16:19 /bin/mount
1646635 32 -rwsr-xr-x 1 root root 31360 Oct 14 2010 /bin/ping
1646602 48 -rwsr-xr-x 1 root root 47304 Jan 25 16:19 /bin/umount
1646686 32 -rwsr-xr-x 1 root root 29152 Feb 15 17:50 /bin/su
1646636 36 -rwsr-xr-x 1 root root 35252 Oct 14 2010 /bin/ping6
1741025 12 -rwxr-sr-x 1 root mail 10164 Feb 13 2010 /usr/bin/dotlockfile
1738793 36 -rwsr-xr-x 1 root root 34740 Feb 15 17:50 /usr/bin/passwd
1739777 32 -rwxr-sr-x 1 root crontab 30248 Dec 18 20:46 /usr/bin/crontab
1738792 56 -rwsr-xr-x 1 root root 50388 Feb 15 17:50 /usr/bin/gpasswd
1737577 28 -rwsr-xr-x 1 root root 25184 Feb 15 17:50 /usr/bin/newgrp
1739927 40 -rwsr-sr-x 1 daemon daemon 40704 Nov 30 2009 /usr/bin/at
1738796 36 -rwsr-xr-x 1 root root 36372 Feb 15 17:50 /usr/bin/chfn
1741800 80 -rwsr-sr-x 1 root mail 75896 Apr 26 2010 /usr/bin/procmail
1738797 28 -rwsr-xr-x 1 root root 27956 Feb 15 17:50 /usr/bin/chsh
1739731 8 -rwxr-sr-x 1 root tty 7784 Jun 17 2010 /usr/bin/bsd-write
1741801 16 -rwxr-sr-x 1 root mail 13172 Apr 26 2010 /usr/bin/lockfile
1741277 32 -rwxr-sr-x 1 root mlocate 30492 Nov 4 2009 /usr/bin/mlocate
1737470 12 -rwxr-sr-x 1 root tty 9944 Jan 25 16:19 /usr/bin/wall
1741309 8 -rwxr-sr-x 1 root mail 7768 Jan 14 12:08 /usr/bin/mutt_dotlock
1738795 56 -rwxr-sr-x 1 root shadow 49556 Feb 15 17:50 /usr/bin/chage
1738794 16 -rwxr-sr-x 1 root shadow 14840 Feb 15 17:50 /usr/bin/expiry
1741396 100 -rwxr-sr-x 1 root ssh 95564 Dec 26 15:12 /usr/bin/ssh-agent
1777703 196 -rwsr-xr-x 1 root root 194680 Dec 26 15:12 /usr/lib/openssh/ssh-keysign
1737861 12 -rwsr-xr-x 1 root root 9676 Jan 23 21:10 /usr/lib/pt_chown
1433660 28 -rwxr-sr-x 1 root shadow 27900 Oct 19 2010 /sbin/unix_chkpwd
1433707 84 -rwsr-xr-x 1 root root 80600 Aug 26 2010 /sbin/mount.nfs


# chmod ug-s /usr/bin/wall /usr/bin/newgrp /usr/bin/chsh............


Permitir su - solo a los usuarios que pertenezcan al grupo wheel:

# addgroup --system wheel

# usermod -G wheel usuario_para_elevar_a_root

# vim /etc/pam.d/su
Descomentar:
auth required pam_wheel.so

Configurar maximo retries, tiempo máximo de login y Habilitar opción para registrar logins fallidos

Comandos:
# vim /etc/login.defs
##En el archivo login.defs se cambian los tiempos de las siguientes lineas:
LOGIN_RETRIES 3
LOGIN_TIMEOUT 30
LOG_UNKFAIL_ENAB yes

Bloquear las TTY para no acceder directamente como root

#vim /etc/securetty
ejecutar lo siguiente para comentar las tty
:1,$s/tty/#tty

Proteger los scripts de inicio.

#chmod -R 700 /etc/init.d/*

Chequeo de seguridad:

# aptitude install tiger

Editar el archivo de configuración /etc/tiger/tigerrc para activar y desactivar las opciones que se requieren revisar.

Automáticamente la aplicación instala el paquete tripwire, que se utiliza para realizar la verificación de los archivos y directorios de nuestro sistema, en caso de que se realice una modificación el lo informara.
Dentro de la ruta de configuración del tiger, existe un archivo llamado cronrc, que es utilizado para realizar la revisión del sistema en ciertos horarios, esto se puede utilizar para obtener información en caso de una intrusión a nuestro sistema.

# tiger

Instalar postfix
#aptitude install postfix
Colocar el email hacia donde se enviaran las alertas
# vim /etc/aliases
root: usuario@tudominio.com
# postalias /etc/aliases

Habilitar sudo, y configurar los logs de sudo
visudo
en la seccion de Defaults poner
Defaults loglinelen=0 # disable line wrapping in log.
Defaults logfile=/var/log/sudo.log # or some other filename.

Instalar el paquete "acct" para llevar mas auditoría sobre las
cuentas de usuario
#aptitude install acct

Auditar por medio del historial
Editar /etc/profile y colocar

#vim /etc/profile

HISTFILE=~/.bash_history
HISTSIZE=10000
HISTFILESIZE=999999
# Don't let the users enter commands that are ignored
# in the history file
HISTIGNORE=""
HISTCONTROL=""
readonly HISTFILE
readonly HISTSIZE
readonly HISTFILESIZE
readonly HISTIGNORE
export HISTFILE HISTSIZE HISTFILESIZE HISTIGNORE HISTCONTROL

Comentar los repositorios de debian y solo dejar el de seguridad.

#deb http://ftp.us.debian.org/debian/ squeeze main

deb http://security.debian.org/ wheezy/updates main