Instalar JDK linux

Instalación

Desde los repositorios de Ubuntu

Otra forma sencilla de instalar el JRE6 o el JDK6, es usar los repositorios oficiales de Ubuntu. Para ello, simplemente debemos instalar desde los repositorios los paquetes sun-java6-binsun-java6-jre y sun-java6-jdk, respectivamente.

Desde la web de Java

Si tienes dificultades con el anterior caso, puedes descargarte del sitio web de Sun el JRE6 o, en caso de que desees programar, el JDK6. Una vez descargado, tenemos que cambiarle los permisos al fichero para que se pueda ejecutar e instalarlo. Seguimos los siguientes pasos:

En una terminal, nos vamos a la carpeta donde hemos descargado el fichero .bin:

$ cd <carpeta>

Le damos permisos de ejecución al archivo (cambiar jre por jdk si es el caso) y lo ejecutamos para instalarlo :

$ chmod +x jre-6-linux-i586.bin
$ sudo ./jre-6-linux-i586.bin

Seguimos las instrucciones que van apareciendo en pantalla, que son 2 o 3.

Movemos la carpeta creada después de la instalación (llamada jre1.6.0) a una más apropiada:

$ sudo mv jre1.6.0 /usr/lib/jvm

Establecemos el nuevo Java como una de las “alternativas de java”:

$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jre1.6.0/bin/java" 1

Ahora establecemos la “nueva alternativa” como la real de Java. Este paso hace que la version de sun sea la usada por defecto :

$ sudo update-alternatives --set java /usr/lib/jvm/jre1.6.0/bin/java

Para comprobar si tenemos la versión 1.6.0, tipeamos en la terminal:

$ java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode)

Configurar el path de JAVAC (para las versiones JDK)

Posiblemente te hayas dado cuenta que al intentar compilar un archivo Java con algún programa (por ejemplo, jGRASP), aparece un error que dice: javac no fue encontrado. Los requisitos para poder configurar el path de javac es haber instalado algún JDK, en este ejemplo se usa el JDK6.

Imagen:Nota clasica.png Las instrucciones de instalación de JDK 6 se encuentran en la sección Instalación -> Desde la web de Java -> JDK 6 de este artículo.

Pues bien, primero abrimos una terminal. Luego, tendremos que hacer esto (las rutas mostradas corresponden al JDK6 instalado como se muestra en esta guía):

1. Establecer javac de JDK como una “alternativa” (todo en la misma linea), ya que el sistema no lo reconoce:

$  sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_XX/bin/javac" 1 (XX la vesion del JDK que se descargo)

2. Ahora establecemos la “nueva alternativa” como la real de javac en el sistema:

$  sudo update-alternatives --set javac /usr/lib/jvm/jdk1.6.0_XX/bin/javac

3. Para comprobar si tenemos la versión de javac 1.6.0_06, escribimos en la terminal:

$ javac -version

Después de esta instrucción, tendrá que aparecer algo así:

javac 1.6.0_06

Ya tienes javac configurado y listo para usar. Ahora podrás compilar sin ningún problema.

* Copiado de Guía-Ubuntu

Anuncios

Servidor Subversion

Instalacion y configuracion de Subversion

Me embarco en la aventura de instalar subversion al servidor… ¿Qué es subversion?

Subversion es un servidor de control de versiones. Si estas trabajando en un proyecto grande, es lógico que con el paso del tiempo vayas haciendo cambios mas o menos importantes. Puede que en un momento dado quieras volver a una versión previa de un archivo, o de todo el proyecto, que desees ver quién hizo un cambio y porqué… para eso está subversion.

Se supone que tenemos configurado un servidor bajo Apache en una distribución Debian.

Primer paso: Instalación de las herramientas necesarias

Instalamos los paquetes que nos hacen falta para crear repositorios:

sudo aptitude install subversion subversion-tools

Necesitamos dos módulos de apache instalados en nuestro servidor, si haremos uso de svn a través de internet… (obvio, al menos para mí)

