Mostrando entradas con la etiqueta web. Mostrar todas las entradas
Mostrando entradas con la etiqueta web. Mostrar todas las entradas

miércoles, 18 de noviembre de 2015

Revisar IPs en el Log de Apache para detener ataques de denegación de servicio

Como parte del mantenimiento de servidores web es necesario hacer revisión del número de accesos de los usuarios a nuestro servidor web para detectar un ataque de denegación de servicio. Para esto veremos como revisar el Log de nuestro servidor web Apache.

Para realizar la revisión buscaremos las IPs que tienen mas de 500 visitas a nuestro portal, para luego bloquearlas. Esto bajo el supuesto que las IPs que pasan las 500 visitas están realizando ataques a nuestra web. (Puede tomar otro valor mayor o menor según como Ud. considere)

Para esto ejecutamos las siguientes líneas.

FILE=/var/log/httpd/access_log;
 for ip in `sudo cat $FILE |cut -d ' ' -f 1 |sort |uniq`;
 do { COUNT=`sudo grep ^$ip $FILE |wc -l`;
 if [[ "$COUNT" -gt "500" ]]; then echo "$COUNT:   $ip";
 fi }; done

La ejecución anterior nos devolverá las IPs con los números de visitas de estas IPs, podemos ayudarnos con una herramienta de Tracking Web  ( como http://www.ip-tracker.org/) para ver cual es el origen de estas IPs y hacer un análisis de que acción tomar con estas IPs. Por ejemplo, si nuestro portal vende productos peruanos a los peruanos, y observamos en los Logs excesivas visitas de Rusia o USA, deberíamos bloquear esas IPs.

Para bloquear las IPs podemos hacerlo actualizando nuestro portal web, específicamente el archivo .htaccess al cual añadiremos las siguientes líneas (donde IPx es la IP del visitante)

order allow,deny
deny from IP1
deny from IP2
...
deny from IP3
allow from all 

lunes, 8 de julio de 2013

Apache 2.4 añadir VirtualHost para Zend Framework 2

La versión de ZF2 trae por defecto una configuración para levantar un VirtualHost en Apache. Pero esta configuración no funciona correctamente en Apache 2.4.

A continuación adjunto la configuración correcta para Apache 2.4, espero les sea útil.


<VirtualHost *:80>
  ServerName "local.mipagina.com"
  DocumentRoot "/home/webmaster/local.mipagina.com/public"
  SetEnv APPLICATION_ENV "development"
  ErrorLog "/var/log/httpd/local.mipagina.com.err"
  <Directory "/home/webmaster/local.mipagina.com/public">
    DirectoryIndex index.php
    Options Indexes FollowSymLinks
    AllowOverride All
    Allow from All
    require all granted
  </Directory>
</VirtualHost> 


Probado en Slackware 14

viernes, 12 de noviembre de 2010

2 consejos para acelerar Firefox

Firefox es uno de los navegadores mas potentes y usados en la actualidad. Pero consume muchos recursos en muchas ocasiones. A continuación dos consejos para resolver estos problemas.
Para esto debemos ingresar a la barra de direcciones de Firefox : about:config y buscar los siguiente parámetros:

Consejo 1: Mejorar velocidad de conexión
Cambiemos los siguientes valores de nuestro about:config.
PreferenciaValorTipo de valorTipo de preferencia
network.http.pipeliningtrueLógicoExistente
network.http.pipelining.maxrequests30EnteroExistente
network.http.proxy.pipeliningtrueLógicoExistente
nglayout.initialpaint.delay0EnteroNueva

Consejo 2: Consumo de memoria
Para mejorar el consumo de memoria es preferible bajar el valor de capacidad de cache.
PreferenciaValorTipo de valorTipo de preferencia
browser.cache.memory.enabletrueLógicoExistente
browser.cache.memory.capacityTamaño cachéEnteroNueva

Con estos ajustes conseguiremos sacar un poco más de partido a nuestra conexión.

sábado, 20 de septiembre de 2008

Aplicaciones Web 2.0 con Software Libre

El presente trabajo, muestra las herramientas y aplicaciones de Software libre que se utilizan para la creación de entornos Web 2.0.

Presentación pública

viernes, 18 de abril de 2008

Visualizar HTML en mutt

Mutt no deja de sorprenderme, leyendo la documentación he encontrado la forma de poder ver directamente el formato HTML en mutt, añadiendo la siguiente línea a nuestro archivo de configuración ($HOME/.mutt/muttrc):
auto_view text/html
Una belleza, no creen...

miércoles, 26 de marzo de 2008

AjaxRain: mas de 1000 scripts ajax

AjaxRain es uno de los portales más grandes de almacenamiento de código javascript y componentes Ajax organizados según los kits de desarrollo a los que pertenecen. AjaxRain provee una invaluable cantidad de poderosos recursos para el desarrollo de interfaces Web, trabajando con los kits mas populares: jquery, dojo toolkit, yahoo, scriptacolous, prototype, lightbox, extjs, etc.

Un sitio muy importante para todo desarrollador web.

portal http://www.ajaxrain.com

lunes, 10 de marzo de 2008

uncaught exception: Permiso denegado al llamar al método XMLHttpRequest.open

uncaught exception: Permiso denegado al llamar al método XMLHttpRequest.open es uno de los errores que ocurre al querer acceder a una página fuera de nuestro dominio, mediante el objeto XMLHttpRequest. Este error ocurre en el navegador Mozilla Firefox, que por cuestiones de seguridad bloquea el acceso a objetos de distintos dominios. Para solucionar este problema es necesario añadir algunas líneas a nuestro archivo de configuración de Mozilla Firefox (user.js), el cual se encuentra en la carpeta:

$HOME/.mozilla/firefox/x* (Linux)
%AppData%\Mozilla\Firefox\Profiles (Windows)

Añadiendo estas líneas el problema se soluciona:

user_pref("capability.policy.XMLHttpRequestToAnySite.XMLHttpRequest.open", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.sites", "http://localhost http://www.pagina1.com http://www.pagina2.com");
user_pref("capability.policy.XMLHttpRequestToAnySite.CDATASection.nodeValue", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.attributes", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.childNodes", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.firstChild", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.getAttribute", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.getElementsByTagName", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.lastChild", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.nodeName", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.nodeType", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.parentNode", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.tagName", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.nextSibling", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Element.previousSibling", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.HTMLCollection.length", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.HTMLCollection.item", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.attributes", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.childNodes", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.firstChild", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.getAttribute", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.getElementsByTagName", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.lastChild", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.nodeName", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.nodeType", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.parentNode", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.tagName", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.nextSibling", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.Text.previousSibling", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.XMLDocument.documentElement", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.XMLDocument.getElementsByTagName", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.XMLHttpRequest.channel", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.XMLHttpRequest.open", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.XMLHttpRequest.responseText", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.XMLHttpRequest.responseXML", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.XMLHttpRequest.send", "allAccess");
user_pref("capability.policy.XMLHttpRequestToAnySite.XMLHttpRequest.setRequestHeader", "allAccess");
user_pref("capability.policy.policynames", "XMLHttpRequestToAnySite");

En la sección
user_pref("capability.policy.XMLHttpRequestToAnySite.sites", "http://localhost http://www.pagina1.com http://www.pagina2.com");
añadimos los sitios web que queramos acceder con el objeto XMLHttpRequest (van separados de espacio cuando son mas de uno).

Luego en el explorador ponemos:
about:config
y buscamos el apartado: signed.applets.codebase_principal_support
al cual le asignamos el valor true.

Listo, solo falta reiniciar el firefox.

Emacs en windows: arranque rápido

En windows la carga de emacs implica una demora en windows pero se puede mejorar usando el demonio de emacs y modificar la llamada usando el...