Blog de Javier Castañón – JavCastaPosts RSS Comments RSS


Nuevo Post: BotNet Zombie: Agencia de informática de la comunidad de Madrid con posible infección de virus http://t.co/IB36JwR6
@javcasta
Javier Castañón


Observaba las alertas de Botnets y Spammers de los visitantes a mi web, cuando me llamó la atención una:

Fecha: 23 Septiembre 2011
    Alerta: Botnet Zombie (maquina infectada con virus)
    IP: 213.0.89.6

Si hago un whois a esa IP, me da el resultado:

 213-0-89-006.rad.tsai.es (213.0.89.6)

    213.0.89.0 – 213.0.89.15
    Agencia de Informatica y Comunicaciones
    de la Comunidad de Madrid
    Internet Public Addresses

    Benito Benito
    Agencia de Informatica y Comunicaciones
    : de la Comunidad de Madrid
    C/ Embajadores Nº 181
    Madrid
    SPAIN
    [email protected]
    +34 616457589

En fin, en casa del herrero cuchara de palo.
:-(

Share

Nuevo post: Usar Twitterizer Framework para C# en SharpDevelop http://t.co/bV9VPKuF
@javcasta
Javier Castañón


Referencias:

Andaba buscando librerias para twitter con C# y como usarla en el IDE SharpDevelop.
Y parece que la más popular es Twitterizer.

Como añadir el framework o librerias de twitterizer a un proyecto en SharpDevelop:

Una vez abierto o creado tu proyecto (en mi caso una aplicación windows bajo C#).Debes definir que compile para .Net 3.5 (no estoy seguro si twitterizer sirve para .Net 4, pero me daba problemas, y con .Net 3.5 no, asi que …)

Te bajas las librerias de twitterizer: http://www.twitterizer.net/files/Twitterizer2-2.3.3.zip
las descomprimes en una carpeta.

Clikas en el proyecto, botón secundario > Add reference (Añadir referencia) > .Net Assembly browser > browse >
y navegas hasta el fichero Twitterizer2.dll, lo seleccionas (select) y OK.

Y ya tienes las librerias de twitterizer en tu proyecto.
No olvidar declarar al principio, antes del namespace:

using Twitterizer;

Ejemplo de envio de un twit con twitterizer:

Ahora en el modo diseño del formulario principal (MainForm.cs > Design ) añades un richTextBox (donde escribirás el twit) y un botón (button) para enviarlo

Y ahora solo queda picar y adaptar el código de ejemplo (Post an update) de http://www.twitterizer.net/:

Es obvio, pero lo menciono, para crear aplicaciones que usen twitter debes de tener una API de Twitter.
Es decir que debes definir una aplicación con tu usuario de twitter, en el panel de control de configuración > aplicaciones > Desarrolladores – aqui, una aplicación
para obtener un AccessToken, un AccessTokenSecret, un ConsumerKey y un ConsumerSecret de Twitter.

Código de ejemplo en c# de envío de twit con twitterizer:

using System.Windows.Forms;
using Twitterizer;

....

void Button1Click(object sender, System.EventArgs e)
		{
			if (richTextBox1.Text.Length > 140)
			{
				MessageBox.Show("el tuit tiene más de 140 caracteres");
			}
			else
			{
			//enviamos el twit

			OAuthTokens tokens = new OAuthTokens();
			tokens.AccessToken = "XXX";
			tokens.AccessTokenSecret = "XXX";
			tokens.ConsumerKey = "XXX";
			tokens.ConsumerSecret = "XXX";

			TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, richTextBox1.Text);
			if (tweetResponse.Result == RequestResult.Success)
			{
				MessageBox.Show("Twit enviado");
			}
			else
			{
    			// Something bad happened
    				MessageBox.Show("Error ..."+tweetResponse.Content.ToString());
			}
			}
		}

Y voila :-)

Share

Nuevo Post: WordPress–Seguridad: permisos de wp-config.php en hosting compartido para prevenir robo de clave de mysql http://t.co/Ohp2tqZ1
@javcasta
Javier Castañón


