El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

LEMP en Centos 7

| Comments

En la entrada anterior, vimos como instalar un LEMP (nginx, mysql y php) en debian. Debian que en mi opinión ya pasó su carnaval y RHEL sigue campeando.

En centos necesitaremos el repo EPEL

“instalando epel”
1
2
 yum install epel-release
 yum makecache fast

Una vez que tenemos acoplado el EPEL, alamos nginx y le decimos a systemd que arranque nginx junto con el sistema.

“instalando nginx”
1
2
3
 yum install nginx
 systemctl enable nginx
 systemctl start nginx

Matao el gallo con nginx. Vamos para mariadb (alias mysql).

“instalando mysql”
1
2
3
4
 yum install mariadb-server mariadb
 systemctl start mariadb
 systemctl enable mariadb
 mysql_secure_installation

No tengo que explicar como funciona el comando mysql_secure_installation; asumo que el lector no es retrasado mental. Configure el MySQL como más cómodo le sea.

Finalmente, la guinda del pastel: PHP. Hay mil y una vertiente de como instalar php en centos. Que si el repo remis, que si el ius, que si la versión tal o la mascual, etc… En este caso asumiremos que se está instalando el php genérico y no discutiremos nimiedades.

“php genérico”
1
 yum install php php-mysql php-fpm

Antes de echarlo a andar, vamos a hacer unos cambios. En el fichero /etc/php.ini buscamos una linea que dice cgi.fix_pathinfo y le ponemos como valor 0.

“/etc/php.ini”
1
 cgi.fix_pathinfo=0

A php-fpm también le vamos a dar unos toques finos. Localiza el fichero /etc/php-fpm.d/www.conf y el parámetro listen

“/etc/php-fpm.d/www.conf”
1
 listen = /var/run/php-fpm/php-fpm.sock

Además, localiza también ahí, las lineas listen.. Asegúrate de que corran como el usuario nobody.

“/etc/php-fpm.d/www.conf”
1
2
 listen.owner = nobody
 listen.group = nobody

Pero eso era el suid de fpm, ahora vamos a setear el usuario del socket, que en este caso será nginx.

“/etc/php-fpm.d/www.conf”
1
2
 user  = nginx
 group = nginx

Arranca y habilita fpm.

“arranca fpm”
1
2
 systemctl enable php-fpm
 systemctl start  php-fpm

Siempre falta un puto “.conf” de nginx que pinche con php, así que aquí te pongo uno bien genérico.

“nginx.conf”
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
   # redirector estático
   server {

         listen       80;
         server_name  fqdn_del_virtualhost;

         location / {
            return 301 https://$server_name$request_uri;
         }

   }


   server {

      # el directorio /etc/nginx/ssl/ contine los certificados
      ssl_certificate      ssl/certificado.crt;
      ssl_certificate_key  ssl/certificado.key;
      ssl_session_cache    shared:SSL:1m;
      ssl_session_timeout  5m;
      ssl_ciphers  HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers  on;

      # como me llamo y por donde escucho
      listen       443 ssl;
      server_name  fqdn_del_virtualhost;

      # aquí pones el directorio donde está tu app
      root   /var/www/html;
      index index.php index.html index.htm;

      # el root del servidor
      location / {
          try_files $uri $uri/ =404;
      }


      # los errores 404
      error_page 404 /404.html;
      error_page 500 502 503 504 /50x.html;
      location = /50x.html {
          root /usr/share/nginx/html;
      }
      
      # el fpm de php, la expresión regular suele dar perreta por el $
      location ~ \.php$ {
           try_files $uri =404;
           fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;
      }

   }

Si quieres probarlo crea el fichero /var/www/html/index.php con algo clásico.

“/var/www/html/index.php”
1
 <?php phpinfo(); ?>

Si te da un error que dice “not input file especified” puede ser rollo con selinux o algo mal configurado en php fpm.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

LEMP en debian 9

| 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.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

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.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

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.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

Apps islámicas android

| Comments

Si queremos decir una aplicación islámica de android bien completa, la que más se acerca es sin duda es “MuslimPro”. Por tener, tiene hasta los 99 nombres de dios, recitados con un corito de lo más lindo. Sin embargo, cosas sensillas como cambiar el adhan, se vuelven complicadas. Si no te cuadran los 3 adhan que trae, te jodiste, por que lo más bonitos son para la versión de pago.

"portada de Muslim Daily, note como falta la sesión de noticias"

En mi opinión, el adhan debe sonar más enérgico de día, pero el adhan de Isha’a, lo prefiero pasivo. Por ello, recomiendo más usar Muslim Daily. Antes contaba con una sesión de noticias muy interesante, que se adaptaba a tu gusto como por arte de magia. No se por qué se la quitaron. También tiene la Qibla y un calendario islámico bastante poco funcional por cierto; me costó trabajo entender como conmutar las fechas.

