Configuración de reporte y otras configuraciones opcionales

Todas lo que sigue no es ni imprescindible ni realmente importante para el funcionamiento de su firewall, pero añadirá características importantes

Reporte de uso de internet

Configuraremos al ya instalado sarg para que los reportes tengan sentido para nosotros

sed -i -r -f - /etc/sarg/sarg.conf << MAFI
s/Squid User Access Reports/Reporte de Uso de Internet/
s%^output_dir.+%output_dir /var/www/html/sarg%
s/^resolve_ip.+/resolve_ip no/
s/^date_format.+/date_format e/
s/^charset.+/charset UTF-8/
s/lastlog 0/lastlog 20/g
s/^show_successful_message.+/show_successful_message yes/
s/^\#?show_sarg_info.+/show_sarg_info no/g
s/^\#?show_sarg_logo.+/show_sarg_logo no/g
MAFI

sed -i -f - /etc/sarg/sarg-reports.conf <<MAFI
s%HTMLOUT\=.*%HTMLOUT\=/var/www/html/sarg/%
s/PAGETITLE\=.*/PAGETITLE="Reporte de Uso de Internet"/
MAFI

grep -q 'TAG_NONE/400' /etc/sarg/exclude_codes || echo 'TAG_NONE/400' >> /etc/sarg/exclude_codes

Securizamos el acceso a /reportes por medio del servidor web

cat << "MAFI" > /etc/apache2/sites-available/000-default.conf 
<VirtualHost *:80>
    ServerAdmin fws@salud.gob.sv
    DocumentRoot /var/www/html
    
    <Directory /var/www/html/>
        Options -Indexes -FollowSymLinks -MultiViews -ExecCGI
    
        Order allow,deny
        Allow from all
    </Directory>
    
    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
</VirtualHost>

MAFI

Creamos el fichero /var/www/html/sarg/.htpassword al que se hace referencia en el fichero anterior. El último archivos le pide una contraseña a usar en conjunto con el usuarios “administrador” para entrar a ver los reportes

touch /var/www/html/sarg/.htpassword 
chmod 600 /var/www/html/sarg/.htpassword 
chown -R www-data:www-data /var/www/html/sarg/.htpassword 
htpasswd -B /var/www/html/sarg/.htpassword administrador

Reiniciamos apache para que toda la configuración tenga efecto:

systemctl restart apache2.service

Reporte de sistema

Este reporte es toda una serie de complicados script que tienen por objetivo último el enviar a su correo un par de gráficas muy bonitas. Esta en una fase bastante avanzada de desarrollo, y hasta ahora parecen que funcionan bien.

Activamos el registro de datos, aumentamos el número de registros a guardar y reiniciamos a sysstat para que los cambios tomen efecto

sed -i -r 's/^ENABLED.+/ENABLED="true"/' /etc/default/sysstat
sed -i -r 's/^HISTORY.+/HISTORY=28/' /etc/sysstat/sysstat
sed -i -r 's/^SADC_OPTIONS.+/SADC_OPTIONS="-S XDISK"/' /etc/sysstat/sysstat
systemctl restart sysstat.service

Cambiamos la configuración de cron para sysstat, cambiando el intervalo de recolección de datos a 5 minutos y configurando otras tareas relacionadas. Creamos el directorio donde se han de almacenar los ficheros:

cat << MAFI > /etc/cron.d/sysstat
# The first element of the path is a directory where the debian-sa1
# script is located
PATH=/usr/lib/sysstat:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin

# Activity reports every 10 minutes everyday
0-55/5 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1

# Antes de que se rote al archivo de estadística de este día, disponemos de las estadísticas que en realidad nos interesan 
56 23 * * * root command -v sadf > /dev/null && sadf -d -s 00:00:00 -e 23:59:59 -- -r > /var/spool/actividad/memoria.data
57 23 * * * root command -v sadf > /dev/null && sadf -d -s 00:00:00 -e 23:59:59 -- -F MOUNT > /var/spool/actividad/disco.data
58 23 * * * root command -v sadf > /dev/null && sadf -d -s 00:00:00 -e 23:59:59 -- -n DEV > /var/spool/actividad/trafico.data

# Additional run at 23:59 to rotate the statistics file
59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2

MAFI
systemctl restart cron.service
mkdir /var/spool/actividad/
touch /var/spool/actividad/disco.prom

Creamos el fichero de configuración para los script de reporte de la siguiente forma. Sobre todo, deberá configurar un usuario/contraseña válido y el servidor contra el cual sirva. Luego, su memoria RAM en kilobytes

