Archivo categoría Linux

Eliminando registros duplicados de una tabla SQL usando DISTINCT ó GROUP BY.

DISTINCT es una palabra clave que usamos e nuestras consultas SQL para eliminar filas duplicadas.

SELECT DISTINCT columna FROM tabla

Ahora bien si queremos eliminar los registros duplicados de una tabla y copiarlos en una nueva podremos hacerlo con la palabra clave DISTICT o la cláusula GROUP BY que suele tener menos BUGS que la primera.

Opción 1:
CREATE TABLE nueva_tabla AS SELECT DISTINCT columna FROM tabla;
Opcion 2:
CREATE TABLE nueva_tabla AS SELECT * FROM tabla GROUP BY (id);

Eliminamos la tabla con los registros duplicados:

DROP TABLE tabla;

Renombramos la nueva tabla por el nombre de la que ya teníamos:

RENAME TABLE tabla_nueva TO tabla;

, , , , , ,

No hay Comentarios

Creando un Script en PHP para chequear IPs en Listas negras (Blacklist)

Una lista negra (black list) es una lista donde se registran direcciones IPs que generan SPAM ya sea de forma voluntaria o involuntaria. Estas listas aunque las hay de pago suelen ser libres y cualquiera puede añadir una IP inocente de manera malintencionada por lo que también podemos solicitar ser removidos de ellas si hemos sido incluidos.

Tanto chequear diferentes tipos de webs  con listas negras he decidido crear este pequeño Script en PHP que nos será de utilidad ya que comprueba una lista personalizada de Black List y nos devuelve el resultado en pantalla o a un email si se lo indicamos. Es totalmente personalizable y muy sencillo de modificar.

if ($_POST['ip']) { $ip = $_POST['ip']; } 

