regole iptables per consentire il traffico HTTP solo a un dominio

Devo configurare la mia macchina per consentire il traffico HTTP solo a / da serverfault.com. Tutti gli altri siti web, le porte dei servizi non sono accessibili. Ho trovato queste regole iptables:

#drop everything iptables -P INPUT DROP iptables -P OUTPUT DROP #Now, allow connection to website serverfault.com on port 80 iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT #allow loopback iptables -I INPUT 1 -i lo -j ACCEPT 

Non funziona abbastanza bene:

  • Inoltro DNS AD all'ISP
  • Eseguire un nameserver DNS in un dominio .local
  • I fornitori di CDN eseguono i propri server DNS?
  • escludere un sottodominio da un record di wildcard dns
  • Abbassare TTL sul nameserver, non registrare, quindi modificare i server di nomi?
  • Azure Point-to-Site VPN ma non DNS
    • Dopo che rilascio tutto e continuo a regola 3:

      iptables -A OUTPUT -p tcp -d serverfault.com –dport 80 -j ACCEPT

    Ottengo questo errore:

     iptables v1.4.4: host/network `serverfault.com' not found Try `iptables -h' or 'iptables --help' for more information. 

    Pensi che sia collegato al DNS? Devo anche permetterlo? Oppure dovrei inserire gli indirizzi IP nelle regole? Pensi che ciò che sto cercando di fare possa essere raggiunto con regole più semplici? Come?

    Vorrei apprezzare qualsiasi aiuto o suggerimenti su questo. Molte grazie!

  • Come aggiornare la cache dns nei client?
  • SPF registra chiarimenti sull'utilizzo di un meccanismo
  • Forza gli utenti a passare attraverso un server proxy?
  • BIND ICMP Porta Risposte irraggiungibili
  • Assegnazione di più indirizzi IPv6 su un server
  • Wide Area Bonjour utilizzando DNS SRV Records
  • 5 Solutions collect form web for “regole iptables per consentire il traffico HTTP solo a un dominio”

    Con le regole di IPTables, ordinare le questioni. Le regole vengono aggiunte e applicate, in ordine. Inoltre, quando si aggiungono manualmente manualmente vengono applicati immediatamente. Così, nell'esempio, tutti i pacchetti che attraversano le catene INPUT e OUTPUT iniziano a essere eliminati non appena viene impostata la politica predefinita. Questo è anche, per inciso, perché hai ricevuto il messaggio di errore che hai fatto. Ciò che sta accadendo è questo:

    1. Viene applicata la politica DROP predefinita
    2. IPTables riceve un nome host come destinazione
    3. IPTables tenta una ricerca DNS su 'serverfault.com'
    4. La ricerca DNS è bloccata dall'azione DROP

    Mentre le opzioni di origine / destinazione accetteranno i nomi di host, è fortemente scoraggiato. Per citare la pagina man,

    I nomi host verranno risolti una sola volta, prima che la regola venga inviata al kernel. Si prega di notare che la specificazione di qualsiasi nome da risolvere con una query remota come DNS è una ctriggers idea.

    Slillibri ha colpito il chiodo sulla testa che ha risposto, hai perso la regola DNS ACCEPT. Nel tuo caso non import, ma generalmente posso impostare la politica di default più tardi sul process. L'ultima cosa che vuoi è lavorare in remoto e lasciare SSH dopo aver triggersto una negazione predefinita.

    Inoltre, a seconda della distribuzione, è necessario salvare le regole del firewall in modo che verranno applicate automaticamente all'ora iniziale.

    Sapendo tutto questo e riorganizzando il tuo script, ecco quello che vorrei raccomandare.

     # Allow loopback iptables -I INPUT 1 -i lo -j ACCEPT # Allow DNS iptables -A OUTPUT -p udp --dport 53 -j ACCEPT # Now, allow connection to website serverfault.com on port 80 iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Drop everything iptables -P INPUT DROP iptables -P OUTPUT DROP 

    Inserisci

     iptables -A OUPUT -p udp --dport 53 -j ACCEPT 

    per consentire ricerche DNS.

    Questo tipo di requisito può essere gestito meglio con un proxy web e / o un filter. Dansgaurdian può essere configurato per farlo. Devi usare le regole NAT per forzare il traffico attraverso il filter.

    L'utilizzo di iptables per filtrare consentirà a tutti i siti disponibili dagli indirizzi IP pertinenti. Questo è normalmente un piccolo sottoinsieme dell'integer web.

    Temo che iptables non funziona a questo livello, si preoccupa solo dell'indirizzo IP, non del nome host. Se si desidera bloccare l'accesso a host virtuali di altro nome sullo stesso ip, è necessario esaminare l'inserimento di file .htaccess.

    Devi configurarlo al tuo server web. iptables è un filter di pacchetti. Le transactions HTTP inviano il nome del sito (cioè lo stackoverflow) come parte del carico utile TCP (cioè non come parte dell'intestazione TCP che è ciò che gli iptables leggono facilmente).

    Dato che, e il fatto che le transactions HTTP siano quasi certamente distribuite su più pacchetti (cioè non si può solo corrispondere a una string nell'intestazione HTTP), questo è molto meglio gestito dalla configuration del tuo webserver o da un proxy di fronte di esso.

    Sarebbe utile conoscere il ragionamento dietro questo, ci sono un paio di altre alternative:

    1. Ridisegni l'URL corretto se inserisci l'URL errato (ad esempio, reindirizza a stackoverflow.com se entra a http://www.stackoverflow.com)
    2. Informi il tuo webserver di non servire host diversi da stackoverflow.com
    3. Metti il ​​sito su un IP separato che non risolve nient'altro e solo il tuo webserver ti ascolta.
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.