Referencias:

La seguridad es un hosting compartido (en un servidor con diversos usuarios, donde normalmente, bastantes, comparten grupo), es más baja en comparación a un hosting en un servidor dedicado o un servidor privado virtual o VPS (aqui somos nosotros quien decidimos que usuarios y grupos se definen y sus permisos).

En mi caso, he notado cambios en los permisos de algunos ficheros, que por arte de magia adquieren el atributo de permiso público de lectura (es decir que cualquiera desde la web puede acceder y leer el contenido del fichero). O incluso que un fichero haya sido apropiado por otro grupo ajeno al mio … en fin, gajes del “hosting compartido“, que es más barato que el dedicado, pero más inseguro.

En la página: http://codex.wordpress.org/Changing_File_Permissions ,

All files should be 644 or 640. Exception: wp-config.php should be 600 to prevent other users on the server from reading it.

nos indican que todos los ficheros deberian tener los permisos 644 o 640, excepto el fichero wp-config.php , que deberá tener los permisos 600 (lectura y escritura solo para el propietario, y sin acceso para el grupo y público), para evitar que otro usuario perteneciente a tu mismo grupo, pueda acceder a leer el fichero, y por lo tanto conocer tu usuario, la base de datos, la contraseña y host de la base de datos de MySQL, que es usada por el CSM Worpress….

¿Solución?: la ideal, seria pasarse a un hosting con servidor propio o dedicado, pero esto es más costoso. Mientras tanto, solo queda dar permisos 600 al fichero

usuario@maquina$ chmod 600 /home/usuario/DirestorioDeWordpress/wp-config.php

Y voila :-)

Share

Nuevos Post: Obtener Proxy del sistema con C# – Get system Proxy with C# http://t.co/v882seXw
@javcasta
Javier Castañón


Referencia: http://stackoverflow.com/questions/4254351/get-the-uri-from-the-default-web-proxy

El código en C#:

// se usará System.Net
using System.Net;
/* ...
* ....
*/
//proxy
//ref http://stackoverflow.com/questions/4254351/get-the-uri-from-the-default-web-proxy
var proxy = HttpWebRequest.GetSystemWebProxy();
string laurl="http://javcasta.com";
string myproxy = "";
string myproxyport = "";
Uri proxyUri = proxy.GetProxy(new Uri(laurl));
if (laurl == "http://"+proxyUri.Host.ToString())
{
	MessageBox.Show("No hay proxy");
}
else
{
	myproxy = proxyUri.Host.ToString();
	myproxyport = proxyUri.Port.ToString();
	MessageBox.Show("Proxy: "+myproxy+" puerto: "+myproxyport);

}

Estaba buscando la forma de como obtener el proxy definido en el sistema (por defecto el que se define en el navegador IE o en Chrome) en Windows 7 con C#.
Pero sin recurrir a obtenerlo consultando el registro.
Y encontré la forma en el link de referencia.


Mensaje del código Sin proxy definido


definimos el proxy


Mensaje del código  Con proxy definido

Y voila :-)

 

Share

Nuevo Post: Revisado: Tail para WipFW con C# – Monitorizar logs de WipFW – TailCsharp2.exe http://t.co/BFhqPpBr
@javcasta
Javier Castañón


Referencias:

He ampliado las funciones de la utilidad TailCsharp.exe, ahora TailCsharp2.exe, haciendo que sea, a parte de un tail para monitorizar los logs de WipFW, que también destaque en rojo lo denegado (deny) y en azul lo aceptado (accept) y que resuelva el dns de la ip de destino de cada alerta

Resumiendo, TailCsharp2.exe hace:

  1. - Las funciones de un tail de linux en el fichero log del día del FireWall WipFW, para monitorizarlo
  2. - Indica con un sonido (beep) la aparición de una alerta o evento (deny o accept)
  3. - Indica en rojo lo denegado
  4. - Indica en azul lo aceptado
  5. - Resuelve (si se puede) la Ip de destino de la alerta a su nombre de dominio

El código en C# :