function blacklist($ip) {
   $dnsbl=array("b.barracudacentral.org"=>"",
   "bl.deadbeef.com"=>"",
   "bl.emailbasura.org"=>"",
   "bl.spamcannibal.org"=>"",
   "bl.spamcop.net"=>"Blacklist de Spamcop",
   "blackholes.five-ten-sg.com"=>"",
   "blacklist.woody.ch"=>"",
   "bogons.cymru.com"=>"",
   "cbl.abuseat.org"=>"Composite Blocking List)",
   "cdl.anti-spam.org.cn"=>"",
   "combined.abuse.ch"=>"",
   "combined.rbl.msrbl.net"=>"",
   "db.wpbl.info"=>"",
   "dnsbl-1.uceprotect.net"=>"",
   "dnsbl-2.uceprotect.net"=>"",
   "dnsbl-3.uceprotect.net"=>"lista de pago",
   "dnsbl.ahbl.org"=>"",
   "dnsbl.cyberlogic.net"=>"",
   "dnsbl.inps.de"=>"",
   "dnsbl.njabl.org"=>"",
   "dnsbl.sorbs.net"=>"rangos dinámicos",
   "drone.abuse.ch"=>"",
   "drone.abuse.ch"=>"",
   "duinv.aupads.org"=>"",
   "dul.dnsbl.sorbs.net"=>"rangos dinámicos",
   "dul.ru"=>"",
   "dyna.spamrats.com"=>"rangos dinámicos",
   "dynip.rothen.com"=>"",
   "fl.chickenboner.biz"=>"",
   "http.dnsbl.sorbs.net"=>"",
   "images.rbl.msrbl.net"=>"",
   "ips.backscatterer.org"=>"",
   "ix.dnsbl.manitu.net"=>"",
   "korea.services.net"=>"Block Asian spam (Korea)",
   "misc.dnsbl.sorbs.net"=>"",
   "noptr.spamrats.com"=>"",
   "ohps.dnsbl.net.au"=>"",
   "omrs.dnsbl.net.au"=>"",
   "orvedb.aupads.org"=>"",
   "osps.dnsbl.net.au"=>"",
   "osrs.dnsbl.net.au"=>"",
   "owfs.dnsbl.net.au"=>"",
   "owps.dnsbl.net.au"=>"",
   "phishing.rbl.msrbl.net"=>"",
   "probes.dnsbl.net.au"=>"",
   "proxy.bl.gweep.ca"=>"",
   "proxy.block.transip.nl"=>"",
   "psbl.surriel.com"=>"Passive Spam Block List",
   "rbl.interserver.net"=>"",
   "rdts.dnsbl.net.au"=>"",
   "relays.bl.gweep.ca"=>"",
   "relays.bl.kundenserver.de"=>"",
   "relays.nether.net"=>"",
   "residential.block.transip.nl"=>"rangos dinámicos",
   "ricn.dnsbl.net.au"=>"",
   "rmst.dnsbl.net.au"=>"",
   "short.rbl.jp"=>"",
   "smtp.dnsbl.sorbs.net"=>"",
   "socks.dnsbl.sorbs.net"=>"",
   "spam.abuse.ch"=>"",
   "spam.dnsbl.sorbs.net"=>"",
   "spam.rbl.msrbl.net"=>"",
   "spam.spamrats.com"=>"",
   "spamlist.or.kr"=>"",
   "spamrbl.imp.ch"=>"",
   "t3direct.dnsbl.net.au"=>"",
   "tor.ahbl.org"=>"",
   "tor.dnsbl.sectoor.de"=>"",
   "torserver.tor.dnsbl.sectoor.de"=>"",
   "ubl.lashback.com"=>"Tracking Unsubscribe Abuse",
   "ubl.unsubscore.com"=>"",
   "virbl.bit.nl","virus.rbl.jp"=>"",
   "virus.rbl.msrbl.net"=>"",
   "web.dnsbl.sorbs.net"=>"",
   "wormrbl.imp.ch"=>"",
   "sbl.spamhaus.org"=>"Spamhaus Block List",
   "xbl.spamhaus.org"=>"Spamhaus Exploits Block List",
   "pbl.spamhaus.org"=>"Spamhaus Policy Block List",
   "zen.spamhaus.org"=>"Spamhaus (Combinación Spamhaus)",
   "zombie.dnsbl.sorbs.net"=>"",
   "1.apews.org"=>"Anon. Postmasters Early Warning System",
   "2.apews.org"=>"Anon. Postmasters Early Warning System",
   "bulk.rhs.mailpolice.com"=>"domains",
   "porn.rhs.mailpolice.com"=>"pornograf sites",
   "fraud.rhs.mailpolice.com"=>"phising",
   "block.rhs.mailpolice.com"=>"bulk y fraud",
   "dynamic.rhs.mailpolice.com"=>"dinamicas",
   "adv.rhs.mailpolice.com"=>"email marketing",
   "webmail.rhs.mailpolice.com"=>"webmails services",
   "adult.rhs.mailpolice.com"=>"adult sites, blogs etc",
   "redir.rhs.mailpolice.com"=>"sites redirigidos");

if ($_POST['ip']) {
   $parte=explode(".",$ip);
   $rip=$parte[3].".".$parte[2].".".$parte[1].".".$parte[0];

   foreach ($dnsbl as $key=>$value){
      if (checkdnsrr($rip.".".$key . '.',"A")) { $lista[]=$key." - ".$value; }
   }

   echo "<ul>";
   foreach ($lista as $server){
      echo "<li>".$server."</li>";
      $bl .= $server."\n";
   }
   echo "</ul>";  

   # ---------------------------------------------
   # - enviamos un reporte a un email.
   if ($_POST['report'] == "on") {
      $email = "su@email";
      $headers = "MIME-Version: 1.0\n";
      $headers .= "Content-type: text/plain; charset=iso-8859-1\n";
      $headers .= "From: $email \r\n";
      $asunto = "Report Blacklist: $ip";
      $txt = "La ip $ip esta listada en:\n\n".$bl;
      mail($email, $asunto, $txt, $headers);
   } # fin reporte
   # ---------------------------------------------

} # fin if
} // fin funcion listas negras

if ($_POST['ip']) {
   echo "Su IP: <strong>".getenv('REMOTE_ADDR')." </strong>esta en las siguientes listas negras:<p />";
   echo blacklist($ip);
}

El formulario en HTML quedaría de la siguiente forma:

<form method="post">
 <input name="ip" type="text" />
 <input name="report" type="checkbox" /> Enviar reporte por email.
 <input type="submit" value="Comprobar" />
</form>

