Does a curl/wget request respond on a random ephemeral port? - amazon-web-services

When I was setting up VPC in aws, I had created an instance in public subnet. The instance was not able to ping to google and was giving timeout when connecting to yum repository.
The security groups were open with required ports.
When I edited the ACL to add ICMP from 0.0.0.0/0 in inbound the instance was able to ping to google. But the yum repository was still was giving timeout. All the curl/wget/telnet commands were returning error. Only ping was working.
When I added the following port range for inbound in ACL 1024-65535 from all 0.0.0.0/0 that is when the yum repository was reachable. Why is that?
The outbound traffic was allow all in ACL. Why do we need to allow inbound from these ports to connect to any site?

In AWS, NACLs are attached to subnets. Security Groups are attached to instances (actually the network interface of an instance).
You must have deleted NACL Inbound Rule 100, which then uses Rule *, which blocks ALL incoming traffic. Unless you have specific reasons, I would use the default rules in your NACL. Control access using Security Groups which are "stateful". NACLs are "stateless".
The default Inbound rules for NACLs:
Rule 100 "ALL Traffic" ALL ALL 0.0.0.0/0 ALLOW
Rule * "ALL Traffic" ALL ALL 0.0.0.0/0 DENY
Your Outbound rules should look like this:
Rule 100 "ALL Traffic" ALL ALL 0.0.0.0/0 ALLOW
Rule * "ALL Traffic" ALL ALL 0.0.0.0/0 DENY
When your EC2 instance connects outbound to another system, the return traffic will usually be between ports 1024 to 65534. Ports 1 - 1023 are considered privileged ports and are reserved for specific services such as HTTP (80), HTTPS (443), SMPT (25, 465, 587), etc. A Security Group will remember the connection attempt and automatically open the required return port.

Related

security group aws specific ip http/https blocks everything

I've follow the documentation of I've read https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html
and I want to create a security group in AWS which allows only one IP access to ports 80 or 443, but AWS is blocking everything even the IP which should have access when I apply this group.
We are using nginx in the ec2 server and the certificate was created with certbot
What do you mean by "blocking everything"?
From these 2 rules, port 80 and port 443 are only open to the one IP that you had given. If this is a webapp, it is likely that you'll have a loadbalancer setup to receive the traffic.
Check the ELB security group and block traffic there (If there is an ELB setup)
Check the VPC NACL if there are any block for port 80/443 traffic. If that is the case, NACL rule will take precedence here
Make sure you check your outbound rules also. If by "Blocking everything", you meant the outbound traffic
Edit the inbound rule to be only lock out any other port to the instance ip address only, while you open 443 and 80 to everyone.
eg. if ur ec2 instance public ip is 13.255.77.8 and you don't want port 5000 to be accessible to the public, create a custom tcp with your that is only acessible to that port ie mapping port 5000 to this ip - 13.255.77.8/32

EC2 - Make Windows instance accessible from anywhere (XAMPP)

I've launched an EC2 instance on AWS, no after setting up XAMPP and uploading all my archives it's now time to make the site public.
Thing is that I've already tried to put all the firewall on windows allowing inbound and outbound connections to "allow" and then also on my AWS Security groups this:
Inbound:
HTTP TCP 80 0.0.0.0/0
HTTP TCP 80 ::/0
Custom TCP Rule TCP 0 - 8080 0.0.0.0/0
Custom TCP Rule TCP 0 - 8080 ::/0
Outbound:
All traffic All All 0.0.0.0/0
As i mentioned before, i allowed all inbound and outbound connections on the windows firewall of the instance.
What am i doing wrong and how can i fix this issue to make the server accessible from the IP that amazon assigned my instance?
Thanks.
Couple of things to check:
(Obvious One) Make sure the application is listening on port 80 / 8080 (You mentioned both ports in SGs. Not sure on which port your application is running)
If you are planning to access your application over the internet, make sure you have public IP assigned to your instance.
Check your NACLs if both inbound and outbound rules are added. If you are accessing the app from a specific VPC / OnPrem network, add it to NACLs. If you dont want to restrict your app and want to access over internet, make sure you have 0.0.0.0/0 is added in NACL inbound and outbound
If accessing the app over internet, you need to have Internet gateway assigned to your VPC.
Hope this helps troubleshooting your issue. Provide more details like, you instance is in public subnet or private subnet. Weather you are accessing app from within the VPC or over internet etc.

Cannot access EC2 via HTTP/HTTPS