Los modulos son dav y dav_svn. Para comprobar que los tenemos:

a2enmod dav

a2enmod dav_svn

Si no estaban instalados, los instalamos:

sudo aptitude install libapache2-svn

Segundo paso: Creación de grupos y usuarios permitidos

Creamos un grupo subversion para manejar fácilmente los permisos

groupadd subversion

Añadimos a dicho grupo los usuarios que queremos que usen de algún modo nuestro servidor

usermod -a -Gsubversion user1

usermod -a -Gsubversion user2

usermod -a -Gsubversion user3

Ahora pasamos a crear los ficheros de acceso, que guardan los nombres y contraseñas de esos usuarios que harán uso del repositorio:

htpasswd2 -c /etc/apache2/dav_svn.passwd user1

htpasswd2 /etc/apache2/dav_svn.passwd user2

htpasswd2 /etc/apache2/dav_svn.passwd user3

El primero lleva -c por la simple razón de que crea el fichero. Los demás se añaden a él.

Cada vez que introduzcamos un usuario, se nos pedirá su nueva contraseña.

Tercer paso: Creación de un repositorio

Ahora creamos la carpeta donde ubicaremos el repositorio:

sudo mkdir /home/SVN

sudo svnadmin create /home/SVN

Y le damos los correspondientes permisos

chown -R www-data:subversion /home/svn/

chmod -R 770 /home/svn/

Cuarto paso: Configurando Apache para los repositorios

Pasamos a configurar el fichero que gestiona el módulo de apache para el svn:

sudo gedit /etc/apache2/mods-available/dav_svn.conf

Dentro ponemos esta configuración:

##

# SVN

#

<Location /svn>

DAV svn

SVNPath /home/svn

AuthType Basic

AuthName "Repositorio Subversion del proyecto"

AuthUserFile /etc/apache2/dav_svn.passwd

<LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

</LimitExcept>

</Location>

Si queremos quitar el modo lectura a cualquiera, porque nuestro proyecto sea confidencial o no queramos que sea visto desde fuera, basta reemplazar la sección:

<LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

</LimitExcept>

por

Require valid-user

Reiniciamos el servicio de apache para que nos rearranque con los cambios introducidos.

sudo /etc/init.d/apache2 restart

Notas finales

Si queremos añadir usuarios a nuestros repositorios:

htpasswd2 /etc/apache2/dav_svn.passwd otro_usuario

