[AWS] 방화벽 때문에 인스턴스에 원격 접속할 수 없을 때 해결 방법

여름노래불러줘·2023년 1월 18일
0

AWS

목록 보기
1/1

어쩌다 SSH 접속이 막히게 되었나?

나 같은 경우는 웹콘솔에서 인/아웃바운드 정책 다 짤 수 있는데
굳이 인스턴스 안에서 방화벽을 활성화 시켜가지고 이 사단이 났다.
즉 보안 정책에서 22번 포트로 들어오는 요청을 허용했지만,
인스턴스 내부 방화벽 (ufw) 에서 ssh 연결을 거부하고 있었기 때문에 SSH 연결이 막히게 되었다.

해결방법

내가 직접 데이터 센터 가서 방화벽 설정을 풀 수도 없고,
인스턴스를 없앴다가 다시 만들어야 했나? 생각도 했다.
다행히도 아직 개발 진행 중인 서비스가 올라가 있어서 그래도 상관은 없었지만
또 다시 설정하기가 너무 싫어서 방법을 찾아 봤는데 아마존에서 역시 이런 상황에 대비해 방법을
마련해두었다.

  1. 콘솔에서 해당 인스턴스를 선택하고 "인스턴스 상태" 에서 "인스턴스 중지"를 누른다.

  2. 바로 옆의 "작업" > "인스턴스 설정" > "사용자 데이터 편집" 을 누른다.

  1. 인스턴스가 종료되면 사용자 데이터 편집 설정창의 입력폼에 다음을 복사해 붙여넣고 저장한다.
    다른 옵션은 건드리지 않는다.
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
 
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
 
#cloud-config
cloud_final_modules:
- [scripts-user, always]
 
--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
 
#!/bin/bash
iptables -P INPUT ACCEPT
iptables -F
systemctl restart sshd.service || service sshd restart
if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\
then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi
--//

이 설정은 인스턴스를 시작할 때 인스턴스에 설정된 모든 방화벽 정책을 초기화시킨다. 즉 설정을 완료하고 나면 다시 인스턴스를 중지하고 추가했던 내용들을 삭제해야한다.

  1. 이제 ssh 연결을 재시도 하면 정상적으로 연결이 된다.
    sudo ufw allow 22 등의 명령어를 이용해 22번 포트로 들어오는 접속을 허용시켜서 다시는 인스턴스에 연결하지 못하는 불상사를 예방하자.

1개의 댓글

comment-user-thumbnail
2024년 7월 30일

흑 절 살리셨습니다.

답글 달기