| L | M | X | J | V | S | D |
|---|---|---|---|---|---|---|
| 27 | 28 | 29 | 30 | 31 | 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 | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
CITM (Cointel In The Middle) es un servidor Linux que centraliza aspectos del mantenimiento de sistemas AlphaCom/ICX, CAST (Cointel ASTerisk), el nuevo ConnectPro y las estaciones Zenitel aisladas en modo SIP/Pulse/EDGE.
HERMES es la aplicación Java que muestra toda la información de registro y estado, permite gestionar la configuración y que puede estar en el mismo equipo CITM o en un cliente remoto (Windows/Linux).
HERMES está formado por dos partes:
Además, se podrá usar la web del servidor CITM para, al menos, consultar el estado y los registros de llamadas.
Para comenzar el desarrollo, creamos una máquina virtual con la que documentar todo el proceso. Dicha máquina tendrá entorno gráfico para poder ejecutar incluso desde ella misma el HERMES.
Volver al índiceLa creamos en Megalosaurus y vamos a darle un poco de vida respecto a las que solemos crear: 2 núcleos y 4GB de RAM con 128MG de vídeo de momento:
VBoxManage createvm --name Ubuntu_22_04_1_Base --ostype Ubuntu_64 --register VBoxManage modifyvm Ubuntu_22_04_1_Base --memory 4096 VBoxManage modifyvm Ubuntu_22_04_1_Base --vram 128 VBoxManage modifyvm Ubuntu_22_04_1_Base --cpus 2 VBoxManage modifyvm Ubuntu_22_04_1_Base --graphicscontroller vmsvga VBoxManage modifyvm Ubuntu_22_04_1_Base --vrde on VBoxManage modifyvm Ubuntu_22_04_1_Base --vrdemulticon on VBoxManage modifyvm Ubuntu_22_04_1_Base --vrdeport 33151 VBoxManage modifyvm Ubuntu_22_04_1_Base --nic1 bridged VBoxManage modifyvm Ubuntu_22_04_1_Base --bridgeadapter1 eno8403 VBoxManage modifyvm Ubuntu_22_04_1_Base --cableconnected1 on VBoxManage createhd --filename /home/vbox/VirtualBox\ VMs/Ubuntu_22_04_1_Base/Ubuntu_22_04_1_Base.vdi --format VDI --size 150000 --variant Standard VBoxManage storagectl Ubuntu_22_04_1_Base --name "SATA" --add sata --controller IntelAhci VBoxManage storageattach Ubuntu_22_04_1_Base --storagectl "SATA" --port 0 --device 0 --type hdd --medium /home/vbox/VirtualBox\ VMs/Ubuntu_22_04_1_Base/Ubuntu_22_04_1_Base.vdi VBoxManage storageattach Ubuntu_22_04_1_Base --storagectl "SATA" --port 1 --device 0 --type dvddrive --medium /home/vbox/ubuntu-22.04.1-live-server-amd64.iso
VBoxManage showvminfo Ubuntu_22_04_1_Base
VBoxHeadless --startvm Ubuntu_22_04_1_Base &Volver al índice
Al arrancar la máquina elegimos Try or Install...:
Tras alrededor de un minuto, cuando termina de cargar lo necesario, eleccionamos español:
Actualizamos el instalador:
Elegimos español como idioma de la distribución del teclado:
Elegimos la opción de servidor normal con software de terceros:
Dejamos unos segundos para que DHCP haga su trabajo:
Dejamos la configuración de proxy por defecto:
Dejamos la opción de mirror or defecto:
Usamos todo el disco, sin LVM ni cifrado (el cifrado sería interesante por seguridad, pero en las pruebas resulta que pide la clave cada vez que arrancas la máquina):
Cuando muestre el resumen de configuración de disco pulsamos Done:
Confirmamos que queremos destruir los datos del disco:
Damos nombre al servidor y configuramos el usuario inicial. Tendremos en cuenta que va a incluir un servidor Asterisk para pruebas, por lo que usaremos ese usuario inicialmente:
Imprescindible instalar el servidor de SSH:
Continuamos cuando nos muestre que no encuentra nada de terceros para instalar:
No elegimos ningún extra:
Esperamos mientras de termina la instalación:
Cuando termina la instalación, reiniciamos la máquina:
No hay que preocuparse al retirar la imagen de Ubuntu: Sólo hay que pulsar Enter y se expulsa automáticamente.
sudo apt update -y sudo apt upgrade -y
El sistema nos pedirá reiniciar algunos servicios que están usando librerías viejas:
Reiniciamos el sistema para asegurar de que se tienen en cuenta los cambios:
sudo shutdown -r now
sudo apt install mc vim wget htop openssh-server -y sudo apt -y install sqlite3
El sistema nos pedirá reiniciar algunos servicios que están usando librerías viejas (si no hemos hecho un reset del sistema antes, sobre todo):
Por defecto, vim usa un color malísimo para los comentarios.
Para el usuario actual:
echo "highlight Comment ctermfg=Green" >> ~/.vimrc
Lo hacemos también para el root:
echo "highlight Comment ctermfg=Green" | sudo tee /root/.vimrc
Por defecto, aunque el primer usuario que se crea tiene Bash como shell, todos los demás que se creen usarán sh, cosa que no queremos:
sudo cp /etc/default/useradd /etc/default/useradd.bk echo "SHELL=/bin/bash" | sudo tee /etc/default/useradd
Por defecto, el sistema se instala con zona horaria UTC:
sudo unlink /etc/localtime sudo ln -s /usr/share/zoneinfo/Europe/Madrid /etc/localtime timedatectl
De momento no vamos a tocar el firewall, que viene desactivado por defecto:
usuariopbx@citm1:~$ sudo ufw status [sudo] password for usuariopbx: Status: inactiveVolver al índice
sudo apt update sudo apt upgrade sudo apt install mysql-server sudo mysql_secure_installation
En versiones modernas de Ubuntu (20 o mayor), al tratar de introducir la nueva clave, nos muestra un error:
usuariopbx@citm1:~$ sudo mysql_secure_installation Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: n Please set the password for root here. New password: Re-enter new password: ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters. New password:
Para solucionarlo, abrimos una nueva terminal ssh SIN CERRAR la actual, y en ella:
sudo mysql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'cn79drpqfm'; flush privileges;
Escribir exit un par de veces para salir y seguir con la ventana original introduciendo de nuevo la clave.
Volver al índiceODBC es un estándar que permite intermediar (y por tanto simplificar y aislar) entre cualquier aplicación cliente compatible con ODBC y un sistema de base de datos compatible con ODBC como MySQL, Postgress...
Existe un derivado específico para Java: JDBC.
En nuestro caso, necesitamos OBDC para conectar Asterisk con MySQL.
sudo apt update -y sudo apt upgrade -y wget https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit.tar.gz tar xvf mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit.tar.gz cd mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit/ sudo cp bin/* /usr/local/bin sudo cp -R lib/* /usr/local/lib sudo chmod 777 /usr/local/lib/libmy* sudo apt -y install libodbc1 sudo apt -y install odbcinst1debian2 sudo myodbc-installer -a -d -n "MySQL ODBC 8.0 Driver" -t "Driver=/usr/local/lib/libmyodbc8w.so" sudo myodbc-installer -a -d -n "MySQL ODBC 8.0" -t "Driver=/usr/local/lib/libmyodbc8a.so" cd rm -R mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit/ rm -f mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit.tar.gz
La instalación de ODBC nos tiene que dejar el siguiente contenido en /etc/odbcinst.ini (que originalmente está vacío):
[MySQL ODBC 8.0 Driver] Driver=/usr/local/lib/libmyodbc8w.so UsageCount=1 [MySQL ODBC 8.0] Driver=/usr/local/lib/libmyodbc8a.so UsageCount=1
Conviene instalar las utilidades básicas de ODBC:
sudo apt -y install unixodbcVolver al índice
sudo apt update -y sudo apt upgrade -y sudo apt -y install ntp # Modificar al gusto el /etc/ntp.conf sudo systemctl enable ntp sudo systemctl start ntp
Ntpdate es una utilidad cliente NTP de consola para sincronizar la hora local de un host con la hora global en un servidor NTP.
sudo apt -y install ntpdate
Podemos comprobar si NTP está funcionando:
usuariopbx@citm1:~$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 +0.000 0.000
1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 +0.000 0.000
2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 +0.000 0.000
3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 +0.000 0.000
ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 +0.000 0.000
+time.cloudflare 10.40.9.47 3 u 51 64 1 10.849 +14.103 2.518
-89.140.186.3 (d 193.203.3.170 2 u 54 64 1 31.973 +14.369 1.197
-185.90.148.209 150.214.94.10 2 u 54 64 1 38.103 +12.137 1.179
-ntp68.kashra-se 90.187.112.137 2 u 49 64 1 40.528 +9.032 3.013
...
Recordar que deberemos tener el puerto UDP/123 abierto en el Firewall si lo tenemos activo.
Volver al índicesudo apt update -y sudo apt upgrade -y sudo apt -y install apache2 sudo systemctl enable apache2 sudo systemctl start apache2 sudo systemctl status apache2 sudo apt -y install php libapache2-mod-php sudo apt -y install php-mysql sudo apt -y install php-gd php-opcache php-mbstring php-xml php-intl php-gettext sudo systemctl restart apache2 sudo apt install -y phpmyadmin # necesita intervención del usuario y pongo misma clave que root de MySQL
Ojo: Protesta porque no encuentra el php-gettext
Más adelante prepararemos los certificados y la configuración para poder trabajar por HTTPS(443) en lugar de HTTP(80).
Volver al índicesudo apt -y update && sudo apt -y upgrade # Este paso lo dimos en las utilidades básicas: sudo apt -y install sqlite3 sqlite3 --version 3.37.2 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5dalt1 # El cliente para ver las bases de datos SQLite: # (es un cliente gráfico) sudo apt -y install sqlitebrowser
Para que podamos usar SQLite con el stack LAMP que tenemos preparado:
sudo apt -y install php-sqlite3 sudo systemctl restart apache2
Una página con phpinfo() en el servidor debería mostrar si se ha integrado correctamente:
sudo cp /var/www/html/index.html /var/www/html/index_old.html sudo mv /var/www/html/index.html /var/www/html/index.php sudo vim /var/www/html/index.php
Y dejar como contenido en el fichero:
Debería aparecer una sección sobre pdo_sqlite (en principio, la única manera de funcionar con PHP y SQLite es usar PDOs).
Volver al índicesudo apt update -y sudo apt upgrade -y sudo apt -y install tftpd-hpa sudo vim /etc/default/tftpd-hpa sudo systemctl enable tftpd-hpa sudo systemctl start tftpd-hpa sudo systemctl status tftpd-hpa sudo apt -y install tftp-hpa
Contenido de /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure"Volver al índice
sudo apt update -y sudo apt upgrade -y sudo apt -y install isc-dhcp-server sudo vim /etc/dhcp/dhcpd.conf sudo systemctl enable isc-dhcp-server sudo systemctl start isc-dhcp-server # Una vez comprobado que funciona correctamente, LO DEJAMOS APAGADO: sudo systemctl status isc-dhcp-server sudo systemctl disable isc-dhcp-server sudo systemctl stop isc-dhcp-server
Contenido (orientativo para provisioning) de /etc/dhcp/dhcpd.conf:
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
option tftp66 code 66 = string;
subnet 192.168.4.0 netmask 255.255.255.0 {
range 192.168.4.80 192.168.4.89;
option tftp66 "192.168.4.101";
option routers 192.168.4.33;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
host hostconipespecifica {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address 192.168.4.91;
}
Volver al índice
Conviene actualizar y hacer hecho un reinicio del sistema para tener todo en condiciones:
sudo apt update -y sudo apt upgrade -y sudo shutdown -r now
sudo apt -y install git curl wget subversion build-essential autoconf sudo apt -y install libnewt-dev libssl-dev libncurses5-dev libsqlite3-dev libjansson-dev libxml2-dev uuid-dev libedit-dev unixodbc-dev sudo apt install libcurl4-openssl-devVolver al índice
La línea de comandos es muy flexible, pero muy árida de manipular. Por ello, puede ser conveniente definir unos alias más cortos que permitan algo más de comodidad.
Para que los alias persistan en los reinicios, los meteremos en el fichero ~/.bash_aliases (que es leído por .bashrc cuando se inicia la sesión del usuario y, por tanto, habrá que crearlos para cada usuario).
alias quepasa="ps -efly | grep -i " alias dir="ls -la " alias cast="asterisk -rvvv"
Los cambios no tendrán efecto hasta que se reinicie la sesión o hasta que se recargue el .bashrc en una existente:
source ~/.bashrcVolver al índice
La última versión LTS de Asterisk a fecha de esta instalación es la 20.0.1.
cd mkdir -p /home/usuariopbx/src/asterisk cd /home/usuariopbx/src/asterisk/ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz tar -zxvf asterisk-20-current.tar.gz cd asterisk-20.0.1/ #Sólo para probar, añadimos la codificación MP3: contrib/scripts/get_mp3_source.sh # Y esto no había visto antes (muy recomendable): sudo contrib/scripts/install_prereq install sudo ./configure # Seleccionar todo lo seleccionable. sudo make menuselect # Ojo: channel drivers- chan_sip viene como deprecated: marcarlo para tenerlo disponible # Ojo: Compiler Flags- BUILD_NATIVE desactivado en las virtuales sudo make full sudo make install sudo make config sudo make samples sudo ldconfig
sudo usermod -aG audio,dialout usuariopbx
sudo chown -R usuariopbx:usuariopbx /etc/asterisk
sudo chown -R usuariopbx:usuariopbx /usr/lib/asterisk/
# Por algún motivo, tengo que repetir este más adelante: CHEK THIS !
sudo chown -R usuariopbx:usuariopbx /var/{lib,log,spool,run}/asterisk
sudo systemctl enable asterisk sudo systemctl start asterisk sudo systemctl status asteriskVolver al índice
En caso de querer usar MySQL desde Asterisk, creamos una BBDD y unos usuarios:
mysql -u root -p CREATE DATABASE asterisk; CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'euadmye83c'; CREATE USER 'asterisk'@'127.0.0.1' IDENTIFIED BY 'euadmye83c'; GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost'; GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'127.0.0.1'; flush privileges; exit
Con el usuario creado, preparamos la conexión ODBC. Creamos el fichero /etc/odbc.ini:
[conexion-asterisk] Description =Conexión MySQL con Asterisk Driver =MySQL ODBC 8.0 Driver Database =asterisk Server =localhost Port =3306 User =asterisk Password =euadmye83c
Podemos probar si la conexión funciona:
isql conexion-asterisk +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select 1 +---------------------+ | 1 | +---------------------+ | 1 | +---------------------+ SQLRowCount returns 1 1 rows fetched SQL> quitVolver al índice
El entorno gráfico por defecto es gnome.
sudo apt update -y sudo apt upgrade -y
Por defecto, ubuntu-desktop es un alias para el escritorio Gnome (paciencia que tarda un rato en instalar todo):
sudo apt -y install ubuntu-desktop sudo shutdown -r now
En la máquina virtual no arranca y se queda con un cursor fijo arriba a la izquierda...
La mejor solución es modificar el driver que usa la máquina:
VBoxManage modifyvm Ubuntu_22_04_1_Base --graphicscontroller vmsvga
Para evitar que el sistema arranque en modo gráfico:
sudo systemctl set-default multi-user sudo shutdown -r now
Para arrancar el escritorio:
sudo systemctl start gdm3
Para volver a activar el arranque en modo gráfico:
sudo systemctl set-default graphical
Firefox no está instalado por defecto:
sudo apt -y install firefox
Tras la instalación, el entorno gráfico nos aparece en inglés. Vamos a cambiarlo a español (sobre todo de cara a posibles clientes).
Settings, Region & Languaje, Manage Installed Languages, Idiomas, Instalar o Eliminar Idiomas, Elegir Spanish, Apply, confirmar la clave, Aplicar a todo el sistema, confirmar la clave, esperar un ratillo (muy largo, como que reinicio sin más al de 15 minutos).
Al loro con el cambio de idioma: Luego decirle que sí cuando pregunte por cambiar el nombre de las carpetas.
Editar el /ect/default/locale y cambiar las primeras líneas:
LANG="es_ES.UTF-8" LANGUAGE="es" LC_NUMERIC="es_ES.UTF-8" LC_TIME="es_ES.UTF-8" LC_MONETARY="es_ES.UTF-8" LC_PAPER="es_ES.UTF-8" LC_IDENTIFICATION="es_ES.UTF-8" LC_NAME="es_ES.UTF-8" LC_ADDRESS="es_ES.UTF-8" LC_TELEPHONE="es_ES.UTF-8" LC_MEASUREMENT="es_ES.UTF-8"
También es conveniente regenerar los locales:
sudo locale-gen --purgeVolver al índice
Desde la versión 11, OpenJDK y OracleJDK son lo mismo desde el punto de vista de la funcionalidad, con la única diferencia de la licencia.
Vamos a instalar OracleJDK 11.
Por defecto no hay Java instalado en la máquina que estamos usando de pruebas.
El acuerdo de licencia de Oracle no permite la instalación directa del JDK usando gestor de paquetes. Hay que crear una cuenta Oracle y descargar el JDK manualmente para añadir un repositorio de paquetes nuevo para la versión que queramos usar. Entonces se puede usar apt desde un script de instalación de terceros.
La versión de Oracle JDK que hay que descargar tiene que coincidir con la del script instalador.
Para el repositorio que vamos a usar, podemos ver la versión en este enlace. NO ES NECESARIO DESCARGAR EL INSTALADOR: Se toma del repositorio.
sudo apt update -y sudo apt upgrade -y
# Importar la clave de firmado para verificar el nuevo software (paciencia que tarda): sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/oracle-jdk11-installer.gpg --keyserver keyserver.ubuntu.com --recv-keys EA8CACC073C3DB2A # Añadir el repositorio a la lista de fuentes de paquetes: echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-jdk11-installer.gpg] https://ppa.launchpadcontent.net/linuxuprising/java/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/oracle-jdk11-installer.list > /dev/null # Recargar la base de datos de paquetes disponibles: sudo apt update Obj:1 http://es.archive.ubuntu.com/ubuntu jammy InRelease Des:2 http://es.archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB] Des:3 http://es.archive.ubuntu.com/ubuntu jammy-backports InRelease [99,8 kB] Des:4 http://es.archive.ubuntu.com/ubuntu jammy-security InRelease [110 kB] Des:5 https://ppa.launchpadcontent.net/linuxuprising/java/ubuntu jammy InRelease [18,1 kB] Des:6 http://es.archive.ubuntu.com/ubuntu jammy-updates/main amd64 DEP-11 Metadata [95,0 kB] Des:7 http://es.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 DEP-11 Metadata [257 kB] Des:8 http://es.archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 DEP-11 Metadata [940 B] Des:9 http://es.archive.ubuntu.com/ubuntu jammy-backports/universe amd64 DEP-11 Metadata [11,6 kB] Des:10 http://es.archive.ubuntu.com/ubuntu jammy-security/main amd64 DEP-11 Metadata [20,1 kB] Des:11 http://es.archive.ubuntu.com/ubuntu jammy-security/universe amd64 DEP-11 Metadata [13,2 kB] Des:12 https://ppa.launchpadcontent.net/linuxuprising/java/ubuntu jammy/main amd64 Packages [1.932 B] Des:13 https://ppa.launchpadcontent.net/linuxuprising/java/ubuntu jammy/main Translation-en [692 B] Descargados 743 kB en 1s (734 kB/s) Leyendo lista de paquetes... Hecho Creando árbol de dependencias... Hecho Leyendo la información de estado... Hecho
Descargamos del sitio de Oracle el pack de instalación (jdk-11.0.13_linux-x64_bin.tar.gz) previa introducción de los datos de la cuenta Oracle. Lo subimos al servidor con WinSCP o similar.
# El script instalador busca el pack en este directorio: sudo mkdir -p /var/cache/oracle-jdk11-installer-local/ # Si tenemos el pack en home: sudo cp jdk-11.0.13_linux-x64_bin.tar.gz /var/cache/oracle-jdk11-installer-local/ # Por fin la instalación en sí misma: sudo apt install oracle-java11-installer-local # OK y Yes para aceptar el acuerdo de licencia. java -version java version "11.0.13" 2021-10-19 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.13+10-LTS-370) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.13+10-LTS-370, mixed mode)
Si tenemos problemas al instalar (la versión que descargamos no coincide con el instalador del repositorio, descargamos el nuevo paquete y eliminamos los restos de la instalación anterior:
sudo apt remove oracle-java11-installer-local
A continuación, copiamos en su sitio el pack y volvemos a tratar de instalar.
En caso de tener varias instalaciones de Java, podemos elegir cuál es la que se va a usar por defecto:
sudo update-alternatives --config java Existe 1 opción para la alternativa java (que provee /usr/bin/java). Selección Ruta Prioridad Estado ------------------------------------------------------------ 0 /usr/lib/jvm/java-11-oracle/bin/java 1091 modo automático * 1 /usr/lib/jvm/java-11-oracle/bin/java 1091 modo manual Pulse <Intro> para mantener el valor por omisión [*] o pulse un número de selección:
Conviene preparar la variable de entorno JAVA_HOME que usan algunas aplicaciones (este cambio afecta a todos los usuarios):
# Fijarse en la ruta de los archivos de la versión preferida de # Java del punto anterior (/usr/lib/jvm/java-11-oracle/bin/java) # y añadirlo JAVA_HOME="/usr/lib/jvm/java-11-oracle" al fichero: sudo vim /etc/environment # Recargar o salir y entrar de la sesión: source /etc/environment
En principio, Ubuntu no sabe cómo ejecutar un jar cuando se hace doble click sobre él en el escritorio.
La mejor opción es hacer click con el botón derecho, Properties, Open With y seleccionar Oracle Java 11 Runtime, Set as default.
Con eso ya podemos hacer doble click sobre los ejecutables.
Volver al índiceVamos a crear una configuración específica para poder conectarnos a:
Con la Aparición de 18.04 Bionic Beaber, Ubuntu introduce una nueva manera de gestionar la configuración de red, llamada Netplan.
a idea subyacente de Netplan es que funciona como un frontend en el que creamos una configuración que es totalmente independiente del sistema de configuración de red usado en el sistema (backend).
A día de hoy, el backend puede ser basado en systemd-networkd (Ubuntu lo usa en la instalación server) o en NetworkManager (Usado por Ubuntu en su modo Desktop).
Network Manager se emplea en los modos de escritorio porque es la manera de hacer que la red sea un sistema completamente transparente para el usuario: cuando te conectas por cable, la WiFi se desconecta automáticamente. Cuando el cable es desconectado, la WiFi se conecta de manera automáticamente. El resultado es que el usuario tiene siempre conectividad, independientemente del medio usado y sin tener que intervenir de ninguna manera.
La configuración Netplan está en una serie de ficheros *.yaml dentro de /etc/netplan.
Netplan toma esos ficheros y crea automáticamente otros adecuados para la configuración del backend.
Nota: es necesario prestar atención a la indexación del contenido de los ficheros de configuración de Netplan. Hay que usar espacios en blanco, no tabuladores, por cierto.
Comprobamos el nombre de la interfaz:
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:30:ad:dd brd ff:ff:ff:ff:ff:ff
inet 172.29.15.112/20 metric 100 brd 172.29.15.255 scope global dynamic enp0s3
valid_lft 27809sec preferred_lft 27809sec
inet6 fdfb:4935:bfc4::a7a/128 scope global dynamic noprefixroute
valid_lft 25677sec preferred_lft 25677sec
inet6 fdfb:4935:bfc4:0:a00:27ff:fe30:addd/64 scope global mngtmpaddr noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe30:addd/64 scope link
valid_lft forever preferred_lft forever
Por defecto, la instalación de Ubuntu crea un fichero /etc/netplan/00-installer-config.yaml:
# This is the network config written by 'subiquity'
network:
ethernets:
enp0s3:
dhcp4: true
version: 2
Modificación para conexión básica a la red de la oficina:
network:
ethernets:
enp0s3:
cdhcp4: no
addresses:
- 172.29.8.158/20
# Se considera que gatewaty4 esta obsoleto:
#gateway4: 172.29.0.1
# Usar routes en su lugar
routes:
- to: default
via: 172.29.0.1
metric: 100
nameservers:
addresses: [8.8.8.8,8.8.4.4]
dhcp6: false
version: 2
Comprobamos si la configuración es buena (el sistema pone en marcha la nueva configuración, mostrando los mensajes de lo que pueda dar problemas, y si hay problemas vuelve el solo a la configuración anterior):
sudo netplan --debug apply
Podemos desactivar completamente y de manera permanente las opciones de IPv6 si no las vamos a usar. Editamos (sudo) /etc/default/grub y dejamos la línea:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
Ponemos en marcha los cambios para el siguiente reinicio:
sudo update-grub
Es un paquete de Ubuntu, instalado por defecto en Ubuntu Server, que permite la inicialización temprana de una instancia de red de Ubuntu.
En nuestro caso no lo usamos, por lo que vamos a evitar que funcione para no tener problemas de retrasos al arrancar la máquina.
sudo touch /etc/cloud/cloud-init.disabled
En el siguiente reinicio nos habremos librado de él.
Definir varias direcciones IP para una misma interfaz es muy sencillo. En el archivo yaml, añadimos las direcciones:
network:
ethernets:
enp0s3:
dhcp4: no
addresses:
- 172.29.8.158/20
- 10.20.85.158/21
- 11.20.85.158/21
routes:
- to: default
via: 172.29.0.1
metric: 100
nameservers:
addresses: [8.8.8.8,8.8.4.4]
dhcp6: false
version: 2
El comando ip route muestra las rutas configuradas actualmente (en este caso para las dos IP del apartado anterior):
ip route default via 172.29.0.1 dev enp0s3 proto static metric 100 11.20.80.0/21 dev enp0s3 proto kernel scope link src 11.20.85.158 172.29.0.0/20 dev enp0s3 proto kernel scope link src 172.29.8.158
Para añadir una ruta estática modificamos el fichero yaml y añadimos los elementos. Podemos jugar con la métrica de los enrutamientos: Menor metric = mayor prioridad:
network:
ethernets:
enp0s3:
dhcp4: no
addresses:
- 172.29.8.158/20
routes:
- to: default
via: 172.29.0.1
metric: 100
- to: 11.126.96.0/20
via: 172.29.1.101
metric: 200
nameservers:
addresses: [8.8.8.8,8.8.4.4]
dhcp6: false
version: 2
Es posible instalar el FortiClient (el cliente de VPN de los productos FortiGate).
Es necesario instalar varias dependencias (depende del caso concreto, pero en este ejemplo hablamos de un Ubuntu...):
sudo apt update sudo apt install libappindicator1 sudo apt install libgconf-2-4
Descargamos el paquete de la web oficial.
Y lo instalamos:
sudo dpkg -i forticlient_vpn_7.0.7.0246_amd64.deb
De cara a la ejecución, no encuentro opción de línea de comandos por lo que hay que buscarlo en el lanzador de aplicaciones.
Notas finales: También es posible hacer bridging entre interfaces...
Volver al índiceLa instalación por defecto del servidor Apache2 permite el acceso por el puerto 80 (no seguro) al sistema.
Por defecto hay una página de muestra en /var/www/html/index.html que muestra dónde están los ficheros por defecto de configuración, manuales, etc.
(Todos los ficheros de configuración son propiedad de root)
This is the default welcome page used to test the correct operation of the Apache2 server after installation on Ubuntu systems. It is based on the equivalent page on Debian, from which the Ubuntu Apache packaging is derived. If you can read this page, it means that the Apache HTTP server installed at this site is working properly. You should replace this file (located at /var/www/html/index.htmlfully documented in /usr/share/doc/apache2/README.Debian.gz. Refer to this for the full documentation. Documentation for the web server itself can be found by accessing the manual if the apache2-doc package was installed on this server. The configuration layout for an Apache2 web server installation on Ubuntu systems is as follows: /etc/apache2/ |-- apache2.conf | `-- ports.conf |-- mods-enabled | |-- *.load | `-- *.conf |-- conf-enabled | `-- *.conf |-- sites-enabled | `-- *.conf == apache2.conf is the main configuration file. It puts the pieces together by including all remaining configuration files when starting up the web server. == ports.conf is always included from the main configuration file. It is used to determine the listening ports for incoming connections, and this file can be customized anytime. == Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/ directories contain particular configuration snippets which manage modules, global configuration fragments, or virtual host configurations, respectively. == They are activated by symlinking available configuration files from their respective *-available/ counterparts. These should be managed by using our helpers a2enmod, a2dismod, a2ensite, a2dissite, and a2enconf, a2disconf . See their respective man pages for detailed information. == The binary is called apache2. Due to the use of environment variables, in the default configuration, apache2 needs to be started/stopped with /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not work with the default configuration. Document Roots By default, Ubuntu does not allow access through the web browser to any file apart of those located in /var/www, public_html directories (when enabled) and /usr/share (for web applications). If your site is using a web document root located elsewhere (such as in /srv) you may need to whitelist your document root directory in /etc/apache2/apache2.conf. The default Ubuntu document root is /var/www/html. You can make your own virtual hosts under /var/www. This is different to previous releases which provides better security out of the box. Reporting Problems Please use the ubuntu-bug tool to report bugs in the Apache2 package with Ubuntu. However, check existing bug reports before reporting a new bug. Please report bugs specific to modules (such as PHP and others) to respective packages, not to the web server itself.
El primer paso es hacer una copia de seguridad de todos los ficheros, por si la liamos:
sudo cp -R /etc/apache2 /root/apache2_backup sudo cp -R /var/www/html/index.html /root/index_backup.html sudo cp -R /var/www/html/index.php /root/index_backup.php
Nos "fabricamos" un certificado digital para el servidor, con el que cifraremos las comunicaciones (tendremos ya instaladas las utilidades openssl en el servidor). OJO, al tratarse de un certificado autofirmado, las comunicaciones estarán cifradas, pero en todos los navegadores recibiremos el aviso de que NO confía en el certificado por no estar firmado por una CA de confianza:
vbox@vbox2:~$ sudo openssl req -x509 -nodes -days 9125 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt Can\'t load /home/vbox/.rnd into RNG 140262466421184:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/vbox/.rnd Generating a RSA private key .............+++++ .........................................................................................+++++ writing new private key to \'/etc/ssl/private/apache-selfsigned.key\' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter \'.\', the field will be left blank. ----- Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:BIZKAIA Locality Name (eg, city) []:jBILBO Organization Name (eg, company) [Internet Widgits Pty Ltd]:COINTEL S.L. Organizational Unit Name (eg, section) []:Tech.Dep. Common Name (e.g. server FQDN or YOUR name) []:172.29.8.158 Email Address []:jlanza@cointel.es vbox@vbox2:~$
El dato realmente importante de los proporcionados al comando es el Common Name, ya que es el usado para reconocer al servidor. Si tenemos un nombre de dominio lo usamos, si no, ponemos la IP del servidor.
Hay una explicación bastante completa del proceso aquí. Las distintas opciones significan:
El comando deja ya en sus carpetas la clave y el certificado.
Ahora toca configurar Apache para que active la escucha por el puerto 443 (no olvidar el firewall si lo tenemos activo) y para que use el cifrado fuerte que queremos.
Creamos (sudo) un fichero de configuración (no existe por defecto) llamado /etc/apache2/conf-available/ssl-params.conf con el siguiente contenido (podrá ser usado por todos los servidores virtuales):
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM # Requires Apache 2.4.36 & OpenSSL 1.1.1 SSLProtocol -all +TLSv1.3 +TLSv1.2 SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1 # Older versions # SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On # Disable preloading HSTS for now. You can use the commented out header line that includes # the "preload" directive if you understand the implications. # Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # Requires Apache >= 2.4.11 SSLSessionTickets Off
Editamos (sudo) el fichero /etc/apache2/sites-available/default-ssl.conf:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin jlanza@cointel.es
ServerName 172.29.8.40
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
No queremos que el sistema trabaje por el puerto 80, así que editamos (sudo) el fichero /etc/apache2/sites-available/000-default.conf para que todo tráfico del puerto 80 pase al 443:
<VirtualHost *:80>
ServerAdmin jlanza@cointel.es
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Redirect "/" "https://172.29.8.40/"
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Habilitamos los cambios en Apache:
Habilitar el módulo ssl:
sudo a2enmod ssl
Habilitar el módulo de cabeceras:
sudo a2enmod headers
Habilitar el servidor virtual:
sudo a2ensite default-ssl
Habilitar los parámetros de cifrado:
sudo a2enconf ssl-params
Podemos probar si está todo bien:
sudo apache2ctl configtest AH00558: apache2: Could not reliably determine the server\'s fully qualified domain name, using 127.0.1.1. Set the \'ServerName\' directive globally to suppress this message Syntax OK vbox@vbox2:~$
Reiniciamos Apache:
sudo systemctl restart apache2
Si queremos que la redirección sea permanente una vez que vemos que funciona, volvemos a editar /etc/apache2/sites-available/000-default.conf (pero primero hay que hacer la otra redirección, no se puede hacer esta directamente):
<VirtualHost *:80>
ServerAdmin jlanza@cointel.es
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Redirect permanent "/" "https://172.29.8.40/"
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Volver al índice
ip route get 8.8.8.8
8.8.8.8 via 172.29.0.1 dev enp0s3 src 172.29.8.158 uid 1000
cache
ip route get 11.20.85.44
11.20.85.44 dev enp0s3 src 11.20.85.158 uid 1000
cache
ss -ltpan
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
LISTEN 0 70 127.0.0.1:33060 0.0.0.0:*
LISTEN 0 151 127.0.0.1:3306 0.0.0.0:*
LISTEN 0 10 0.0.0.0:5038 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
ESTAB 0 0 127.0.0.1:50424 127.0.0.1:3306
ESTAB 0 0 127.0.0.1:3306 127.0.0.1:50424
ESTAB 0 0 172.29.8.158:59440 35.82.48.240:443 users:(("firefox",pid=2791,fd=102))
ESTAB 0 0 172.29.8.158:22 172.29.1.120:63331
ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped missed mcast
34677 290 0 0 0 0
TX: bytes packets errors dropped carrier collsns
34677 290 0 0 0 0
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:30:ad:dd brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
4856856 59680 0 0 0 810
TX: bytes packets errors dropped carrier collsns
11852474 26042 0 0 0 0
Volver al índice
(c) 2010 a 2022 J.L.T.