El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

daloradius y sus amigos

| Comments

En un tutorial anterior, examinábamos como funcionaba radius. Mencionábamos que Radius, podría funcional usando MySQL (y otros sql) como backendcore. Finalmente un cliente necesitó una solución de capa completa y he aquí; la prometida expansión del mencionado artículo.

"Así luce daloradius"

Claramente, no basta con que radius sea la mar de versátil, requerimos además; una herramienta lo suficientemente digna de manipular 500 o 1’000 usuarios y esa herramienta es daloradius.

Daloradius es una interfaz web, no solo linda, si no, lo suficientemente funcionar como para sacarle el jugo a freeradius. Permite además, hacer operaciones predefinidas muy buenas para cosas como hotspot, etc… Lo más especial en mi opinión es el sistema de contabilidad. Muy bueno para cuotas.

En fin, instalamos el software necesario.

“instalar las cosas”
1
2
3
 [root@radius ~]# yum update
 [root@radius ~]# yum install -y epel-release
 [root@radius ~]# yum install -y mariadb-server mariadb freeradius freeradius-mysql freeradius-utils

Primero y principioso, hay que configurar el servidor de MySQL, o sea, inicializarlo.

“instalar las cosas”
1
 mysql_secure_installation

Una vez que tenemos el servidor sql listo, procedemos a crear la base de datos.

1
mysql -uroot -p
“creando base de datos”
1
2
CREATE DATABASE radius;
GRANT ALL PRIVILEGES ON radius.* TO radius@localhost IDENTIFIED BY "secreto";

Lamentablemente freeradius no tiene un instalador. Así que hay que llenar la base de datos manualmente.

1
mysql -u root -p radius < /etc/raddb/mods-config/sql/main/mysql/schema.sql

Habilitamos el módulo de SQL para freeradius

1
ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled

Ahora vamos a editar una serie de parámetros de radius. Para ello nos dirigimos al directorio /etc/raddb/ ya que allí hay unos cuantos ficheros que modificaremos.

En el fichero radiusd.conf vamos a hacer unos cuantos cambios así que atentos.

Para empezar, localiza la sesión que carga los módulos, debe quedar así.

1
2
3
modules {
   $INCLUDE mods-enabled/
}

Como habrá notado, la estructura de los directorio de configuración de radius, se de un aire a la de apache en debian. La configuración como tal, se parece más a nginx.

Como vimos, radius es muy modular. Puede usar numerosos backendcores, entre ellos sql. En el fichero sites-available/default modificaremos ciertos parámetros para que TODO funcione contra SQL.

Localizaremos las sesiones, authorize, accounting, session, post-auth, Post-Auth-Type REJECT.

Más o menos el fichero luciría así:

“scope del default”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
authorize {
   ...
   sql
   ...
}

accounting {
   ...
   sql
   ...
}

session {
   ...
   sql
   ...
}

post-auth {
   ...
   sql
   ...
}

Post-Auth-Type REJECT {
   ...
   sql
   ...
}

Ya dijimos que usaremos sql, así que tenemos que configurar la conexión a dicha base de datos. El fichero mods-available/sql contiene dicha configuración. A mi me quedó así:

“sql”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sql {
  
   driver = "rlm_sql_mysql"
  dialect = "mysql"
  server = "localhost"
  port = 3306
  login = "root"
  password = "secreto"

  radius_db = "radius"
  acct_table1 = "radacct"
  acct_table2 = "radacct"
  postauth_table = "radpostauth"
  authcheck_table = "radcheck"
  groupcheck_table = "radgroupcheck"
  authreply_table = "radreply"
  groupreply_table = "radgroupreply"
  usergroup_table = "radusergroup"
  delete_stale_sessions = yes

  pool {
      start = 5
      min = 4
      max = ${thread[pool].max_servers}
      spare = 3
      uses = 0
      lifetime = 0
      idle_timeout = 60
  }

  read_clients = yes
  client_table = "nas"
  $INCLUDE ${modconfdir}/${.:name}/main/${dialect}/queries.conf
}

Finalmente probamos la configuración de radius.

1
 radiusd -X

Ahora la guinda del pastel, el daloradius. Primero instalamos una dependencias requeridas.

1
2
yum install epel-release
yum install php-mysql php php-pear php-gd php-pear-DB

Los clásico, descargar e instalar daloradius.

