I know a certain range of IP addresses are causing problem with my server,
172.64.*.* what is the best way to block access to my Amazon EC2 instance? Is there a way to do this using security groups or is it better to do it with the firewall on the server itself?
Both if possible, just in case.
Security groups are good because they are external to your host so the data never reach's you. They are not quite as configurable as most server based firewalls though.
Unfortunately, EC2 security groups can only "allow" services through a default deny policy. So if you are trying to block access to a publicly "allowed" service for a small IP range, building the allow rule for "the rest of the internet" is a bit more complex than just blocking an IP range. As you have specified a nice big chunk, the list of network ranges not including 18.104.22.168/16 is not too long:
This list would need to be added for your port(s). Then you can delete your 'allow all' rule for that port. If you have multiple ports you want to do this for that aren't contiguous, they list will need to go in multiple times. If you have multiple security groups this can quickly grow to be unmanageable.
Locally firewalling will also work.
After adding your rules you'll need to save them, and ensure the
The config file to save to may vary with distributions.
If you use a VPC for your instances you can specify "Network ACLS" that work on your subnet, and do provide both allow or deny rules.
I have run into an issue twice and realized my EC2 situation is a little different:
If you have your ELB configured in a more modern configuration, see this SO answer: http://stackoverflow.com/questions/20123308/how-to-configure-aws-elb-to-block-certain-ip-addresses-known-spammers
In our case, we didn't have things set up well, so I had to use Apache, which can look for the
Add this to your apache configuration (perhaps in a VirtualHost block):
This will check the header which is set by the ELB
Save the config, test with
This just sends a