Comment puis-je bloquer une plage d'adresses IP avec une instance Amazon EC2?

27

Je sais qu'une certaine plage d'adresses IP cause des problèmes avec mon serveur, 172.64.*.*quelle est la meilleure façon de bloquer l'accès à mon instance Amazon EC2? Existe-t-il un moyen de le faire en utilisant des groupes de sécurité ou est-il préférable de le faire avec le pare-feu sur le serveur lui-même?

cwd
la source
1
Si l'instance se trouve dans un VPC, vous pouvez modifier la liste de contrôle d'accès réseau pour refuser une plage spécifique.

Réponses:

17

Bloquez le trafic sur le serveur et le pare-feu si possible, au cas où.

Les groupes de sécurité sont bons car ils sont externes à votre hôte, donc les données ne vous parviennent jamais. Cependant, ils ne sont pas aussi configurables que la plupart des pare-feu basés sur serveur.

Malheureusement, les groupes de sécurité EC2 ne peuvent «autoriser» que les services via une stratégie de refus par défaut. Donc, si vous essayez de bloquer l'accès à un service public "autorisé" pour une petite plage IP, la construction de la règle d'autorisation pour "le reste d'Internet" est un peu plus complexe que de simplement bloquer une plage IP. Comme vous avez spécifié un joli gros morceau, la liste des plages réseau n'incluant pas 172.64.0.0/16 n'est pas trop longue:

0.0.0.0/1
128.0.0.0/3
160.0.0.0/5
168.0.0.0/6
172.0.0.0/10
173.0.0.0/8
174.0.0.0/7
176.0.0.0/4
192.0.0.0/3
224.0.0.0/3

Cette liste devrait être ajoutée pour vos ports. Ensuite, vous pouvez supprimer votre règle «autoriser tout» pour ce port. Si vous avez plusieurs ports pour lesquels vous ne voulez pas qu'ils soient contigus, leur liste devra entrer plusieurs fois. Si vous avez plusieurs groupes de sécurité, cela peut rapidement devenir ingérable.

Le pare-feu local fonctionnera également. iptablesest disponible sur Amazon AMI par défaut, et toutes les distributions Linux

sudo iptables -I INPUT -s 172.64.0.0/16 -j DROP

Après avoir ajouté vos règles, vous devrez les enregistrer et vous assurer que le iptablesservice démarre au démarrage.

# For Amazon Linux
sudo service iptables save

# Other distributions might use one of these:
#sudo iptables-save > /etc/sysconfig/iptables-config
#sudo iptables-save > /etc/iptables/rules.4

Le fichier de configuration dans lequel enregistrer varie en fonction des distributions.

Utilisation d'un VPC

Si vous utilisez un VPC pour vos instances, vous pouvez spécifier «ACLS réseau» qui fonctionne sur votre sous-réseau. Les listes de contrôle d'accès réseau vous permettent d'écrire des règles d'autorisation et de refus, je vous recommande donc de le faire de cette façon.

Mat
la source
cela ne fonctionne plus
Kim Jong Woo
@KimJongWoo qu'est-ce qui ne fonctionne pas? Je ne vois iptablespas que cela ne fonctionne pas, faites-vous référence au grand sous-réseau autorisé dans le groupe de sécurité?
Matt
12

La façon la plus simple d'arrêter le trafic est (en supposant que le VPC est utilisé) en l'ajoutant à l'ACL du réseau VPC de cette instance et en refusant tout le trafic provenant de cette adresse IP.

Une chose à retenir est que le numéro de règle de refus doit être inférieur au premier numéro de règle autorisé.

pg2286
la source
4
Vous voulez dire que le numéro de règle de refus doit être inférieur au premier numéro de règle d' autorisation ?
Dan Tenenbaum
Oui c'est correct.
pg2286
1
gardez à l'esprit qu'il y a une limite de 20 règles ACL. Et ça craint, Amazon.
Alex
3

J'ai rencontré deux fois un problème et j'ai réalisé que ma situation EC2 était un peu différente: iptablesne fonctionne pas si vos serveurs se trouvent dans un cluster derrière un équilibreur de charge élastique (ELB) - l'adresse IP que l' instance connaît est celle de l'ELB.

Si votre ELB est configuré dans une configuration plus moderne, consultez cette réponse SO: /programming/20123308/how-to-configure-aws-elb-to-block-certain-ip-addresses-known -des spammeurs

Dans notre cas, nous n'avions pas bien configuré les choses, j'ai donc dû utiliser Apache, qui peut rechercher l'en- X-FORWARDED-FORtête et bloquer les adresses IP à partir de cela.

Ajoutez ceci à votre configuration apache (peut-être dans un bloc VirtualHost):

RewriteEngine On
RewriteCond %{HTTP:X-FORWARDED-FOR] ^46\.242\.69\.216
RewriteRule .* - [F]

Cela vérifiera l'en-tête qui est défini par l'ELB

Enregistrez la configuration, testez avec apache2ctl -tpour debian / ubuntu (ou apachectl -tpour RHEL), puis redémarrez apache.

Cela renvoie simplement une 403 Forbiddenréponse

Tom Harrison Jr
la source