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?
Please see this discussion page https://forums.aws.amazon.com/message.jspa?messageID=338053
We're looking for long answers that provide some explanation and context. Don't just give a one-line answer: please explain why you're recommending it as a solution. Answers that don't explain anything will be deleted. See Good Subjective, Bad Subjective for more information.
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.