Si queremos crear nuevos repositorios repetiremos todo desde el tercer paso, creando fichero de contraseñas con otro nombre (seguridad), añadiendo al final del fichero /etc/apache2/mods-available/dav_svn.conf la configuracion del nuevo servidor (seguramente cambia el path al fichero de contraseñas y el path al propio repositorio.

Eso es todo. Disfrutad.

MySQL UTF8

Me he visto obligado a tener en una base de datos MySQL que almacenar varios idiomas, tales como Griego, la solución en el servidor de base de datos tal como sigue, también se explica cómo configurar jdbc para el griego:

Habilitar UTF8 en MySQL

 

Las tablas hay que crearlas con la collation UTF8 por defecto, esto se hace cómo:

 

 

Habilitar utf8 en MySQL y en conexiones a MySQL con jdbc

 

Class.forName(“com.mysql.jdbc.Driver”).newInstance();

String cadenaConn = “jdbc:mysql://” + finalsVar.REMOTE_HOST + “:3306/zenknx? useUnicode=true&characterEncoding=UTF8”;

conn = DriverManager.getConnection(cadenaConn, “USER”, “PASS”);

 

Asi se haría la conexión contra la base de datos, y cuando se pretenda usar el Statement para una consulta/ejecución se le debe de añadir lo siguiente:

 

 

Statement stmt = conn.createStatement();

stmt.executeQuery(“SET NAMES ‘UTF8′”);

stmt.executeQuery(“SET CHARACTER SET ‘UTF8′”);

stmt.executeQuery(“SET COLLATION_CONNECTION=utf8_general_ci”);

 

De ésta forma todo lo relacionado con la conexión en Java está configurado.

 

drop database if exists zenknx;

create database zenknx;

use zenknx;

DROP TABLE IF EXISTS `absoluteSegment`;

SET @saved_cs_client = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `absoluteSegment` (

`idsql` int(10) unsigned NOT NULL auto_increment,

`id` varchar(100) NOT NULL,

`address` varchar(50) NOT NULL,

`size` varchar(50) NOT NULL,

`idAppProgram` varchar(45) NOT NULL,

PRIMARY KEY (`idsql`)

) ENGINE=InnoDB AUTO_INCREMENT=226 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

 

Expresiones Regulares Javascript

Las expresiones regulares son modelos que describen las combinaciones de caracteres en el texto. Se podrían definir como una serie de carácteres que forman un patrón, que representan a otro grupo de carácteres mayor, de tal forma que podemos comparar el patrón con otros conjuntos de carácteres para ver las coincidencias. Las expresiones regulares pueden utilizarse en múltiples lenguajes de programación pero en esta entrada vamos a ver un ejemplo de validación de formularios mediante Javascript y haciendo uso de expresiones regulares.

Un buen tutorial para iniciarse en el manejo de expresiones regulares lo podemos encontrar en Desarrolloweb. Para realizar el ejemplo siguiente no hay porque conocer en profundidad su manejo. A continuación muestro una serie de tablas a modo de chuleta para que podamos utilizarlas con un simple corta y pega.

La tabla siguiente contiene los caracteres especiales de las expresiones regulares.
Carácter Texto buscado

^

Principio de entrada o línea.

$

Fin de entrada o línea.

*

El carácter anterior 0 o más veces.

+

El carácter anterior 1 o más veces.

?

El carácter anterior una vez como máximo (es decir, indica que el carácter anterior es opcional).

.

Cualquier carácter individual, salvo el de salto de línea.

x|y

x o y.

{n}

Exactamente n apariciones del carácter anterior.

{n,m}

Como mínimo n y como máximo m apariciones del carácter anterior.

[abc]

Cualquiera de los caracteres entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [a-f] es equivalente a [abcdef]).

[^abc]

Cualquier carácter que no esté entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [^a-f] es equivalente a [^abcdef]).

\b

Límite de palabra (como un espacio o un retorno de carro).

\B

Cualquiera que no sea un límite de palabra.

\d

Cualquier carácter de dígito. Equivalente a [0-9].

\D

Cualquier carácter que no sea de dígito. Equivalente a [^0-9].

\f

Salto de página.

\n

Salto de línea.

\r

Retorno de carro.

\s

Cualquier carácter individual de espacio en blanco (espacios, tabulaciones, saltos de página o saltos de línea).

\S

Cualquier carácter individual que no sea un espacio en blanco.

\t

Tabulación.

\w

Cualquier carácter alfanumérico, incluido el de subrayado. Equivalente a [A-Za-z0-9_].

\W

Cualquier carácter que no sea alfanumérico. Equivalente a [^A-Za-z0-9_].

La tabla siguiente contiene algunos de los patrones más utilizados a la hora de validar formularios. Si alguien conoce alguna expresión regular más -que pueda ser útil en la validación de formularios- la puede poner en los comentarios y yo la incorporaré a esta tabla.
Cualquier letra en minuscula [a-z]
Entero ^(?:\+|-)?\d+$

Correo electrónico

