Escribo este post para reconmendar Acrylic WiFi Professional.
Acrylic WiFi Software es una herramienta que permite multitud de posibilidades.
Con este WiFi Survey software de podrás hacer WiFi analyzer, WiFi sniffer y "mapas de calor" con Acrylic WiFi Heatmaps que te permitirá conocer como y donde colocar tu punto wifi.
Os lo recomiendo.
Rollanwar
Informatica y Rol
10 de septiembre de 2016
12 de julio de 2015
Servidor de correo administrado con ViMbAdmin + DKIM
ViMbAdmin
Instalando Composer# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer
Instando dependencias de ViMbAdmin:
# apt-get install mysql-server php5-cgi php5-mcrypt php5-memcache php5-json php5-mysql php-gettext pkg-php-tools git bcrypt
Creamos un usuario para que maneje el correo
# groupadd -g 2000 vmail
# useradd -c 'Virtual Mailboxes' -d /srv/vmail -g 2000 -u 2000 -s /usr/sbin/nologin -m vmail
Usamos el gid y uid 2000 así como la ruta /srv/vmail para modificar lo mínimo el fichero de ViMbAdmin.
Descargamos la última versión del repositorio.
# export INSTALL_PATH=/srv/vmail/www
# git clone https://github.com/opensolutions/ViMbAdmin.git $INSTALL_PATH
# cd $INSTALL_PATH
# composer install --dev
# chown -R www-data: ./var
# cp ./public/.htaccess.dist ./public/.htaccess
# cp ./application/configs/application.ini.dist ./application/configs/application.ini
Creamos la base de datos y el usuario para la conexión:
$ mysql -u root -p
mysql > CREATE DATABASE `vimbadmin`;
mysql > GRANT ALL ON `vimbadmin`.* TO `vimbadmin`@`localhost` IDENTIFIED BY 'password';
mysql > FLUSH PRIVILEGES;
mysql > QUIT;
Insertamos los datos para la base de datos:
$ nano +48 ./application/configs/application.ini
Debemos modifica:
resources.doctrine2.connection.options.driver = 'pdo_mysql' resources.doctrine2.connection.options.dbname = 'vimbadmin' resources.doctrine2.connection.options.user = 'vimbadmin' resources.doctrine2.connection.options.password = 'password' resources.doctrine2.connection.options.host = 'localhost'
Además para almacenar las claves cifradas usaremos:
$ nano +149 ./application/configs/application.ini
defaults.mailbox.password_scheme = "dovecot:SHA512-CRYPT"
Ya podemos crear la base de datos, para ello:
$ ./bin/doctrine2-cli.php orm:schema-tool:create
En este punto debemos crear la claves "salt" para el sistema y la cuenta de administración.
Para ello podemos esperar ha hacerlo tras configurar todo o seguir usando:
$ php -S 0.0.0.0:8080 -t public/
Accedemos a la nuestro servidor via web y copiamos las "salt" generadas(en la web) en:
$ nano +24 ./application/configs/application.ini
Además podemos aprovechar para cambiar las apariciones de "example.com" por el nombre de nuestro servidor.
Una vez guardadas las "salts" podemos crear un administrador para el sistema de administración del correo.
Si no configuramos Dovecot y Postfix los cambios que realizemos en la web no tendrán efecto alguno, así que continuemos.
Si no configuramos Dovecot y Postfix los cambios que realizemos en la web no tendrán efecto alguno, así que continuemos.
Dovecot
Instalando Dovecot
# apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-managesieved dovecot-sieve dovecot-mysql dovecot-lmtpd dovecot-common
Editamos /etc/dovecot/conf.d/10-mail.conf para que quede:
mail_location = maildir:/srv/vmail/%d/%n
mail_uid = 2000
mail_gid = 2000
mail_privileged_group = vmail
first_valid_uid = 2000
last_valid_uid = 2000
maildir_copy_with_hardlinks = yes
Habilitamos los protocolos que queramos:
# nano +25 /etc/dovecot/dovecot.conf
protocols = imap pop3
# apt-get install postfix postfix-mysql
Configuramos el servidor para que conecte con la base de datos:
# mkdir /etc/postfix/mysql
# echo "
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual-aliases.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual-mailboxes.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
smtpd_tls_auth_only = yes
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_invalid_hostname,
reject_unauth_pipelining,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_rbl_client sbl.spamhaus.org,
permit
" >> /etc/postfix/main.cf
# echo "user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = aC2w1cIiSB
query = SELECT goto FROM alias WHERE address = '%s' AND active = '1'" > /etc/postfix/mysql/virtual-aliases.cf
# echo "user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = aC2w1cIiSB
query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '0' AND active = '1'" > /etc/postfix/mysql/virtual-domains.cf
# echo "user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = aC2w1cIiSB
query = SELECT maildir FROM mailbox WHERE username = '%s' AND active = '1'" > /etc/postfix/mysql/virtual-mailboxes.cf
# echo "
dovecot unix - n n - - pipe flags=DRhu
user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
" >> /etc/postfix/master.cf
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
# apt-get install apache2 libapache2-mod-php5
# a2enmod rewrite# echo "Alias /vimbadmin $INSTALL_PATH/public
<Directory $INSTALL_PATH/public>
Options FollowSymLinks
AllowOverride None
# For Apache <= 2.3:
#Order allow,deny
#allow from all
# For Apache >= 2.4
Require all granted
SetEnv APPLICATION_ENV production
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /vimbadmin/index.php [NC,L]
</Directory>" > /etc/apache2/conf-available/vimbadmin.conf
# ln -sf ../conf-available/vimbadmin.conf /etc/apache2/conf-enabled/vimbadmin.conf
Mejoramos un poco la seguridad descomentando:
# a2enmod headers ssl
# a2ensite default-ssl
Aplicamos los siguientes cambios:
#ServerSignature OnHeader set X-Content-Type-Options: "nosniff"
# apt-get install opendkim opendkim-tools
# mkdir /etc/opendkim/
# mkdir /etc/opendkim/keys/
# nano /etc/opendkim.conf
AutoRestart Yes
AutoRestartRate 10/1h
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Socket inet:12301@localhost
# nano /etc/default/opendkim
Descomentamos la linea que aparece: SOCKET="inet:12301@localhost"
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301
# nano /etc/opendkim/TrustedHosts
Dejamos /etc/opendkim/TrustedHosts del siguiente modo:
127.0.0.1
localhost
*.example.com
# nano /etc/opendkim/KeyTable
Dejamos /etc/opendkim/KeyTable del siguiente modo:
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private
# nano /etc/opendkim/SigningTable
Dejamos /etc/opendkim/SigningTable del siguiente modo:
*@example.com mail._domainkey.example.com
Referencias:
http://pietervogelaar.nl/ubuntu-12-04-install-postfix-dovecot-and-vimbadmin
https://github.com/opensolutions/ViMbAdmin/wiki/Mail-System-Install-on-Ubuntu
https://gist.github.com/barryo/8918488
http://mxtoolbox.com/diagnostic.aspx
https://www.mail-tester.com/
# apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-managesieved dovecot-sieve dovecot-mysql dovecot-lmtpd dovecot-common
Editamos /etc/dovecot/conf.d/10-mail.conf para que quede:
mail_location = maildir:/srv/vmail/%d/%n
mail_uid = 2000
mail_gid = 2000
mail_privileged_group = vmail
first_valid_uid = 2000
last_valid_uid = 2000
maildir_copy_with_hardlinks = yes
Editamos /etc/dovecot/conf.d/10-auth.conf para que quede:
disable_plaintext_auth = yes
auth_mechanisms = plain login
auth_mechanisms = plain login
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Editamos /etc/dovecot/conf.d/auth-sql.conf.ext para que quede:
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = prefetch
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Editamos /etc/dovecot/conf.d/10-master.conf para que quede:
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
Editamos /etc/dovecot/conf.d/15-lda.conf para que quede:
protocol lda {
postmaster_address = postmaster@example.com
mail_plugins = sieve
auth_socket_path = /var/run/dovecot/auth-userdb
log_path = /srv/vmail/dovecot-deliver.log
}
Editamos /etc/dovecot/dovecot-sql.conf.ext para que quede:
driver = mysql
default_pass_scheme = SHA512-CRYPT
user_query = SELECT homedir AS home, maildir AS mail, \
concat('*:bytes=', quota) as quota_rule, uid, gid \
FROM mailbox WHERE username = '%u'
password_query = SELECT username AS user, password, \
homedir AS home, maildir AS mail, \
concat('*:bytes=', quota) AS quota_rule, uid, gid \
FROM mailbox \
WHERE username = '%Lu' AND active = '1' \
AND ( access_restriction = 'ALL' OR LOCATE( access_restriction, '%Us' ) > 0 )
iterate_query = SELECT username AS user FROM mailbox
concat('*:bytes=', quota) as quota_rule, uid, gid \
FROM mailbox WHERE username = '%u'
password_query = SELECT username AS user, password, \
homedir AS home, maildir AS mail, \
concat('*:bytes=', quota) AS quota_rule, uid, gid \
FROM mailbox \
WHERE username = '%Lu' AND active = '1' \
AND ( access_restriction = 'ALL' OR LOCATE( access_restriction, '%Us' ) > 0 )
iterate_query = SELECT username AS user FROM mailbox
Habilitamos los protocolos que queramos:
# nano +25 /etc/dovecot/dovecot.conf
protocols = imap pop3
Por último vamos a dar los permisos:
# chgrp vmail /etc/dovecot/dovecot.conf
# chmod g+r /etc/dovecot/dovecot.conf
Postfix
Instalando Postfix:# apt-get install postfix postfix-mysql
Configuramos el servidor para que conecte con la base de datos:
# mkdir /etc/postfix/mysql
# echo "
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual-aliases.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual-mailboxes.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
smtpd_tls_auth_only = yes
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/authsmtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_invalid_hostname,
reject_unauth_pipelining,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_rbl_client sbl.spamhaus.org,
permit
" >> /etc/postfix/main.cf
# echo "user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = aC2w1cIiSB
query = SELECT goto FROM alias WHERE address = '%s' AND active = '1'" > /etc/postfix/mysql/virtual-aliases.cf
# echo "user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = aC2w1cIiSB
query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '0' AND active = '1'" > /etc/postfix/mysql/virtual-domains.cf
# echo "user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = aC2w1cIiSB
query = SELECT maildir FROM mailbox WHERE username = '%s' AND active = '1'" > /etc/postfix/mysql/virtual-mailboxes.cf
# echo "
dovecot unix - n n - - pipe flags=DRhu
user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
" >> /etc/postfix/master.cf
Modificar /etc/postfix/master.cf para que quede:
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
Apache
Instalamos Apache:# apt-get install apache2 libapache2-mod-php5
# a2enmod rewrite# echo "Alias /vimbadmin $INSTALL_PATH/public
<Directory $INSTALL_PATH/public>
Options FollowSymLinks
AllowOverride None
# For Apache <= 2.3:
#Order allow,deny
#allow from all
# For Apache >= 2.4
Require all granted
SetEnv APPLICATION_ENV production
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /vimbadmin/index.php [NC,L]
</Directory>" > /etc/apache2/conf-available/vimbadmin.conf
# ln -sf ../conf-available/vimbadmin.conf /etc/apache2/conf-enabled/vimbadmin.conf
Mejoramos un poco la seguridad descomentando:
# a2enmod headers ssl
# a2ensite default-ssl
Aplicamos los siguientes cambios:
# nano +26 /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
#ServerTokens OS
ServerSignature Off#ServerSignature OnHeader set X-Content-Type-Options: "nosniff"
Header set X-Frame-Options: "sameorigin"
DKIM
Instalamos OpneDKIM# apt-get install opendkim opendkim-tools
# mkdir /etc/opendkim/
# mkdir /etc/opendkim/keys/
# nano /etc/opendkim.conf
Modificar /etc/postfix/master.cf para que quede:
AutoRestartRate 10/1h
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Socket inet:12301@localhost
# nano /etc/default/opendkim
Descomentamos la linea que aparece: SOCKET="inet:12301@localhost"
Modificar /etc/postfix/main.cf y añadimos:
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301
# nano /etc/opendkim/TrustedHosts
Dejamos /etc/opendkim/TrustedHosts del siguiente modo:
127.0.0.1
localhost
*.example.com
# nano /etc/opendkim/KeyTable
Dejamos /etc/opendkim/KeyTable del siguiente modo:
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private
# nano /etc/opendkim/SigningTable
Dejamos /etc/opendkim/SigningTable del siguiente modo:
*@example.com mail._domainkey.example.com
# cd /etc/opendkim/keys
# mkdir /etc/opendkim/keys/example.com
# cd example.com
# opendkim-genkey -s mail -d example.com
# chown opendkim:opendkim mail.private
# cat mail.txt
Copiar el contenido en el registro TXT del DNS
# service postfix restart
# service opendkim restart
Actualizando ViMbAdmin
# cd /srv/vmail/www
# git pull
# composer update
# ./bin/doctrine2-cli.php orm:schema-tool:update --dump-sql
# ./bin/doctrine2-cli.php orm:schema-tool:update --force
# ./bin/doctrine2-cli.php orm:validate-schema
Referencias:
http://pietervogelaar.nl/ubuntu-12-04-install-postfix-dovecot-and-vimbadmin
https://github.com/opensolutions/ViMbAdmin/wiki/Mail-System-Install-on-Ubuntu
https://gist.github.com/barryo/8918488
http://mxtoolbox.com/diagnostic.aspx
https://www.mail-tester.com/
2 de mayo de 2015
Cuida tu server, para evitar ataques
Cuidar el Software Podemos ver todos los programas instalados usando:
# dpkg --list
Y obtener más información con:
# dpkg --info packageName
Por ultimo lo eliminamos si no es necesario.
# apt-get remove packageName
Tener todo el sofware actualizado:
# apt-get update && apt-get upgrade
Para actualiza de forma automática el sistema podemos usar "unattended-upgrades"
# apt-get install unattended-upgrades
Existen varios ficheros de configuración para indicar distintas acciones, por ejemplo para que el sistema te envíe un mail informando de un "Upgrade" editamos el parametro Unattended-Upgrade de:
# nano /etc/apt/apt.conf.d/50unattended-upgrades
Para poder activar este programa deberemos editar el fichero APT:
# nano /etc/apt/apt.conf.d/10periodic
APT::Periodic::Unattended-Upgrade "1";
Instalar Software que nos defienda
Bloquea las IPs con intentos de acceso fallidos
# apt-get install fail2ban
El fichero de configuración de Fail2Ban se encuentra en:
# nano /etc/fail2ban/fail2ban.conf
# nano /etc/fail2ban/jail.conf
Detecta rootkits y cambios del sistema
# apt-get install tripwire
Para recibir los reportes en por correo.
# nano /etc/tripwire/twpol.txt
MAIL_TO = "user@host";
Y Añadimos "emailto = $(MAIL_TO)" en cada política.
# twadmin --create-polfile /etc/tripwire/twpol.txt
# tripwire --init # tripwire --check
# apt-get install rkhunter unhide mailutils
# nano /etc/rkhunter.conf
SSH_CONFIG_DIR=/etc/ssh
MAIL-ON-WARNING="correo@mail"
DISABLE_TESTS=""
PKGMGR=DPKG
ALLOWHIDDENDIR="/dev/.udev"
ALLOWHIDDENFILE="/dev/.initramfs"
MAIL_CMD=sendmail -s "[rkhunter] Warnings found for ${HOST_NAME}" -A /var/log/rkhunter.log
# rkhunter --propupd
# rkhunter --check
Para no tener problemas de falsos positivos tras actualizar deberemos hacer:
# rkhunter --propupd
# tripwire --init --local-passphrase
Monitoriza los logs
# apt-get install logwatch
# nano /etc/logwatch/conf/logwatch.conf
Output = mail
Format = html
MailTo = you@mail
MailFrom = correo@mail.example
Detail = High
Detectar ataques a puestos UDP y TCP mediante: # apt-get install portsentry
Para configurar correctamente portsentry y que no nos bloque debemos añadir el puerto 22 a:
# nano /etc/portsentry/portsentry.conf
#FTP,SSH,Telnet,SMTP,DNS,Time,Whois,Mail,Http,POP3,SQL,NTP,IMAP,SMB,ModBus,SHELL,SMTP,SOCKS,OpenVPN,IPsec,Cpanel,MySQL,PostgreSQL,VNC,
TCP_PORTS="20,21,22,23,25,37,43,56,57,80,8080,8000,8443,443,110,118,123,143,445,502,514,587,1080,1194,1293,2082,2083,2095,2096,3306,5432,5500,5800,5900"
#WoL
UDP_PORTS="9,20,23,37,56,118,123,502,1194,1293,3306,5432"
ADVANCED_EXCLUDE_TCP="22,80,113,139"
Si tenemos Apache:
# apt-get install libapache2-modsecurity
# a2enmod security2# cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
# nano +7 /etc/apache2/conf-enabled/security.conf
SecRuleEngine On
# apt-get install libapache2-mod-spamhaus
# a2enmod spamhaus # a2enmod headers
# a2enconf security
# nano +26 /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
#ServerTokens OS ServerSignature Off
#ServerSignature On
Header set X-Content-Type-Options: "nosniff"
Header set X-Frame-Options: "sameorigin"
Siendo más estrictos
Usando IpTables podemos hacer más seguro nuestro server restringiendo los puestos que pueden recibir y enviar datos.
Borramos la configuración anterior
# iptables -F
Permitimos las conexiones existentes
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Permitimos la conexiones por el puerto 22
# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT
Permitimos las conexiones locales
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
Cambiamos las políticas por defecto
# iptables -P FORWARD DROP
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
!!Tened en cuenta que si queremos que se acceda a los puertos de PortEntry, hay que abrirlos
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
Para tener conectividad hay que permitir el trafico DNS y la salida de trafico http/s
# iptables -A OUTPUT -p TCP --dport 53 -j ACCEPT
# iptables -A OUTPUT -p UDP --dport 53 -j ACCEPT
# iptables -A INPUT -p TCP --sport 53 -j ACCEPT # iptables -A INPUT -p UDP --sport 53 -j ACCEPT# iptables -A OUTPUT -p TCP --dport 80 -j ACCEPT
# iptables -A OUTPUT -p TCP --dport 443 -j ACCEPT
Mostramos el los logs las conexiones rechazadas
# iptables -A INPUT -j LOG --log-level debug --log-prefix "Drop INPUT:"
# iptables -A OUTPUT -j LOG --log-level debug --log-prefix "Drop OUTPUT: " --log-uid
Debemos denegar el acceso a "root", debe existir al menos otro usuario:
# nano +28 /etc/ssh/sshd_config
PermitRootLogin no
# useradd NuevoUsuario
# passwd NuevoUsuario
# mkdir /home/NuevoUsuario
Para poder evitar ataques de diccionario y fuerza bruta contra ssh, podemos configurarlo para que realice el login usando un certificado, para ello guardamos la clave publica del usuario en:
# nano /home/NuevoUsuario/.ssh/authorized_keys
# chmod 400 /home/NuevoUsuario/.ssh/authorized_keys
# chown NuevoUsuario:NuevoUsuario /home/NuevoUsuario -R
# nano /etc/ssh/sshd_config
PasswordAuthentication no
# service ssh restart
Referencias: https://openwebinars.net/10-minutos-para-securizar-tu-servidor/
https://www.digitalocean.com/community/tutorials/how-to-use-tripwire-to-detect-server-intrusions-on-an-ubuntu-vps
18 de junio de 2013
Prestashop con Cherokee, SSL y MariaDB
Introducción
- Prestashop es una tienda online bajo licencia OSL v3 escrita en PHP, podéis ver el código en GitHub.
- Cherokee server es un servidor web bajo licencia GPL v2, podéis ver el código en GitHub. Podéis consultar como obtener el programa para las distintas distribuciones de Linux en su sitio de descargas.
Cherokee nos permite ejecutar en un cluster PHP el código de nuestra web, para descargar la CPU de nuestro servidor principal. También podemos hacer de proxy inverso contra un cluster de servidores web, balanceando la carga sobre varias maquinas. (Tened en cuenta el manejo de sesiones por parte de PHP si usáis el proxy, ya que si la sesión se almacena en ficheros, y se balancea contra otro servidor esta sesión no existirá.) - MariaDB es una base de datos SQL compatible con MySQL bajo licencia GPL v2. Según la distribución Linux que uséis podéis consultar en la sección de repositorios de MariaDB como obtener acceder al código y fuentes del programa.
192.168.0.218 cherokee.prestashop.com
Instalación
Cherokee:
Vamos a instalar cherokee desde el repositorio, para tener la última versión.# apt-get install -y autoconf automake libtool gettext openssl git # git clone -b master --recursive http://github.com/cherokee/webserver.git # cd webserver # ./autogen.sh --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-wwwroot=/var/www # make # make install
Para que el sistema arranque cherokee al inicial el sistema:
# cp contrib/cherokee /etc/init.d/ # chmod a+x /etc/init.d/cherokee # nano /etc/rc.localAñadimos antes de "exit 0":
"/etc/init.d/cherokee start"
MariaDB:
En mi caso, bajo debian:# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db # echo 'deb http://mirror3.layerjet.com/mariadb/repo/5.5/debian wheezy main' >> /etc/apt/sources.list # apt-get update # apt-get install mariadb-server
Insertamos la clave para el usuario "root" de la base de datos.
Prestashop:
# apt-get install -y php5-cgi php5-mysql php5-gd php5-mcrypt gitPara este ejemplo voy a usar el "master" del git, para así obtener la última versión estable.
Al ser la versión de del git, debemos renombrar las carpetas "install-dev" y "admin-dev" eliminando el "-dev".
prestashop@prestashop:~$ git clone -b master https://github.com/PrestaShop/PrestaShop.git prestashop@prestashop:~$ mv PrestaShop/install-dev PrestaShop/install prestashop@prestashop:~$ mv PrestaShop/admin-dev PrestaShop/admin
Configuración
Unas de las cosas que más me gustan de Cherokee es que tiene un website que nos permite administrar el servidor de forma simple.Para lanzar el portal de administración ejecutamos:
# cherokee-admin -b
En pantalla veremos los credenciales generados para esa ejecución; que nos pedirán al acceder a través de nuestro navegador web.
En este ejemplo: http://cherokee.prestashop.com:9090/
En la pestaña "General" en el apartado "Seguridad", ponemos como usuario y grupo a "www-data".
En la pestaña vServers, pinchamos en "Nuevo" y veremos un asistente. Seleccionamos en "Lenguajes" la opción PHP y pulsamos en añadir.
Cuando nos pregunta sobre la "raíz de documentos" escribimos la ruta del proyecto (en mi caso /home/prestashop/PrestaShop).
En el paso final nos pide el nombre del servidor virtual (en mi caso cherokee.prestashop.com), y pulsamos en crear.
Por último hay que guardar la configuración.
Antes de todo, deberémos conectamos a la base de datos para poder crear un usuario y una base de datos para alojar el prestashop.
$ mysql --user=root --password=mariadb_clave MariaDB [(none)]> CREATE DATABASE prestashop; MariaDB [(none)]> GRANT ALL PRIVILEGES ON prestashop.* TO 'prestashop'@'localhost' IDENTIFIED BY 'prestashop_clave_db';Ahora insertamos los datos de acceso a la base de datos en la web para validarlos y continuamos hasta finalizar la instalación.
Para la instalación nos pide permisos de escritura recursivos, en distintas ubicaciones.
En lugar de cambiar el propietario de "prestashop" a "www-data", o dar permiso a todos los usuarios para editar, voy a asignarles al grupo "www-data" y dar pemisos de escritura recursiva al grupo.
root@prestashop:/home/prestashop/PrestaShop# chgrp -R www-data config/ cache/ log/ img/ mails/ modules/ themes/default/lang/ themes/default/cache/ translations/ upload/ download/ sitemap.xml root@prestashop:/home/prestashop/PrestaShop# chmod g+w -R config/ cache/ log/ img/ mails/ modules/ themes/default/lang/ themes/default/cache/ translations/ upload/ download/ sitemap.xml
Ya podemos acceder desde nuestro navegador a la tienda para realizar la instalación.
Para finalizar eliminamos "install" y renombramos "admin"
root@prestashop:/home/prestashop/PrestaShop# mv admin admin-dev
root@prestashop:/home/prestashop/PrestaShop# rm -R -f installd
Ya podemos acceder a http://cherokee.prestashop.com/admin-dev/ para administrar nuestra tienda.
Puesta a punto
Para mejorar el rendimiento y la seguridad nuestro sitio web, vamos a volver al administrador de cherokee.En vServers seleccionamos nuestro dominio y vamos a la pestaña de "comportamiento".
Pinchamos sobre "Rule Manager".
Seleccionamos la regla por defecto y en "Gestor" desmarcamos todas las opciones salvo "Usar caché E/S".
Añadimos una regla manual del tipo "Directorio" e insertamos "/admin-dev/".
Sobre esta regla vamos a las pestaña "Seguridad" en el apartado de "autenticación" seleccionamos, por ejemplo, "Fixed list" e insertamos el valor de "Realm", añadimos los usuarios y contraseñas. Por último pinchamos sobre la regla, en donde pone "FINAL" para ponerla como "NON FINAL". Con este procedimiento, además del usuario y contraseña de administración deberán conocer uno de estos usuarios para poder acceder al sitio de administración.
Añadimos una regla manual del tipo "Extensión" e insertamos "js,css,html,jpeg,jpg,png,gif,ttf".
Sobre esta regla vamos a las pestaña "Gestor" y seleccionamos "contenido estático", en la pestaña de "Codificación" habilitamos GZip.
Añadimos una regla manual del tipo "Extensión" e insertamos "tpl,txt,md".
Sobre esta regla vamos a las pestaña "Gestor" y seleccionamos "Error HTTP" y elegimos "404 Not found". Si queréis dar acceso a los ficheros robots.txt, humans.txt, hackers.txt o a cualquier otro fichero txt, tpl o md, teneis que añador una reglar tipo "Existe fichero" y marcarlo como "contenido estático". Tened en cuenta que debe estar por encima de la regla anterior para que pueda tener efecto.
Añadimos una regla manual del tipo "Existe fichero" e insertamos "config.xml".
Sobre esta regla vamos a las pestaña "Gestor" y seleccionamos "Error HTTP" y elegimos "404 Not found".
Editamos "config/defines.inc.php" y ponemos como "false" el valor de '_PS_MODE_DEV_'.
SSL
Para habilitar SSL en nuestro servidor vamos a la pestaña "General", en el apartado "Network", seleccionamos OpenSSL/libssl; "Port open" añadimos el puerto 443 con soporte TLS/SSL.En vServers seleccionamos nuestro dominio.
En la pestaña seguridad ponemos la ruta de nuestros certificados y activamos HSTS.
Si no tenemos una firma, vamos a la pestaña de "comportamiento".
Pinchamos sobre "Rule Manager".
Añadimos una regla "Task > SSL/TLS Testing", esto nos lanzar un asistente que nos generará unas claves autofirmandas.
Por último en "Rule Manager" de nuestro dominio seleccionamos la pestaña "Seguridad" y marcamos "Only https".
UPDATE: Urls Amigables
Las Urls amigables mejoran el SEO de nuestra web, pero para poder configurarlas hay que reescribir la url que llegan al servidor y hacer que se evalúe el código PHP.Para ello vamos a escribir dos reglas, una para manejar las imágenes y otra para el código PHP.
Añadimos una regla manual del tipo "Extensión" e insertamos "jpeg,jpg,png,gif".
Sobre esta regla vamos a las pestaña "Gestor" y seleccionamos "Redirección"; ahora añadiremos las redicciones para las imágenes pulsando sobre "Nueva RegEx" y siendo todas ellas del tipo "redirección interna", añadimos las siguientes:
^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 ^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/c/$1$2.$3 ^c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/c/$1$2$3.$4 ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/p/$1/$1$2$3.$4 ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/p/$1/$2/$1$2$3$4.$5 ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/p/$1/$2/$3/$1$2$3$4$5.$6 ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.$7 ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.$8 ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.$9 ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.$10 ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.$11
Recordar debe estar por encima de la regla de "cache" de imágenes, y ser del tipo "No final".
Para el caso del resto de URLs usaremos el patrón "^.*$" y redirigiremos ha "/index.php". Esta regla se puede aplicar en el comportamiento por defecto, pero nos inpedirá acceder al directorio de administración. Para poder seguir accediendo a este deberemos crear una regla "auxiliar" para la redirección. Añadimos una regla manual del tipo "Directorio" e insertamos "/admin-dev/", para luego negarlo. Esta regla se encontrará justo encima de la opción por defecto y dejaremos la opción por defecto como "Listar y ver".
15 de abril de 2012
Evolución de Android en Seguridad
El objetivo de este post es realizar un listado sobre como ha ido evolucionando en seguridad Android; permitiendo a un usuario conocer las vulnerabilidades y características de su sistema Android en cuanto a seguridad se refiere.
Este listado solo se listarán fallos y mejoras a nivel de sistema y que afectan a el mismo, es decir:
Quedan descartados los fallos en las aplicaciones de terceros o externas al sistema, como pueden ser Skype (CVE-2011-1717), el SDK de Android (CVE-2011-1001, CVE-2008-0985, ...), Flash (CVE-2011-2460, CVE-2011-2459, …), entre otras.
Otro ejemplo que excluiré son los fallos CVE-2008-7298 y/o CVE-2011-2344 que afecta a la seguridad de las cookies en una conexión, y no están incluida ya que no tienen un impacto directo contra el sistema.
Tampoco tendremos en cuenta fallos que afecten a fabricantes en exclusiva, como por ejemplo, la vulnerabilidad CVE-2011-3975 que afecta a algunos modelos de HTC. O las versiones de la 2.3.5 a la 2.3.7 que solo de están disponibles para algunos dispositivos.
He intentado mostrar las fuentes originales y no perder ninguna vulnerabilidad o fallo importante. Si conocéis alguno que me olvide encantado de añadirlos, solo tenéis que comentar. xD
Voy ha distinguir tres apartados:
Soluciona: Indica que ha sido publicada de forma clara, que este fallo ha sido solucionado en esa versión.
Nuevo: Nueva mejora implementada.
Vulnerable: Indica que esa versión en vulnerable, pero no se especifica cuando ha sido solucionada.
Febrero 2009 v1.1
- Soluciona:
CVE-2009-0475 (Ejecución de código a través de Mp3)
CVE-2009-0606 (Elevación de privilegios)
CVE-2009-0607 (Múltiples desbordamientos de enteros)
CVE-2009-0608 (Desbordamiento de entero)
Abril 2009 v1.5 r1
- Nuevo:
Kernel 2.6.27
- Vulnerable:
CVE-2009-1895 (Elevación de privilegios)
Mayo 2009 v1.5 r2
- Soluciona:
CVE-2009-1754 (Acceso a información sensible, datos de aplicaciones)
Julio 2009 v1.5 r3
- Soluciona:
CVE-2009-2348 (Salto de permisos, acceso a cámara y gravar audio)
CVE-2009-2656 (DoS a través de SMS)
CVE-2009-2999 (DoS a través de SMS)
Septiembre 2009 v1.6 r1
- Soluciona:
CVE-2009-3698 (DoS a través de Dalvik API)
- Nuevo:
VPN
- Vulnerable:
CVE-2009-1185 (Elevación de privilegios, a través de udev)
CVE-2009-1186 (DoS a través de udev)
Octubre 2009 v2.0
- Nuevo:
Kernel 2.6.29
- Vulnerable:
CVE-2009-1442 (Posible ejecución de código a través de “Skia”)
CVE-2010-EASY (Elevación de privilegios, exploit RageAgainsttheCage)
Diciembre 2009 v1.6 r2
- Soluciona:
Desbloqueo de pantalla a través de la Alarma
Diciembre 2009 v2.0.1
- Vulnerable:
Desbloqueo de pantalla a través de Llamadas
Mayo 2010 v2.2 r1
- Soluciona:
CVE-2009-2692 (Elevación de privilegios)
CVE-2010-1807 (Ejecución de código a través de WebKit)
CVE-2010-1119 (Elevación de privilegios a través de WebKit)
- Nuevo:
Kernel 2.6.32
Desbloqueo por código numérico
Borrado remoto
Backup Manager
Device Administration (Gestión de políticas de Seguridad)
Julio 2010 v2.2 r2
- Vulnerable:
359 Fallos desconocidos
Diciembre 2010 v2.3
- Soluciona:
CVE-2011-1149 (Elevación de privilegios, exploit KillingInTheNameOf)
RageAgainsttheCage (Elevación de privilegios, a través de ADBd)
Zimperlich (Elevación de privilegios, a través de Zygote)
- Nuevo:
Kernel 2.6.35
OpenSSL 1.0.0a
BouncyCastle 1.45
Mejorada la verificación del código
NFC
- Vulnerable:
Múltiples DoS a través NFC
Comunicación encubierta entre procesos (4.2.2.)
Julio 2011 v2.2 r3
- Soluciona:
CVE-2011-0680 (Acceso a información sensible a través de SMS)
Febrero 2011 v2.3.3, v3.0
- Vulnerable:
CVE-2011-0419 (DoS a través de Apache)
Spoofing de certificados a través de iframe
Mayo 2011 v2.3.4, v3.1 r1 y r2
- Soluciona:
CVE-2010-4804 (URI Multiple Information Disclosure Vulnerabilities)
CVE-2011-1823 (Elevación de privilegios, exploit GingerBreak)
Salto de permisos a través del widget de “control de energía”
- Vulnerable:
Salto de permisos y Elevación de privilegios (conferencia Source Barcelona)
Android class loading hijacking
CVE-2011-0640 (Ejecución de código a través de udev)
CVE-2011-1349 (DoS)
CVE-2011-1350 (Elevación de privilegios)
CVE-2011-1352 (Elevación de privilegios)
CVE-2011-2343 (Acceso a información sensible a través de bluetooth)
CVE-2011-3874 (Elevación de privilegios, exploit zergRush)
Julio 2011 v3.0 r2
- Nuevo:
Kernel 2.6.36
DRM
Cifrado de disco
Mejora de Políticas de seguridad
Julio 2011 v3.1 r3, 2011 v3.2
- Soluciona:
CVE-2011-2357 (Salto de permisos a través de javascript)
Octubre 2011 v4.0
- Nuevo:
ASLR
Desbloqueo por reconocimiento facial
Mejora de Cifrado (cada App puede usar su propio CA)
Mejora de VPN
Gestión y bloqueo de trafico web por aplicación
- Vulnerable:
Bypass del Desbloqueo de pantalla a través de reconocimiento facial
Tap hijacking
ByPass de Permisos
CVE-2012-0056 (Elevación de privilegios, exploit mempodroid)
CVE-2011-3918 (DoS)
[UPDATE]
- Fallos en MSM driver o camera:
CVE-2013-6122
CVE-2013-6123
CVE-2013-6392
CVE-2013-4736
CVE-2013-4737
CVE-2013-4738
CVE-2013-4739
CVE-2013-4740
- Fallos en kernel-mode driver:
CVE-2012-4220
CVE-2012-4221
CVE-2012-4222
- Master Key:
CVE-2013-4787
- Fallos en v6k and v7 ARM:
CVE-2013-6282
- Otros fallos en el Kernel:
CVE-2013-2094
CVE-2013-2058
CVE-2013-1773
Busqueda sistemática de fallos de fuga de información
http://www.csc.ncsu.edu/faculty/jiang/pubs/NDSS12_WOODPECKER.pdf
http://www.youtube.com/watch?v=xGwTviVRcrg
http://www.xda-developers.com/android/discover-undisclosed-apis-with-androids-secret/
13 de febrero de 2012
La Comisión Europea propone cambiar las leyes de Protección de datos
Tras un estudio realizado por la Comisión europea sobre la preocupación de sus ciudadanos en temas de protección de datos y observar que:
- 2/3 de los europeos nos preocupa que las empresas compartan nuestros datos personales sin autorización.
- 9/10 queremos tener los mismos derechos de protección en toda Europa.
La comisión ha propuesto un cambio de legislación que unifique los la protección de los internautas europeos.
Entre las novedades destancan:
- Se establece un "Derecho al olvido", de tal modo que las empresas estén obligadas a eliminar los datos personales a petición del usuario, salvo razones legítimas (como el cumplimiento de alguna norma).
- La protección de datos también debe aplicarse en los países que no pertenezcan a esta y traten con datos de europeos.
- Las empresas estarán obligadas a comunicar los incidentes de fugas de información que puedan afectar a los datos personales de sus usuarios.
Por el momento es una propuesta de reforma, y queda un largo camino burocrático para que pueda ser aplicable.
Referencia:
http://ec.europa.eu/news/business/120125_es.htm
- 2/3 de los europeos nos preocupa que las empresas compartan nuestros datos personales sin autorización.
- 9/10 queremos tener los mismos derechos de protección en toda Europa.
La comisión ha propuesto un cambio de legislación que unifique los la protección de los internautas europeos.
Entre las novedades destancan:
- Se establece un "Derecho al olvido", de tal modo que las empresas estén obligadas a eliminar los datos personales a petición del usuario, salvo razones legítimas (como el cumplimiento de alguna norma).
- La protección de datos también debe aplicarse en los países que no pertenezcan a esta y traten con datos de europeos.
- Las empresas estarán obligadas a comunicar los incidentes de fugas de información que puedan afectar a los datos personales de sus usuarios.
Por el momento es una propuesta de reforma, y queda un largo camino burocrático para que pueda ser aplicable.
Referencia:
http://ec.europa.eu/news/business/120125_es.htm
15 de enero de 2012
Filtrado por lista negra en WebPy
WebPy es un framework para aplicaciones web escrito en python. Se trata de un framework de código libre y está "licenciado" como dominio público.
En este caso queremos mejorar la seguridad de nuestra aplicación web creando una clase que implemente mecanismos de filtrado por lista negra. Existen múltiples listas negras en internet sobre IPs potencialmente dañinas.
En mi caso he decido para implementar esta funcionalidad con la lista negra suministrada por el proyecto honeypot.
En primer lugar vamos a crear una clase que nos permita hacer consultas sobre esta base de conocimiento.
class HttpBL(): def __init__(self, key): self.key = key self._DOMAIN = "dnsbl.httpbl.org" def get_info(self, ip, timeout=None): partes = ip.split(".") #Don't ask private networks if partes[0] == "10" or partes[0] == "127": return (-1,-1,-1) elif partes[0] == "192" and partes[1] == "168": return (-1,-1,-1) elif partes[0] == "172" and int(partes[1]) >= 16 and int(partes[1]) <= 31: return (-1,-1,-1) domain_ask = "" for parte in partes: domain_ask = parte+"."+domain_ask domain_ask = self.key+"."+domain_ask+self._DOMAIN try: if timeout: socket.timeout = timeout result = socket.gethostbyname(domain_ask) result = result.split(".") return (int(result[1]), int(result[2]), int(result[3])) except socket.gaierror as (error, string): if error == 11001 or error == -5: return (-1,-1,-1) else: raise socket.gaierror(error, string)Como podeis observar, las IPs privadas no se consultan.
Podeis obtener más información sobre el tipo de información que nos provee esta lista desde: http://www.projecthoneypot.org/httpbl_api.php
Por otro lado he implementado una clase que, además de comprobar que quien acceda al servicio no sea potencialmente peligroso, define: unas reglas de acceso directamente en la declaración, la creación de una respuesta OPTIONS con los datos anteriores y una comprovación del dominio desde el que se está acediendo a la aplicación.
class SecureWeb(): def __init__(self, blkey="", host_name=None, allow_methods=["HEAD","GET","POST","OPTIONS"]): self.allow_methods = allow_methods self.host_name = host_name self.blacklist = HttpBL(blkey) def not_allowed(self): raise web.Forbidden() def wrong_hostname(self): self.not_allowed() def bad_method(self): self.not_allowed() def to_honeypot(self, data): self.not_allowed() def to_search_engine(self): pass
def check_allow(self):
(last_activity, threat_score, type) = self.backlist.get_info(web.ctx.env["REMOTE_ADDR"]) if type == 0: self.to_search_engine() elif type > 0: self.to_honeypot((last_activity, threat_score, type))
if self.host_name: hostname_ok = False for hostname in self.host_name: if hostname.lower() == web.ctx.env["SERVER_NAME"].lower(): hostname_ok = True break if not hostname_ok: self.wrong_hostname() if not web.ctx.env["REQUEST_METHOD"].upper() in self.allow_methods: self.bad_method() def HEAD(self, *extras): self.check_allow() def GET(self, *extras): self.check_allow() def POST(self, *extras): self.check_allow() def PUT(self, *extras): self.check_allow() def DELETE(self, *extras): self.check_allow() def TRACE(self, *extras): self.check_allow() def CONNECT(self, *extras): self.check_allow() def OPTIONS(self, *extras): self.check_allow() allow = "" for method in self.allow_methods: allow += method+"," allow = allow[:1] web.header('Allow', allow)
Como se puede observar en cada tipo de petición HTTP se realiza un chequeo de acceso, y en caso de no validarlo se envia la información a la función correspondiente para poder procesarla de forma adecuada. En el ejemplo todas las funciones acaban llamando a 'not_allowed' que muestra un Forbidden. Pero cada uno de vosotros podeis modificar las funciones 'wrong_hostname' 'bad_method' 'to_honeypot' 'to_search_engine' para que realicen las acciones que estimeis oportunas.
Suscribirse a:
Entradas (Atom)