/*
 * Created by SharpDevelop.
 * User: JavCasta
 * Date: 15/09/2011
 * Time: 17:12
 * Code ref: http://www.codeproject.com/KB/files/tail.aspx
 * Code adpated by JavCasta - 2.011 - http://javcasta.com/
 */
using System;
using System.IO;
using System.Collections;
using System.Net;
using System.Text.RegularExpressions;

namespace TailCsharp
{
	class Tail
	{
		[STAThread]
           static void Main(string[] args)
           {
           		string fileName = "";
               if ( args.Length == 0 ) {
               DateTime Hoy = DateTime.Today;
               string fecha = Hoy.ToString("yyyyMMdd");
               fileName = "c:\\Windows\\security\\logs\\wipfw" + fecha + ".log";
           }
           		if ( args.Length != 0 ) {
               fileName = args[0];
           }
               Start:
               try
               {
                   using ( StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) )
                   {
                       //start at the end of the file
                       long lastMaxOffset = reader.BaseStream.Length;
                       Console.Title = "Tail con C# - Monitorizando " + fileName + " - By JavCasta - 2.011 - http://javcasta.com";
                       Console.SetWindowSize(140,30);
                       Console.BackgroundColor = ConsoleColor.Blue;
					   Console.ForegroundColor = ConsoleColor.White;
                       while ( true )
                       {
                           System.Threading.Thread.Sleep(100);

                           //if the file size has not changed, idle
                           if ( reader.BaseStream.Length == lastMaxOffset )
                               continue;

                           //seek to the last max offset
                           reader.BaseStream.Seek(lastMaxOffset, SeekOrigin.Begin);
                           //read out of the file until the EOF
                           string line = "";
                           string auxline = "";
                           IPHostEntry objIPHostEntry;
                           while ( (line = reader.ReadLine()) != null )
                           {
                           	//si linea contiene deny -> rojo
                           	if (line.IndexOf("Deny") != -1){
                           		Console.BackgroundColor = ConsoleColor.Red;
                           	}
                           	//si linea contiene accept -> azul
                           	if (line.IndexOf("Accept") != -1){
                           		Console.BackgroundColor = ConsoleColor.Blue;
                           	}
                           	Console.Beep();
                           	//quitamos [no if info]
                           	line=line.Replace("[no if info]","|");
				//Reemplazamos tabuladores por espacio
                           	line=line.Replace("	"," ");
                           	//obtenemos las IPs de la linea
                           	Regex ip = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
                           	MatchCollection result = ip.Matches(line);
                           	//IPdestino en item 1 de array result ==> result[1]
                           	// y resolvemos dns de IPdestino
                           	try
                           	{
                           		objIPHostEntry = Dns.GetHostEntry(result[1].ToString());
    					auxline=objIPHostEntry.HostName;
      				}
                       		catch (Exception ex)
                       		{
                       			//si hay excepcion es que no se resuelve ...
                       			auxline = "no se resuelve";
                       		}
                       		//escribimos linea en consola
				Console.WriteLine(line + "| dst: " + auxline);
                           }
                           //update the last max offset
                           lastMaxOffset = reader.BaseStream.Position;
                       }
                   }
               }
               catch ( Exception ex )
               {
	            Console.WriteLine(ex.ToString());
                   //prompt user to restart
                   Console.Write("No hay eventos. Puede que no exista el fichero "+ fileName +"\\n ¿Deseas reabrir el fichero? Y/N:");
                   if ( Console.ReadLine().ToUpper() == "Y" )
                       goto Start;
               }

           }
	}
}

Otro buen ejercicio de C# usando expresiones regulares para extraer IPs de un string y resolver DNS inverso de una IP

Y voila :-)

Share

Nuevo Post: Tail para Windows con C# - Monitorizar logs de WipFW - TailCsharp.exe http://t.co/SpcX87X
@javcasta
Javier Castañón

Referencias:

TailCsharp.exe es una aplicación de consola en C# (.Net) que emula el Tail de linux y he implementado para win con el IDE free de desarrollo de .Net: SharpDevelop.

La he probado y testeado en Windows 7 Utimate Service Pack 1.