cat << MAFI >> ~/.configuracion_reporte.ini
[correo]
servidor = mail.salud.gob.sv
usuario = envio@organizacion.org
password = pass_enviante

[envio]
receptor = receptor@organizacion.org

[general]
ruta_datos = '/var/spool/actividad'
tipo_fuente = '/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf'


MAFI

Y ya por último, configuramos los reportes a ejecutarse como tarea por parte de crontab

crontab -l > horario.cron
grep reporte.pl horario.cron || echo " 14 7  * * * /root/reporte/reporte.pl"  >> horario.cron
grep diferencias.pl horario.cron || echo " 15 7  * * * /root/reporte/diferencias.pl"  >> horario.cron
crontab horario.cron 
rm horario.cron

NTP

Es posible que su servidor tenga ya la hora correctamente configurada, pero si aún con eso quiere evitar los molestos mensajes en syslog, basta con ejecutar

sed -i -r 's/^#?NTP=/NTP=10.10.20.20/' /etc/systemd/timesyncd.conf
sed -i -r 's/^#?FallbackNTP=.+/FallbackNTP=10.10.20.20/' /etc/systemd/timesyncd.conf
timedatectl set-ntp true
systemctl restart systemd-timesyncd

DHCP

La institución que usa esta configuración de firewall cree fervientemente en que la asignación dinámica de IP en los clientes puede ser decisión administrativa eficiente en muchos sentidos. Sin embargo, cierto dispositivo requiere de esta configuración y debido a los problemas que se presentan en Debian Stretch me pareció una buena idea recopilar la configuración mínima necesaria

source /root/fws/infraestructura.sh
sed -i -r "s/^INTERFACESv4.+/INTERFACESv4=\"$INP\"/" /etc/default/isc-dhcp-server
sed -i -r 's/^INTERFACESv6(.+)/#INTERFACESv6\1/' /etc/default/isc-dhcp-server

El siguiente es más bien un ejemplo de como podría ir el fichero de configuración.

source /root/fws/infraestructura.sh
cat << MAFI > /etc/dhcp/dhcpd.conf  
# Server will not attempt to do a DNS update when a lease is confirmed.
ddns-update-style none;

# option definitions common to all supported networks...
option domain-name "$DOMINIO";
option domain-name-servers 10.10.20.20, 10.10.20.21;

default-lease-time 600;
max-lease-time 7200;

# This DHCP server is the official DHCP server 
authoritative;

# Use this to send dhcp log messages to a different log file 
log-facility local7;

# Servicio
subnet 10.168.28.128 netmask 255.255.255.192 {
    range 10.168.28.130 10.168.28.134;
    option domain-name-servers 10.10.20.20, 10.10.20.21;
    option domain-name "$DOMINIO";
    option routers 10.168.28.129;
    option broadcast-address 10.168.28.191;
    default-lease-time 600;
    max-lease-time 7200;
}

MAFI

Si después de una configuración satisfactoria aún tiene problemas para arrancar el servicio, con un mensaje en los logs como los siguientes:

Jul 20 13:26:47 fw-establecimiento isc-dhcp-server[24369]: Launching IPv4 server only.
Jul 20 13:26:47 fw-establecimiento dhcpd[24378]: Internet Systems Consortium DHCP Server 4.3.5
Jul 20 13:26:47 fw-establecimiento dhcpd[24378]: Copyright 2004-2016 Internet Systems Consortium.
Jul 20 13:26:47 fw-establecimiento dhcpd[24378]: All rights reserved.
Jul 20 13:26:47 fw-establecimiento dhcpd[24378]: For info, please visit https://www.isc.org/software/dhcp/
Jul 20 13:26:47 fw-establecimiento isc-dhcp-server[24369]: Starting ISC DHCPv4 server: dhcpddhcpd service already running (pid file /var/run/dhcpd.pid currenty exists) ... failed!
Jul 20 13:26:47 fw-establecimiento systemd[1]: isc-dhcp-server.service: Control process exited, code=exited status=1
Jul 20 13:26:47 fw-establecimiento systemd[1]: Failed to start LSB: DHCP server.
Jul 20 13:26:47 fw-establecimiento systemd[1]: isc-dhcp-server.service: Unit entered failed state.
Jul 20 13:26:47 fw-establecimiento systemd[1]: isc-dhcp-server.service: Failed with result 'exit-code'.

Bastará con apagar el servicio, borrar a dhcpd.pid e iniciar el servicio

systemctl stop isc-dhcp-server.service
rm /var/run/dhcpd.pid
systemctl start isc-dhcp-server.service