Come bloccare i siti con iptables


7

Vorrei bloccare i siti utilizzando iptables. Come posso procedere e come posso garantire che le iptablesregole vengano salvate?


Quale distribuzione linux stai usando?
Paul,

Sto usando Gentoo Linux.
gustavosiq,

Perché non usare / etc / hosts? cf. questo
Geremia,

Risposte:


10

Il blocco dei siti con le regole di iptables è una pessima idea, principalmente perché iptables (come la maggior parte dei firewall) si occupa degli indirizzi IP e la relazione tra un sito e i suoi indirizzi IP è piuttosto libera:

  1. Un sito può avere molti indirizzi IP, che possono essere cambiati piuttosto frequentemente. Una volta create le regole di iptables, anche se si specifica il nome di un sito come parte di una regola, viene utilizzato il primo indirizzo IP in quel momento . Se l'indirizzo del sito cambia, le regole di iptables non saranno aggiornate.

  2. Un indirizzo IP può ospitare molti siti (e succede spesso). Questo diventerà solo più frequente, a causa della scarsità dell'indirizzo IP. Se blocchi un indirizzo IP, blocchi tutti i siti ospitati su di esso.

Quindi, anche se altre risposte spiegano come lo fai, ti esorto a cercare un'altra soluzione. Ad esempio, l'installazione di un proxy http trasparente consentirà di ottenere ciò di cui hai bisogno. Questo HOWTO proxy HTTP trasparente è un po 'obsoleto, ma ti aiuterà a iniziare.

Una volta che si dispone di un proxy trasparente, è possibile aggiungere regole arbitrarie ad esso per bloccare siti specifici, non è nemmeno necessario utilizzare la funzione di memorizzazione nella cache di calamari, se non lo si desidera.

Esistono altri modi per gestire il blocco del sito (altri firewall, proxy, ecc.), Ma le regole di iptables sono praticamente uno dei peggiori modi possibili per gestirlo.


1

È possibile utilizzare la corrispondenza delle stringhe iptables per raggiungere questo obiettivo:

iptables -A OUTPUT -p tcp -m string --string "block-me.com" --algo kmp -j REJECT

-A OUTPUTaggiunge la seguente regola alla OUTPUTcatena.

-m string --string "block-me.com" --algo kmpdice a iptables di cercare la stringa block-me.comusando l' algoritmo di corrispondenza Knuth-Morris-Pratt .

Il modo più semplice per ripristinare i tuoi iptables quando riavvii il tuo computer è installare il pacchetto iptables-persistentse disponibile sul tuo sistema. Se installi il pacchetto dopo aver impostato le nuove regole ti verrà chiesto se desideri salvare le regole attualmente utilizzate per un uso permanente. iptables-persistentfondamentalmente carica solo le regole salvate nei file /etc/iptables/rules.v4e /etc/iptables/rules.v6.

Se si modificano nuovamente le regole, per salvare le modifiche e ripristinarle al riavvio, è necessario salvarle nei file sopra menzionati utilizzando i comandi

iptables-save > /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v6

Ora verranno ripristinati al riavvio.

In realtà non hai nemmeno bisogno iptables-persistent. Questa domanda ha un'altra soluzione quasi altrettanto semplice.

Si noti che è necessario eseguire iptables-savecome root o in sudoquesto modo:

sudo bash -c "iptables-save > /etc/iptables/rules.v4"

Se esegui semplicemente sudo iptables-save > /etc/iptables/rules.v4, riceverai un messaggio "Accesso negato" per rules.v4.


@artificerpi Ciao, gentile con il tuo contributo, ma penso che dovresti farne una domanda se vuoi che risponda. Buona giornata!
PetaspeedBeaver

1

Esistono diversi modi in cui possiamo limitare i siti https.

1- Proxy di calamari

2- IPtables

Con Squid Proxy Server

-> Apri la tua configurazione squid nel mio caso (vim /etc/squid/squid.conf)

-> Posiziona le regole come definito.

acl badsite dstdomain .facebook.com .soundcloud.com .playit.pk .songs.com

http_reply_access deny badsite # Questa riga blocca HTTP

http_access nega CONNECT badsite # Questo blocco di linea HTTPS

-> Dopo questo riavvia il tuo calamaro

Con Iptables È necessario inserire le regole come definito qui

iptables -N STREAM

iptables -I OUTPUT -m stringa --stringa "www.facebook.com" --algo bm --da 1 - a 600 -j STREAM

iptables -I OUTPUT -m stringa --stringa "facebook.com" --algo bm --da 1 - a 600 -j STREAM

iptables -I FORWARD -m stringa --stringa "www.facebook.com" --algo bm --da 1 - a 600 -j STREAM

iptables -I FORWARD -m stringa --stringa "facebook.com" --algo bm --da 1 - a 600 -j STREAM iptables -A STREAM -j REJECT


0

Sotto gentoo, per salvare le regole di iptables che hai aggiunto, usa

/etc/init.d/iptables save

Tuttavia, dovrai anche assicurarti che lo script init iptables (il cui scopo è ricaricare le regole) sia eseguito all'avvio:

rc-update add iptables default 

Entrambi i comandi dovrebbero essere eseguiti come root (tramite sudo se lo hai installato)


0

ok, diciamo che vuoi bloccare l'indirizzo IP 192.168.1.5, inseriscilo al prompt dei comandi nello script della shell:

iptables -A INPUT -s 192.168.1.5 -j DROP

Quindi è possibile bloccare l'indirizzo IP in uscita 192.168.1.2 dal server con questo comando:

iptables -A OUTPUT -d 192.168.1.2  -j DROP

e dovrebbe impedire a quel sito di disturbarti di nuovo. spero che questo ti aiuti.


Tutto apposto. E per salvare le regole? Ad esempio per riavviare la macchina, continuare con le stesse regole. Senza le regole si perde? Molte grazie!
gustavosiq,

penso di sì, anche se non ho mai avuto il blocco di Linux e sono passato a mac OSX poco dopo. ma da quello che so, dovrebbe funzionare.
Jon Valentine,

No, non lo farà senza dichiarare specificamente che le regole dovrebbero essere salvate. Il comando iptables dice al kernel di bloccare varie cose. All'avvio, è necessario ripetere la riproduzione di questi comandi.
Paul,

@thatguy - Ho eliminato il -p tcptuo dal blocco in uscita, in quanto fermerebbe solo i pacchetti tcp in uscita, piuttosto che tutti i pacchetti.
Paul,

@Paul - grazie. dimenticato di quella parte.
Jon Valentine,

-1
-A INPUT -p tcp -m tcp -d www.facebook.com -j DROP

l'abbiamo appena studiato oggi

Debian 7

se si desidera consentire loro di eseguire il ping di questo sito, aggiungere semplicemente --dport 80,443 dopo il nome del sito Web

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.