Archivos por Etiqueta: linux

Amazon: Protect Instance Metadata and User Data

Es una practica extendida almacenar las credenciales en el “user-data”, el problema es que desde una instancia de EC2 cualquier usuario de la maquina, autorizado o no, puede acceder a estos datos.

Ejemplo:

curl http://169.254.169.254/latest/user-data

Una regla de iptables para evitar estos accesos, salvo para el usuario “root” (uid=0):

iptables -A OUTPUT \
  -d 169.254.169.254/32 -p tcp --dport 80 \
  -m owner ! --uid-owner 0 \
  -j REJECT --reject-with tcp-reset

References:
EC2 – Instance Metadata and User Data
The best method for passing AWS credentials as user data to an EC2 instance?

Anuncios

Linux: Convert OGM to AVI

Una simple chuleta para convertir video en formato .ogm a formato .avi en Ubuntu 14.04:

avconv -i "input.ogm" -vcodec copy -acodec libmp3lame -ac 2 -ar 44100 "output.avi"

Si tu reproductor no soporta el formato del stream de video de original y necesitas cambiar el codec puedes usar “-vcodec mpeg4”, aunque el proceso será mucho más lento.

Para ver la lista de codecs soportados:

avconv -codecs

La alternativa de “avconv” es “mencoder”:

mencoder "input.ogm" -o "output.avi" -of avi -ovc copy \
  -oac mp3lame -lameopts mode=0:preset=128 -alang Spanish,es

El paquete Ubuntu es libav-tools / mencoder.

Referencias:
avconv.1
mencoder.1

Linux: Performance Analysis and Tools

Linux: Broken sar on vm clone

Si clonas una maquina en caliente lo más posible es que el “sar” (sysstat) deje de funcionar cuando le pides el historico:

# sar
Requested activities not available in file /var/log/sa/sa12

Para resetearlo (Open-SuSE):

# rm -f /var/log/sa/sa*; /etc/init.d/boot.sysstat start
Running sadc [done]

# sar
Linux x.x.xx.xx-x.x-pae (box1)  02/12/14        _i686_

01:39:29 PM       LINUX RESTART

01:45:02 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:55:01 PM     all      4.59      0.00      0.40      0.00      0.00     95.01
02:05:01 PM     all      7.11      0.00      0.67      0.00      0.00     92.22
02:15:01 PM     all     11.34      0.00      1.12      0.00      0.00     87.53
02:25:01 PM     all     14.48      0.00      1.44      0.00      0.00     84.08
02:35:01 PM     all      8.17      0.00      0.80      0.00      0.00     91.03
02:45:01 PM     all      4.52      0.00      0.41      0.00      0.00     95.06
02:55:01 PM     all      3.31      0.00      0.32      0.00      0.00     96.37
03:05:01 PM     all     24.12      0.00      2.98      0.00      0.00     72.89
03:15:01 PM     all      6.82      0.00      0.62      0.00      0.00     92.56
03:25:01 PM     all      5.43      0.00      0.48      0.00      0.00     94.09
Average:        all      8.98      0.00      0.92      0.00      0.00     90.10

Linux: Setting Hostname from DHCP-Server in Ubuntu

Si quieres que tu Linux coja el nombre de Host desde DHCP (probado en Ubuntu 12.04 -Precise-)

#!/bin/sh
# Filename: /etc/dhcp/dhclient-exit-hooks.d/hostname
# Purpose:  Set the hostname of the system provided by DHCP (option 12).
#
case "$reason" in
  BOUND|RENEW|REBIND|REBOOT)
    if [ "$new_host_name" != "" ]; then
      echo $new_host_name > /etc/hostname;
      hostname $new_host_name;
    fi
    echo dhclient-exit-hooks.d/hostname: Dynamic Hostname = $new_host_name;
  ;;
esac

El script aparentemente tiene acceso a estas variables de entorno (la documentacion no las explica todas):

