[RISOLTO] UDEV regola per riavviare Firewall

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

[RISOLTO] UDEV regola per riavviare Firewall

Messaggio da joe »

Ho uno script di shell che crea delle regole con iptables chiamato rc.firewall e si trova in /etc/rc.d/rc.firewall.
Accetta degli argomenti start|stop|block|ecc ecc.

Ho scritto una regola di udev che richiama uno script all'atto della creazione di un'interfaccia di rete (bnep0).
Tale regola esegue uno script quando compare bnep0.
Il tutto funziona.

Ora, avevo bisogno di riavviare il firewall e in quello script ho inserito:

Codice: Seleziona tutto

/etc/rc.d/rc.firewall restart
Però nonostante gli altri comandi dello script vengano eseguiti normalmente, il firewall non ne vuole sapere di essere riavviato.
Allora ho provato a piazzare nella regola di udev direttamente il comando di riavvio del firewall:

Codice: Seleziona tutto

# cat /lib/udev/rules.d/97-bnep0.rules

# Bnep0 Bluetooh NAP interface
ACTION=="add", KERNEL=="bnep0", RUN+="/etc/rc.d/rc.firewall restart"
Dando un'occhiata alle regole di iptables ne concludo però che lo script rc.firewall non è stato eseguito.
Ora, come si potrebbe spiegare questo comportamento?
Ovviamente se lancio a mano da riga di comando funziona. Invece attraverso udev non viene eseguito o comunque non sortisce alcun effetto.

Come potrei vedere quali sono gli eventuali errori che ne impediscono la corretta esecuzione?
Ultima modifica di joe il ven 30 mag 2014, 12:12, modificato 1 volta in totale.

Avatar utente
marlavo
Linux 1.x
Linux 1.x
Messaggi: 180
Iscritto il: ven 2 lug 2010, 16:38
Nome Cognome: Marco Lavorini
Slackware: 15.0 x86_x64
Kernel: 6.6.21
Desktop: XFCE 4.18

Re: UDEV regola per riavviare Firewall

Messaggio da marlavo »

Hai provato a scrivere

Codice: Seleziona tutto

RUN+="/bin/sh /etc/rc.d/rc.firewall restart"
?

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: UDEV regola per riavviare Firewall

Messaggio da joe »

Sì ho provato ma anche così non funziona...
D'altra parte nello script all'inizio c'è il cosiddetto "shebang" (#!/bin/sh) che dovrebbe assicurare il richiamo dell'interprete di shell.
Alla fine ho fatto uno script simile che lavora sempre con iptables, l'ho chiamato "rc.bnep" e l'ho messo sempre in "/etc/rc.d/", tanto per riprodurre una situazione simile.
Questo funziona:

Codice: Seleziona tutto

root@darkstar:~# cat /etc/rc.d/rc.bnep
#!/bin/sh
case $1 in
        up)
                echo 1 > /proc/sys/net/ipv4/ip_forward
                /usr/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
                /usr/sbin/iptables -A FORWARD -i ppp0 -o bnep0 -j ACCEPT
                /usr/sbin/iptables -A FORWARD -i bnep0 -o ppp0 -j ACCEPT
                /usr/sbin/iptables -A INPUT -i bnep0 -j ACCEPT
        #/sbin/ifconfig bnep0 10.0.0.1 netmask 255.255.255.0 up
                /etc/rc.d/rc.inet1 bnep0_start
                ;;
        down)
                /usr/sbin/iptables -t nat -F
                /usr/sbin/iptables -D FORWARD -i ppp0 -o bnep0 -j ACCEPT
                /usr/sbin/iptables -D FORWARD -i bnep0 -o ppp0 -j ACCEPT
                /usr/sbin/iptables -D INPUT -i bnep0 -j ACCEPT
esac
E quest'altro invece no...

Codice: Seleziona tutto

root@darkstar:~# cat /etc/rc.d/rc.firewall
#!/bin/sh

IPTAB=$(which iptables)
text="-m comment --comment"

flush_chain(){
### FLUSHING CHAINS ###
$IPTAB -F
$IPTAB -t nat -F
$IPTAB -X
$IPTAB -Z
}

set_policy(){
### CATENA DI DEFAULT ###
$IPTAB -P INPUT   $1
$IPTAB -P FORWARD $1
$IPTAB -P OUTPUT  $1
}

set_loop(){
 $IPTAB -$1 INPUT  $text 'Accetta connessione di LOOPBACK' -i lo -j ACCEPT
 $IPTAB -$1 OUTPUT $text 'Accetta connessione di LOOPBACK' -o lo -j ACCEPT
}

set_global(){
 $IPTAB -$1 INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 $IPTAB -$1 OUTPUT -j ACCEPT
}

set_ed2k(){
 $IPTAB -$1 INPUT -p tcp --dport xxx -j ACCEPT
 $IPTAB -$1 INPUT -p udp --dport xxx -j ACCEPT
}

set_bittorrent(){
 $IPTAB -$1 INPUT -p tcp --dport xxx -j ACCEPT
 $IPTAB -$1 INPUT -p udp --dport xxx -j ACCEPT
 $IPTAB -$1 INPUT -p udp --dport xxx -j ACCEPT
}

set_tracker(){
 $IPTAB -$1 INPUT -p tcp --dport xxx -j ACCEPT
}

set_firewall(){  
 flush_chain
 set_policy   DROP
 set_loop     A  
 set_global   A  
}

unset_firewall(){
 flush_chain
 set_policy   ACCEPT
}


# MAIN
case "$1" in
  start)
#     echo "Attiva Firewall..."
     set_firewall
     ;;
  stop)
#     echo "Disattiva Firewall..."
     unset_firewall
     ;;
  restart)
##     echo "Riattiva Firewall..."
     unset_firewall
     set_firewall
     ;;
  status)
     $IPTAB -L -v
     ;;
  block)
#     echo "Blocca tutte le Connessioni..."
     flush_chain
     set_policy   DROP
     set_loop     A
     ;;
  tracker)
#     echo "tracker Activated..."
     set_firewall
     set_bittorrent A
     set_tracker A
     ;;
  p2p)
#     echo "P2P Activated..."
     set_firewall
     set_bittorrent A
     set_ed2k A
     ;;
  *)
#     echo "Utilizzo: $0 {start|stop|restart|status|block|p2p}"
     exit 
     ;;
esac
exit 0
Come vedete ho commentato tutti gli "echo" perchè avevo letto in rete che poteva dare problemi con udev.
E infine ecco la regola (insensata, è solo per testare) di udev:

Codice: Seleziona tutto

root@darkstar:~# cat /lib/udev/rules.d/97-bnep0.rules

# Bnep0 Bluetooh NAP interface
ACTION=="add", KERNEL=="bnep0", RUN+="/bin/sh /etc/rc.d/rc.firewall restart"
ACTION=="remove", KERNEL=="bnep0", RUN+="/bin/sh /etc/rc.d/rc.firewall block"


#ACTION=="add", KERNEL=="bnep0", RUN+="/etc/rc.d/rc.bnep up"
#ACTION=="remove", KERNEL=="bnep0", RUN+="/etc/rc.d/rc.bnep down"
Il test eseguito è il seguente:
  • 1- spengo il firewall (rc.firewall stop) e verifico (iptables -L -v && iptables -t nat -L -v): giustamente appare tutto vuoto.
    2- come dicevo in pratica quando si crea il device "bnep" dovrebbe riavviarsi il firewall, invece ricontrollando le tabelle di iptables sono ancora vuote. Significa che il comando nella regola di udev non viene eseguito come mi aspetterei.
    3- rimuovendo bnep... idem ancora tutto vuoto e tutto in ACCEPT, nonostante avessi impostato di bloccare tutto il traffico (argomento "block").
Mi sa che mi sto perdendo in un bicchier d'acqua ma tant'è non riesco a capire cosa non funziona...
Evidentemente lo script rc.firewall contiene qualcosa che udev non digerisce. Ma cosa?
In quello script sono impostate varie "functions", che siano quelle a creare problemi? Non penso perchè alla fine è la shell che interpreta.

Non sono riuscito neanche a trovare un modo per debuggare la faccenda, perchè udev quando fa girare il programma non mostra niente da nessuna parte o forse sì ma non so dove cercare o come farglielo fare...
Mi viene in mente che potrei mettre "set -x" in cima a "rc.firewall" e poi nella regola di udev richiamarlo spedendo l'output su un file.. forse così funziona almeno il debug.... provo.

Se nel frattempo aveste una risposta benvenga. Sarà sicuramente utile per capire meglio questo marchingegno misterioso quale appare udev ai miei occhi... :lol:

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: UDEV regola per riavviare Firewall

Messaggio da ilmich »

il problema dovrebbe stare qui

Codice: Seleziona tutto

IPTAB=$(which iptables)
prova a mettere il percorso fisso.il comando which cerca i programmi scorrendo il contenuto della variabile d'ambiente PATH quindi potrebbe non essere affidabile dato che udev non esegue i programmi in nessuna shell attiva percio' quella variabile potrebbe essere vuota.
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: UDEV regola per riavviare Firewall

Messaggio da joe »

Confermo! Il problema era proprio quello.
Grazie mille davvero! :D

Rispondi