La aplicación puede lanzarse desde consola o con el tradicional doble click.

Si la lanzas con doble click, no podrás elegir el fichero a monitorizar y la aplicación por defecto monitorizará el fichero de logs del firewall WipFW del día:

C:\Windows\security\logs\wipfwYYYYMMdd.log

que para hoy 14-09-2011, el fichero por defecto seria: C:\Windows\security\logs\wipfw20110914.log

Si lanzas la aplicación por consola podras indicar como parametro el camino y fichero a monitorizar

Uso: c:\> TailCsharp.exe [fichero]

ejemplo:

c:\utiles\bin\> TailCsharp.exe %systemroot%\security\logs\wipfw20110914.log

Y sino indicas ningún fichero, intentará monitorizar el log de WipFW del día ( C:\Windows\security\logs\wipfwYYYYMMdd.log )

Si el fichero no existe, te indicara el error y te preguntará si deseas reabrirlo (¿Deseas reabrir el fichero? Y/N:)

Al monitorizar el fichero, emitirá un beep (sonido conseguido con Console.Beep()) cada vez que aparezca una alerta (nueva linea en el fichero)
(para definir lo que desees loguear con wipfw mirar el 2º link de ref)

El código de TailCsharp.cs

/*
 * Created by SharpDevelop.
 * User: JavCasta
 * Date: 14/09/2011
 * Time: 10:06
 * Code ref: http://www.codeproject.com/KB/files/tail.aspx
 * Code adapted by JavCasta - 2.011 - http://javcasta.com/
 */
using System;
using System.IO;
using System.Collections;

namespace TailCsharp
{
	class Tail
	{
		[STAThread]
           static void Main(string[] args)
           {
           		string fileName = "";
               if ( args.Length == 0 ) {
               DateTime Hoy = DateTime.Today;
               string fecha = Hoy.ToString("yyyyMMdd");
               fileName = "c:\\Windows\\security\\logs\\wipfw" + fecha + ".log";
           }
           		if ( args.Length != 0 ) {
               // throw new ArgumentNullException("File Name", "debes proporcionar un camino y nombre de fichero como argumento");
               fileName = args[0];
           }

               Start:
               try
               {
                   using ( StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) )
                   {
                       //start at the end of the file
                       long lastMaxOffset = reader.BaseStream.Length;
                       Console.Title = "Tail con C# - Monitorizando " + fileName + " - By JavCasta - 2.011 - http://javcasta.com";
                       Console.SetWindowSize(120,30);
                       Console.BackgroundColor = ConsoleColor.Blue;
					   Console.ForegroundColor = ConsoleColor.White;
                       while ( true )
                       {
                           System.Threading.Thread.Sleep(100);

                           //if the file size has not changed, idle
                           if ( reader.BaseStream.Length == lastMaxOffset )
                               continue;

                           //seek to the last max offset
                           reader.BaseStream.Seek(lastMaxOffset, SeekOrigin.Begin);

                           //read out of the file until the EOF
                           string line = "";
                           while ( (line = reader.ReadLine()) != null )
                           {
                           		Console.Beep();
					Console.WriteLine(line);
                           }
                           //update the last max offset
                           lastMaxOffset = reader.BaseStream.Position;
                       }
                   }
               }
               catch ( Exception ex )
               {
	               Console.WriteLine(ex.ToString());
                   //prompt user to restart
                   Console.Write("¿Deseas reabrir el fichero? Y/N:");
                   if ( Console.ReadLine().ToUpper() == "Y" )
                       goto Start;
               }

           }
	}
}

Si deseas implementar el código, simplemente desde la palataforma de desarrollo SharpDevelop para .Net, desde un proyecto o solución para C# > Windows Application > Console Application

Y adapta el código que desees, ya sea este o el del link de referencia. Una vez lo hayas depurado y compilado (build) tendras
el ejecutable en

%SystemDrive%\%HOMEPATH%\Documents\SharpDevelop Projects\NombreSolucion\NombreProyecto\bin\Debug

