Ufw: Inactif au démarrage

Bonjour à toutes et à tous, mon pare-feu ufw me pose deux problèmes:

Depuis quelques temps il ne s’active plus automatiquement au démarrage du système (la première fois un message d’erreur l’indiquant a été affiché, il ne l’a plus été par la suite mais j’ai tout de même constaté que ufw était inactif), ce qui me force à le lever manuellement à chaque début de session.

Pour résoudre le problème, je l’ai désinstallé (purgé) puis réinstallé (à ce moment-là, aptitude a pris l’ufw de Trisquel). Non seulement ça n’a pas résolu le problème mais en plus ça en a crée un nouveau: ufw bloque désormais les connexions IMAP.

Je l’ai désinstallé une seconde fois, puis réinstallé (en spécifiant cette fois de prendre celui de Jessie), aucun des deux problèmes n’est résolu.

Concernant l’IMAP, ma boîte mail est chez mailoo, voici les ports nécessaires: mailoo.org/config.php

Et voici la configuration d’ufw:

[code]# ufw status verbose
Status: active
Logging: on (full)
Default: deny (incoming), deny (outgoing)
New profiles: allow

To Action From


53 ALLOW OUT Anywhere (log-all)
80 ALLOW OUT Anywhere (log-all)
443 ALLOW OUT Anywhere (log-all)
993 ALLOW OUT Anywhere (log-all)
587 ALLOW OUT Anywhere (log-all)
[/code]

Cordialement

IMAP (en clair ou avec chiffrement TLS explicite) utilise le port 143 qui ne figure pas dans la liste des ports autorisés. Le port 993 est utilisé par IMAPS (chiffrement implicite TLS/SSL).

Bonjour,

J’ai toujours utilisé uniquement le port 993 pour imap (et ça fonctionnait).

J’ai tout de même ajouté 143 à la liste autorisée pour voir, aucun résultat.

Cordialement.

Regarde dans les logs pour voir les paquets bloqués quand tu essaies de te connecter au serveur IMAP.
As-tu vérifié avec [mono]iptables-save[/mono] si le jeu de règles iptables généré correspondait à la confirguration d’ufw ?

Je viens de tester le port 993 sur mail.mailoo.org, il semble fermé.
Tu as vérifié que ça marche avec ufw désactivé ?

Tien intéressant,

Après avoir désactivé le pare-feu, j’ai réussi à me connecter, j’ai réessayé après la refermeture du pare-feu: ça fonctionne encore (pour l’instant du moins).

Je maintient “en observation” mais il se pourrait que le problème d’imap soit réglé, reste celui de l’activation au démarrage.

Merci!

En effet le port 993 sur mail.mailoo.org est ouvert maintenant. Le service était tombé au moment de tes manipulations, c’était juste une coïncidence.

D’accord merci,

Puisque le pare-feu n’était pour rien là-dedans, je vais retirer la mention “bloque imap” du sujet du fil.

Cordialement

Up!

Up oui mais pour quel problème finalement, ton firewall ne se lance pas au démarrage ?

Depuis quand, quel sont les opérations faite pour en arriver la ?

Up oui mais pour quel problème finalement, ton firewall ne se lance pas au démarrage ?

Depuis quand, quel sont les opérations faite pour en arriver la ?[/quote]
Oui, il ne se lance pas au démarrage depuis un peu plus d’une semaine.
Je n’ai rien fait de particulier le concernant juste avant, j’ai juste reçu lors d’un démarrage un message d’erreur indiquant qu’il n’avait pas réussi à s’activer. Depuis; bien que je ne reçoive plus ce message, je constate à chaque fois en tapant [mono]# ufw status[/mono] que celui-ci est baissé à chaque début de session.

Cordialement.

Up oui mais pour quel problème finalement, ton firewall ne se lance pas au démarrage ?

Depuis quand, quel sont les opérations faite pour en arriver la ?[/quote]
Oui, il ne se lance pas au démarrage depuis un peu plus d’une semaine.
Je n’ai rien fait de particulier le concernant juste avant, j’ai juste reçu lors d’un démarrage un message d’erreur indiquant qu’il n’avait pas réussi à s’activer. Depuis; bien que je ne reçoive plus ce message, je constate à chaque fois en tapant [mono]# ufw status[/mono] que celui-ci est baissé à chaque début de session.

Cordialement.[/quote]