interface=eth0
reason=RENEW
# ---
new_expiry=1391268994
new_dhcp_lease_time=300
new_dhcp_message=ACME
new_dhcp_message_type=5
new_dhcp_server_identifier=192.168.1.1
new_network_number=192.168.1.0
new_subnet_mask=255.255.255.0
new_broadcast_address=192.168.1.255
new_ip_address=192.168.1.101
new_routers=192.168.1.1
new_host_name=test1
new_domain_name=acme.com
new_domain_name_servers=192.168.1.1 192.168.1.2
# ---
old_expiry=1391268724
old_dhcp_lease_time=300
old_dhcp_message=ACME
old_dhcp_message_type=5
old_dhcp_server_identifier=192.168.1.1
old_network_number=192.168.1.0
old_subnet_mask=255.255.255.0
old_broadcast_address=192.168.1.255
old_ip_address=192.168.1.101
old_routers=192.168.1.1
old_host_name=test1
old_domain_name=acme.com
old_domain_name_servers=192.168.1.1 192.168.1.2

Referencias:
man 8 dhclient-script
man 5 dhclient.conf

OpenVPN: tun y tap

Despues de haber usado VPNs IPSec, L2TP, PPTP y PPP/SSH… sin duda me quedo con OpenVPN.

Aqui pongo varios ejemplos de configuraciones (para un “TUN” -Routing IP- y un “TAP” -Bridge Ethernet-) (Edit [2017.04.25] la configuracion y las pruebas han sido sobre Ubuntu 16.04 en el server y Windows 7 en el cliente, el articulo inicial fue para Ubuntu 12.04 -cambian pocas cosas-), si no funciona el “redirect-gateway def1” (para que todo el trafico salga a traves de la vpn) o alguna otra opcion es posible que debas arrancar el openvpn-gui con privilegios administrativos:

# Primero generamos el Diffie-Hellman (en el server)
openssl gendh -out dh-2048.pem 2048
# Generamos Shared-Secret (en el Server)
# Este fichero es compartido en server y clientes
openvpn --genkey --secret secret.key

Aunque la parte de la creacion de los certificados X.509 no la explico aqui (server.{crt,key} & client.{crt,key}); a modo de resumen (usando solo certificados auto-firmados):

  • dh-2048.pem: es privado, estará solo en el servidor (owner{root:root} perm{600})
  • server.crt: es publico, compartido entre todos -servidor y clientes-
  • server.key: es privado, estará solo en el servidor (owner{root:root} perm{600})
  • client.crt: es publico, generado para cada cliente
  • client.key: es privado, estará solo en el cliente
  • ca.crt: es publico, estará solo en el servidor con permisos restringidos (owner{root:root} perm{644}), todos los client.crt se meten dentro de este fichero de modo concatenado, es la lista de clientes permitidos

Para poder dar soporte a clientes UDP/1194 (standard) y TCP/443 (firewall-friendly) hay que crear 2 ficheros diferentes en el server y asignar 2 rangos de IPs separados (para que no haya problemas con las las rutas).

Leer más de esta entrada

IPv6: How to disable

Aqui un chuletario de como deshabilitar el Stack IPv6 en diferentes sistemas (Windows, Linux y Java)

En Linux hay varios metodos diferentes:

1) Agregando al cmdline del kernel el parametro:

ipv6.disable=1

2) Usando el sysctl (proc):

net.ipv6.conf.all.disable_ipv6=1

3) Forzando el modprobe.conf:

alias net-pf-10 off
alias ipv6 off
install ipv6 /bin/true

En Windows 7 solo hay que cambiar una clave del registro:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters]
"DisabledComponents"=dword:000fffff

En Java se puede definir una System property para que use IPv4 de modo preferente:

-Djava.net.preferIPv4Stack=true         # por defecto es false
-Djava.net.preferIPv6Addresses=false    # opcional: por defecto false

Referencias:
Windows: KB-929852
Windows: How-To disable IPv6
Linux: ipv6 module options
Linux: ip-sysctl
Linux: man 5 modprobe.conf
Java: IPv6 guide

Lubuntu: Disable automount (LXDE)

Si te has vuelto mico buscando como desactivar el automount de un dispositivo USB en Lubuntu/LXDE:

Este comando es la solución:

pcmanfm

lubuntu pcmanfm disable automount

La pista (pq por mas que busqué en la configuración no encontré nada) fue el anuncio de la pagina de Lubuntu:

== Features ==
* Based on the lightweight LXDE desktop environment.
* Pcmanfm 0.9.10, a fast and lightweight files manager using gio/gvfs.
* Openbox, the fast and extensible, default windows-manager of LXDE.
* Lightdm, using the simple GTK greeter
* Chromium, the open-source version of Google Chrome.
* … and, of course, based on Ubuntu 12.04 LTS.