Util este ejercicio para familiarizarse con el objeto Console de C#/VB.Net.

Y voila :-)

Share

Nuevo Post: Scripting HTA – Tabs in HTA – Pestañas en script HTA http://t.co/7o70XgO
@javcasta
Javier Castañón

Vía: http://www.visualbasicscript.com/tm.aspx?high=&m=80430&mpage=1#84488

¿Como implementar una GUI con pestañas (tabs) en html?, pues obviamente, tirando de JavaScript.

Hay un sinfin de frameworks (jquery, …) y librerias en JavaScript, para ese fin. Pero para una aplicación o script en HTA me terminan dando problemas (M$ no se encuentra agusto con el javascript puro y duro).

Pero al fin, he encontrado, en el link de referencia, como hacerlo con VBscript y css.

El Script Prueba.hta para tener una gui con pestañas o tabs en hta:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<script language="VBscript">
	REM Tabs in HTA vía: http://www.visualbasicscript.com/tm.aspx?high=&m=80430&mpage=1#84488
	Dim sItem
	Dim aPanels
	Dim el
	Dim iPanelCount
	iPanelCount = 6
	Private Sub Panel(tab)
		For i = 1 To iPanelCount
		If i = tab Then
			document.getElementById("tab" & i).className = "tabs tabsSelected"
			document.getElementById("panel" & i).style.display = "block"
		Else
			document.getElementById("tab" & i).className = "tabs tabsNotSelected"
			document.getElementById("panel" & i).style.display = "none"
		End If
		Next
	End Sub
	Sub AddCheck
		strHTML = panelContents2.InnerHTML
		strHTML = strHTML & "<input id=" & intCheckCount & " type=" & Chr(34) & "CheckBox" & Chr(34) & _
		" name=" & Chr(34) & "chkEnabled" & Chr(34) & "value= " & Chr(34) & "CheckBox" & intCheckCount & Chr(34) & " onClick=" & Chr(34) & _
		"NewCheckSubroutine" & Chr(34) & ">" & " <BR>"
		panelContents2.InnerHTML = strHTML
	End Sub
	</script>

	<style type="text/css">
	body,td,th { font-family:Arial }
	.head { font-size:110%; font-weight:bold }
	.panel {
	background-color: white;
	border: solid 1px black;
	height: 100%;
	padding: 5px;
	position: relative;
	width: 100%;
	z-index: 0;
	}
	.tabs {
	border-collapse: collapse;
	color: black;
	cursor: pointer;
	cursor: hand;
	font-family: arial;
	font-size: 9pt;
	font-weight: bold;
	margin-top: 4px;
	padding: 2px 4px 0px 4px;
	position: relative;
	text-align: center;
	text-decoration: none;
	z-index: 1;
	}
	.tabsNotSelected {
	background-color: wheat;
	border: solid 1px black;
	}
	.tabsSelected {
	background-color: white;
	border-color: black black white black;
	border-style: solid solid solid solid;
	border-width: 1px 1px 1px 1px;
	}
	</style>
