jueves, 16 de noviembre de 2017

ssh sin contraseña

SSH login without password

Your aim

You want to use Linux and OpenSSH to automate your tasks. Therefore you need an automatic login from host A / user a to Host B / user b. You don't want to enter any passwords, because you want to call ssh from a within a shell script.

How to do it

First log in on A as user a and generate a pair of authentication keys. Do not enter a passphrase:
a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A
Now use ssh to create a directory ~/.ssh as user b on B. (The directory may already exist, which is fine):
a@A:~> ssh b@B mkdir -p .ssh
b@B's password: 
Finally append a's new public key to b@B:.ssh/authorized_keys and enter b's password one last time:
a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password: 
From now on you can log into B as b from A as a without password:
a@A:~> ssh b@B
A note from one of our readers: Depending on your version of SSH you might also have to do the following changes:

  • Put the public key in .ssh/authorized_keys2
  • Change the permissions of .ssh to 700
  • Change the permissions of .ssh/authorized_keys2 to 640

viernes, 10 de noviembre de 2017

Nginx status en Centreon

Me tope con el tema de agregar el plugin nginx en centreon. Me tomo mucho tiempo comprender como funcionaba los plugins en centreon. Para los que no están familiarizados, centreon utiliza un conjunto de scripts perl para ver los estados de los servidores. Como ser en mi server los plugins estan en:


[root@mon ~]# ll /usr/lib/nagios/plugins/

[root@mon ~]# ll /usr/lib/nagios/plugins/
total 3796
drwxr-xr-x. 3 centreon nagios     4096 Feb 22  2017 Centreon
-rwxrwxr-x  1 centreon centreon   1448 Oct 25 05:26 centreon.conf
-rwxrwxr-x  1 centreon nagios     1679 Jun 22  2015 centreon.conf.custom
-rwxrwxr-x  1 centreon nagios     1448 May 27  2015 centreon.conf.orig
-rwxrwxr-x  1 centreon centreon   3450 Oct 25 05:26 centreon.pm
-rwxr-xr-x  1 centreon nagios   128804 Sep 17  2014 check_apt
-rwxr-xr-x. 1 centreon nagios     2251 Sep 17  2014 check_breeze
-rwxr-xr-x  1 centreon nagios    66959 Sep 17  2014 check_by_ssh
-rwxrwxr-x  1 centreon centreon   3695 Oct 25 05:26 check_centreon_dummy
-rwxrwxr-x  1 centreon centreon   8955 Oct 25 05:26 check_centreon_MS_multiple_services
-rwxrwxr-x  1 centreon centreon   8010 Oct 25 05:26 check_centreon_ping
-rwxrwxr-x  1 centreon centreon   7314 Oct 25 05:26 check_centreon_snmp_cpu
..................
lrwxrwxrwx  1 centreon nagios       27 Mar  2  2017 check_centreon_snmpd -> custom/check_centreon_snmpd
-rwxrwxr-x  1 centreon centreon   7572 Oct 25 05:26 check_centreon_snmp_loadaverage


En ese directorio estan todos los scripts perl, son los "comandos" de centreon, ahi tendria que agregar el comando para ver el estado de nginx.

Entonces lo que hice fue primero seguir un tutorial que explicaba como agregar.

