AWS EC2 : Change SSH default port in inbound rules - amazon-web-services

In EC2 AWS inbound rules, I would like to allow another port than 22 as default SSH connection.
But the port field seems not writable :
Any idea how to unlock the field ?
Thanks

In the inbound rules you can choose Custom TCP and then set the port number.

Related

Not able to ssh/http into EC2 instance

I am at my wits end with this, please help.
I am creating EC2 instances in my default public VPC, yet i am not able to ssh or http to my instance or webserver running into the machine. I checked the following
The SG has inbound SSH, HTTP and HTTPS allowed from 0.0.0.0/0 and assigned to my instance
the default VPC, has route tables with 0.0.0.0/0 pointed to IGW
the NACLs are configured to Allow all traffic. i also manually updated to allow only HHTP, HTTPS and SSH
the Key is use has been given the right permission by running chmod 400 filename
Despite all this not able to connect to the EC2 instance, AMI being Amazon Linux 2 AMI
When I try to ssh, i get a connection timeout error after a while, initially, i thought it was my office network but I am also getting the same from my home network with no firewalls in place
To allow an SSH connection, you will need:
An Amazon EC2 instance running Linux launched in a public subnet (defined as having a Route Table that directs 0.0.0.0/0 to an Internet Gateway)
A Security Group permitting Inbound access on port 22 (Outbound configuration is irrelevant)
Network ACLs left at their default settings of Allow All in both directions
A Public IP address associated with the instance
From your descriptions, I would say that the problem is probably with the Outbound NACLs. Return traffic from an SSH session goes back to the source port on the initiating server, which is not port 22. In general, only change the NACLs if you have a specific reason, such as creating a DMZ. I recommend you reset the NACL rules to Allow All traffic in both directions.

Confused about SSH into private EC2 instance from a public EC2 instance

I have two separate NACLs, one for my public subnet and one for my private subnet. I am able to SSH into my public EC2 instance but not able to SSH into the private one without adding an outbound rule for my private NACL that allows ALL TCP to be open. What I'm confused about is why SSH fails if I only specify port 22 to be open on my private NACL outbound and inbound rule.
NACLs are stateless and need both inbound and outbound rules to allow a specific type of communication.For example ,if you want to access an ec2 instance on using ssh (tcp port 22) ,then in the inbound direction you will need to allow tcp port 22 and for the outbound direction ,since the destination port can be anything in the range 1024-65535 (depending on the client os),you will need to have such kind of rule for the ssh access.
Inbound
Rule # Type Protocol Port Range Source Allow/Deny
101 SSH TCP 22 (CLIENT IP or 0.0.0.0/0) Allow
Outbound
Rule # Type Protocol Port Range Destination Allow/Deny
101 Custom TCP TCP 1024-65535 (CLIENT IP or 0.0.0.0/0) Allow
ref:https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#custom-network-acl
Now specifically to your setup,rules need to be created depending on how you are trying to access your ec2 instance in the private subnet.If you are using a bastion host to connect to your ec2 instance in private subnet ,then you will need to allow that ip/port in the outbound nacl rule .If you are using VPN then the rules will need to be changed accordingly.Perhaps more details about the nacl rule in your public and private subnet and how you are accessing the instances should help us provide more details on the problem.
As a general rule, you should never modify NACLs. They can be used for specific purposes (such as creating a DMZ), but there is rarely a need to change them from their default "Allow All" settings.
Instead, you should be using Security Groups to manage network permissions.
The typical configuration for your scenario would be:
On the Public (Bastion) instance, add a Security Group (Bastion-SG) that permits Inbound connections on port 22 (SSH) from your IP address (it is a good idea to restrict such access to the smallest possible range of IP addresses to prevent unauthorized access)
On the Private instance, add a Security Group (Private-SG) that permits Inbound connections on port 22 from Bastion-SG
This way, the Private-SG specifically references Bastion-SG, which will allow connections from the Bastion. Access attempts from any other location will be denied.
Security Groups are stateful, which means that return traffic will be permitted. This works well with SSH, which could use a range of different port numbers for return traffic.

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.

Does a curl/wget request respond on a random ephemeral port?

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.

Why can't I access a port on my AWS instance, even though I have security group inbound rules that allow it?

I'm new to AWS so this is probably a "doh!" question.
I set up a CentOS 7 instance and assigned a elastic IP. I created a security group and created a custom TCP inbound rule that allows TCP traffic on port 8000 anywhere (0.0.0.0/0), an HTTP rule for port 80 also from 0.0.0.0/0, and SSH/port 22 rule from my laptop IP, and assigned the security group to my instance. iptables/6, firewalld, nor SELinux services are NOT running on the box.
I CAN SSH to the box with the elastic IP. I CAN access http://my_elastic_ip, but I can NOT access http://my_elastic_ip:8000/some.html
netstat shows the 8000 port in listening state, on all addresses.
What am I missing?
It turns out, these ports were blocked by my company's firewall. Enabling them resolved this issue.