Entre los 9 adhan que ofrece, tenemos el Adhan Nasse Al Qatmi muy apropiado para Isha’a, suena bastante sereno.

El corán que esta aplicación provee en español es la traducción de Cortés; una gran porquería en mi opinión. Pero de igual, si de coranes se trata, prefiero El noble corán Este cuenta con una buena gama de recitaciones en audio para todos los gustos. Además, el texto en los tres idiomas.

"«la apuertura» mostrando texto arábico, transliteración y traducción"

Recuerda, que mientras la app esté mostrando el texto en árabe, será entonces entonces un corán (no una traducción) y debes tener en cuenta el respeto que esto amerita; así que nada de leer en el baño. También tiene gestor de aleyas favoritas y permite añadirle notas.

"transcripción a alfabeto de chat"

Pero lo que más me gusta es que tiene una transliteración escrita fonéticamente con árabe de chat.

Por si no lo sabes, esta es una manera de leer árabe con alfabeto latino. Es la mejor transliteración, ya que fue creada por los árabes de manera espontanea. En vez de valerse de dígrafos para representar las consonantes; usan simplemente números. Por ejemplo, ayn (ع) es el 3 y la ha gutural (ح) con el 7. Además, las vocales entre paréntesis, representan las vocales casi inaudibles que acompañan de manera implícita a una consonante, como la «i» de la mim (م).

Por último, una aplicación de plegarias. Nada mal para afinar la fonética; la aplicación 34 Duaas.

Conclusión, el corán transliterado con árabe de chat de com.chaks.quran, es un batazo y los adhanes de com.honey.prayerassistant son más variados.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

squid y navegar a .cu

| Comments

Aveces las necesidades de nuestros clientes, son tan raras que nos dejan anonadados. Pero ante necesidades extravagantes; soluciones extravagantes. Este post me lo dejo a modo de reflexión, para recordar; que muchas veces, el ingenio combinado con la simpleza, puede desembocar en soluciones tan hermosas como raras.

Es común, que en algunos lugares, la navegación a sitios “.cu” no requiera autenticación. Aveces poner una ACL como esta

“squid.conf”
1
2
 acl cuba url_regex \.cu
 http_access allow cuba

Aparentemente matamos la jugada, pero luego, metemos una ACL relacionada con usuarios autenticados y se jodió bicicleta.

El cartel de “por favor autentique” cae a cuanto “.cu” se navegue.

Pero tocando el squid.conf, vi esta cosa hermosa

“squid.conf”
1
 #   acl aclname localport 3128  # TCP port the client connected to [fast]

Decidí que los que vallan a navegar con autenticación, usarán el puerto 8080 y los vuelos nacionales saldrán por el 3128.

De esta manera, se hace una ACL que niegue las peticiones NO cubanas sin mostrar el puto login.

“squid.conf”
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
 # aquellos que se conectan por el puerto 3128
 acl mortales localport 3128

 # aquellos que se conectan por el 8080
 acl olimpo localport 8080

 # los sitios a los que se entran sin contraseña
 acl cuba url_regex -i "/etc/squid3/cuba.lst"

 # CUBANOS
 # lo que valla a cuba,
 # sale sin autenticación
 http_access allow mortales cuba
 http_access allow CONNECT mortales cuba

 # deniega a los mortales, lo que no sea cuba
 http_access deny mortales !cuba
 http_access deny CONNECT mortales !cuba


 # PRIVILEGIADOS
 # lo que NO valla para cuba debe autenticarse
 http_access allow CONNECT olimpo autenticados
 http_access allow olimpo autenticados

 # y más nada pasa
 http_access deny CONNECT all
 http_access deny all
 icp_access deny all

¿Se entendió? Pasa que squid, al hacerle cualquier petición, que involucre internet, le mostrará al pobre puntoseunauta el cuadro de diálogo, ya que para acceder a internet real requiere autenticación; y squid te da la posibilidad probar que eres usuario de internet. Para evitar esta conducta, ponemos una cláusula permitiendo que los “.cu” usando el 3128, pasan. Luego ponemos otra ACL negando el acceso a lo que NO sea .cu por el mismo puerto. De esta manera, los que tengan solo acceso “.cu”, usarán el 3128 y la ACL que involucra autenticación nunca es probada.

Para los autenticados, pusimos una ACL que machea el puerto 8080. O sea, los usuarios de internet, al hacer su peticiones por el puerto 8080, enseguida las pedirá autenticación.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