ssh 포트 변경하는 방법입니다.
기본적으로 서버에 할당된 ssh 포트는 22번입니다. 이러한 기본 설정은 aws 라이트세일도, ec2도, oracle도 마찬가지이지만 무차별적인 공격에 노출되기 쉽기 때문에 바꾸어 보도록 하겠습니다.
일단 새로운 ssh 포트로 11111번을 추가한다는 가정 하에 진행하겠습니다.
aws 라이트세일, aws ec2, 오라클 클라우드 등 가상서버를 사용하고 있는 플랫폼에서 포트를 변경할 인스턴스를 선택합니다.
AWS 라이트세일 ssh 포트 추가
aws 라이트세일의 경우 인스턴스를 눌러 들어가면 나오는 네트워킹 탭을 클릭합니다.
IPv4 방화벽에서 규칙 추가를 클릭하고,
- 애플리케이션 : 사용자 지정
- 프로토콜 : TCP
- 포트 또는 범위 : 11111
- IPv6에 대한 중복 규칙 : check
위와 같이 설정한 뒤 생성합니다.
AWS EC2 ssh 포트 추가
EC2 좌측 메뉴 네트워크 및 보안 > 보안 그룹 > 인바운드 규칙 > Edit inbound rules 를 클릭합니다.
규칙 추가를 클릭하여 아래와 같이 추가합니다.
- 유형 : 사용자 지정 TCP
- 포트 범위 : 11111
- 소스 : 0.0.0.0/0
소스 부분은 본인의 ip를 지정해도 관계가 없습니다. 단, ip가 바뀌면 ssh 접근이 불가능해집니다.
Oracle cloud ssh 포트 추가
컴퓨트 > 인스턴스에서 설정할 인스턴스를 클릭하여 인스턴스 세부정보로 진입합니다.
인스턴스 세부 정보 페이지의 기본 VNIC 탭 > 서브넷에 링크가 활성화 된 부분을 클릭합니다.
클릭하면 나오는 페이지 탭 중 보안 목록이라는 탭이 있습니다. 빨간색 부분 이름을 한번 더 클릭하면 수신 규칙이라는 탭이 나옵니다.
수신 규칙 추가를 눌러 규칙을 추가해보겠습니다.
- 소스 CIDR : 0.0.0.0/0
- 대상 포트 범위 : 11111
이렇게만 기재해주고 나머지는 비웁니다. 하단 좌측 수신 규칙 추가를 클릭합니다.
ssh 로그인
일단 이 작업을 하기 전에 절대 aws, 오라클 보안그룹 등에서 ssh 22번 포트를 지우면 안 됩니다. 지우지 않은 상태에서 따라해주세요.
#ssh에 접속한 뒤 권한을 변경합니다.
sudo su
#nano 편집기를 사용하여 sshd_config 파일에 접근합니다. (편집기 변경 가능)
sudo nano /etc/ssh/sshd_config
Port 22번 주석을 풀고 22를 지운 뒤 원하는 코드를 추가합니다. 예시로 11111을 추가하겠습니다.
ctrl+x, y, enter를 순서대로 입력하여 저장 후 파일을 닫습니다.
#services 파일의 ssh 포트도 변경해줍니다.
sudo nano /etc/services
실행하면 tcp 포트들이 1부터 오름차순으로 나열되어있는것을 볼 수 있습니다.
아직 /etc/services 파일에서는 22번 포트가 ssh 포트로 지정되어 있는 것을 볼 수 있습니다.
변경한 포트인 11111으로 수정해준 뒤 ctrl+x, y, enter를 차례대로 입력하여 저장해줍니다.
방화벽 규칙 추가
#ubuntu에서 방화벽을 활성화합니다.
sudo ufw enable
#ssh를 재시작하기 전 방화벽에서도 해당 포트를 허용할 수 있도록 아래 코드를 입력합니다.
sudo ufw allow 11111/tcp
Rule added, Rule added (v6) 을 반환합니다.
#ufw 옵션을 설정하면 웹에서 허용한 포트가 허용되지 않습니다. 가장 중요한 443, 80 등의 접속용 포트를 허용합니다.
sudo ufw allow 443
sudo ufw allow 80
#기존의 22번 포트를 삭제해줍니다.
sudo ufw deny 22/tcp
#재시작합니다.
systemctl restart sshd
ssh 재접속
#원래 접속하던 방식대로 ssh을 재접속합니다. 아래처럼 port 22에서 Connection refused를 반환합니다. 22번 포트 접속이 막힌 것을 확인할 수 있습니다.
ex)
~ $ssh ****@****
ssh: connect to host ***.***.***.*** port 22: Connection refused
Code language: PHP (php)
#포트를 지정하여 ssh 접속
ssh ****@**** -p11111
만약, config 등을 통해 각각 다른 ssh key를 지정하여 접속했을 경우는 config 파일 밑에 Port만 추가해줍니다.
config 파일 설정
로컬 터미널에서 sudo nano ~/.ssh/config 을 입력하여 config에 접근합니다. 만일, 인스턴스의 host명이 [example] 이라고 했을 때, config 파일은 아래와 같습니다.
Host example
HostName ***.***.***.***
User ubuntu
IdentityFile ~/.ssh/id_rsa
Port 11111
Code language: JavaScript (javascript)
각각 다른 host와 구분은 엔터 한 줄 띄기입니다. 참고로 host명 변경하는 방법은 여기를 참고하세요.
이제 터미널에서 ssh example을 입력하여 ssh에 접속합니다. 포트까지 지정해주었으니 굳이 -p 옵션을 사용하여 포트를 지정해 줄 필요가 없습니다.
ex)
Enter passphrase for key '/Users/.ssh/id_rsa':
Code language: JavaScript (javascript)
비밀번호를 입력하여 접근합니다. 접속이 잘 되는 것을 확인했으면, 이제 22번 포트를 완전히 끊어주도록 하겠습니다.
11111번 포트를 추가했던 것과 같이, AWS 라이트세일, AWS EC2, Oracle Cloud에 각각 들어가 22번 포트를 삭제합니다.
만일, 재시작할 때 sudo reboot 명령을 사용했다면 port 00 : Connection refused 을 반환할 수 있습니다. 2분정도 이후에 재접속을 시도합니다.
ssh 포트 변경이 완료되었습니다.