Question

J'ai deux applications rails sur des serveurs virtuels distincts, mais dans la même installation. Les deux applications peuvent communiquer via des adresses IP locales.

Il s'agit d'une question en deux parties:

1) Comment puis-je vérifier l’origine de la demande et limiter les demandes à celles de cet emplacement?

2) Pensez-vous que cela serait suffisamment sécurisé?

Mon instinct me dit que cela n’est pas assez sécurisé à cause de la parodie d’IP, mais je pense que OAuth ou similaire est un peu trop hardcore pour mes besoins. Bien que peut-être pas.

C'est la première fois que je m'adresse à quelque chose comme cela et je recherche quelqu'un qui puisse me pousser dans la bonne direction.

Merci.

Était-ce utile?

La solution

En fonction de votre hébergeur, le réseau local (auquel appartiennent vos adresses locales) peut être un réseau privé uniquement accessible à vos instances ou, plus probablement, partagé avec d'autres machines virtuelles. cela ne vous appartient pas. Vous ne seriez pas ouvert aux attaques externes directes, mais à toute machine virtuelle compromise partageant le même réseau local que vous pourriez être un tremplin pour une attaque, vos préoccupations sont donc tout à fait valables.

Répondez, dans l’ordre, à vos deux préoccupations:

  1. Configurez iptables pour que les interfaces locales acceptent uniquement les requêtes provenant de ports spécifiques provenant d'adresses IP locales spécifiques (lisez un didacticiel pour une meilleure compréhension de la configuration de iptables .) Toutes les autres machines virtuelles du réseau local ne doivent pas l'être capable de vous interroger, bien qu'ils puissent éventuellement intercepter votre trafic (voir ci-dessous.)
  2. Non; vous devez utiliser SSL sur toutes les connexions intra-nœuds . Cela vous protégera de deux manières: premièrement, il vous protégera de l'usurpation d'identité (un attaquant sera rejeté s'il n'a pas votre certificat, même s'il contourne iptables en usurpant son adresse, ou parce que votre < code> iptables config est écrasé par un administrateur), et ensuite, il protégera vos données des regards indiscrets (par exemple, un attaquant ne pourra pas surveiller le trafic de vos mots de passe.) Certaines applications (par exemple la plupart des moteurs de base de données, net -snmpd installé en mode v3, etc.) supporte SSL de manière native. Vous pouvez également créer et utiliser des tunnels ssh ou utiliser des stunnel
  3. .

Exemple de configuration de base iptables permettant des services de base (HTTP, SSH, etc.) sur l'interface publique (Internet), ainsi que www1 et www2 pour vous connecter à MySQL de ce noeud sur le port 3306 de l'interface eth0 ( www1 et www2 sont définis dans / etc / hôtes afin qu’ils se résolvent en adresses IP appropriées.):

# * raw
#
#  Allows internal traffic without loading conntrack
# -A PREROUTING -i lo -d 127.0.0.0/8 -j NOTRACK

*filter

#  Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -i ! lo -d 127.0.0.0/8 -j DROP

#  Accepts all established inbound connections (TCP, UDP, ICMP incl. "network unreachable" etc.)
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allows all outbound traffic
#  You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allows SSH connections
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Allow ping
-A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level debug

# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT

#  Allows MySQL within our cluster ONLY
-A INPUT -p tcp -s www1 -i eth0 --dport 3306 -j ACCEPT
-A INPUT -p udp -s www1 -i eth0 --dport 3306 -j ACCEPT
-A INPUT -p tcp -s www2 -i eth0 --dport 3306 -j ACCEPT
-A INPUT -p udp -s www2 -i eth0 --dport 3306 -j ACCEPT

COMMIT

Autres conseils

Cela ne ressemble pas vraiment à une question Rails, mais à une question d’architecture Web. Je suppose que les deux machines sont accessibles au monde extérieur via HTTP. Si tel est le cas, vous pouvez envisager de placer un pare-feu devant les deux ordinateurs pour créer un réseau local sur lequel les deux ordinateurs sont activés.

Une fois que vous avez terminé, vous devriez pouvoir configurer le pare-feu pour interdire les demandes en fonction des critères que vous spécifiez. Étant donné qu'il s'agit d'une application Rails, je vais supposer que l'API est un ensemble de ressources. Si tel est le cas, vous pouvez configurer votre pare-feu pour filtrer les requêtes de l’API privée.

De cette manière, les machines du réseau local peuvent communiquer librement, leurs requêtes ne passant pas par le pare-feu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top