</head>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="650">
<tr valign="top">
<td align="right" colspan="2">
<span class="head">Script Generator GUI for WipFW 0.5.5.b for XP/W7 - <a href="http://javcasta.com/" target="_blank">JavCasta</a> - 2.011</span> &nbsp; &nbsp;
<br>
</td>
</tr>
<tr valign="top">
<td colspan="2">
<span class="tabs tabsSelected" id="tab1" onclick="panel(1)">Loopback</span>
<span class="tabs tabsNotSelected" id="tab2" onclick="panel(2)">Paquetes Fragmentados</span>
<span class="tabs tabsNotSelected" id="tab3" onclick="panel(3)">Tráfico aleatorio</span>
<span class="tabs tabsNotSelected" id="tab4" onclick="panel(4)">Puertos</span>
<span class="tabs tabsNotSelected" id="tab5" onclick="panel(5)">Redes</span>
<span class="tabs tabsNotSelected" id="tab6" onclick="panel(6)">Web / Proxy / DNSs</span>
<div class="panel" id="panel1" style="display:block">
<hr color="black">
<table border="0" width="100%">
<tr valign="top">
<td>
<span class="head">Loopback.</span>
<br><br>
<form name="floopback" style="align: left">
<fieldset name="fsloopback">
<div style="text-align:left">
Permitmos loopback:<br>
<input type="Text" name="floopback1" value="ipfw -q add allow ip from any to any via lo*" style="width: 300px">
<input type="checkbox" name="cfloopback1" value="Activar" checked="true"><br>
Denegamos localhost spoofing:<br>
<input type="Text" name="floopback2" value="ipfw -q add deny log ip from any to 127.0.0.0/8 in" style="width: 300px">
<input type="checkbox" name="cfloopback2" value="Activar" checked="true"><br>
<input type="Text" name="floopback3" value="ipfw -q add deny log ip from 127.0.0.0/8 to any in" style="width: 300px">
<input type="checkbox" name="cfloopback3" value="Activar" checked="true"><br><br>
</div>
</form>
</td>
</tr>
</table>
</div>
<div class="panel" id="panel2" style="display:none">
<hr color="black">
<table border="0" width="100%">
<tr valign="top">
<td>
<span id="panelContents2" class="head">This is Tab 2.</span>
<br><br>
TAB 2
</td>
</tr>
</table>
</div>
<div class="panel" id="panel3" style="display:none">
<hr color="black">
<table border="0" width="100%">
<tr valign="top">
<td>
<span class="head">This is Tab 3.</span>
<br><br>
TAB 3
</td>
</tr>
</table>
</div>
<div class="panel" id="panel4" style="display:none">
<hr color="black">
<table border="0" width="100%">
<tr valign="top">
<td>
<span class="head">This is Tab 4.</span>
<br><br>
TAB 4
</tr>
</table>
</div>
<div class="panel" id="panel5" style="display:none">
<hr color="black">
<table border="0" width="100%">
<tr valign="top">
<td>
<span class="head">This is Tab 5.</span>
<br><br>
TAB 5
</td>
</tr>
</table>
</div>
<div class="panel" id="panel6" style="display:none">
<hr color="black">
<table border="0" width="100%">
<tr valign="top">
<td>
<span class="head">This is Tab 6.</span>
<br><br>
TAB 6
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</body>
</html>

Y voila :-)

Share

Nuevo Post: Networking – WipFW: Limitar ancho de banda en puerto http://t.co/S2ZMPkT
@javcasta
Javier Castañón


Referencias:

Ya he posteado algo sobre el Firewall para Windows : WipFW, basado en ipfw de FreeBSD. (el mismo Firewall que usa la estupenda distro pfSense, también basada en FreeBSD, para implementar un Firewall para red, dedicado en una maquina)

Pero no paro de sorprenderme con este potente firewall. Lo último que acabo de observar es que se puede limitar el ancho de banda. Y más especificamente, el ancho de banda para un puerto determinado.

Para limitar el ancho de banda a 500KBytes para el puerto 80 y el 443, se podria indicar tal que:

REM limitar ancho de banda a 500KBytes en el puerto 80 y 443
ipfw -q pipe 1 config bw 500KByte/s
ipfw -q add 1 pipe 1 src-port 80,443
REM para borrar regla anterior ipfw delete 1

Y voila :-)

Share

Nuevo Post: WordPress: Stop 3rd party tracking – Desactivar seguimiento de terceros – donotrack http://t.co/fjSwJYa
@javcasta
Javier Castañón

Referencia:

Parece ser que en esto de las estadísticas de WordPress, hay plugins que se chivan a “sites” terceros (externos al servidor propio)
Y efectuan un tracking o seguimiento de tus visitas, tal vez con fines no tan honestos como cabría esperar.

El plugin por defecto “WordPress.com Stats” (proximamente bajo Jetpack) instalado en WordPress  parece ser que envía información de seguimiento (tracking) a quantserve.com y según el autor del post de referencia ralentiza y baja el rendimento de la navegación por su blog

¿Solucion?. Desactivar el plugin WordPress.com Stats e instalar plugins alternativos como SlimStats y ShortStats.

