원격 시스템을 관리하기 위하여 가장 많이 사용하는 Telnet 서버와 SSH 서버에 대해 공부하였다.
Telnet 서버는 데이터를 평문형식으로 전송하기 때문에 최근에는 보안에 취약하다는 이유로 잘 사용되지 않는 서버이다.
SSH 서버는 데이터를 암호화 하여 알아볼 수 없도록 전송하기 때문에 스니핑이나 가로채기 공격에 대해 안전한 방식이다. SSH 서버는 Telnet 서버를 대체하여 지금도 많이 사용되는 원격 제어방식이다.
가장 먼저 간단하게 Telnet 먼저 설치해보고 평문이 전송되어 정보를 노출 시키는 실습을 진행하도록 하겠다.
우선 telnet이 설치되어 있는지 확인하기 위하여
# rpm -qa | grep telnet
명령어를 이용하여 확인해 보았다. CentOS 6 버전을 사용하고 있는데 설치가 되어 있지 않아서
# yum -y -q install telnet*
로 telnet 과 telnet-server 를 설치하였다. 여기서 -y 옵션은 설치하는 것을 물어보지말고 yes 하라는 옵션과 -q 는 설치 과정을 보여주지말고 설치하라는 옵션이다.
telnet 서버를 이용하기 위한 사용자를 생성하고 비밀번호를 12345로 주었다.
# useradd user1
# passwd user1
그리고 telnet은 보안상의 이유로 사용하지 않는 것이 기본값으로 설정되어있다.
※ /etc/xinetd.d/telnet 파일의 설정에 disable 옵션을 no로 바꾸어주자
위 처럼 설정 한 후 xinetd 데몬을 구동 시켜준다.
$ service xinetd start
telnet 서버가 잘 작동하는지 루프백을 통해 확인해보자.
잘 작동하는 것 같으니 다른 컴퓨터에서 접속할 수 있도록 방확벽을 열어주자.
# iptables -I INPUT -p tcp --dport 23 -j ACCEPT
명령어로 열어주고 윈도우에서 cmd 창을 열어서 telnet 접속을 시도해보자.
잘 작동되는 것을 확인할 수 있다.
이번에는 wireshark를 이용하여 지나가는 패킷을 확인해보자.
와이어샤크는 패킷을 분석하는 프로그램으로 사람이 볼 수 있도록 도와주는 프로그램이다.
https://www.wireshark.org/download.html
Wireshark · Download
Riverbed is Wireshark's primary sponsor and provides our funding. They also make great products that fully integrate with Wireshark. I have a lot of traffic... ANSWER: SteelCentral™ AppResponse 11 • Full stack analysis – from packets to pages • Ric
www.wireshark.org
링크에서 간단하게 다운받을 수 있다.
와이어샤크를 이용하여 telnet 패킷들을 살펴보면 data가 평문으로 전송되는 것을 확인할 수 있다.
이 처럼 user1 이라는 아이디가 그대로 노출되기 때문에 보안에 취약한 telnet은 최근에는 잘 쓰이지 않는다.
이번에는 Telnet 보다 보안성이 높은 SSH 서버를 구축하여 이용해보자.
# yum install -y -q openssh-server
하여 SSH 패키지를 설치해주자.
SSH를 이용하기 위해서는 방화벽을 열어주는 것을 잊지말자.
#iptables -I INPUT -p tcp --dport 22 -j ACCEPT
로 방화벽을 열어주었다.
# service sshd start
sshd 데몬을 시작하고
# ssh [사용자이름]@[호스트이름, IP주소]
하여 원격제어를 시작할 수있다.
SSH의 데이터 전송도 와이어샤크로 확인해보자.
이 처럼 패킷이 암호화 되어 전송되기 때문에 알아볼 수가 없다.
더욱 더 보안을 위한 설정은
/etc/ssh/ssh_config 에서
루트 인증과 공개키, 개인키의 디폴트 위치 등등 다양한 보안 설정을 할 수 있다.
이번에는 user1 과 user2 사용자들이 공개키를 교환하여 비밀번호가 필요없이 로그인하는 실습을 해보겠다.
SSH 설정에서 기본값으로 공개키와 기본키는 ~/.ssh 디렉토리에 저장된다.
# su - user1
명령어로 user1으로 들어가서 공개키와 개인키를 만들어 주겠다.
$ ls -a
명령어를 쓰면 숨어있는 .ssh 디렉토리를 확인할 수 있다.
$ cd .ssh
$ ls -lh
해보니 방금 전에 SSH 접속했던 공개키, 개인키 등 다양한 파일들이 생성되어 있다.
무난한 실습을 위하여 안의 파일들을 모두 지우고 시작하겠다.
$ rm -rf *
안에 있는 모든 파일을 지웠다.
SSH 키 생성
사용법: ssh-keygen -b 비트 -t 알고리즘 -c 설명 -f [경로]키이름
-b 비트 : 768 ~ (기본값: 2048)
-t 알고리즘 : rsa1, rsa, dsa (기본값: rsa)
-f [경로]키이름: ~/.ssh/id_rsa (기본값: 유저 비밀키)
$ ssh-keygen
ssh-keygen 명령어를 이용하여 SSH 키를 생성하였다.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
// 키를 어느 경로에 생성할 것인지 물어보는 것이다. 기본값은 ~/.ssh 이다.
Enter passphrase (empty for no passphrase):
// 인증서의 비밀번호를 설정하는 것이다. 기본값은 없음이기에 설정하지 않았다.
Enter same passphrase again:
// 다시한번 인증서의 비밀번호를 물어보는 것이다. 똑같이 그냥 엔터 눌러주면 된다.
이렇게 키가 생성되었다. pub 확장자 붙은 것이 공개 키이고 안붙은 것이 개인 키이다.
기본 시나리오는 이렇다.
1. 최초 접근시 서버의 공개키를 다운받아 사용자 홈디렉토리 아래의 ~/.ssh/known_hosts 파일안에 추가한다.
2. 클라이언트에서 ssh-keygen을 이용하여 사용자용 공개키와 비밀키를 생성한 후에 접속하려는 서버에 공개키를 심어놓는다.
파일 전송은 scp 를 이용하여 복사하겠다.
- SSH 프로토콜을 이용한 scp(보안 복사)
1. LocalHost(원본) -> RemoteHost(복사본)
scp 경로/원본 사용자@RemoteHost(IP):경로/복사본
2. RemoteHost(원본) -> LocalHost(복사본)
scp 사용자@RemoteHost(IP):경로/원본 경로/복사본
$ scp ./id_rsa.pub user2@192.168.200.103:~/.ssh/
명령어로 공개키를 보냈다.
user2 사용자로 들어가서 받은 공개키의 내용을 .ssh 디렉토리 안에 known_hosts 라는 파일을 만들어 내용을 붙여넣는다.
$ cd .ssh
$ cat id_rsa.pub > known_hosts
로 known_hosts 파일을 생성하였다. 헷갈리지 않기위해 id_rsa.pub 파일은 지워주자.
$ rm id_rsa.pub
user2 도 같은 방식으로 키를 생성하고 공개키를 보내주어야한다.
서버는 authorized_keys에 등록된 공개키만을 허용하기에 user2의 공개키를 생성하고 전송하여 authorized_keys 라는 파일에 저장해주자.
--user2에서--
$ ssh-keygen
$ scp ./id_rsa.pub user1@192.168.200.103:~/.ssh/
--user1에서--
$ cd ~/.ssh
$ cat id_rsa.pub > authorized_keys
받은 공개키를 authorized_keys에 저장해주자.
authorized_keys 파일과 known_hosts의 파일의 내용에
캡쳐 사진과 같이 뒤에 user2@ns1.cgh.co.kr 같은 표시줄은 지워야한다.
known_hosts 도 마찬가지로 한줄로만 ssh-rsa 로 시작하여 설명줄 없이 모두 지워주어야 잘 작동한다.
한줄에 하나의 공개키를 입력하는 방식이므로 두줄이 아니어도 상관없다. 상대방의 공개키만 있으면 되는 것이다.
이제 user2에서 SSH를 이용하여 접속하게 되면 인증키의 비밀번호 없이 인증서로 로그인 할 수있다.
'실습 > [CentOS]' 카테고리의 다른 글
[CentOS] 메일 서버 개념과 구축 (0) | 2020.07.27 |
---|---|
[CentOS] DNS서버 레코드Type 설정, Master/Slave 서버 (0) | 2020.07.23 |
[CentOS] 네임서버(DNS) 기본 구축 (0) | 2020.07.22 |
[CentOS] 시스템의 안정성을 위한 정기적인 시스템 백업 (0) | 2020.06.29 |