Aunque WordPress tiene sus guías de seguridad para plugins y themes, con sus propias funciones, muchas veces entre tanto código puedes perderte. Y ahí entra SonarQube.
SonarQube es una herramienta que analiza la calidad del código y su seguridad y que puede ser una herramienta muy útil para mejorar ese plugin que quizá has hecho sin mucho control y que, antes de ponerse en producción, puedes mejorar ligeramente.
SonarQube como tal es una plataforma en la que poder integrar todos los proyectos que quieras y que tiene unos requisitos bastante diferentes a los de WordPress, por lo que es más que recomendable disponer de un sistema completamente independiente de otros.
Ten en cuenta que funciona con Java, PostgreSQL y nginx.
Configuración del Servidor
Para poder instalar y gestionar correctamente SonarQube montaremos una máquina del al menos 1 CPU y 2 GB de RAM, con al menos 10 GB de disco. En este ejemplo usaremos Ubuntu 20.
Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.
Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.
COLABORACIÓN
Comenzaremos con la puesta en hora del servidor.
timedatectl set-timezone 'UTC'
timedatectl set-ntp onY haremos una actualización de todo el servidor.
lsb_release -a
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremovePosteriormente instalaremos algunas herramientas útiles.
apt -y install software-properties-common curl vim zip unzip apt-transport-httpsY finalmente dejaremos el sistema para que aplique actualizaciones de seguridad automáticamente.
apt -y install unattended-upgrades
dpkg-reconfigure -plow unattended-upgradesInstalando Java
Para que funcione necesitaremos Java 11, así que optaremos por OpenJDK.
apt -y install openjdk-11-jdk openjdk-11-jrePodemos comprobar que está instalado para ver su versión.
java -versionQue nos devolverá un mensaje similar a:
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)Instalando PortgreSQL
Descargaremos las claves.
cd
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.listInstalamos PostgreSQL
apt -y update
apt -y install postgresql-12 postgresql-client-12Configuraremos el sistema para que active el servidor cuando se inicie la máquina.
systemctl enable postgresql.service
systemctl restart postgresql.service
systemctl status postgresql.serviceVamos a configurar la contraseña del servicio como root, y crear una base de datos para su uso posterior.
su - postgres
psql -c "alter user postgres with password 'contraseña_de_root'"
psqlY creamos la base de datos, con su usuario y contraseña.
CREATE DATABASE sonarqube;
CREATE USER sonarqube WITH ENCRYPTED PASSWORD 'contraseña_de_sonarqube';
GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;Instalando fuentes
Configuraremos el sistema de fuentes y tipografía para el servicio.
apt -y install fontconfig-config libfreetype6Instalando SonarQube
Visitaremos el sitio web con la lista de descargas y buscaremos el enlace a la última versión. En este caso usaremos la versión 8.8.
cd
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.8.0.42792.zipDescomprimimos el fichero.
unzip sonarqube-8.8.0.42792.zip
rm sonarqube-8.8.0.42792.zipY dejamos el software en la carpeta de uso.
mv ./sonarqube-8.8.0.42792/ /opt/sonarqube/
cd /opt/sonarqube/Allí configuraremos los datos de acceso a la base de datos.
vim /opt/sonarqube/conf/sonar.propertiesY modificamos las líneas de configuración (por defecto están com,entadas).
sonar.jdbc.username=sonarqube
sonar.jdbc.password=contraseña_de_sonarqube
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqubePara acabar crearemos un usuario de ejecución del software.
useradd -M -d /opt/sonarqube/ -r -s /bin/bash sonarqube
chown -R sonarqube: /opt/sonarqubePara ejecutarlo, lo crearemos en modo servicio. De esta forma, cuando se arranque la máquina se ejecutará automáticamente.
vim /etc/systemd/system/sonarqube.serviceEn el fichero incluiremos el arranque del sistema.
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=simple
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/bin/nohup java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar /opt/sonarqube/lib/sonar-application-8.8.0.42792.jar
StandardOutput=syslog
LimitNOFILE=131072
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
IMPORTANTE: deberemos ajustar el fichero de la versión correspondiente al sistema que tengamos en la línea de ExecStart.
ll /opt/sonarqube/lib/Ahí debemos encontrar un fichero llamado sonar-application-8.8.0.42792.jar, que habrá que ajustar según la versión descargada.
Le diremos al sistema que encuentre esta nueva configuración.
systemctl daemon-reloadAntes de lanzarlo modificaremos la configuración del sistema.
echo 'vm.max_map_count=262144' >> /etc/sysctl.confAhora sí, cargaremos el sistema y lo validamos.
systemctl enable --now sonarqube
systemctl status sonarqube.servicePodemos validar que hay ficheros de logs.
ll /opt/sonarqube/logsInstalando nginx
Instalaremos un nginx.
apt -y install nginxY, para un funcionamiento sencillo, lo lanzaremos sin HTTPS (se puede configurar, pero para este ejemplo no sería necesario).
vim /etc/nginx/sites-available/sonarqubeY cargamos la configuración.
server {
  listen 80;
  server_name sonarqube.example.com;
  access_log  /var/log/nginx/sonarqube.access.log;
  error_log   /var/log/nginx/sonarqube.error.log;
  proxy_buffers 16 64k;
  proxy_buffer_size 128k;
  location / {
    proxy_pass  http://127.0.0.1:9000;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_redirect off;
    proxy_set_header    Host            $host;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto http;
  }
}Para evitar problemas, sí que configuraremos de forma algo más óptima el propio nginx.
cd /etc/nginx/
rm nginx.conf
vim nginx.confY le añadiremos nuestra configuración personalizada.
user www-data;
pid /run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 65535;
include /etc/nginx/modules-enabled/*.conf;
events {
  multi_accept on;
  worker_connections 65535;
  use epoll;
}
http {
  charset utf-8;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  server_tokens off;
  more_clear_headers Server;
  log_not_found off;
  types_hash_max_size 2048;
  client_max_body_size 64m;
  keepalive_timeout 10;
  server_names_hash_bucket_size 128;
  server_names_hash_max_size 1024;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  # logging
  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;
  # TLS
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  # gzip
  gzip on;
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 9;
  gzip_disable "msie6";
  gzip_buffers 16 8k;
  gzip_min_length 1100;
  gzip_types application/atom+xml application/javascript application/json application/x-javascript application/xml application/xml+rss image/svg+xml text/css text/javascript text/plain text/xml;
  # more
  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}Validaremos la configuración y reiniciamos nginx.
ln -s /etc/nginx/sites-available/sonarqube /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginxY ya tenemos todo listo para comenzar a funcionar.
Visitaremos la URL de nuestro sitio, http://sonarqube.example.com/, y accederemos, la primera vez, con el usuario admin y contraseña admin.
Creando un proyecto
Aunque no es la intención de este tutorial explicar el funcionamiento de SonarQube y todas sus opciones, sí que haremos un repaso rápido a cómo se puede analizar un plugin.
Lo primero será crear un proyecto. Este nos da unas instrucciones a seguir. En este caso vamos a usar la versión para Linux.

Podemos encontrar la última versión del CLI para descargar. En este caso vamos a usar la versión 4.6 para Linux.
La vamos a descargar y descomprimir.
cd
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip
unzip sonar-scanner-cli-4.6.0.2311-linux.zip
mv sonar-scanner-4.6.0.2311-linux/ sonar-scanner/Accederemos a la carpeta del plugin que queremos analizar y crearemos un fichero de configuración.
cd /webs/example.com/wp-content/plugins/minimal-analytics/
vim sonar-project.propertiesE incorporaremos algunos datos, que vienen de lo que hemos configurado en el panel.
sonar.projectKey=minimal-analytics
sonar.projectName=Minimal Analytics
sonar.projectVersion=1.1.5
sonar.sources=.
sonar.sourceEncoding=UTF-8
sonar.host.url=http://sonarqube.example.com
sonar.login=3eef5cddf118a2dc967e8f8995d4d2bc0c758d2bY ejecutaremos el escáner.
/root/sonar-scanner/bin/sonar-scannerAl finalizar la ejecución podremos volver al panel y veremos los resultados.

Y, a partir de aquí ¡a mejorar tu código y seguridad!
Y, por cierto, si usas Github o alguna herramienta similar, te será muy sencilla la integración.

Sobre este documento
Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.
 
 
