Creazione di whitelist di alcuni siti Web da Terminal


3

Voglio bloccare tutti i siti Web tranne uno o due siti Web (lista bianca) mentre lavoro per scopi di "produttività" (solo quando lavoro). So come bloccare singoli siti Web come mostrato qui http://www.wikihow.com/Block-and-Unblock-Internet-Sites-(On-a-Mac) ma voglio bloccare tutti tranne uno o due (ad es. creare una lista bianca).

Può essere fatto dal terminale? (come bloccare le app come nel link)

Preferirei farlo senza installare app di produttività.

Risposte:


2

Per bloccare permanentemente il traffico in uscita verso tutti i domini tranne alcuni, è necessario creare un nuovo file di ancoraggio, aggiungerlo a pf.conf e abilitare il firewall pf incluso.

  1. Creare un file di ancoraggio org.user.block.out in /private/etc/pf.anchors

    sudo touch /private/etc/pf.anchors/org.user.block.out
    

    con il seguente contenuto e una riga vuota finale

    #whitelist
    mygoodhosts = "{ wikipedia.org, stackexchange.com, 197.10.15.234 }"
    #ports to block/pass
    myports = "{ 443, 80, 8080 }"
    
    block drop out proto { tcp, udp } from any to any port $myports
    pass out proto { tcp, udp } from any to $mygoodhosts port $myports
    

    L'indirizzo IP aggiuntivo in mygoodhosts è solo un esempio di come aggiungere elementi aggiuntivi alla whitelist. Lo stesso vale per la porta 8080 di myports.

    Per consentire l'accesso completo a stackexchange.com devi aggiungere altri domini perché alcuni elementi (ad esempio javascript) vengono caricati da domini di terze parti come ajax.googleapis.com.

  2. Modifica il file /private/etc/pf.conf ma mantieni una riga vuota finale

    file originale:

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    

    per

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    anchor "org.user.block.out"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "org.user.block.out" from "/etc/pf.anchors/org.user.block.out"
    
  3. Analizza e testa il tuo file di ancoraggio per assicurarti che non ci siano errori:

    sudo pfctl -vnf /etc/pf.anchors/org.user.block.out
    
  4. Ora abilita il firewall:

    sudo pfctl -f /etc/pf.conf -e
    
  5. Per disabilitare in pfseguito (dopo aver terminato il lavoro produttivo) è sufficiente inserire:

    sudo pfctl -d
    

I primi due passaggi devono essere eseguiti solo una volta. Se si desidera aggiungere o rimuovere un dominio nella whitelist, arrestare il firewall, modificare org.user.block.out , analizzare il file di ancoraggio e riattivare il firewall.


Per abilitare la registrazione è necessario modificare diversi file e aggiungere uno script di demone / shell di avvio (tutti i file creati / modificati probabilmente necessitano di una riga vuota finale):

  1. Crea un file di registro:

    sudo touch /etc/log/pf.log
    
  2. Modifica syslog.conf aggiungendo una riga:

    local2.*                        /var/log/pf.log
    
  3. Aggiungi uno script di shell in /usr/local/bin/pflog.sh senza il contenuto:

    #!/bin/sh
    # bodged solution to absence of pflogd, ref 'Book of PF' p136
    
    ifconfig pflog0 create
    /usr/sbin/tcpdump -lnettti pflog0 | /usr/bin/logger -t pf -p local2.info
    
  4. Crea un demone di avvio /Library/LaunchDaemons/org.user.pflog.plist con il contenuto:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>org.user.pflog</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/pflog.sh</string>
        </array>
        <key>Disabled</key>             
        <false/>
        <key>RunAtLoad</key>
        <true/>
    </dict>
    </plist>
    
  5. Interrompere pfctl con sudo pfctl -d
  6. Modificare la linea di rilascio del blocco in /private/etc/pf.anchors/org.user.block.out in:

    block drop out log (all) proto { tcp, udp } from any to any port $myports
    
  7. Carica il registro logger:

    sudo launchctl load -w /Library/LaunchDaemons/org.user.pflog.plist
    
  8. Ora riattiva il firewall:

    sudo pfctl -f /etc/pf.conf -e
    
  9. Guarda pf.log in Console.app!


Dopo un aggiornamento o aggiornamento del sistema alcuni dei file originali sopra potrebbero essere stati sostituiti e devi riapplicare tutte le modifiche.


Ho provato tutti questi passaggi ma posso accedere a tutti i siti Web dopo aver seguito tutti i passaggi. Per cominciare, ho fatto tutto come è come scrivi, ovvero con Wikipedia e StackOverflow e testato dopo aver applicato le modifiche se altri siti web si stanno aprendo o meno ... ma si stanno aprendo ...
Umar

Non so come controllarlo?
Umar,

entrambi i file (org.user.block.out e pf.conf) hanno una nuova riga vuota alla fine
Umar


1
@Umar Hmm che non funziona così facilmente con pf. pf non è un "firewall applicativo" come "alf". Penso che sia possibile (questo firewall aggiuntivo ha già un'ancora in /private/etc/pf.anchors/com.apple) ma penso che sia complicato. Probabilmente è meglio fare una nuova domanda perché è molto al di là dell'ambito di questo qui.
klanomath,

0

Fondamentalmente usando la stessa strategia dell'articolo collegato che hai pubblicato ma in modo leggermente diverso.

Per prima cosa ottieni gli indirizzi IP dei siti a cui vuoi accedere

Il modo più semplice è solo il ping loro dal Terminal, ping www.google.com. Registra l'indirizzo IP. Se ciò non ti dà un indirizzo IP, prova nslookup nslookup www.google.com. Registra l'indirizzo IP.

Disattiva il tuo DNS

Trasforma manualmente le impostazioni del tuo server DNS su nulla. Se si utilizza DHCP, potrebbe essere necessario impostare un indirizzo IP statico sul Mac per farlo, oppure farlo sul router / server DHCP e rinnovare il proprio IP.

Consenti ai siti a cui desideri accedere

Apri il file host dal Terminale vi /etc/hostse aggiungi l'indirizzo IP e i nomi DNS dei siti a cui desideri accedere

216.58.199.78    www.google.com
157.166.226.25   www.cnn.com

Aggiungi questi alla fine del file.

Quando hai finito di essere produttivo

Ripristina le impostazioni DNS alla normalità. Puoi anche commentare le righe nel file hosts con a #.

#216.58.199.78    www.google.com
#157.166.226.25   www.cnn.com

Ho provato a implementarlo. Ma quando ottengo un IP statico, tutti i siti Web vengono bloccati, incluso quello a cui voglio accedere. Ad esempio,216.58.199.78 www.google.com
Umar il

Puoi pubblicare ciò che hai aggiunto al tuo file host?
tyelford,

all'inizio, ho appena aggiunto la lista bianca alla mia lista già nera, ma poi ho cancellato la lista nera e ora scrivo google per vedere se funziona o no .. ed è così che appare108.177.14.94 www.google.se
Umar

dopo aver disattivato DNS non ottengo ancora nulla ... vale a dire nessun accesso Web
Umar

Penso che il problema si presenti non appena spengo il DNS .. non c'è più accesso al web
Umar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.