También existe un plugin, llamado donotrack (Plugin donotrack – http://futtta.be/donottrack.zip),
que desactiva el tracking o chivatazos a los sites media6degress y quantcast

Todo esto, naturalmente es recomendable para blogs con WordPress Self Hosting, ya que los hospedados en WordPress.com o pagas un plus o no tienes alternativa a instalar o desactivar los plugins que desees.

Sin desperdicio el comentario final del post de referencia:

My recommendation to you, the reader, if you use self-hosted WordPress you should test this on your site and then decide based on performance issues as well as ethical dimensions. I learned a lesson, even the most trustworthy appearing organizations and individuals may unexpectedly behave in unexpected ways. Caveat emptor!

Que viene a decir que: recomienda al lector, si usas woordpress self-hosting (hospedado en servidor propio o externo a wordpress.com) que deberia testear lo dicho en su “site” y que decida en base a los resultados de rendimiento (carga más rapida del blog, mejora en navegación, …) y a las consideraciones éticas ( de que espien por la cara las visitas a tu blog ).

Dice:

He aprendido una lección, incluso las más aparentemente confiables organizaciónes e individuos podrían inesperadamente tener formas o maneras inesperadas
Caveat emptor

Y voila :-)

Share

Nuevo Post: Seguridad: Habilitar extensiones DNSSEC o Name Resolution Policy Table (NRPT) en Windows 7 http://t.co/LUK4e14
@javcasta
Javier Castañón

Referencias:

DNSSEC es una extensión de seguridad para servidores DNS. Que resumiendo rapidamente se trata de autenticar las respuestas de las resoluciones DNS de los servidores a las request o peticiones de resolución de nombres de dominio por parte de las maquinas cliente.

Existe una implementación de código abierto para implementar DNSSEC: OpenDNSSEC

Con versiones para FreeBSD, NetBSD, Linux (ubunbtu, Debian, Gentoo), y Windows. Y al ser Sw open, se pueden bajar y compilar las fuentes, adaptandolo para cualquier OS (curro para programadores de sistemas)

http://www.opendnssec.org/

Windows 7 y Windows 2008 Server R2, trae su propia solución (no abierta, claro esta …) de extensiones de seguridad DNSSEC o Resolution Policy Table (NRPT).

Procedimiento para implementar Resolution Policy Table (NRPT).  en un Windows 7:

Iniciamos la consola ( win + R > mmc )

Archivo > Agregar  o quitar complemento

Editor de objetos de directiva de grupo > Agregar (o el ya conocido editor de políticas de grupo de win)

Vamos a : Directiva Equipo Local > Config. de Windows > Directiva de Resolución de nombres

Y configuramos la regla: Como esto es solo un ejemplo, configuro una regla para cualquier petición de resolución de dns. Habilitamos DNSSEC en la regla, y para las peticiones que no se puedan resolver mediante DNSSEC, configuramos en la pestaña Config. de DNS por acceso directo los servidores DNS que resolverán (en este caso los de OpenDNS 208.67.222.222 y 208.67.220.220), observo que se puede incluso definir un proxy para las peticiones de resolución de DNS. Y seguridad IPsec.

Creamos la reglas (crear) y la aplicamos.

Desde el editor del registro (regedit.exe) se puede observar en la rama:

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient\DnsPolicyConfig\

que se ha creado la subrama Rule1 (regla 1) con los parametros indicados desde el editor de políticas de grupo de windows 7

De lo que se deduce que mediante scripting seria trivial crear un script que modificando el registro nos configurase DNSSEC en un cliente de W7

Otro recurso interesante que he encontrado en la web es:

Guia de implementación de DNSSEC

http://www.microsoft.com/download/en/details.aspx?id=15204

Con un doc técnico bastante extenso y dos scripts en PowerShell ( .ps1). Muy interesante para administradores de W2k8 server R2

Y voila :-)

Share

Nuevo Post: Script CMD – SocketsYProcesos.cmd – Listar Sockets y su proceso http://t.co/pYWvwZN
@javcasta
Javier Castañón

