pfctl - come aggiungere un ancoraggio e renderlo attivo / caricarlo

5

Quindi posso aggiungere un'ancora al firewall già abilitato facendo qualcosa del genere:

$ pfctl -a anchor_name -f /etc/anchor_rules.txt

il file "anchor_rules.txt" potrebbe contenere qualcosa come questo:

table <some-hosts> persist file /etc/someHostsToBlock.txt
block quick from any to some-hosts

Ora, posso vedere le regole all'interno dell'ancora facendo questo:

$ pfctl -a anchor_name -sr
No ALTQ support in kernel
ALTQ related functions disabled
block drop quick from any to some-hosts

Tuttavia , quando mostro il set di regole attivo corrente con:

$ pfctl -sr
No ALTQ support in kernel
ALTQ related functions disabled
scrub-anchor "com.apple/*" all fragment reassemble
anchor "com.apple/*" all

non vedo l'ancora chiamata " anchor_name " che ho appena aggiunto. Quindi l'ancora non è effettivamente attivo / caricato ...

Perché no e come caricarlo?

    
posta Daps0l 15.01.2018 - 22:25
fonte

1 risposta

4

Nella mia comprensione di pf il tuo ancoraggio principale è mancante. Puoi utilizzare l'ancora di Apple o un ancoraggio definito dall'utente.

È preferibile un'ancora definita dall'utente:

  1. Modifica /private/etc/pf.conf:

    Aggiungi due linee a pf.conf in questo modo:

    ...
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    
    #
    # usr.home anchor point
    #
    anchor "usr.home/*"
    load anchor "usr.home" from "/etc/pf.anchors/usr.home"
    
  2. Crea un file usr.home . Nell'esempio seguente creo un ancoraggio SSH che blocca l'accesso SSH da una rete locale ad alcuni IP dell'host:

    sudo nano /etc/pf.anchors/usr.home
    

    e aggiungi

    #
    # usr.home ruleset, referred to by the modified /etc/pf.conf file.
    # See notes in that file regarding the anchor point in the main ruleset.
    #
    
    #
    # SSH anchor point.
    #
    
    anchor "SSH"
    load anchor "SSH" from "/etc/pf.rules/pfssh.rule"
    
  3. Ora crea una nuova directory

    sudo mkdir /etc/pf.rules
    

    e il file di riferimento con:

    sudo nano /etc/pf.rules/pfssh.rule
    

    e il seguente contenuto:

    block in quick inet proto { tcp, udp } from 10.0.0.0/8 to { 10.128.8.145, 10.129.8.145 } port 22
    
  4. Analizza e verifica il tuo pf.conf e il tuo file di ancoraggio per assicurarti che siano privi di errori:

    sudo pfctl -vnf /etc/pf.conf
    sudo pfctl -vnf /etc/pf.anchors/usr.home
    
  5. Ricarica pf:

    sudo pfctl -d
    sudo pfctl -e -f /etc/pf.conf
    

Puoi aggiungere ancoraggi aggiuntivi all'ancora principale di usr.home come dimostrato nell'ancora principale di com.apple.

È anche possibile aggiungere ulteriori sotto-ancoraggi dinamici con il seguente comando (qui aggiungo una regola HTTP blocco temporaneo simile alla regola SSH - controlla la creazione di un sotto-ancoraggio transitorio: usr.home / HTTP here!):

echo "block drop in quick proto tcp from 10.0.0.0/8 to any port 80" | sudo pfctl -a usr.home/HTTP -f -

L'ancora temporanea non sopravvive a un riavvio!

Un possibile comando per rimuovere immediatamente la regola temporanea è:

echo "" | sudo pfctl -a usr.home/HTTP -f -

Un comodo script per controllare tutti gli ancoraggi e le regole caricati è pfdump:

pfdump.sh:

#!/bin/bash

function pfprint() {
  if [ -n "$1" ];then
    sudo pfctl -a "$2" -s"$1" 2>/dev/null
  else
    sudo pfctl -s"$1" 2>/dev/null
  fi
}

function print_all() {

  local p=$(printf "%-40s" $1)
  (
    pfprint r "$1" | sed "s,^,r     ,"
    pfprint n "$1" | sed "s,^,n     ,"
    pfprint A "$1" | sed "s,^,A     ,"
  ) | sed "s,^,$p,"

  for a in 'pfprint A "$1"'; do
    print_all "$a"
  done
}

print_all

Tutti i file menzionati richiedono una nuova riga vuota alla fine!

    
risposta data 17.01.2018 - 03:33
fonte

Leggi altre domande sui tag