지난 포스팅에서는 VM웨어에서 구동 중인 리눅스의 IP를 변경하는 방법과, 변경된 IP로 원격 접속 프로그램을 사용해 원격 접속하는 방법에 대해 알아보았다.
기본 설정만 진행된 리눅스의 경우, IP 주소와 계정만 알고 있다면, 어느 컴퓨터에서든지 리눅스의 22번 포트로 SSH 원격 접속이 가능하도록 되어 있다. 그런데 만약, 내 리눅스의 관리자 계정(root)을 탈취한 어떤 사람이, 이 리눅스가 사용중인 IP만 알고있다면, IP와 계정만을 이용해 내 리눅스에 접속하여 리눅스 내에 만들어놓은 파일을 변형시키거나, 삭제하거나, 심할 경우, 민감한 정보를 탈취하는 등의 여러 문제가 발생할 수 있다. 특히나 리눅스의 경우, 현재 대부분의 포털 사이트나 금융권에서 서비스를 위해 사용하고 있는 운영체제이다 보니, 인가받지 않은 사람이 함부로 리눅스 CLI에 접속하는 것을 막아야만 한다.
인가받지 않은 사용자가 리눅스 CLI 에 원격 접속하는 방법을 막기 위한 첫 번째 방법은 ssh 원격 접속 통신 포트 번호를 변경하는 것이다. 리눅스는 ssh 접속과 관련한 설정 파일에서, ssh 통신 포트를 변경할 수 있는 기능을 제공한다.
SSH 설정 파일을 알아보기 위해, 지난 번에 설정한 리눅스 IP로 원격 접속을 시도한다. putty를 열면 IP 입력 부분 옆에 port 번호를 입력하는 부분이 있는데, 이 값은 22번이 기본값으로 설정되어 있다.
비밀번호를 치고 리눅스 접속이 완료되었다면, SSH 설정 파일에 대해 하나씩 알아보도록 하자.
1. SSH 접속을 위해 알아야 할 것들.
리눅스로 ssh 통신을 진행하기 위해서 다음의 3가지를 알아야 한다.
(1) ssh 설정 파일에 명시된 ssh 통신 포트번호.
리눅스는 설정 파일에 명시된 ssh 통신 포트 번호를 확인하고, 해당 포트 번호로만 ssh 통신을 진행하려 시도한다. 따라서 ssh 설정 파일에 명시된 내용을 수정해주는 작업이 필요하다. ssh 설정 파일의 포트 수정 방법은 잠시 뒤에 알아보도록 하자.
(2) 리눅스의 ssh 통신을 허용하는 방화벽 설정 확인
리눅스는 외부와의 통신을 통제할 수 있는 자체 방화벽을 가지고 있다. 기본적으로 ssh 접속을 위한 포트는 허용되어 있지만, 그 외의 포트는 허용되어 있지 않다. 리눅스 방화벽은 기본값으로 모든 통신을 불허하되, 사용자에 의해 허용된 통신만 통과시키도록 되어있다. 마찬가지로 이 부분 역시, 변경한 port 번호를 통해 통신을 허용하도록 방화벽 설정을 변경하는 방법을 알아보려 한다.
(3) SE Linux에 허용된 ssh 통신 포트 확인 (CentOS 7 한정)
CentOS7은 SE Linux라고, 리눅스의 보안 안정성을 높이기 위한 프로그램을 제공한다. 이 프로그램은 포트 변경과 같이 민감한 정보가 함부로 변경되는 것을 방지하는 역할을 한다. 마찬가지로 이 부분 역시, 뒤에서 SE Linux에 통신 포트를 추가하는 방법을 알아보려 한다.
2. SSH 설정 파일의 위치
리눅스의 설정과 관련된 모든 파일은 /etc 폴더에 위치한다고 엄청 오래전의 포스팅에서 언급한 적이 있다. 이 폴더로 이동하면, 리눅스 설정과 관련된, 무진장 많은 여러 하위 폴더가 존재하는 것을 확인할 수 있는데, 이 중 ssh라는 이름의 폴더가 ssh와 관련된 설정 파일이 들어 있는 폴더이다.
/etc/ssh 폴더 내에 여러 파일이 존재하는데, 그 중 sshd_config라는 파일이 바로 SSH 접속과 관련된 설정 정보를 가지는 파일이다. 이 파일을 vi 편집기로 열어 들어가보자.
해당 파일은 139줄로 이루어진 파일인데, 대부분의 줄은 주석(#)으로 처리되어 있다. 일반적으로 리눅스의 파일 내용 중 주석으로 표시된 줄은 해당 파일의 사용법을 작성한 줄이거나, 설정 기본값이 작성된 줄이라고 보면 된다. 예를 들어, 위의 사진에서 3번째 줄을 보면, "이 파일은 sshd 서버의 시스템 설정 파일입니다" 라고 파일에 대해 소개하는 문구가 보인다. 영어 해석이 가능하다면, 해당 파일에 대해 자세히 알지 못하더라도, 대략 어떤 내용이 포함되어 있는지 주석 줄을 보고 확인할 수 있다(영어 공부 열심히 하자...).
SSH의 설정과 관련된 부분이 굉장히 많은데, 자주 사용하는 부분에 대해서만 하나씩 알아보자.
(1) SSH 접속 포트 설정
CentOS 7의 경우, 13번째 줄을 보면, "SELinux 시스템에서 (ssh 접속)포트를 변경하려면, SE Linux에 변경 내용을 알려야 됩니다" 라는 문구가 보인다. 이는 CentOS7에서 볼 수 있는 특징인데, CentOS7은 Secure Enhanced Linux라고 해서, ssh 포트와 같이 민감한 정보가 변경, 추가되는 것에 대해 꾸준히 감지를 하고 있다(필자의 기억에 CentOS5 는 SE Linux 환경이 아니기 때문에 이러한 내용이 없는 것으로 알고 있다). 따라서 sshd_config파일에서 port 번호를 변경하면, "semange port -a -t ssh_port_t -p tcp {변경번호}" 명령어를 입력하여 SE Linux에게 port 번호가 추가되었음을 알리라는 의미다. 관리자 권한이 필요하기 때문에 root 계정으로 해당 명령어를 수행하거나, sudo 를 명령어 앞에 붙여주어야 한다.
17번째 줄에, 이 SSH 포트 번호와 관련된 설정이 보이는데, port 22로 적힌 줄 앞에 주석(#) 처리가 되어 있다. 이렇게 주석처리가 된 줄은 리눅스가 "아!, 이 줄은 사용자에게 설명하기 위한 줄이니 내가 읽어서 해석할 필요가 없군"이라며 지나가긴 하지만, 기본적으로 SSH는 22번 포트를 사용하여 통신을 진행하기 때문에, port 번호를 따로 명시하지 않더라고 22번 포트를 통해 SSH 접속이 가능하도록 미리 프로그래밍이 되어 있다.
따라서, SSH 통신 포트 번호를 변경하기 위해서는, port 22 부분의 주석을 삭제한 뒤, 변경할 포트 번호를 port 뒤에 작성해주면 된다. 아래와 같이.
** 참고로 포트 번호를 바꿀 때, 1024번 이상의 숫자를 사용하도록 하자. 이 이하의 포트는 다른 통신을 위해 미리 지정된 포트들이 있기 때문에, 다른 서비스와 충돌이 일어날 수 있기 때문이다. 40000번대 번호를 사용해서 변경해보는 것을 추천한다.
포트 번호 변경 후, vi 편집기를 저장 / 종료한 뒤 cat으로 sshd_config 설정 파일의 내용을 보면, port 번호가 명시되었던 줄의 주석이 사라지고 번호가 변경된 것을 확인할 수 있다.
설정 파일에서 포트 번호를 변경했지만, 변경된 설정 내용을 적용하기 위해서는 ssh를 실행하는 서비스(데몬)을 다시 실행해주어야 한다. ssh를 실행하는 데몬 이름은 sshd라고 하는데, 이 sshd가 작동을 하고 있어야만 리눅스의 ssh 접속이 가능해진다. 이 sshd 서비스가 동작 중인 것은 다음 명령어를 통해 알 수 있다.
# systemctl status sshd (CentOs 7)
# service sshd status (CentOs 7 이전)
sshd 서비스(데몬)를 다시 실행하는 명령어는 다음과 같이 사용한다.
# systemctl restart sshd (CentOS7)
# service sshd restart (CentOS 7 이전)
명령어가 제대로 작동한다면, 위와 같이 프롬프트가 뚝 떨어진다. 하지만, 아직까지는 44444번 포트로 접속을 시도하면, 아래와 같이 timeout관련 에러가 뜨면서 ssh 접속이 제대로 이루어지지 않는 것을 확인할 수 있다.
이 이유는, 리눅스의 방화벽에서 44444번 포트로의 통신이 허용되지 않았기 때문이다. 따라서 44444번 포트로 ssh 통신이 허용될 수 있도록 리눅스 방화벽 설정을 변경해주어야 한다. 다음의 명령어로, 방화벽에 44444번 포트 통신을 허용하도록 해 주자.
방화벽의 변경 설정 내용을 적용하기 위해, 방화벽 서비스도 다시 실행해주어야 한다. 방화벽 서비스 재시작 명령어는 다음과 같다.
# systemctl restart firewalld (CentOS 7)
# service iptables restart (CentOS 7 이전)
다시 한 번 putty 등으로 44444번 포트 접속을 시도하면, 아까와 달리 로그인 화면이 나타나는 것을 확인할 수 있다.
원래대로 22번 포트로 접속을 시도하면, "Conection Refused", 즉 접속 거부 메세지가 나타난다. 왜냐하면, sshd_config파일에 22번이 아닌 44444번 포트로 ssh 통신을 허용했기 때문에, 22번 포트로 들어오는 통신에 대해 리눅스에서 거부를 하기 때문이다.
이번 포스팅에서는 리눅스의 ssh 원격 접속 포트 번호를 변경하는 방법에 대해 알아보았다. 물론, ssh 포트 변경을 위해, SE Linux 및 방화벽, 서비스 실행 등과 관련된 내용도 알아야 한다. 하지만 본 포스팅에서 모든 것을 다 다룰 수 없기 때문에, ssh 설정과 관련된 내용에 대한 포스팅이 마무리된 후, 추후 업로드 될 포스팅에서 나머지 내용에 대해 언급하려고 한다. 우선은 본 포스팅의 내용을 참조하여 따라하기만 하자...(방법이 없다)
다음 포스팅에서는, SSH 접속과 관련된 여러 설정에 대해 알아보려 한다.
FIN.
'IT Security > LINUX Basic' 카테고리의 다른 글
19. Linux - 공개키를 이용한 SSH 자동 접속 (0) | 2020.05.31 |
---|---|
18. SSH 설정 변경2 - SSH 접속 허용 인터페이스 설정 및 root 로그인 금지 설정하기 (0) | 2020.05.17 |
16. 리눅스 IP 변경 및 네트워크 설정 (0) | 2020.04.15 |
15. 리눅스 IP 확인 및 원격 접속 (0) | 2020.03.31 |
14. Linux - 리다이렉션(Redirection)을 이용한 표준 입출력 변환 (0) | 2020.03.03 |
댓글