Si desde la consola de Windows, deseas ver las conexiones y puertos que establece tu maquina, se suele hacer con un netstat

c:\> netstat -ano

Conexiones activas

Proto Dirección local Dirección remota Estado PID
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 756
TCP 0.0.0.0:49152 0.0.0.0:0 LISTENING 456
TCP 0.0.0.0:49153 0.0.0.0:0 LISTENING 844
TCP 0.0.0.0:49154 0.0.0.0:0 LISTENING 948
TCP 0.0.0.0:49155 0.0.0.0:0 LISTENING 504
TCP 0.0.0.0:49156 0.0.0.0:0 LISTENING 1196
TCP 0.0.0.0:49159 0.0.0.0:0 LISTENING 516
TCP 192.168.2.33:49165 80.59.69.239:3389 CLOSE_WAIT 2168
TCP 192.168.2.33:49167 80.59.69.239:3389 CLOSE_WAIT 2168
TCP 192.168.2.33:49168 80.59.69.239:3389 CLOSE_WAIT 2168
TCP 192.168.2.33:55537 80.59.69.239:3389 ESTABLISHED 1208
TCP 192.168.2.33:55538 80.59.69.239:3389 ESTABLISHED 1208
TCP 192.168.2.33:55539 80.59.69.239:3389 ESTABLISHED 1208
TCP 192.168.2.33:55551 80.59.69.239:3389 TIME_WAIT 0
TCP 192.168.2.33:55558 80.59.69.239:3389 TIME_WAIT 0
TCP 192.168.2.33:55559 80.59.69.239:3389 ESTABLISHED 1208
TCP [::]:135 [::]:0 LISTENING 756
UDP 0.0.0.0:5355 *:* 1244

Pero de esta manera tendrás que buscar el nombre del proceso asociado a su PID, que establece la conexión o socket : una forma es desde el administrador de tareas o ejecutando un tasklist desde consola.

C:\>tasklist

Nombre de imagen PID Nombre de sesión Núm. de ses Uso de memor
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 24 KB
System 4 Services 0 2.596 KB
lsass.exe 516 Services 0 8.040 KB
lsm.exe 524 Services 0 3.172 KB
winlogon.exe 640 Console 1 5.136 KB
svchost.exe 676 Services 0 7.308 KB
svchost.exe 1244 Services 0 11.968 KB
explorer.exe 1748 Console 1 66.796 KB
cmd.exe 2952 Console 1 7.720 KB
conhost.exe 2960 Console 1 5.164 KB
chrome.exe 1208 Console 1 116.016 KB

Pero esto resulta un poco engorroso, y a veces necesitamos monitorizar los sockets asociados a los nombres de los procesos en lugar de su PID, en tiempo real

Un script que hace esto mismo, en un bucle de 5 sg, muestreando y mostrando solo los sockets establecidos (ESTABLISHED) y el nombre del proceso que lo establece seria:

SocketsYprocesos.cmd

@echo off
echo ╔════════════════════════════════════════════╗
echo ║     Sockets y Procesos - script cmd        ║
echo ║ By JavCasta - Javier Castañón - 2.011      ║
echo ║          http://javcasta.com/              ║
echo ╚════════════════════════════════════════════╝
echo.
@SETLOCAL ENABLEDELAYEDEXPANSION
set delay=5
set socket=%TEMP%\socket.tmp
set proceso=%TEMP%\proceso.tmp
:bucle
netstat -ano | findstr ESTABLISHED > %socket%

for /F "tokens=1,2,3,5" %%i in (%socket%) do (
	tasklist | findstr %%l > %proceso%
	for /F "tokens=1" %%x in (%proceso%) do (set elproceso=%%x)
	echo Socket %%i desde %%j a %%k del proceso= %elproceso%
)

@ping -n %delay% 127.0.0.1 > nul
echo.
echo ╔═══════════════════╗
echo ║  Nuevo muestreo:  ║
echo ╚═══════════════════╝
echo.
goto bucle

Y voila :-)

Share

« Newer Entries - Older Entries »