See the complete list of applications on https://wiki.ubuntu.com/Lubuntu/Applications

Otros metodos para otros sistemas:
Disable automount in Nautilus

Linux Tuning para entornos virtuales (vmware/kvm)

Básico si quieres vivir más feliz.

#!/bin/bash
# -- /etc/rc.local (ubuntu) or /etc/init.d/boot.local (suse)
#
# SCSI Timeout (10min for vm or iSCSI)
for i in /sys/block/sd?/device/timeout; do {
  echo "600" > $i
} done
# Clocksource: acpi_pm
echo "acpi_pm" > /sys/devices/system/clocksource/clocksource0/current_clocksource
# IO-Scheduler: deadline (default is "cfq")
for i in /sys/block/sd?/queue/scheduler; do {
  echo "deadline" > $i
} done
# Disable console blank-screen
setterm -blank 0 -store

Linux: dhcpd cooking

Para asignar diferentes IPs en funcion de la MAC address y ademas ejecutar un script cuando se asigna o se libera una IP del pool.

#
# Configuration file for ISC dhcpd for Ubuntu 10.04
#
# Attention: If /etc/ltsp/dhcpd.conf exists, that will be used as
# configuration file instead of this file.
#

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# option definitions common to all supported networks...
#option domain-name "XXXXX.es";
#option domain-name-servers 192.168.X.A, 192.168.X.B;
#option routers 192.168.X.Y;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;

#######

authoritative;

class "vmware" {
  match if substring(binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)), 0, 7) = "0:50:56";
}
class "vmtest" {
  match if substring(binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)), 0, 8) = "40:50:60";
}

shared-network internal {
  set myip = binary-to-ascii(10, 8, ".", leased-address);
  set mymac = lcase(concat(
      suffix(concat("0", binary-to-ascii(16, 8, "", substring(hardware, 1, 1))), 2), ":",
      suffix(concat("0", binary-to-ascii(16, 8, "", substring(hardware, 2, 1))), 2), ":",
      suffix(concat("0", binary-to-ascii(16, 8, "", substring(hardware, 3, 1))), 2), ":",
      suffix(concat("0", binary-to-ascii(16, 8, "", substring(hardware, 4, 1))), 2), ":",
      suffix(concat("0", binary-to-ascii(16, 8, "", substring(hardware, 5, 1))), 2), ":",
      suffix(concat("0", binary-to-ascii(16, 8, "", substring(hardware, 6, 1))), 2)
    ));

  # TEST
  #subnet 169.254.0.0 netmask 255.255.0.0 {
  #  pool {
  #    allow members of "vmtest";
  #    range 169.254.169.1 169.254.169.249;
  #  }
  #}

  # NETWORK
  subnet 192.168.X.0 netmask 255.255.255.0 {
    option domain-name "XXXX.es";
    option domain-name-servers 192.168.X.B, 192.168.X.B;
    option routers 192.168.X.Y;
    pool {
      allow members of "vmtest";
      range 192.168.X.119 192.168.X.119;
      option domain-name-servers 192.168.X.A, 192.168.X.B;
      option routers 192.168.X.C;
    }
    pool { # vmware
      allow members of "vmware";
      range 192.168.X.121 192.168.X.129;
    }
    pool { # unknown
      deny members of "vmware";
      deny members of "vmtest";
      range 192.168.X.131 192.168.X.139;
    }
  }

  # Maybe you need modify:
  # /etc/apparmor.d/usr.sbin.dhcpd3
  # + /etc/dhcp3/dhcpd-hooks.d/event.sh Uxr,
  # invoke-rc.d apparmor reload
  # chmod +x /etc/dhcp3/dhcpd-hooks.d/event.sh
  on commit {
    execute("/etc/dhcp3/dhcpd-hooks.d/event.sh", "commit", myip, mymac);
  }
  on release {
    execute("/etc/dhcp3/dhcpd-hooks.d/event.sh", "release", myip, mymac);
  }
  on expiry {
    execute("/etc/dhcp3/dhcpd-hooks.d/event.sh", "expiry", myip, mymac);
  }
}
#
# http://blog.fortytwo.ch/
# http://manpages.ubuntu.com/manpages/lucid/en/man5/dhcp-eval.5.html
#
#!/bin/bash
# File: /etc/dhcp3/dhcpd-hooks.d/event.sh
echo $* >> /tmp/dhcp.log
A %d blogueros les gusta esto: