Repository 32bit  Forum
Repository 64bit  Wiki

[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.

[RISOLTO] UDEV regola per riavviare Firewall

Messaggioda joe » gio mag 29, 2014 15:06

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 mag 30, 2014 11:12, modificato 1 volta in totale.
Avatar utente
joe
Iper Master
Iper Master
 
Messaggi: 2000
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: UDEV regola per riavviare Firewall

Messaggioda marlavo » gio mag 29, 2014 19:42

Hai provato a scrivere
Codice: Seleziona tutto
RUN+="/bin/sh /etc/rc.d/rc.firewall restart"
?
Avatar utente
marlavo
Linux 2.0
Linux 2.0
 
Messaggi: 174
Iscritto il: ven lug 02, 2010 15:38
Nome Cognome: Marco Lavorini
Slackware: 14.1 01 00 00 00
Kernel: 3.10.54
Desktop: XFCE 4.10

Re: UDEV regola per riavviare Firewall

Messaggioda joe » gio mag 29, 2014 23:24

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:
Avatar utente
joe
Iper Master
Iper Master
 
Messaggi: 2000
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: UDEV regola per riavviare Firewall

Messaggioda miklos » gio mag 29, 2014 23:40

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.
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1278
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2

Re: UDEV regola per riavviare Firewall

Messaggioda joe » ven mag 30, 2014 9:14

Confermo! Il problema era proprio quello.
Grazie mille davvero! :D
Avatar utente
joe
Iper Master
Iper Master
 
Messaggi: 2000
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5


Torna a Slackware

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti