martes, 21 de julio de 2015

Instalacion y Configuracion extra basica de CD Repositorio Linux Debian

Podemos almacenar en CD o DVD nuestro propio repositorio de paquetes Debian/Ubuntu para usarlo localmente.

1.-Adquirir las aplicaciones para generar reporsitorios:


apt-get install mkisofs

2.- Crear estructura de directorios de desarrollo, yo usare: /respaldos/personales/ldj/cd_repositorio


mkdir -p /respaldos/personales/ldj/cd_repositorio/.disk
mkdir -p /respaldos/personales/ldj/cd_repositorio/pool
echo "LDJ Repositorio `cat /etc/debian_version`"> /respaldos/personales/ldj/cd_repositorio/.disk/info

3.- Adquirir los paqutes (archivos .deb) para colocar en /respaldos/personales/ldj/cd_repositorio/pool, por ejemplo mc


apt-get -d install mc

Ojo, la opcion -d es solo para descargar sin instalar

En Debian/Ubuntu cuando instalamos/descargamos un paquete usando "apt-get" se descargan en:
/var/cache/apt/archives
SI NO SABE CUALES, PUEDE COPIAR TODOS CON:


cp /var/cache/apt/archives/*.deb /respaldos/personales/ldj/cd_repositorio/pool

4.-Generar catalogo de los paquetes


cd /respaldos/personales/ldj/cd_repositorio
dpkg-scanpackages . /dev/null | gzip > Packages.gz

5.-Crear la imagen del CD o DVD


mkisofs -f -J -R -o /respaldos/personales/ldj/cd_repositorio.iso .

Listo!! a quemar el cd


Tambien podemos probar montando la imagen que estara en /respaldos/personales/ldj/cd_repositorio.iso:

mkdir -p /media/cdrom
con ISO: mount -o loop /respaldos/personales/ldj/cd_repositorio.iso /media/cdrom
con CD: mount -t iso9660 /dev/cdrom /media/cdrom
Agregamos el cd al repositorio (ya sea imagen o cd fisico, si hay error revisar el punto de montaje):

apt-cdrom -m -d /media/cdrom add
apt-get update

y ya puedes hacer un apt-get install del programa que esta en el CD


Para saber como PUBLICAR un repositorio local usando apache visite:
http://ldj-funciones-java.blogspot.com/2012/09/linux-debian-repositorio-local-extra.html


miércoles, 27 de mayo de 2015

Listar funciones postgres

Algunas veces es necesario recuperar el codigo de una funcion de la base de datos, o un grupo de funciones bajo un patron, por ejemplo quiero todas las funciones que empiecen con "act", en


POSTGRES SQL

create or replace function ldj_listar_funciones(_nombre_funcion text) returns setof record as $$
-------------------------------
-- FUNDACION AUTAPO
-- Autor: Luis A. Jordan P.
-- email: jordanluis@yahoo.com
-------------------------------
declare
  _bucle   record;
begin
  for _bucle in
    SELECT ('CREATE OR REPLACE FUNCTION '|| p.proname ||'(' ||
      CASE WHEN proallargtypes IS NOT NULL THEN
        pg_catalog.array_to_string(
          ARRAY(
            SELECT
              CASE
                WHEN p.proargmodes[s.i] = 'i' THEN ''
                WHEN p.proargmodes[s.i] = 'o' THEN 'OUT '
                WHEN p.proargmodes[s.i] = 'b' THEN 'INOUT '
              END ||
              CASE
                WHEN COALESCE(p.proargnames[s.i], '') = '' THEN ''
                ELSE p.proargnames[s.i] || ' '
              END ||
              pg_catalog.format_type(p.proallargtypes[s.i], NULL)
            FROM pg_catalog.generate_series(
              1, pg_catalog.array_upper(p.proallargtypes, 1)
            ) AS s(i)
          ), ', '
        )
      ELSE
        pg_catalog.array_to_string(
          ARRAY(
            SELECT
              CASE
                WHEN COALESCE(p.proargnames[s.i+1], '') = '' THEN ''
                ELSE p.proargnames[s.i+1] || ' '
                END ||
              pg_catalog.format_type(p.proargtypes[s.i], NULL)
            FROM
              pg_catalog.generate_series(
                0, pg_catalog.array_upper(p.proargtypes, 1)
              ) AS s(i)
          ), ', '
        )
      END ||
      CASE WHEN p.proretset THEN ') returns setof ' ELSE '' END ||
      pg_catalog.format_type(p.prorettype, NULL)  || ' as \$\$ ' || p.prosrc
      || '\$\$ language '||lanname||';')::text as funcion
    FROM pg_catalog.pg_proc p
         LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
         LEFT JOIN pg_catalog.pg_language l ON l.oid = p.prolang
         JOIN pg_catalog.pg_roles r ON r.oid = p.proowner
    WHERE p.proname ilike _nombre_funcion
    AND NOT p.proisagg
    AND pg_catalog.pg_function_is_visible(p.oid)
  loop
    return next _bucle;
  end loop;
  return;
end;
$$ language plpgsql;

SELECT * FROM ldj_listar_funciones('act_%') as (funcion text);

miércoles, 27 de agosto de 2014

Instalacion y Configuracion extra basica de ssh sin password, con certificados rsa o dsa


Para tener acceso por ssh sin escribir el password cada vez, se puede usar certificados rsa o dsa, explicaremos el dsa con una frase o passphrase en blanco


En cliente y servidor LINUX con Usuario root:


Cambiar IP Remoto: 10.10.1.3 por el de su servidor

1.- crear un certificado local
ssh-keygen -t dsa -N "" -f /root/.ssh/id_dsa

2.- crear un directorio remoto para copiar la autorizacion (pedira password remoto)
ssh root@10.10.1.3 mkdir -p /root/.ssh

3.- copiar el cetificado temporalmente para autorizar (pedira password remoto)
scp /root/.ssh/id_dsa.pub root@10.10.1.3:/root/.ssh/authorized_keys.tmp

4.- adicionando a las autorizaciones y borrando el temporal (pedira password remoto)
ssh root@10.10.1.3 "cat /root/.ssh/authorized_keys.tmp >> /root/.ssh/authorized_keys && rm /root/.ssh/authorized_keys.tmp"

5.- prueba del acceso (ya no deberia pedir password)
ssh root@10.10.1.3 "ls"


En cliente y servidor LINUX con usuario limitado jordanluis(cambiar por el suyo):
Notar que para el usuario root se uso el directorio base /root/ mientras que para el limitado /home/jordanluis/

Cambiar IP Remoto: 10.10.1.3 por el de su servidor

1.- crear un certificado local
ssh-keygen -t dsa -N "" -f /home/jordanluis/.ssh/id_dsa

2.- crear un directorio remoto para copiar la autorizacion (pedira password remoto)
ssh jordanluis@10.10.1.3 mkdir -p /home/jordanluis/.ssh

3.- copiar el cetificado temporalmente para autorizar (pedira password remoto)
scp /home/jordanluis/.ssh/id_dsa.pub jordanluis@10.10.1.3:/home/jordanluis/.ssh/authorized_keys.tmp

4.- adicionando a las autorizaciones y borrando el temporal (pedira password remoto)
ssh jordanluis@10.10.1.3 "cat /home/jordanluis/.ssh/authorized_keys.tmp >> /root/.ssh/authorized_keys && rm /home/jordanluis/.ssh/authorized_keys.tmp"

5.- prueba del acceso (ya no deberia pedir password)
ssh jordanluis@10.10.1.3 "ls"

miércoles, 15 de enero de 2014

Instalacion y configuracion extra basica de VPN con IPSEC y PRESHAREDKEY en LINUX

En muchos casos se requiere una conexion segura entre redes, o acceso a recursos compartidos entre oficinas remotas, en este caso se montará una vpn para conectar varias oficinas a traves de internet, ambas redes con estructura similar donde x sera el identificador de la oficina:
 Red LAN con ip 192.168.x.0/24
 Red DMZ con ip 10.10.x.0/24
Se utiliza un servidor como router, vpn, etc. para distribuir internet con las siguientes interfaces:
 eth0 - WAN IP 200.x.x.x
 eth1 - LAN IP 192.168.x.1
 eth2 - DMZ IP 10.10.x.1

Por facilidad se usara "x" sera la local y "y" sera la remota, x=1 y=2

Se usara el nombre de la vpn como vpnxy. Es decir vpn12 y en el equipo remoto configurar al reves vpn21

El presharedkey o PSK sera una clave que conozcan ambos servidores, se usara "contrasenia", se recomienda que toda la malla de la vpn use el mismo psk y la misma encriptación, usaremos 3des - sha1 1024 bits


1.- DESHABILITAR REDIRECCIONES, editar el archivo /etc/sysctl.conf y buscar net.ipv4.ip_forward y ponerlo en valor 1 (ojo, descomentarlo primero quitando el numeral de la izquierda)

2.- Instalar OpenSwan:
apt-get install openswan

3.- Configuracion global del IPSEC, editar el archivo /etc/ipsec.conf y dejarlo como sigue:

version 2.0
config setup
protostack=netkey
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16
oe=off
include /etc/ipsec.d/*.conf

4.- Configuracion de las claves PSK, editar el archivo /etc/ipsec.secrets y dejarlo como sigue (aumentar filas para mas servidores):

include /var/lib/openswan/ipsec.secrets.inc
200.1.1.1 200.2.2.2 : PSK "contrasenia"

5.- Configurar la conexion de la vpn.- crear un archivo para cada vpn con su nombre en /etc/ipsec.d/vpn12.conf:

conn vpn12
authby=secret
auto=start
keyexchange=ike
esp=3des
compress=yes
left=200.1.1.1
leftsubnet=10.10.1.0/24
right=200.2.2.2
rightsubnet=10.10.2.0/24

6.- Iniciar y verificar el servicio:
service ipsec restart
ipsec verify
7.- Levantar la vpn:
ipsec auto --add vpn12
ipsec auto --up vpn12
8.- Configurar un gateway por defecto
route add default gw 200.1.1.1 eth0
9.- Verificar la reglas del firewall, de preferencia quitar todas las reglas
iptables -vnL -t nat
iptables -vnL

10.- Enmascaramiento para dar internet, evitando colision con la vpn
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 \! -d 10.10.0.0/16 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 \! -d 10.10.0.0/16 -j MASQUERADE

11.- Redireccion de la red interna a la vpn usando nat
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 10.10.2.0/28 -j SNAT --to 10.10.1.254

12.- Aceptar trafico puertos 500 y 50 para la encriptación del PSK
iptables -I INPUT -p udp --sport 500 --dport 500 -j ACCEPT
iptables -I OUTPUT -p udp --sport 500 --dport 500 -j ACCEPT
iptables -I INPUT -p 50 -j ACCEPT
iptables -I OUTPUT -p 50 -j ACCEPT

13.- Pruebas de conexion en un servidor local(10.10.1.2)
ping google.com #ping a internet
ping 10.10.2.2 #ping a un servidor remoto a traves de la VPN

14.- Pruebas de conexion en un equipo local(192.168.1.2)
ping google.com #ping a internet
ping 10.10.1.2 #ping a un servidor local en DMZ
ping 10.10.2.2 #ping a un servidor remoto a traves de la VPN

15.- Publicar un servidor(virtualip)
adicionar un alias a la interface o virtual ip

ifconfig eth0:0 200.1.1.2 up
ifconfig eth0:1 200.1.1.3 up
....
iptables -t nat -A PREROUTING -p tcp -d 200.1.1.2 -j DNAT --to-destination 10.10.1.2
iptables -t nat -A PREROUTING -p tcp -d 200.1.1.3 -j DNAT --to-destination 10.10.1.3
....

martes, 8 de enero de 2013

Instalacion y configuracion extra basica de Email Server con POSTFIX


POSTFIX es un servidor de correo electronico que nos permite publicar el puerto 25 SMTP para enviar correos desde nuestro servidor.
Linux Debian

1.- Lo primero es instalarlo:
   apt-get install postfix

2.- sacar una copia de las configuraciones por defecto por si cometemos errores:
   cp /etc/postfix/main.cf /etc/postfix/main.cf.ori

3.- editar el archivo /etc/postfix/main.cf y reemplace su contenido con lo siguiente (modificando mydomain):

   #El dominio despues de @ ej: juan@mi_dominio.com
   ### CAMBIE AQUI SU DOMINIO ###
   mydomain = mi_dominio.com
   
   
   #El nombre del smtp para configurar el cliente
   myhostname = mail.$mydomain
   
   #El dominio que aparece en el from ej jordanluis@mi_dominio.com
   myorigin = $mydomain
   
   #Los dominios que se atienden.
   mydestination = $mydomain localhost.localdomain localhost $myhostname
   
   #Interfaces por las que escucha
   inet_interfaces = all
   
   #Los dominios de este servidor serán retransmitidos a otro correo.
   mrelayhost =
   
   #Redes que pueden hacer relay (OJO con no poner todas).
   mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
   
   #Quota de cada buzon en bytes 51200000=50MB
   mailbox_size_limit = 51200000
   
   smtpd_banner = $myhostname ESMTP $mail_name Customized by LDJ
   biff = no
   append_dot_mydomain = no
   readme_directory = no
   
   # TLS parameters
   smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
   smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
   smtpd_use_tls=yes
   smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
   smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
   
   alias_maps = hash:/etc/aliases
   alias_database = hash:/etc/aliases
   recipient_delimiter = +
   
   # Para mas informacion ver /usr/share/postfix/main.cf.dist
 

4.- Reiniciar el servicio con la nueva configuracion:
   /etc/init.d/postfix stop
   /etc/init.d/postfix start

5.- Crear Cuentas de correo por consola(hasta instalar un administrador web):
   useradd -m -s /sbin/nologin jordanluis
   passwd jordanluis


ALGUNAS FUENTES:
linuxparatodos (Instalación y Configuración de Postfix en Ubuntu )
juanfelipe (Configuración rápida y simple de Postfix)

jueves, 13 de septiembre de 2012

Instalacion y Configuracion extra basica de Repositorio local Linux Debian

Podemos publicar nuestro propio repositorio de paquetes debian para nuestra red local.

Suponiendo que tenemos corriendo un servidor web como apache en el ip 192.168.1.2 y las maquinas clientes en la misma red

Linux - En el servidor

Crear el directorio para el repositorio local y llenarlo con los paquetes .deb que desamos compartir (podemos copiarlos desde los cds o descargarlos desde un repositorio publico)

mkdir -p /var/www/debian/dists/squeeze/main/binary-i386

Generar el listado para el indice de paquetes publicados con:

cd /var/www/debian
dpkg-scanpackages dists/squeeze/main/binary-i386 /dev/null > dists/squeeze/main/binary-i386/Packages
gzip dists/squeeze/main/binary-i386/Packages


Linux - En las maquinas cliente

Editar el archivo /etc/apt/sources.list y aumentamos la linea:

deb http://192.168.1.2/debian/ squeeze main

Actualizar el indice de paquetes
apt-get update


Para saber como colocar el repositorio en un CD o DVD visite:
http://ldj-funciones-java.blogspot.com/2015/07/instalacion-y-configuracion-extra.html

miércoles, 12 de septiembre de 2012

Instalacion y configuracion extra basica de rsync para sacar backups en linux

Para sacar una copia de seguridad de linux, hay muchas opciones la mas simple es usar rsync.
La idea será crear un directorio al cual copiar los archivos del sistema en el estado actual, luego quemar o copiar a una unidad externa estos datos.
Hay ciertos archivos que no deben ser copiados ya que se refieren al uso actual del sistema y se colocaran en la seccion exclude asi como la ruta del directorio de backup
Asumiendo que sacaremos el backup en /respaldos/copiaSO:


Linux

mkdir -p /respaldos/copiaSO
rsync -aAXv /* /respaldos/copiaSO --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs,/respaldos/copiaSO/*}

Una vez terminado podemos quemar o almacenar el directorio copiaSO para luego comparar cambios con el sistema o restaurarlo.


Para comparar una copia de seguridad de linux con el sistema actual usando rsync.
Asumiendo que tenemos el backup obtenido con el punto anterior, en /respaldos/copiaSO

Linux

rsync -av --dry-run / /respaldos/copiaSO --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs,/respaldos/copiaSO/*} > /root/cambios.txt Con este comando obtenemos las diferencias del estado actual respecto al backup en el archivo /root/cambios.txt.