1
2
3
4
5
 wget http://sourceforge.net/projects/daloradius/files/latest/download?source=files
 tar zxvf download?source=files
 mv daloradius-0.9-9/* /var/www/html/
 chown -R nginx:nginx /var/www/html/
 chmod -R o+rxw /vat/www/html/

En el presente tutorial, asumimos que ya tienes una LEMP instalada…

Otro que no tiene configuración es daloradius, así que debes setear los parámetros manualmente. El fichero de configuración se llama library/daloradius.conf.php. De los parámetros, los que más nos interesan son.

“library/daloradius.conf.php”
1
2
3
4
5
6
7
8
 $configValues['DALORADIUS_VERSION'] = '0.9-9';
 $configValues['FREERADIUS_VERSION'] = '3';
 $configValues['CONFIG_DB_ENGINE'] = 'mysql';
 $configValues['CONFIG_DB_HOST'] = 'localhost';
 $configValues['CONFIG_DB_USER'] = 'radius';
 $configValues['CONFIG_DB_PASS'] = 'secreto';
 $configValues['CONFIG_DB_NAME'] = 'radius';
 ...

Al igual que con freeradius, tenemos que inicializar la base de datos manualmente, ya que como mencioné, daloradius no tiene instalador. Ojo, que la línea es larga.

1
mysql -u root -p radius < /var/www/html/contrib/db/fr2-mysql-daloradius-and-freeradius.sql

El usuario del loguearte la primera vez es administrator y la contraseña radius.

Bueno, ahora puede empezar a crear usuarios…

Puedes configurar el squid para que se autentique mediante radius, la linea del autenticador queda más o menos así:

1
 /usr/lib64/squid/basic_radius_auth -h 127.0.0.1 -w testing123

En este presunto caso, el squid y el radius, están instalados en el mismo servidor. Pero si quieres que otro host se conecte, debes declararlo en el fichero /etc/raddb/clients.conf. De otra forma, todo el que pida autenticación; será deliberadamente denegada. Coloca la configuración encima de la del localhost.

“/etc/raddb/clients.conf”
1
2
3
4
5
6
7
client mi_servidor {
  ipaddr = 192.168.1.10/24
  secret = misecerto
}

client localhost {
   ...

Sucesivamente, puedes tener declarado cuantos host quieras y cada uno tiene parámetros individuales, por ejemplo, al host mi_servidor, se le cambió el secret.

Así sucesivamente puede configurar los AP, le declaramos la autenticación WPA2. Para que tenga una idea, esto sería una configuración de hostapd.

“/etc/hostapd/hostapd.conf”
1
2
3
4
5
6
7
8
9
10
11
12
13
ssid=MiAP
interface=wlp2s0
driver=nl80211
ieee8021x=1
hw_mode=g
channel=9
wpa=2
wpa_key_mgmt=WPA-EAP
rsn_pairwise=CCMP
auth_algs=1
auth_server_addr=127.0.0.1
auth_server_port=1812
auth_server_shared_secret=testing123

Por ejemplo, así quedaría un DDWRT, usando autenticación WPA2 contra radius.

"un ddwrt acoplado a un radius"

Si este artículo te resultó interesante, considere donar 0.06 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz

odoo en centos7

| Comments

Odoo, el sucesor de openerp; un software muy versátil, con funcionalidades para manejar cualquier negocio (ERP). En mi caso; lo uso para manejar facturación y la contabilidad de mi negocio. Recién me vi obligado a reinstalarlo pero resulta que los .deb están mirando pa debian8, por tanto, decidí instalarlo en centos7. Además estoy cada día más peleado con debian.

Como mi laptop no virtualiza, tengo centos7 en un contenedor de LXC. Esto me resulta más confiable que docker, ya que he tenido muy malas experiencias linkando el container de postgres con el de odoo. Eso sin contar que systemd no pincha en un container, al menos no sin levantarlo desde el init y privilegiado; tal como funciona LXC. Claro, hacer un script que corra todo en el container sin necesidad de systemd es una solución; pero el hecho de tener múltiples distros corriendo, me resulta más emocionante que los “contenedores”.

Vamos a necesitar unas cuantas cosas del repo EPEL y un servidor de postgresql operacional.

1
2
3
 yum install -y epel-release
 yum update
 yum install -y postgresql-server

Inicializamos el servidor de postgresql

1
2
3
 postgresql-setup initdb
 systemctl start postgresql
 systemctl enable postgresql

Creamos un repositorio para odoo, a mi me quedó así

“/etc/yum.repos.d/odoo.repo”
1
2
3
4
5
6
 [odoo-nightly]
 name=Odoo Nightly repository
 baseurl=http://nightly.odoo.com/10.0/nightly/rpm/
 enabled=1
 gpgcheck=1
 gpgkey=https://nightly.odoo.com/odoo.key

Ahora vamos a la parte más compleja de la película. Resulta que odoo requiere wkhtmltopdf para funcionar y debe machear la versión de odoo con la versión de wkhtml. Para la 9.0, usaremos wkhtmltopdf 0.12. Según advierten en la guía de instalación de odoo, el paquete de wkhtmltopdf que provee centos, no soporta header y footer, así que te dicen que lo descargues del sitio web oficial. Ahí aparece solo un .tar.gz pero siempre hay un rpm escondido abajo de una piedra:

1
2
yum install -y fontconfig libpng libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi
rpm -Uvh https://downloads.wkhtmltopdf.org/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm

Finalmente, instalamos odoo.

1
2
3
 yum install -y odoo
 systemctl enable odoo
 systemctl start odoo

Si este artículo te resultó interesante, considere donar 0.03 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz

yum estrecho

| Comments

Si en algo me destaco, es en mi habilidad por trabajar con espacios estrechos (poca RAM, poco espacio en disco, etc…)

Cuando tenemos un servidor con CentOS, aveces no queremos más de las mil cosas que una completa instalación involucra. Por ejemplo, las páginas de man en una pila de idiomas, el contenido de /usr/share/doc/, etc… Si bien actualmente uso un script para eliminar todo eso, lo cierto es que sería mucho más fácil si nunca se desplegaran esos archivos.

Gracias a yum-config-manager no hay que estar cargando con el fichero de configuración, simplemente se puede hacer un script que setee dichas configuraciones.

Esta es la secuencia de comando que le tiro en un yum virgen:

1
2
3
4
 yum-config-manager --save --setopt assumeyes=true
 yum-config-manager --save --setopt tsflags=nodocs
 yum-config-manager --save --setopt override_install_langs=en
 yum-config-manager --save --setopt clean_requirements_on_remove

Al correr yum-config-manager puedes ver todas las opciones que este brinda. Lo demás sería buscar la documentación.

Si este artículo te resultó interesante, considere donar 0.08 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz

LEMP en debian

| Comments

Resulta que “linux, apache, mysql y php”, solía llamarse LAMP. Ahora, cuando cambian apache por ningx le llaman LEMP no se por qué (y no quiero averiguarlo, la moda me enferma).

En debian 9, la rima de php con nignx cambia un poquito. No hay que ser un genio para darse cuento que cosas como php5 ahora son php7, pero como para mi este blog es un sitio donde escribo el código para luego copiar y pegar, pondré como hacerlo en el “debian nuevo”.

Vamos a empezar de atrás pa alante; el MySQL

“instalando sql y compañía”
1
 root@299c0ecdbedc:~# apt install mysql-server

Uno de los cabezazos más grandes que me dí con debian 9 fue la configuración del SQL. Ya no es asistido como antes. Así que vamos a correr un par de comandos.

“configurando mysql”
1
2
 root@299c0ecdbedc:~# mysql_install_db
 root@299c0ecdbedc:~# mysql_secure_installation

Al correr el segundo te saldrán unas cuantas preguntas. Respóndelas a tu gusto y necesidad.

Ahora bien, conectar lo que No sea por el socket, se vuelve una jodienda. Por ejemplo root@localhost suele no estar autorizado; si esto se interpreta como 127.0.0.1

Ejecuta: mysql -u root o con -p si seleccionaste tener password.

Veamos por ejemplo, que creamos el usuario admin para la base de datos misdatos.

“creando «admin»”
1
2
3
4
CREATE DATABASE misdatos;
CREATE USER 'admin'@'%' IDENTIFIED BY 'secretisimo';
GRANT ALL PRIVILEGES ON misdatos.* TO 'admin'@'%';
FLUSH PRIVILEGES;

Si quieres saber los usuarios ejecuta la sentencia:

“ver los usuarios”
1
 SELECT User,Host,Password FROM mysql.user;

Bueno ya tenemos el SQL corriendo. Vamos pal resto

“instalando cosas”
1
apt install nginx mysql-client php-fpm php-mysql libfcgi0ldbl

Una vez que se instale php-fpm lo echamos a andar y lo probamos.

“probando fpm”
1
2
3
root@299c0ecdbedc:~# /etc/init.d/php7.0-fpm restart
root@299c0ecdbedc:~# cgi-fcgi -bind -connect /run/php/php7.0-fpm.sock
Content-type: text/html; charset=UTF-8

Al virtualhost de nginx, le hacemos unos arreglitos; para que nginx tire el php por fastcgi. Que ricura debian, tan solo incluyendo un snippet todo se resuelve.

“/etc/nginx/sites-available/default”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {

        listen 80 default_server;

        root /var/www/html;

        index index.php index.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        }
}

Reinicia nginx!

Pa probar que todo está pinchando, creamos un script que llame la función phpinfo()

“phpinfo()”
1
2
3
4
 root@299c0ecdbedc:~# /etc/init.d/nginx restart
 root@299c0ecdbedc:~# /etc/init.d/php7.0-fpm restart
 root@299c0ecdbedc:~# /etc/init.d/mysql restart
 root@299c0ecdbedc:~# echo '<?php phpinfo(); ?>' > /var/www/html/index.php

Debes poder ver la típica página que produce phpinfo()

Para probar la base de datos, creas un script de php que inicialice mysqli:

””
1
2
3
4
5
6
7
8
<?php
$misql = mysqli_connect('127.0.0.1', 'admin', 'ok');
if (!$misql) {
        die('esto no pincha: ' . mysqli_error());
}
echo 'Conexion satisfactoria';
mysqli_close($misql);
?>

Puedes correr ese script con php o llamarlo con el navegador. El resultado es bastante obvio.

Si este artículo te resultó interesante, considere donar 0.06 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz

repos EPEL y demás

| Comments

CentOS, es conocido por sus reducidos repositorios. Pero por suerte, los repos EPEL (enterprise linux) y el IUS nos permiten bandearnos un poco. Además, tenemos el Remi, tan fresco como explosivo, que si bien no es muy recomendable usarlo, nunca está de más tenerlo a mano. Si algo tiene lindo yum es la gestión de repositorios.

Instala wget… vamos a necesitarlo.

Para los criticones: -sí, ya se que el epel está en el repo oficial, pero para este ejemplo lo añadiremos desde la web.

“añadiendo el EPEL”
1
2
 wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
 rpm -Uvh epel-release-latest-7*.rpm

El IUS es majomenos la misma historia

“añadiendo el IUS
1
2
 wget https://centos7.iuscommunity.org/ius-release.rpm
 rpm -Uvh ius-release*.rpm

El repo IUS, suele contener paquetes más recientes de cosas que ya centos trae. La mejor manera de instalar esto, es usando un plugin de yum, llamado «replace», así que instala el paquete yum-plugin-replace.

Ahora busca el paquete que deseeas en el repo IUS:

“buscando en el IUS”
1
 yum --disablerepo="*" --enablerepo="ius" search talcosa

Luego remplaza el paquete talcosa de CentOS, por el talcosa3u de IUS

“remplazando paquete”
1
 yum replace talcosa --replace-with talcosa3u

Para más detalles, échale un vistazo a el user-guide de IUS

El repositorio Remi es aún más peligroso, ya que los paquetes tienen el mismo nombre que el de los oficiales. Se recomienda no tener el repo remi activado NI JUGANDO.

La instalación es la misma rutina

“instalando Remi”
1
2
 wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
 rpm -Uvh remi-release-7*.rpm

Otro repo bueno, es el de alcancelibre, que provee sarg.

“alcancelibre”
1
2
wget -N http://www.alcancelibre.org/al/server/AL-Server.repo \
-O /etc/yum.repos.d/AL-Server.repo

Luego usamos el mismo proceder, buscar en repo específico.

“buscando paquetes”
1
2
yum --enablerepo=remi search fulanito
yum --enablerepo=remi install fulanito

El comando repolist permite ver los repositorios en juego. Para ver los repos que tienes acoplados, usa yum repolist. Si quieres ver que repo tienes deshabilitados, usa yum repolist disabled.

Si este artículo te resultó interesante, considere donar 0.08 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz

knockd en centos

| Comments

Desafortunadamente, los repositorios oficiales de centos no traen port-knocking. No queda más remiendo que usar un repo de terceros.

“/etc/yum.repos.d/nux-misc.repo”
1
2
3
4
5
6
7
 [root@proxy ~]# cat /etc/yum.repos.d/nux-misc.repo
 [nux-misc]
 name=Nux Misc
 baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
 enabled=0
 gpgcheck=1
 gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

Luego para instalar, declaramos dicho repositorio como activo.

1
2
 yum --enablerepo=nux-misc install knock knock-server
 systemctl enable knockd

En mi caso, el /etc/knockd.conf me quedó así:

“/etc/knockd.conf”
1
2
3
4
5
6
7
8
9
10
11
 [options]
   UseSyslog
   Interface = eth1

 [abreme]
   sequence = 111,222,333
   tcpflags = syn
   seq_timeout = 15
   cmd_timeout = 8600
   start_command = /sbin/iptables -I INPUT -s %IP% -j ACCEPT
   stop_command =  /sbin/iptables -D INPUT -s %IP% -j ACCEPT

Nota para imbéciles: Cambia sequence por tu secuencia.

Si este artículo te resultó interesante, considere donar 0.06 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz