Skip to content

Commit 545d4aa

Browse files
committed
De ahora en adelante, las herramientas adicionales tienen una clara vocación por permitir que usuarios sin privilegios realicen ciertas tareas administrativas
1 parent c40bad4 commit 545d4aa

18 files changed

Lines changed: 530 additions & 789 deletions

Minsal/Backup.pm

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package Minsal::Backup;
2+
3+
use strict;
4+
use warnings;
5+
use utf8;
6+
use Exporter;
7+
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
8+
9+
$VERSION = 0.20;
10+
@ISA = qw(Exporter);
11+
@EXPORT = qw(&backup);
12+
@EXPORT_OK = qw(&backup);
13+
%EXPORT_TAGS = (DEFAULT => [qw(&backup)]);
14+
15+
use Archive::Tar;
16+
use File::Find;
17+
use Data::Dumper;
18+
19+
my $tar = Archive::Tar->new;
20+
21+
my @backupeables;
22+
23+
sub listar_directorio {
24+
push (@backupeables, $File::Find::name);
25+
}
26+
27+
sub backup {
28+
29+
my $fichero_resultante = shift;
30+
my @ficheros = @_;
31+
32+
while (my $fichero = shift @ficheros){
33+
if (-f $fichero){
34+
push(@backupeables, $fichero);
35+
} elsif (-d $fichero) {
36+
find(\&listar_directorio, $fichero);
37+
}
38+
}
39+
40+
$tar->add_files(@backupeables);
41+
42+
$tar->write($fichero_resultante, COMPRESS_GZIP)
43+
or die "No puedo agregar $File::Find::name $!";
44+
}
45+
46+
1;
Lines changed: 27 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,32 @@
1+
package Minsal::Informacion;
2+
13
use strict;
24
use warnings;
35
use utf8;
6+
use Exporter;
7+
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
48

5-
use Date::Calc qw(Normalize_DHMS);
9+
$VERSION = 0.20;
10+
@ISA = qw(Exporter);
11+
@EXPORT = qw(&informacion_equipo &hostname &obtener_configuracion_correo &obtener_configuracion_envio &obtener_configuracion_legacy);
12+
@EXPORT_OK = qw(&informacion_equipo &hostname &obtener_configuracion_correo &obtener_configuracion_envio &obtener_configuracion_legacy);
13+
%EXPORT_TAGS = ( DEFAULT => [qw(&informacion_equipo &hostname &obtener_configuracion_correo &obtener_configuracion_envio &obtener_configuracion_legacy)]);
614

715
use Config::Simple;
816

917
my $fichero_configuracion = '/root/.configuracion_reporte.ini';
10-
my $fichero_configuracion_legacy = '/root/fws/infraestructura.sh';
18+
my $fichero_configuracion_legacy = '/etc/fws/infraestructura.sh';
1119

20+
######### Auxiliares
1221
sub trim {
1322
my $s = shift;
1423
$s =~ s/^\s+|\s+$//g;
1524
return $s
1625
}
1726