Para una demo del script:
http://www.artegrafico.net/laboratorio/php/blacklist.php

, , , , , ,

2 Comentarios

Recuperar las claves de nuestros FTPs en Plesk

Recuperar una clave de FTP en PLESK es una tarea muy común por lo que para ello ejecutaremos la siguiente sentencia SQL sobre nuestra tabla PSA de PLESK.  Obtendremos un resumen con el nombre del dominio, usuario, clave, directorio home del ftp y la cuota en MB asignada al usuario del FTP.

mysql -u admin -p
2.password: *******
3.mysql> use psa
SELECT
sys_users.login AS usuario,
accounts.password AS clave,
sys_users.home AS home,
sys_users.quota/1048/1024 AS cuota_en_mb
FROM sys_users
LEFT JOIN accounts on sys_users.account_id = accounts.id
ORDER BY sys_users.home ASC;

, , , , , ,

No hay Comentarios

LogWatch – análisis y reportes del sistema.

LogWatch realiza un análisis y reporte de los LOGS del sistema que suelen estar localizados en /var/log/ y se suele ejecutar cada noche enviandonos un correo con los resultados obtenidos. Los registros que se llevan a cabo en un sistema Linux como Gentoo son manejados por el demonio syslogd-ng y su archivo de configuración suele estar localizado en /etc/syslog-ng/syslog-ng.conf.

LogWatch es bastante útil para saber que está haciendo tu servidor  cada día sin tener que leerse decenas de LOGS ya que proporciona una bonito resumen de cada servicio del sistema, tales como los paquetes instalados, emails enviados por tu servidor, errores de autentificación, estadísticas de apache, espacio en disco, información sobre posibles ataques, etc …

# tan sencillo como hacer un emerge.
emerge logwatch

logwatch se configura de forma automática para ser ejecutado todas las noches y se crea dicha tarea en:

/etc/cron.daily/00-logwatch

El fichero de configuración le podemos localizar en:
/usr/share/logwatch/default.conf/logwatch.conf

El mail por defecto es enviado al usuario root y para que sea más accesible su lectura podemos redireccionarlo a un correo externo creando un alias en /var/qmail/alias/.qmail-root

/usr/share/logwatch/default.conf/logfiles
Contiene información sobre los registros de logs y sus características.
/usr/share/logwatch/default.conf/services
Contiene los ficheros de configuración específicos por cada servicio.

En Gentoo tendremos un problema con la configuración que viene por defecto ya que algunos servicios estarán fallando al crear dicho reporte. Para ello nos crearemos un fichero llamado /etc/logwatch/conf/override.conf para personalizarlo a nuestro gusto. Si una configuración esta definida en este ficheroo ignorará la que esté definida en el fichero de configuración inicial.

El ejecutable o script del programa esta localizado en:

/usr/sbin/logwatch.pl

En la página del programa podemos encontrar documentación detallada para crearnos nuestros propios ficheros de configuraciones.

Podemos testear el funcionamiento de Logwatch indicándole un servicio determinado:

/usr/sbin/logwatch --service qmail  --print --range today --debug 10

Página Web Oficial:
http://www2.logwatch.org:8080/

, , , , , ,

No hay Comentarios

Como recuperar las claves de sus Bases de Datos de Plesk

Tan sencillo como realizar esta consulta a la Base de Datos psa de PLESK. Nos devolverá el dominio, nombre de la base de datos, usuario y clave seleccionada. Esta consulta nos listará todas las bases de datos y sus claves pero si queremos filtrarla para un determinado dominio debemos añadir una cláusula WHERE al final de la consulta; (ejemplo: WHERE domains.name=’dominio.com’).

mysql -u admin -p
password: *******
mysql> use psa
SELECT
data_bases.name AS bd,
db_users.login AS usuario,
accounts.password AS clave,
domains.name AS dominio,
data_bases.type AS tipo
FROM
db_users
INNER JOIN data_bases ON (db_users.db_id = data_bases.id)
INNER JOIN accounts ON (db_users.account_id = accounts.id)
INNER JOIN domains ON (data_bases.dom_id = domains.id)
ORDER BY domains.name ASC

* Probado en Fedora Core 5 Plesk 8.6

, , , ,

No hay Comentarios