Skip to content

Instantly share code, notes, and snippets.

@viniciusgonmelo
Last active June 13, 2023 05:18
Show Gist options
  • Save viniciusgonmelo/2c8b3c618adcccc244c1fabfff99f173 to your computer and use it in GitHub Desktop.
Save viniciusgonmelo/2c8b3c618adcccc244c1fabfff99f173 to your computer and use it in GitHub Desktop.
Configura o firewall com o ufw
#!/usr/bin/env perl
# Script: ufw-config
# Descrição: Configura o firewall com o ufw
use 5.010;
use strict;
use warnings;
use Carp qw(croak);
use Getopt::Long;
use Readonly;
Readonly my %PORTS => (
'SSH' => { port => 22, protocol => 'tcp' },
'HTTP' => { port => 80, protocol => 'tcp' },
'HTTPS' => { port => 443, protocol => 'tcp' },
# Adicione outras portas conforme necessário
);
sub display_ports {
say 'Selecione as portas que você deseja abrir (separe com espaços):';
my $counter = 1;
for my $key ( sort keys %PORTS ) {
say "$counter. $PORTS{$key}{port}/$PORTS{$key}{protocol} ($key)";
$counter++;
}
}
sub enable_port {
my ( $port, $protocol ) = @_;
system("ufw allow $port/$protocol") == 0 or croak "Falha ao habilitar a porta $port/$protocol";
}
sub parse_user_input {
my ($input) = @_;
my @selected_ports;
for my $item (split /\s+/, $input) {
if ($item =~ /^\d+$/) {
my $index = $item - 1;
if (my $key = (sort keys %PORTS)[$index]) {
push @selected_ports, $key;
} else {
say "Erro: opção inválida: $item";
exit 1;
}
} elsif ($item =~ /^(\d+)\/(tcp|udp)$/i) {
my $new_port = { port => $1, protocol => lc($2) };
push @selected_ports, $new_port unless $new_port ~~ @selected_ports;
} else {
say "Erro: entrada inválida: $item";
exit 1;
}
}
return @selected_ports;
}
sub get_additional_ports {
say "Deseja adicionar outras portas? (S/N)";
chomp(my $response = <STDIN>);
my @additional_ports;
if (lc($response) eq 's') {
say "Informe as portas adicionais no formato '80/tcp' ou '255/udp', separadas por espaços:";
chomp(my $additional_ports_input = <STDIN>);
@additional_ports = parse_user_input($additional_ports_input);
}
return @additional_ports;
}
sub main {
# Verifica se o usuário está executando o script com privilégios de administrador
if ($> != 0) {
say "Erro: você precisa executar este script como usuário root ou com privilégios de administrador.";
exit 1;
}
display_ports();
say "Por favor, insira o número correspondente à opção desejada (separe com espaços):";
chomp(my $user_input = <STDIN>);
my @selected_ports = parse_user_input($user_input);
my @additional_ports = get_additional_ports();
push @selected_ports, @additional_ports;
if (!@selected_ports) {
say "Erro: nenhuma porta selecionada.";
exit 1;
}
configure_firewall(@selected_ports);
say "\nFirewall configurado com sucesso!";
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment