Qual è la regola di iptables per bloccare tutto il traffico https tranne per un singolo IP?

0

Sto provando a configurare un microservizio per la mia applicazione web, che è ospitata all'indirizzo ip X.X.X.X . Il microservizio dovrebbe accettare solo connessioni https da questa app Web.

Ho testato il microservice come funzionante dal server web con le regole di "ip allow all" di tabelle ip libere, ma le mie regole di seguito (in particolare, gli ultimi 2) non mi lasciano passare.

Ecco le regole della mia iptables al momento:

#allow current ssh connection so we don't disconnect ourselves
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow ssh traffic
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT
#allow ssh web traffic only from nominated webserver
iptables -A INPUT -p tcp -s X.X.X.X/32 --dport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -d X.X.X.X/32 --sport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Ho ricontrollato che X.X.X.X ip sia corretto e che il proxy dell'app Web abbia lo stesso IP (è nginx sullo stesso server). Cosa sto rovinando?

Modifica: output di iptables -L :

target     prot opt source               destination         
ACCEPT     tcp  --  X-X-X-X.rev.cloud.scaleway.com  anywhere             tcp dpt:https state ESTABLISHED

Questo significa che in qualche modo il mio IP "sorgente" non è in realtà la fonte della richiesta che penso di inviare? (ed è invece il provider VPS scalare?)

    
posta Escher 15.01.2018 - 08:49
fonte

1 risposta

2

Se vuoi solo un singolo IP, questo dovrebbe farlo nel modo più ritentivo possibile:

# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P INPUT DROP
# iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED --jump ACCEPT
# iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED --jump ACCEPT
# iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED --jump ACCEPT
# iptables -A INPUT -m conntrack --ctstate INVALID --jump DROP
# iptables -A FORWARD -m conntrack --ctstate INVALID --jump DROP
# iptables -A OUTPUT  -m conntrack --ctstate INVALID --jump DROP

# iptables -A INPUT --in-interface lo --jump ACCEPT
# iptables -A OUTPUT --in-interface lo --jump ACCEPT
# iptables -A INPUT -p tcp -m tcp --source  X.X.X.X/32 --dport 443 -j ACCEPT
# iptables -A INPUT-p tcp -m tcp --source  X.X.X.X/32 --dport 22 -j ACCEPT
# debugging rules to help you set up.
# iptables -A INPUT -j LOG
# iptables -A FORWARD -j LOG 
# iptables -A OUTPUT -j LOG  

e se non ti interessa di ipv6 lascia semplicemente tutti quelli separati da lo.

Fondamentalmente qualunque cosa è accettata per l'input verrà tracciata e l'output è permesso mentre è releated.

Se hai bisogno di DNS, questo è extra, ma se sei in grado di accedere ai log dovrebbe aiutarti a vedere cosa ti manca.

    
risposta data 15.01.2018 - 08:57
fonte

Leggi altre domande sui tag