I recently had to completely rebuild my AWS EC2 environment, because I accidentally deleted the SSH key, thinking it was something else. Unfortunately, I cannot access my Tomcat instance which I have confirmed is running on that EC2 instance.
I have added the following security groups for inbound HTTP traffic:
Type. Protocol Port Range Source
HTTP TCP 80 0.0.0.0/0
HTTP TCP 80 ::/0
Custom TCP Rule TCP 8080 0.0.0.0/0
Custom TCP Rule TCP 8080 ::/0
SSH TCP 22 (my IP address)
I have three security groups, and the above rules were added to the group named default:
rds-launch-wizard
launch-wizard-1
**default
I purchased a domain via AWS which I have pointed to this EC2 instance using Route 53. Previously, the DNS was available, but now it is not. However, there is a bigger fundamental problem here because I can't even ping the public IP of my EC2 instance.
I am in fact able to access my EC2 instance via SSH on port 22, which is why I was able to setup Java and Tomcat (both of which I have confirmed are running).
I suspect that some state from my previous configuration is responsible for this problem, but I don't even know where to begin looking for something.
Any help would be appreciated.
To have inbound/outbound internet access to your EC2, you need to look for three things:
Are you able to SSH from outside or inside AWS via an internet gateway (IGW)? If you can SSH from outside then you already have IGW setup properly. Otherwise, make sure your subnet's route table points to IGW by having a route like below:
0.0.0.0/0 igw-efxxxxxxx Active No
Network ACL: Go to your EC2's subnet and find its associated NACL
Create both inbound and outbound rules to ALLOW traffic to the above NACL by adding a rule like below:
100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW
Security Groups: Your security groups look good. No changes required there. However, based on the comments you made below it appears that, while you did define a security group with the proper inbound rules, for whatever reason you did not associate that security group with your EC2 instance. As a result, the inbound rules you defined were not being applied. To fix this, from the EC2 instance tag access the following:
Actions -> Networking -> Change Security Groups
Then, associate your security group with your instance by checking the appropriate box. After making these changes, your inbound rules should take effect, and you should be able to hit your Tomcat instance running on EC2.

AWS network ACL: why do I need to allow outbound port 80 to be able to browse Internet?

I am very new to AWS and networking. I have been playing with network ACL. I realized that if I don't allow outbound port 443 (HTTPS) on the network ACL, I wouldn't be able to use a browser to go to https://www.google.com from within the EC2 instance in the subnet associated with this ACL.
Likewise, if I don't allow outbound port 80, I wouldn't be able to go to http://www.cnn.com.
This confused me. When I allow port 80 outbound on the ACL, am I allowing the EC2 to talk to port 80 on the CNN server, from an ephemeral port on my EC2, or am I allowing the EC2 to initiate a connection from port 80 on the EC2?
use the security groups at instance level to have security at instance level.And unlike security group, ACL is stateless and works at subnet level i.e if you want your instances to communicate over port 80(http) then you have add an inbound and outbound rule allowing port 80.
You don't have to add any rules. The default network ACL is configured to allow all traffic to flow in and out of the subnets to which it is associated. Each network ACL also includes a rule whose rule number is an asterisk. This rule ensures that if a packet doesn't match any of the other numbered rules, it's denied. You can't modify or remove this rule.
Rules allow all IPv6 traffic to flow in and out of your subnet. We also add rules whose rule numbers are an asterisk (Catch All) that ensures that a packet is denied if it doesn't match any of the other defined numbered rules.
A network ACL has separate inbound and outbound rules (Stateless), and each rule can either allow or deny traffic.
Out Bound Rules allow outbound traffic from the subnet to the Internet. In other words it is matching the traffic flow with the defined rules in the ACLs list and apply it (ALLOW/DENY).
If you have private instances that should not be accessible by public users in the internet it is best practice from security point of view to place these instances in a private subnet and use NAT instance in a public subnet and make all traffic flow goes through this NAT instance to make patch updates and get the public access.
For more information, Check Amazon Docs

AWS vpc access the Internet from public subnet

I configured public subnet on my VPC and add some Security Groups and NACL roles... I notice that when I set on NACL these roles in the inbound section :
100 SSH (22) TCP (6) 22 0.0.0.0/0 ALLOW
200 HTTP (80) TCP (6) 80 0.0.0.0/0 ALLOW
300 HTTPS (443) TCP (6) 4430.0.0.0/0 ALLOW
I didn't got access to the internet !!! :(
unless I added this role in the inbound section:
400 ALLTraffic ALL ALL 0.0.0.0/0 ALLOW
(after adding this role, I succeeded to get internet access by running "yum update" for example...)
It is really necessary or I configured somethings wrong ?
Security Groups are stateful and automatically allow return traffic.
Network ACLs are stateless and require you to provide inbound rules.
This is why you could get access to the internet once you added the 400 ALLOW Network ACL rule.
Depending on your requirements, you may not need Network ACLs at all instead relying on the Security Groups alone.
--
AWS VPC Security Groups and Network ACLs have different but complementary behavior.
This documentation describes the difference in detail.
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Security.html#VPC_Security_Comparison