18-
sub uptime {
19-
# Calcula el tiempo que lleva encendido el equipo
20-
my $uptime_fichero = '/proc/uptime';
21-
22-
open (my $uptime, '<', $uptime_fichero)
23-
or die "No puedo abrir el fichero $uptime_fichero";
24-
25-
my $up = (split( /\s+/, <$uptime>))[0];
26-
close($uptime_fichero);
27-
28-
return Normalize_DHMS(0, 0, 0, $up);
29-
30-
}
31-
32-
sub informacion_equipo {
33-
# Obtenemos el número de Chasis
34-
my $chasis = qx(/usr/sbin/dmidecode -q -s chassis-serial-number);
35-
my $modelo = qx(/usr/sbin/dmidecode -q -s system-product-name);
36-
my $marca = qx(/usr/sbin/dmidecode -q -s system-manufacturer);
37-
38-
return $chasis, $modelo, $marca;
39-
}
40-
41-
sub reglas_firewall {
42-
my %resultado;
43-
my @cadena = qx(/sbin/iptables -t filter -nvL);
44-
45-
while(my $fila = shift(@cadena)){
46-
if ($fila =~ /^Chain\s+(INPUT|FORWARD|OUTPUT)\s+\(policy\s+(\w+)/){
47-
$resultado{$1} = $2;
48-
}
49-
}
50-
51-
return %resultado;
52-
}
27+
######### Los infaltables clásicos
5328

29+
#####
5430
sub hostname {
5531
my $hostname_fichero = '/proc/sys/kernel/hostname';
5632
open(my $host_name, '<', $hostname_fichero)
@@ -61,22 +37,19 @@ sub hostname {
6137
return trim($host);
6238
}
6339

64-
sub obtener_particiones {
65-
my $fichero = '/etc/fstab';
66-
open(my $contenido, '<', $fichero);
67-
68-
my @resultado;
69-
while (my $fila = <$contenido>){
70-
if ($fila =~ /^UUID/){
71-
push(@resultado, (split(/\s+/, $fila))[1]);
72-
}
73-
}
74-
75-
close($fichero);
76-
77-
return @resultado;
40+
#####
41+
sub informacion_equipo {
42+
# Obtenemos el número de Chasis
43+
my $chasis = qx(/usr/sbin/dmidecode -q -s chassis-serial-number);
44+
my $modelo = qx(/usr/sbin/dmidecode -q -s system-product-name);
45+
my $marca = qx(/usr/sbin/dmidecode -q -s system-manufacturer);
46+
47+
return substr($chasis,0,-1), substr($modelo,0,-1), substr($marca,0,-1);
7848
}
7949

50+
######### Los siguiente se deberían considerar primordiales de acuerdo a nuestro trabajo
51+
52+
#####
8053
sub obtener_configuracion_correo {
8154
my $cfg = new Config::Simple(filename => $fichero_configuracion);
8255

@@ -88,6 +61,7 @@ sub obtener_configuracion_correo {
8861

8962
}
9063

64+
#####
9165
sub obtener_configuracion_envio {
9266
my $cfg = new Config::Simple(filename => $fichero_configuracion);
9367

@@ -97,29 +71,8 @@ sub obtener_configuracion_envio {
9771
return ($receptor, $emisor);
9872
}
9973

100-
sub obtener_configuracion_general {
101-
my $clave = shift;
102-
103-
my $cfg = new Config::Simple(filename => $fichero_configuracion);
104-
105-
my $valor = $cfg->param("general.$clave")
106-
or die "Error al obtener configuración: No existe la clave $clave";
107-
108-
return $valor;
109-
}
110-
111-
sub obtener_configuracion_sistema {
112-
my $clave = shift;
113-
114-
my $cfg = new Config::Simple(filename => $fichero_configuracion);
115-
116-
my $valor = $cfg->param("sistema.$clave")
117-
or die "Error al obtener configuracion: No existe la clave $clave";
118-
119-
return $valor;
120-
}
121-
122-
sub cargar_configuracion_legacy {
74+
#####
75+
sub obtener_configuracion_legacy {
12376
my $clave = shift;
12477

12578
my %configuracion_legacy;
Lines changed: 24 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
1+
package Minsal::Mercurio;
2+
13
use strict;
24
use warnings;
35
use utf8;
6+
use Exporter;
7+
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
8+
9+
$VERSION = 0.20;
10+
@ISA = qw(Exporter);
11+
@EXPORT = qw(&envio_diferencias &envio_backup);
12+
@EXPORT_OK = qw(&envio_diferencias &envio_backup);
13+
%EXPORT_TAGS = ( DEFAULT => [qw(&envio_diferencias &envio_backup)]);
414

15+
use Minsal::Informacion;
516
use Email::Sender::Simple qw(sendmail);
617
use Email::Sender::Transport::SMTPS;
7-
818
use Email::MIME;
919

10-
use MIME::Base64;
11-
use File::Slurp;
12-
1320
use IO::All;
1421

15-
my $RUTA = '/root/reporte';
16-
require "$RUTA/informacion_sistema.pl";
17-
1822
sub transporte {
1923
my ($smtpserver, $smtpuser, $smtppassword) = obtener_configuracion_correo();
2024

@@ -41,54 +45,33 @@ sub definicion_envio {
4145
]
4246
}
4347

44-
sub crear_imagen_embebida {
45-
46-
my $fichero_imagen = shift;
47-
my $id_imagen = shift;
48-
49-
my $imagen = read_file($fichero_imagen, binmode => ':raw');
50-
51-
return Email::MIME->create(
52-
header_str => [
53-
'Content-ID' => "<$id_imagen>",
54-
'Content-Disposition' => 'inline',
55-
],
56-
attributes => {
57-
content_type => "image/png",
58-
encoding => "base64",
59-
},
60-
body => $imagen,
61-
);
62-
63-
}
64-
65-
sub envio_diff {
48+
sub envio_diferencias {
6649
my $asunto = shift;
67-
my $contenido = shift;
50+
my $contenido = shift;
6851

6952
my $cabecera = definicion_envio($asunto);
70-
71-
my $correo = Email::MIME->create(
53+
54+
my $email = Email::MIME->create(
7255
header_str => $cabecera,
7356
attributes => {
74-
content_type => "text/plain",
57+
content_type => "multipart/related",
58+
},
59+
attributes => {
60+
content_type => "text/html",
7561
charset => "utf-8",
7662
encoding => "base64",
7763
},
7864
body_str => $contenido,
7965
);
8066

81-
my $transporte = transporte();
82-
sendmail($correo, { transport => $transporte });
67+
my $transport = transporte();
68+
sendmail($email, { transport => $transport });
8369
}
8470

85-
sub envio_reporte {
71+
sub envio_backup {
8672
my $asunto = shift;
8773
my $contenido = shift;
8874

89-
my $memoria_imagen = shift;
90-
my $trafico_imagen = shift;
91-
my $disco_imagen = shift;
9275
my $backup_fichero = shift;
9376

9477
my $backup_name = (split (/\//, $backup_fichero))[-1];
@@ -104,10 +87,6 @@ sub envio_reporte {
10487
body_str => $contenido,
10588
);
10689

107-
my $memoria = crear_imagen_embebida($memoria_imagen, 'memoria');
108-
my $trafico = crear_imagen_embebida($trafico_imagen, 'trafico');
109-
my $disco = crear_imagen_embebida($disco_imagen, 'disco');
110-
11190
my $backup_part = Email::MIME->create(
11291
attributes => {
11392
filename => $backup_name,
@@ -116,22 +95,20 @@ sub envio_reporte {
11695
},
11796
body => io($backup_fichero)->binary->all,
11897
) or die "Error adjuntado el archivo";
98+
11999
my $email = Email::MIME->create(
120100
header_str => $cabecera,
121101
attributes => {
122102
content_type => "multipart/related",
123103
},
124104
parts => [
125105
$mail_part,
126-
$trafico,
127-
$memoria,
128-
$disco,
129106
$backup_part
130107
],
131108
);
132109

133-
134110
my $transport = transporte();
135111
sendmail($email, { transport => $transport });
136112
}
113+
137114
1;

README.md

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# firewall
22

3-
Configuración de Iptables + Squid3 + SquidGuard como Firewall/Proxy para pequeñas organizaciones
3+
Configuración de Iptables + Squid + SquidGuard como Firewall/Proxy para pequeñas organizaciones
44

55
## Introducción
66
El presente es una recopilación de un poco más de seis meses de investigación y pruebas sobre la configuración de un Firewall en Linux desde cero.
@@ -9,13 +9,19 @@ Considerése una guía que es posible usar con su distribución favorita
99
## ¿Que incluye?
1010
El núcleo del proyecto es información sobre los siguientes aspectos de un Firewall:
1111
* Configuración de IPtables
12-
* Configuración de Squid3
12+
* Configuración de Squid
1313
* Configuración de SquidGuard
1414
Todo ello esta organizado en [firewall](http://vtacius.github.io/firewall/)
1515

16-
## reporte
17-
Lo que se llama el primer script de cierta importancia y que veo conveniente poner acá en lugar de en otro repo.
18-
Para usarlo, será necesario crear un fichero `.configuracion_reporte.ini` con el siguiente contenido:
16+
## Script auxiliares.
17+
Hacen muchas cosas. Aparte de la función de backup.pl, la idea con los scripts es ayuden a que varios usuarios puedan acceder al firewall para realizar algunas tareas de mantenimiento con permisos reducidos.
18+
Por ahora, los usuarios en MinsalAdminFirewall son capaces de:
19+
* Modificar y aplicar las reglas de iptables. Los cambios realizados se envían por correo
20+
* Revisar los logs para Iptables, Squid y SquidGuard
21+
* Modificar y aplicar cambios para Squid/SquidGuard
22+
* Obtener cierta información del sistema en formato influx.
23+
24+
La instalación debería realizarse por medio de `instalacion.sh`
1925

2026
```ini
2127
[correo]
@@ -26,8 +32,4 @@ password = pass_enviante
2632
[envio]
2733
receptor = receptor@organizacion.org
2834

29-
[general]
30-
ruta_datos = '/var/spool/actividad'
31-
tipo_fuente = '/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf'
32-
3335
```

0 commit comments

Comments
 (0)