/[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/

URL

^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\’\/\\\+&%\$#_]*)?$

Contraseña segura

(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$
(Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales)

Fecha

^\d{1,2}\/\d{1,2}\/\d{2,4}$
(Por ejemplo 01/01/2007)
Hora ^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$
(Por ejemplo 10:45:23)

Número tarjeta de crédito

^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$

Número teléfono

^[0-9]{2,3}-? ?[0-9]{6,7}$

Código postal

^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$

Certificado Identificación Fiscal

^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$

Un ejemplo para controlar que la clave que se introduce sea segura podría ser:
texto plano

//

Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales

 

Ver ejemplo en funcionamiento » »

Inyeccion SQL

La inyección SQL consiste en la modificación del comportamiento de nuestras consultas mediante la introducción de parámetros no deseados en los campos a los que tiene acceso el usuario.

SQL
Este tipo de errores puede permitir a usuarios malintencionados acceder a datos
a los que de otro modo no tendrían acceso y, en el peor de los casos,
modificar el comportamiento de nuestras aplicaciones.

Vamos a ver con un ejemplo que significa eso
de “Inyección de código”:

Supongamos que tenemos una aplicación Web (realizada en ASP por sencillez)
en la que el acceso a ciertas secciones está restringido. Para restringir
ese acceso creamos una tabla de usuarios y contraseñas y sólo
los usuarios que se validen contra esa tabla podrán acceder a esos contenidos.
Una manera de que los usuarios se validen será colocar un par de cuadros
de texto en nuestra página Web (por ejemplo txtUsuario y txtPassword)
donde puedan introducir su nombre y su contraseña y enviar ese par usuario/contraseña
a la base de datos para comprobar si es válido.

Primero creamos la tabla que vamos a usar
y la rellenamos con datos:

use web-- Nuestra base de datos se llama webgo-- Creamos una tabla para 
almacenar los pares usuario/contraseña
create table usuarios (Usuario varchar (50) not null primary key,
Password varchar (50))go-- Introducimos un par de datos de prueba
insert into usuarios (Usuario, Password) values ('Admin', '1234')
insert into usuarios (Usuario, Password) values ('Usuario', 'abcd')

Ahora veamos el código de las páginas
que forman parte del proceso de login.

index.htm<form action="login.asp" method="post">Nombre: <input 
type="text" name="txtUsuario"><br>Password: <input type="password" 
name="txtPassword"><br><input type="submit"></form>

Esta primera página es sencilla. Simplemente
los dos cuadros de texto mencionados que enviarán los datos a la página de login.

Login.asp<%Dim Usuario, Password, RS, SSQLUsuario = 
Request.Form("txtUsuario")Password = Request.Form("txtPassword")
SSQL = "SELECT count(*) FROM Usuarios WHERE Usuario = '" &
Usuario &"' AND password='" & Password & "'"Set RS = 
Server.CreateObject("ADODB.Recordset")RS.Open SSQL, 
"Cadena de conexion"If (RS.EOF) ThenResponse.Write 
"Acceso denegado."ElseResponse.Write "Te has identificado 
como " & RS("Usuario")End IfSet RS = Nothing%>

Y en esta segunda página creamos dinámicamente
una sentencia SQL que enviamos a la base de datos para la validación.

Si el usuario escribe Admin y 1234 la sentencia creada será:

“SELECT Count(*) FROM Usuarios WHERE Usuario=’Admin’ AND
Password=’1234’”

Y como esta sentencia nos devuelve un registro,
dejaremos que el usuario entre en la Web. Si el usuario escribe por ejemplo
‘Admin’ y de contraseña cualquier otra cosa, la sentencia no nos devolverá registros
y no permitiremos entrar a esa persona.

Pero ¿qué ocurre si el usuario
escribe ‘ or ‘1′=’1 como usuario y lo mismo de contraseña?

En este caso la variable Consulta contendrá
la cadena:

"SELECT Count(*) FROM Usuarios WHERE Usuario = '' or '1'='1' AND
password = '' or '1'='1'"

Y obviamente esta sentencia nos devuelve registros
con lo que el usuario entrará en nuestra Web sin tener permiso.

Pero esto no es lo peor. Lo peor será
que el usuario utilice estos trucos de inyección de SQL para ejecutar
código arbitrario en nuestro servidor. Sentencias DDL, cambiar permisos,
utilizar procedimientos almacenados y un largo etcétera. Qué ocurriría
si alguien escribiese de contraseña cosas como:

' exec master..xp_cmdshell 'net user test /ADD' –

Como evitarlo:

Y ahora lo más importante, ¿qué
podemos hacer para evitar estos errores?
Pues hay varios sistemas para evitarlo. Por ejemplo podemos filtrar las entradas
de los usuarios reemplazando la aparición de ‘ por ‘’
(dos comillas simples) e incluso evitando que los usuarios puedan pasar caracteres
como \ / “ ‘ o cualquier otro que se nos ocurra que puede causar
problemas. Estos filtros pueden ser tan sencillos como utilizar la sentencia
replace de Visual Basic:

SSQL= "SELECT count(*) FROM Usuarios WHERE Usuario = '" & 
ReplacetxtUsuario.Text, "'", "''") & "' AND password='" & 
Replace(txtPassword.Text, "'", "''") & "'"

Otro factor importante en cuanto a la seguridad
es limitar al máximo los permisos del usuario que ejecuta estas sentencias
para evitar posibles problemas. Por ejemplo utilizando un usuario distinto para
las sentencias SELECT, DELETE, UPDATE y asegurándonos que cada ejecución
de una sentencia ejecute una sentencia del tipo permitido.

Por supuesto utilizar el usuario ‘sa’
o uno que pertenezca al rol ‘db_owner’ para ejecutar las sentencias
de uso habitual de la base de datos debería quedar descartado.

Una solución definitiva sería trabajar con procedimientos almacenados.
El modo en el que se pasan los parámetros a los procedimientos almacenados
evita que la inyección SQL pueda ser usada. Por ejemplo utilizando el
siguiente procedimiento almacenado:

CREATE Procedure Validar @usuario varchar(50), @password 
varchar(50)
ASIf (SELECT Count(*) FROM Usuarios WHERE Usuario=@Usuario 
and Password=@password)>0Return 1Return 0

También deberíamos validar los
datos que introduce el usuario teniendo en cuenta por ejemplo la longitud de
los campos y el tipo de datos aceptados. Esto lo podemos hacer en el cliente
con los RegularExpressionValidator o con los CustomValidators del VB.NET. De
todos modos si la seguridad es importante todas estas validaciones hay que repetirlas
en el servidor.

Por ultimo, y ya que estamos pensando en entornos
Web, podemos programar en ASP.NET y utilizar siempre que sea posible las clases
System.Web.Security.FormsAuthentication para que los usuarios entren en nuestras
aplicaciones Web.

Unir ficheros pdf

Los amantes del software GPL siempre, al final, encontramos la solución perfecta a lo que necesitamos. Y muchas veces esa solución es muchísimo más sencilla que cualquier otro software propietario.
Así, por ejemplo, resulta sencillísimo unir dos ficheros PDF (o más) en uno sólo. Para ello sólo necesitamos el pdf toolkit (pdftk), una completa herramienta GPL que funciona en la consola y permite manejar con suma facilidad ese tipo de documentos. Está disponible para multitud de plataformas y sistemas operativos, pero aquí nos centraremos en GNU/Linux y, más concretamente en debian y similares. Para instalarlo, como está en los repositorios por defecto de Debian, tan solo hace falta:

sudo apt-get install pdftk

La potencia de la herramienta es enorme. Permite unir varios PDF, partirlos, desencriptarlos si tienen contraseña, encriptarlos, rellenar los formularios que disponga, ponerles una marca de agua, reparar en muchos casos PDF corruptos… Y todo mediante la línea de comandos. Os remito a man pdftk para más información, pero valga como ejemplo cómo unir dos ficheros (entrada1.pdf y entrada2.pdf) en uno solo (salida.pdf):

pdftk entrada1.pdf entrada2.pdf cat output salida.pdf

Y todo con una rapidez inusitada.

 

Modify Users SVN

# htpasswd -cm /etc/apache2/svn-auth usuario1
# htpasswd -m /etc/apache2/svn-auth usuario2
# htpasswd -m /etc/apache2/svn-auth usuario3

 

-c: To create the file and insert the user

-n: To modify a user

Administering Tomcat

Chapter 5. Administering Tomcat

There are three administration tools bundled with Tomcat 5. They are:

  • Server Status application
  • Tomcat Administration Tool
  • Tomcat Manager

These web applications are bundled with Tomcat by default and can be accessed from the left sidebar of Tomcat’s default page. These tools address the need for simplified administration which other servlet engines, such as Websphere or Weblogic, provide.

5.1. The Administration Tool Web Appplication

The Administration Tool web application is the GUI tool for administering Tomcat. Before we can use it, or any of the GUI tools, we will first need to create a Tomcat administrator account, a Tomcat manager account and two roles: “admin” and “manager”.

For this exercise, we will create one user “TomcatAdmin” who has both manager and admin privileges.

Table 5-1. Administration Users and Roles

Tomcat Administrator Role admin This is a built-in role.
Tomcat Manager Role manager This is a built-in role.
Tomcat Administrator Username TomcatAdmin
Tomcat Administrator Password tcpass

Launch your favorite editor and add the following lines in green to $CATALINA_HOME/conf/tomcat-users.xml.

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="TomcatAdmin" password="tcpass" roles="admin,manager"/>
</tomcat-users>

Save the file, start Tomcat and open a browser. You should be able to access the Administartion Tool web application by clicking on the “Tomcat Administration” link on the left sidebar. You will be presented with a login screen. Just type in your Tomcat Administrator username and password, and you should be able to enter the administration tool GUI. An example of this GUI is shown below. The Administration Tool has collapsible menus on the left. Click on any of the icons in the left pane to display information and settings in the right pane. Depending on the specifications of your server, the display of settings and information in the right pane can be very slow ! You have to be patient and restrain your urge to keep clicking if the system seems unresponsive.

Tomcat Administration Tool

5.2. The Manager Web Application

You can access the Manager Web Application by clicking the “Tomcat Manager” link in the left sidebar of the default Tomcat page. This will display a GUI that allows you to view the status of your installed web applications and even deploy new web applications. There is also a link to the “HTML Manager Help” which can give you more information on using the Manager Web Application.

Tomcat Manager Web Application

The Manager web application also provides a way to install a new web application, reload it, start and stop it, and many other functions by merely passing a URL. For example, if we wanted to list the applications currently deployed in Tomcat, we could open a browser and key inhttp://hostname.domain.com:%5Bport%5D/manager/list, and it will return the list that we require.

5.3. Status Web Application

Finally, we have the Status web application, which displays the status of the Tomcat server, such as the memory utilization of the JVM, the version of JVM being run and the number and status of threads, among other parameters. This tool is new in Tomcat 5 and can be used to check if your Tomcat server is running low on system resources.

Status Web Application

BFD

BFD (Brute Force Detection), es un script en shell que parsea los logs de los diferentes servicios (ssh, ftp, apache, exim…) y chequea en busca de fallos repetitivos de autenticación, exceso de conexiones desde determinadas IPs, etc.

Combinado con APF (pinchad aquí para acceder a una guía de instalación y configuración) forman un sistema de protección realmente bueno para nuestro sistema, ya que BFD le indicará a APF que IPs debe bloquear para que su acceso al servidor sea denegado (lo explicamos ahora):

Instalación de BFD:

La instalación es extremadamente sencilla:

cd /root/descargas
wget http://www.rfxnetworks.com/downloads/bfd-current.tar.gz
tar -xvzf bfd-current.tar.gz
cd bfd-0.7
./install.sh

Una vez hecho esto, nos indicará las rutas a ejecutables y ficheros de configuración:

.: BFD installed
Install path:    /usr/local/bfd
Config path:     /usr/local/bfd/conf.bfd
Executable path: /usr/local/sbin/bfd

Configuración de BFD:

Editamos el fichero de configuración con nuestro editor favorito:

vi /usr/local/bfd/conf.bfd

Activamos las alertas de ataque (cambiamos de 0 a 1), y configuramos que nos envíe un email por cada una:

ALERT_USR="1"
EMAIL_USR="tucuenta@tudominio.com"

Para evitar que el sitema bloquee nuestra IP local, la añadimos al fichero que guarda las IPs a ignorar en el rastreo, añadiremos p.ej. 192.168.1.1 en:

vi /usr/local/bfd/ignore.hosts

Ejecutamos el programa:

/usr/local/sbin/bfd -s

BFD chequeará los logs cada X tiempo, el que le indiquemos en su cron, por defecto cada 10 minutos:

[root@localhost ~]# cat /etc/cron.d/bfd
MAILTO=
SHELL=/bin/sh
#*/5 * * * * root /usr/local/sbin/bfd -q

Una vez comprendido esto, podéis personalizar las reglas que vienen por defecto para cada servicio, se encuentra en la siguiente ubicación:

 /usr/local/bfd/rules

Con lo que más podéis jugar es con el valor “TRIG”, que indica el nº de conexiones o intentos permitidos para cada servicio, configuradlo en función de las necesidades de cada servicio:

TRIG="45"

Con un poco más de paciencia, y estudiando cada regla puede personalizarse completamente, no obstante la seguridad de nuestro servidor, teniendo BFD + APF ha mejorado notablemente.

 

Prevenir ataques SSH

Si estamos preocupados por la seguridad de nuestros servidores y mas del servicio/protocolo Secure Shell cuando esta relacionado con ataques de fuerza bruta ya sea por medio de diccionarios, entonces debemos de utilizar DenyHosts

, esta aplicación nos permitirá detectar posibles ataques antes de que estos hagan efecto.

 

La manera en que funciona DenyHosts es que monitorea el archivo /var/log/auth.log (en el caso de Debian – Ubuntu…) para detectar errores de autentificación al sistema y despues bajo ciertas reglas bloquer la IP o servicio que queramos mediante el archivo /etc/hosts.deny

Bueno, ahora que conocemos como funciona DenyHosts, es hora de empezar con la instalación, y para variar!! la forma mas sencilla (más que en MS-windows) desde consola (terminal) es con un simple:

apt-get install denyhosts

Despues procedemos con la configuración que se encuentra en /etc/denyhosts.conf algunos de los parametros importantes son:

# Lugar donde se encuentra nuestro archivo de Log
SECURE_LOG = /var/log/auth.log
# Lugar donde se encuentra nuestro archivo de bloqueo de hosts
HOSTS_DENY = /etc/hosts.deny
# El periodo en el que la IP va a ser eliminada de la lista de bloqueo, puede ser en hora (h), dias (d)…
PURGE_DENY = 12h
# Cual servicio queremos que sea bloqueado, puede ser sshd, o ALL para todos
BLOCK_SERVICE = ALL
# Numero de veces de error cuando se ingresa con un usuario NO existente
# Se supone que el root conoce a sus usuarios y no debe de equivocarse
DENY_THRESHOLD_INVALID = 2
# Numero de veces de error con un usuario SI existente en el sistema
DENY_THRESHOLD_VALID = 10
# Numero de veces de error con el usuario ROOT
DENY_THRESHOLD_ROOT = 2
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /var/lib/denyhosts
# Reportar entradas sospechosas
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
# Buscar el nombre del host del atacante si este esta disponible
HOSTNAME_LOOKUP=YES
LOCK_FILE = /var/run/denyhosts.pid
# Email para notificar los bloqueos
ADMIN_EMAIL = cliente_at_servidor_dot_com
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts
SMTP_SUBJECT = DenyHosts Reporte
SMTP_DATE_FORMAT = %a, %d %b %Y %H:%M:%S %z
AGE_RESET_VALID=5d
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 1h

Y listo, reiniciamos el servicio DenyHosts /etc/init.d/denyhosts restart ahora solo falta esperar los correos los cuales llegan con el siguiente formato:

Added the following hosts to /etc/hosts.deny: 200.48.220.4 (mail.epsel.com.pe)