As-tu vérifié la présence du script init.d ou unit pour UFW.

Dans le cas de l’utilisation de systemd essai :

Voici la sortie de la première commande:

# systemctl enable ufw Synchronizing state for ufw.service with sysvinit using update-rc.d... Executing /usr/sbin/update-rc.d ufw defaults Executing /usr/sbin/update-rc.d ufw enable

Et voici le fichier /usr/sbin/update-rc.d dont il parle:

[code]#! /usr/bin/perl

update-rc.d Update the links in /etc/rc[0-9S].d/

use strict;
use warnings;

NB: All Perl modules used here must be in perl-base. Specifically, depending

on modules in perl-modules is not okay! See bug #716923

my $initd = “/etc/init.d”;
my $etcd = “/etc/rc”;
my $notreally = 0;

Print usage message and die.

sub usage {
print STDERR "update-rc.d: error: @\n" if ($# >= 0);
print STDERR <<EOF;
usage: update-rc.d [-n] [-f] remove
update-rc.d [-n] disable|enable [S|2|3|4|5]
-n: not really
-f: force

The disable|enable API is not stable and might change in the future.
EOF
exit (1);
}

exit insserv_updatercd(@ARGV);

sub save_last_action {
# No-op (archive removed)
}

sub remove_last_action {
# No-op (archive removed)
}

sub info {
print STDOUT “update-rc.d: @_\n”;
}

sub warning {
print STDERR “update-rc.d: warning: @_\n”;
}

sub error {
print STDERR “update-rc.d: error: @_\n”;
exit (1);
}

sub error_code {
my $rc = shift;
print STDERR “update-rc.d: error: @_\n”;
exit ($rc);
}

sub make_path {
my ($path) = @;
my @dirs = ();
my @path = split ///, $path;
map { push @dirs, $
; mkdir join(’/’, @dirs), 0755; } @path;
}

sub systemd_reload {
if (-d “/run/systemd/system”) {
system(“systemctl”, “daemon-reload”);
}
}

Creates the necessary links to enable/disable the service (equivalent of an

initscript) in systemd.

sub make_systemd_links {
my ($scriptname, $action) = @_;

# In addition to the insserv call we also enable/disable the service
# for systemd by creating the appropriate symlink in case there is a
# native systemd service. We need to do this on our own instead of
# using systemctl because systemd might not even be installed yet.
my $service_path;
if (-f "/etc/systemd/system/$scriptname.service") {
    $service_path = "/etc/systemd/system/$scriptname.service";
} elsif (-f "/lib/systemd/system/$scriptname.service") {
    $service_path = "/lib/systemd/system/$scriptname.service";
}
if (defined($service_path)) {
    my $changed_sth;
    open my $fh, '<', $service_path or error("unable to read $service_path");
    while (<$fh>) {
        chomp;
        if (/^\s*WantedBy=(.+)$/i) {
            my $wants_dir = "/etc/systemd/system/$1.wants";
            my $service_link = "$wants_dir/$scriptname.service";
            if ("enable" eq $action) {
                make_path($wants_dir);
                symlink($service_path, $service_link);
            } else {
                unlink($service_link) if -e $service_link;
            }
        }
    }
    close($fh);
}

}

Manage the .override file for upstart jobs, so update-rc.d enable/disable

work on upstart systems the same as on sysvinit/systemd.

sub upstart_toggle {
my ($scriptname, $action) = @_;

# This needs to be done by manually parsing .override files instead of
# using initctl, because upstart might not be installed yet.
my $service_path;
if (-f "/etc/init/$scriptname.conf") {
    $service_path = "/etc/init/$scriptname.override";
}
if (!defined($service_path)) {
    return;
}
my $fh;
my $enabled = 1;
my $overrides = '';
if (open $fh, '<', $service_path) {
    while (<$fh>) {
       if (/^\s*manual\s*$/) {
           $enabled = 0;
       } else {
           $overrides .= $_;
       }
    }
}
close($fh);

if ($enabled && $action eq 'disable') {
    open $fh, '>>', $service_path or error("unable to write $service_path");
    print $fh "manual\n";
    close($fh);
} elsif (!$enabled && $action eq 'enable') {
    if ($overrides ne '') {
        open $fh, '>', $service_path . '.new' or error ("unable to write $service_path");
        print $fh $overrides;
        close($fh);
        rename($service_path . '.new', $service_path) or error($!);
    } else {
        unlink($service_path) or error($!);
    }
}

}

Dependency based

sub insserv_updatercd {
my @args = @_;
my @opts;
my $scriptname;
my $action;
my $notreally = 0;

my @orig_argv = @args;

while($#args >= 0 && ($_ = $args[0]) =~ /^-/) {
    shift @args;
    if (/^-n$/) { push(@opts, $_); $notreally++; next }
    if (/^-f$/) { push(@opts, $_); next }
    if (/^-h|--help$/) { &usage; }
    usage("unknown option");
}

usage("not enough arguments") if ($#args < 1);

$scriptname = shift @args;
$action = shift @args;
my $insserv = "/usr/lib/insserv/insserv";
# Fallback for older insserv package versions [2014-04-16]
$insserv = "/sbin/insserv" if ( -x "/sbin/insserv");
if ("remove" eq $action) {
    if ( -f "/etc/init.d/$scriptname" ) {
        my $rc = system($insserv, @opts, "-r", $scriptname) >> 8;
        if (0 == $rc && !$notreally) {
            remove_last_action($scriptname);
        }
        error_code($rc, "insserv rejected the script header") if $rc;
        systemd_reload;
        exit $rc;
    } else {
        # insserv removes all dangling symlinks, no need to tell it
        # what to look for.
        my $rc = system($insserv, @opts) >> 8;
        if (0 == $rc && !$notreally) {
            remove_last_action($scriptname);
        }
        error_code($rc, "insserv rejected the script header") if $rc;
        systemd_reload;
        exit $rc;
    }
} elsif ("defaults" eq $action || "start" eq $action ||
         "stop" eq $action) {
    # All start/stop/defaults arguments are discarded so emit a
    # message if arguments have been given and are in conflict
    # with Default-Start/Default-Stop values of LSB comment.
    if ("start" eq $action || "stop" eq $action) {
        cmp_args_with_defaults($scriptname, $action, @args);
    }

    if ( -f "/etc/init.d/$scriptname" ) {
        my $rc = system($insserv, @opts, $scriptname) >> 8;
        if (0 == $rc && !$notreally) {
            save_last_action($scriptname, @orig_argv);
        }
        error_code($rc, "insserv rejected the script header") if $rc;
        systemd_reload;
        exit $rc;
    } else {
        error("initscript does not exist: /etc/init.d/$scriptname");
    }
} elsif ("disable" eq $action || "enable" eq $action) {
    make_systemd_links($scriptname, $action);

    upstart_toggle($scriptname, $action);

    insserv_toggle($notreally, $action, $scriptname, @args);
    # Call insserv to resequence modified links
    my $rc = system($insserv, @opts, $scriptname) >> 8;
    if (0 == $rc && !$notreally) {
        save_last_action($scriptname, @orig_argv);
    }
    error_code($rc, "insserv rejected the script header") if $rc;
    systemd_reload;
    exit $rc;
} else {
    usage();
}

}

sub parse_def_start_stop {
my $script = shift;
my (%lsb, @def_start_lvls, @def_stop_lvls);

open my $fh, '<', $script or error("unable to read $script");
while (<$fh>) {
    chomp;
    if (m/^### BEGIN INIT INFO$/) {
        $lsb{'begin'}++;
    }
    elsif (m/^### END INIT INFO$/) {
        $lsb{'end'}++;
        last;
    }
    elsif ($lsb{'begin'} and not $lsb{'end'}) {
        if (m/^# Default-Start:\s*(\S?.*)$/) {
            @def_start_lvls = split(' ', $1);
        }
        if (m/^# Default-Stop:\s*(\S?.*)$/) {
            @def_stop_lvls = split(' ', $1);
        }
    }
}
close($fh);

return (\@def_start_lvls, \@def_stop_lvls);

}

sub lsb_header_for_script {
my $name = shift;

foreach my $file ("/etc/insserv/overrides/$name", "/etc/init.d/$name",
                  "/usr/share/insserv/overrides/$name") {
    return $file if -s $file;
}

error("cannot find a LSB script for $name");

}

sub cmp_args_with_defaults {
my ($name, $act) = (shift, shift);
my ($lsb_start_ref, $lsb_stop_ref, $arg_str, $lsb_str);
my (@arg_start_lvls, @arg_stop_lvls, @lsb_start_lvls, @lsb_stop_lvls);

($lsb_start_ref, $lsb_stop_ref) = parse_def_start_stop("/etc/init.d/$name");
@lsb_start_lvls = @$lsb_start_ref;
@lsb_stop_lvls  = @$lsb_stop_ref;
return if (!@lsb_start_lvls and !@lsb_stop_lvls);

warning "start and stop actions are no longer supported; falling back to defaults";
my $start = $act eq 'start' ? 1 : 0;
my $stop = $act eq 'stop' ? 1 : 0;

# The legacy part of this program passes arguments starting with
# "start|stop NN x y z ." but the insserv part gives argument list
# starting with sequence number (ie. strips off leading "start|stop")
# Start processing arguments immediately after the first seq number.
my $argi = $_[0] eq $act ? 2 : 1;

while (defined $_[$argi]) {
    my $arg = $_[$argi];

    # Runlevels 0 and 6 are always stop runlevels
    if ($arg eq 0 or $arg eq 6) {
        $start = 0; $stop = 1;
    } elsif ($arg eq 'start') {
        $start = 1; $stop = 0; $argi++; next;
    } elsif ($arg eq 'stop') {
        $start = 0; $stop = 1; $argi++; next;
    } elsif ($arg eq '.') {
        next;
    }
    push(@arg_start_lvls, $arg) if $start;
    push(@arg_stop_lvls, $arg) if $stop;
} continue {
    $argi++;
}

if ($#arg_start_lvls != $#lsb_start_lvls or
    join("\0", sort @arg_start_lvls) ne join("\0", sort @lsb_start_lvls)) {
    $arg_str = @arg_start_lvls ? "@arg_start_lvls" : "none";
    $lsb_str = @lsb_start_lvls ? "@lsb_start_lvls" : "none";
    warning "start runlevel arguments ($arg_str) do not match",
            "$name Default-Start values ($lsb_str)";
}
if ($#arg_stop_lvls != $#lsb_stop_lvls or
    join("\0", sort @arg_stop_lvls) ne join("\0", sort @lsb_stop_lvls)) {
    $arg_str = @arg_stop_lvls ? "@arg_stop_lvls" : "none";
    $lsb_str = @lsb_stop_lvls ? "@lsb_stop_lvls" : "none";
    warning "stop runlevel arguments ($arg_str) do not match",
            "$name Default-Stop values ($lsb_str)";
}

}

sub insserv_toggle {
my ($dryrun, $act, $name) = (shift, shift, shift);
my (@toggle_lvls, $start_lvls, $stop_lvls, @symlinks);
my $lsb_header = lsb_header_for_script($name);

# Extra arguments to disable|enable action are runlevels. If none
# given parse LSB info for Default-Start value.
if ($#_ >= 0) {
    @toggle_lvls = @_;
} else {
    ($start_lvls, $stop_lvls) = parse_def_start_stop($lsb_header);
    @toggle_lvls = @$start_lvls;
    if ($#toggle_lvls < 0) {
        error("$name Default-Start contains no runlevels, aborting.");
    }
}

# Find symlinks in rc.d directories. Refuse to modify links in runlevels
# not used for normal system start sequence.
for my $lvl (@toggle_lvls) {
    if ($lvl !~ /^[S2345]$/) {
        warning("$act action will have no effect on runlevel $lvl");
        next;
    }
    push(@symlinks, $_) for glob("/etc/rc$lvl.d/[SK][0-9][0-9]$name");
}

if (!@symlinks) {
    error("no runlevel symlinks to modify, aborting!");
}

# Toggle S/K bit of script symlink.
for my $cur_lnk (@symlinks) {
    my $sk;
    my @new_lnk = split(//, $cur_lnk);

    if ("disable" eq $act) {
        $sk = rindex($cur_lnk, '/S') + 1;
        next if $sk < 1;
        $new_lnk[$sk] = 'K';
    } else {
        $sk = rindex($cur_lnk, '/K') + 1;
        next if $sk < 1;
        $new_lnk[$sk] = 'S';
    }

    if ($dryrun) {
        printf("rename(%s, %s)\n", $cur_lnk, join('', @new_lnk));
        next;
    }

    rename($cur_lnk, join('', @new_lnk)) or error($!);
}

}
[/code]

La deuxième commande n’envoie aucun retour.

Cordialement.