Voy a la configuración de nginx, edito o agrego las siguientes lineas:
vim /etc/nginx/conf.d/**_https.conf

location /nginx_status {
stub_status on;
access_log off;
allow 192.168.xxx.xxx; <— Aca la ip de los servidores autorizados a la vista del estado nginx
allow 192.168.xxx.xxx; <— También puede ser la ip de tu pc, para la vista del estado nginx
deny all;
}

Después reinicio de nginx
service nginx restart

Después vamos a la url
https://nuestroservidor.com/nginx_status

Y ahí muestra el estado del server
Active connections: 247 
server accepts handled requests
 85445 85445 1203260 
Reading: 0 Writing: 106 Waiting: 139 


Supuestamente con curl funciona también
curl http://127.0.0.1/nginx_status
Active connections: 2
server accepts handled requests
 31302 31302 58730
Reading: 0 Writing: 1 Waiting: 1





Como ya tenemos funcionando el estado de nginx, vamos a descargar el script perl check_nginx_status.pl
https://exchange.nagios.org/directory/Plugins/Web-Servers/nginx/check_nginx_status-2Epl/details

Probamos el script conectandonos a la ip del nginx
perl check_nginx_status.pl -H 172.31.0.60

NGINX OK -  0.093 sec. response time, Active: 236 (Writing: 117 Reading: 0 Waiting: 119) ReqPerSec: 32.673 ConnPerSec: 2.115 ReqPerConn: 13.969|Writing=117;;;; Reading=0;;;; Waiting=119;;;; Active=236;;;; ReqPerSec=32.673077;;;; ConnPerSec=2.115385;;;; ReqPerConn=13.969328;;;;

SI NO FUNCIONA, y larga un error tipo:
"Can’t locate utils.pm in @INC (@INC contains: /root /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .)"

Hay que editar el script para que use la libreria de plugins correcta, en base a este tutorial.
Edito:
vim check_nginx_status.pl

Cambio la linea dejándola así:
# use lib $FindBin::Bin;
use lib "/usr/lib/nagios/plugins";

Probamos el script conectandonos a la ip del nginx, si falta algun perl, instalarlo.

Copiamos el script a
cp /root/check_nginx_status.pl /usr/lib/nagios/plugins

Por las dudas les damos permisos al archivo.
cd /usr/lib/nagios/plugins
chmod 755 check_nginx_status.pl
chown centreon.nagios check_nginx_status.pl

Después que tenemos el script en la carpeta del nagios, vamos a la configuración del centreon
https://sge.cfe.edu.uy/centreon/

A la parte de comandos
Configuration > Commands > Checks

Agregamos uno con Add y lo dejamos así

Check

Command Name *
Command Type      
Command Line *
      
    

           Plugin Help

         
Enable shell
Argument Example  $HOSTADDRESS$  Test the plugin
Argument Descriptions



Macros Descriptions

Additional Information

Connectors
Graph template
Comment




Después de agregado el comando, vamos a Configuration  >  Services  >  Templates
Y creamos un service template llamado "NGINX-Connections" y lo completamos así:

Alias: NGINX-Connections
Service Template Name: NGINX-Connections
Service Template: generic-service
Check command: check_nginx_connections

Lo demás todo estándar.

Después vamos a Configuration  >  Hosts  >  Templates
Y creamos un template para nuestro server Nginx

Host Template Name * : Servers-NginxAlias: Servidores Nginx
 Host Parallel Templates: generic-host

Plantilla notification
Notification Enabled: yes
Notification Options: Down

Plantilla Relations:
Linked Service Templates:
Nginx-connections
Y todos los demas comandos que quieras...

Lo demás todo estándar y clic en save.


Después de eso vamos a la configuración de los hosts
Configuration  >  Hosts

Vamos a la configuración del host y le asignamos el template Servers-Nginx   , clic en save.

Vamos a la configuracion de Servicios por host
Configuration  >  Services  >  Services by host

Clic en add y completamos:
Linked with Hosts *: Nuestro server nginxDescription *: NGINX Connections
Service Template    NGINX-Connections
Check command: check_nginx_connections

Plantilla notifications:
Inherit contacts from host: Yes




Después de configurar todo esto, hay que aplicarle la configuración al servidor de centreon, vamos a
Configuration > Pollers

Clic en Apply configuration

Ahí aparece la aplicación de la config y completamos:
Pollers: Nuestro servidor centreon
Generate Configuration Files   Chequeado
Run monitoring engine debug (-v)    Chequeado
Move Export Files     Chequeado
Restart Monitoring Engine     Chequeado


Clic en export

Console

Progress () 100%
Preparing environment... OK
Generating files... OK
Moving files... OK
Restarting engine... OK




Después de eso estaría pronto para visualizar las gráficas de nginx


Fuente al 10/11/2017:

https://tomapramono.wordpress.com/2017/01/10/check-nginx-status-with-nagios-plugin-on-centos/
https://www.claudiokuenzler.com/blog/408/monitoring-nginx-reverse-proxy-web-server-with-check_nginx_status#.WgS1dGd9lBk
https://viewsby.wordpress.com/2014/02/20/perlnagios-cant-locate-utils-pm-in-inc/
https://forum.centreon.com/forum/centreon-use/interface/5381-problem-to-add-or-remove-new-host-services
https://2kswiki.wordpress.com/category/nginx-2/
https://exchange.nagios.org/directory/Plugins/Web-Servers/nginx/check_nginx_status-2Epl/details

Otras formas
https://documentation.centreon.com/docs/plugins-packs/en/1.x/installation.html
https://documentation.centreon.com/docs/centreon-plugins/en/latest/user/guide.html#installation

/usr/lib/nagios/plugins/
/usr/lib/nagios/plugins/
ll /usr/lib/nagios/plugins/
ll /usr/lib/nagios/plugins/
ll /usr/lib/nagios/plugins/
ll /usr/lib/nagios/plugins/
ll /usr/lib/nagios/plugins/

martes, 7 de noviembre de 2017

Apache mod_proxy


Caso de Estudio
Brindar servicios web con mas de un servidor y una sola IP pública.

Solución
Configuración Apache mod_proxy

Un reverse proxy es un servidor proxy instalado en el lugar de uno o más servidores web. Todo el tráfico entrante de Internet y con el destino de uno de esos servidores web pasa a través del servidor apache proxy el cual redirige la solicitud al servidor correspondiente.










Configuración

Para que todo este servicio funcione, además de la configuración que se presenta, los clientes deben consultar a un servidor de nombres, el cual responde la IP del servidor apache proxy cuando le preguntan por cualquiera de los dominios.

vim /etc/httpd/conf/httpd.conf

NameVirtualHost *:80
# Puerto que atiende las solicitudes


# VirtualHost que atiende al nombre sur.cfe.edu.uy .
# El contenido esta alojado dentro del mismo servidor.
<VirtualHost *:80>
ServerName sur.cfe.edu.uy

DocumentRoot /var/www/html

</VirtualHost>



# VirtualHost que atiende al nombre www.sur.cfe.edu.uy .
# El contenido esta alojado dentro del mismo servidor en otro directorio.
<VirtualHost *:80>

ServerName www.sur.cfe.edu.uy

DocumentRoot /var/www/html/joomla

</VirtualHost>



# VirtualHost que atiende al nombre norte.cfe.edu.uy .
# El contenido esta alojado dentro de un servidor con nombre norte.cfe.edu.uy
<VirtualHost *:80>

ServerName norte.cfe.edu.uy

ProxyPass / http://norte.cfe.edu.uy/

ProxyPassReverse / http://norte.cfe.edu.uy/

</VirtualHost>



# VirtualHost que atiende al nombre noreste.cfe.edu.uy .
# También atiende al nombre www.noreste.cfe.edu.uy .
# El contenido esta alojado dentro de un servidor con nombre noreste.cfe.edu.uy
<VirtualHost *:80>

ServerName noreste.cfe.edu.uy

ServerAlias www.noreste.cfe.edu.uy

ProxyPass / http://noreste.cfe.edu.uy/

ProxyPassReverse / http://noreste.cfe.edu.uy/

</VirtualHost>









Explicación de las variables

<VirtualHost *:80>

ServerName norte.cfe.edu.uy

ProxyPass / http://norte.cfe.edu.uy/

ProxyPassReverse / http://norte.cfe.edu.uy/

</VirtualHost>



ServerName norte.cfe.edu.uy
Atiende al dominio norte.cfe.edu.uy

ProxyPass / http://norte.cfe.edu.uy/

Redirege las peticiones a http://norte.cfe.edu.uy/


ProxyPassReverse / http://norte.cfe.edu.uy/

Indica que va a ser un proxy reverso, modificando las cabeceras HTTP Location, Content-Location y URI en la respuesta, para que ésta vuelva al cliente a través del servidor A.


Registros en /etc/hosts
Necesita especificar en este archivo las ip y los nombres de los otros servidores web para que los encuentre en la red local.

192,168,1,3 norte.cfe.edu.uy
192,168,1,3 noreste.cfe.edu.uy
192,168,1,3 www.noreste.cfe.edu.uy


Registros en servidor DNS
En el servidor DNS se especifican todos los host con la misma ip (Dirección ip pública).

norte IN A 192,168,1,3
noreste IN A 192,168,1,3
www.noreste IN A 192,168,1,3
sur IN A 192,168,1,3




Nota:


ProxyPass / http://192.240.2.93/
ProxyPassReverse / http://192.240.2.93/
ProxyPreserveHost On
La primera línea redirige la petición del servidor A al B. La segunda indica que va a ser un proxy reverso, modificando las cabeceras HTTP Location, Content-Location y URI en la respuesta, para que ésta vuelva al cliente a través del servidor A. Por último, la tercera línea preservará la cabecera Host para hacer redirecciones basadas en el dominio. Esto es porque el caso que explica el artículo original, lo que se quería hacer es que las peticiones enviadas al dominio foo.com (que entendemos que resuelve la IP del servidor A) sean procesadas por el servidor B.