SSH(Secure Shell)

SSH란 원격에서 서버로 터미널에 접속할때 암호화를 통해 안전한 접속환경을 제공하여 telnet과 같은 안전하지 않은 원격 터미널 접속 프로그램을 보완하는 프로토콜 또는 프로그램입니다. SSH는 기본적으로 포트 22번을 사용합니다.

 

원격에서 telnet으로 서버에 접속할 경우 암호화 과정을 거치지 않으므로 스니핑을 한다면 계정과 비밀번호가 고스란히 노출됩니다. 하지만 ssh를 사용하여 접속한다면 암호화가 되었기 때문에 스니핑을 하여 패킷을 보더라도 의미를 파악할 수 없습니다. 또한 강력한 인증기능까지 지원합니다.

 

SSH의 주요 기능은

  • 보안 접속을 통한 rsh, rcp, rlogin, rexec, telnet, ftp 등을 제공합니다.
  • IP spoofing을 방지하기 위한 기능을 제공합니다.
  • X11 패킷 포워딩 및 일반적인 TCP/IP 패킷 포워딩을 제공합니다.

[출저 : 위키백과]

 

그렇다면 telnet접속과 ssh접속은 어떻게 다른지 눈으로 직접 살펴봅시다.

 

 

telnet으로 서버접속( 클라이언트 IP : 110.13.7.47 , 서버 IP : 110.13.7.20)

window 클라이언트에서 cmd에서 telnet을 통해 서버로 접속합니다.

엔터를 치는 순간 네트워크에서는 어떤 페킷이 오고 갔을까요? 아래는 와이어샤크로 본 페킷들입니다. 이 페킷을 보면 localhost login: 이라는 문자열을 볼 수 있습니다. 

서버(110.13.7.20)에서 클라이언트(110.13.7.47)로 보내는 군요. 그렇다면 클라이언트의 telnet 터미널 화면은 어떻게 됐을까요?

localhost login: 이라는 로그인 화면으로 들어왔습니다. 그렇다면 위의 페킷은 로그인하라는 디스플레이 메시지를 보냈다는 것을 짐작할 수 있겠군요.

 

이제 로그인을 시도해보지요. 아이디는 reakwon, 비밀번호는 reakwon입니다. 여기서 클라이언트(110.13.7.47)에서 서버(110.13.7.20)로 보내는 페킷만을 봅시다.

자, r이라는 문자를 보내는 군요. 이후에 75.6.355213의 페킷을 봅시다. r문자를 보낸 이후의 페킷입니다.

e라는 문자가 찍혔네요. 이렇게 reakwon이라는 문자를 서버에 보내고 서버는 그에 대한 응답으로 다시 reakwon이라는 문자를 각각 echo합니다. 이렇게 유저의 계정은 찾을 수 있습니다.

 

비밀번호 역시 다르지 않습니다. 이후의 페킷을 보면 알 수 있습니다. 다음은 계정의 비밀번호를 알아낼 수 있는 페킷들입니다. 하나씩 보도록 하지요.

페스워드의 시작을 알리는 페킷이 나옵니다. 

이후 아까처럼 reakwon의 문자들을 연속해서 서버에 보냅니다. 비밀번호를 입력할땐 서버로 부터 echo가 오지 않는군요.

이제 망했습니다. 해킹당했군요.

 

 

ssh로 서버접속( 클라이언트 IP : 110.13.7.47 , 서버 IP : 110.13.7.20)

다음은 ssh로 접속한 페킷들입니다. 대충보아도 서버와 클라이언트의 페킷이 암호화되었다고 하는군요. SSH버전은 2입니다.

페킷 하나를 보면 이렇습니다. 음, 암호화된 페킷을 보면 34e96..., 메시지 인증 코드는 14b4... 입니다. 

암호화된 페킷이라 잘 모르겠습니다. 암호화를 하여 데이터를 전송하고 수신하는 것만 알면 되겠습니다.

CentOS7에서 SSH로 서버 접속

CentOS7에서 ssh연결은 다음과 같은 과정을 거치는데요.

1. openssh-server 설치

2. 방화벽 열기

3. 가상머신을 돌릴 경우

 

1. openssh-server 설치

일단 ssh 서버가 설치되어 있어야합니다. 우선 설치되어 있나 확인을 해봅시다. 

 

[root@localhost etc]# rpm -qa | grep openssh-server
openssh-server-7.4p1-16.el7.x86_64

 

이미 설치가 되어있군요. 설치가 안된 분들은 설치하면 됩니다. 

다음의 명령으로 ssh 서버를 설치하세요.

 

yum install openssh-server

 

 

 

 

2-1. 방화벽 포트 열기

CentOS7에서는 기본적으로 방화벽(firewalld)가 설치되어 있습니다. 혹여나 설치가 되어있지 않은 분들은 yum install firewalld 명령으로 방화벽을 설치합시다.

 

ssh서버와 firewalld가 설치가 되었다면 방화벽에 ssh가 사용하는 포트를 열어줘야합니다. 그래서 /etc/ssh/sshd_config 파일을 열어 

(루트 사용자라면 vi /etc/ssh/sshd_config, 아니면 sudo vi /etc/ssh/sshd_config) 

#semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22    <-- #해제
#AddressFamily any
#ListenAddress 0.0.0.0

 

에서 #Port 22의 주석을 해제합니다. 앞의 #을 지우게 되면 주석이 해제되는 겁니다. 이 후 sshd을 다시 시작해야되겠죠? 다음의 명령어로 sshd를 다시 시작합시다.

 

systemctl restart sshd.service

 

2-2. 방화벽 포트 열기

또는 다른 방법이 있는데요. 다음의 명령으로 방화벽에 명시해줍니다.

 

sudo firewall-cmd --permanent --add-service=ssh

 

이후 firewall의 변경사항을 적용하고 싶다면 

 

sudo firewall-cmd --reload

 

의 명령을 사용한 후 방화벽을 다시 시작해주어야합니다.

 

sudo systemctl restart firewalld

 

3. 혹시 가상머신을 사용해서 ssh를 쓰고 계신가요?

그럴 경우 설정-> 네트워크 -> 어댑터 -> 어댑터에 브릿지를 선택해주세요.

 

 

연결

자, 이제 putty라는 프로그램 또는 mobaXterm이라는 ssh 프로토콜이 가능한 프로그램을 사용해서 연결해봅시다. 일단 저의 ssh 서버의 주소는 ifconfig라는 명령어로 볼 수 있습니다. 

[root@localhost etc]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.10.123  netmask 255.255.255.0  broadcast 192.168.10.255 

...

 

ssh의 서버주소는 192.168.10.123이군요. 이제 putty라는 프로그램으로 여기에 ssh로 접속해봅시다.

 

이제 open을 하게 되면 아래 처럼 로그인 화면이 나옵니다. 혹은 첫번째 실행이라면 뭐 yes, no를 묻는 대화창이 나오게 되는데 yes눌르시고 로그인하면 됩니다.

 

이제 원격에서도 ssh를 통해 서버에 접속 할 수 있습니다.

반응형
블로그 이미지

REAKWON

와나진짜

,

TCP/IP

인터넷 프로그램들이 서로 통신을 하는데 있어서 여러 프로토콜이 있습니다. 인터넷 프로토콜에서 가장 많이 사용하는 대표적인 프로토콜은 여러분들도 많이 아시다시피 IP입니다. 여기서 중요한 것은 TCP/IP는 계층이 아니라 프로토콜이라는 사실이라는 사실을 주의해주세요.


TCP/IP는 OSI7 계층과는 조금은 다른 TCP/IP의 구조적인 계층 위에서 동작합니다.


지난 번에 OSI7 계층에 대해서 알아보았는데요. TCP/IP 계층은 OSI7계층과 비교하여 어떤 점이 다른지 살펴보는 시간을 가져보도록 하지요.






OSI7 계층과는 조금은 다른 모습을 볼 수 있습니다. 보세요.

우선 계층의 수 부터가 다릅니다. OSI는 7계층인데 반해 TCP/IP 계층은 4계층이 전부라는 것을 알 수 있습니다.


이제 조금 더 세세하게 살펴보도록 하지요.




1. 네트워크 인터페이스 계층 (Network Interface Layer)

이 계층은 Node-To-Node간의 신뢰성 있는 데이터 전송을 담당하는 계층입니다. OSI7 계층의 물리 계층과 데이터링크 계층의 역할을 바로 이 계층이 담당하는 것으로 볼 수 있네요.


따라서 MAC주소가 이 계층에서 사용됩니다. MAC주소는 OSI7 계층에서 데이터링크 계층의 주소였죠?? 


네트워크 인터페이스 계층이 바로 데이터링크 계층까지 담당하니까 MAC 어드레스가 사용되는 겁니다.


혹시 랜카드라고 들어보셨나요? 바로 이거말이에요.




정확한 명칭은 NIC라고 하여 Network Interface Card입니다. 바로 이 랜카드가 있어야만 네트워크 통신을 할 수 있는데, 이름에서도 알 수 있듯이 네트워크 인터페이스 계층에서 동작하는 장비입니다.


주요 프로토콜을 무엇이 있을까요?

LAN상에서는 Ethernet, TokenRing, FDDI 등이 있으며 WAN 상에서는 X.25, Frame Relay, PPP 등이 있습니다.


2. 인터넷 계층 (Internet Layer)

OSI7계층의 네트워크 계층을 담당하는 계층입니다. OSI7 계층처럼 호스트간의 라우팅을 담당하지요. 


인터넷 계층에서 동작하는 프로토콜에는 무엇이 있을까요? 대표적인 몇가지 프로토콜을 살짝 알아보도록 합시다.


IP(Internet Protocol) : 비신뢰성, 비연결지향 데이터그램 프로토콜입니다. 

ARP(Address Resolution Protocol) : 주소변환 프로토콜입니다. IP주소를 MAC주소로 변환하는 프로토콜이지요.

RARP(Reverse ARP) : 반대로 MAC주소로 IP주소를 찾는 프로토콜입니다.

ICMP(Internet Control Message Protocol) : 상태 진단 메시지 프로토콜인데요. 이 프로토콜을 이용하는 대표적인 프로그램이 ping입니다.

IGMP(Internet Group Message Protocol) : 멀티캐스트용 프로토콜입니다.




3. 전송 계층 (Transport Layer)

OSI7 계층의 전송계층과 같습니다. 프로세스간의 신뢰성 있는 데이터 전송을 담당하는 계층입니다.


process-to-process 전송을 담당하기 위해서는 논리적 주소가 필요한데요. process가 사용하는 포트 번호를 그 논리적 주소로 사용합니다.


전송 계층에서 프로토콜은 무엇이 있을까요?


TCP (Transmission Control Protocol) : 신뢰성있는 연결지향형 프로토콜입니다. 신뢰성있다는 말은 그 페킷에 대한 오류처리나 재전송따위로 에러를 복구하는 것을 말합니다. 그때문에 TCP의 헤더에 붙는 정보가 많습니다.

UDP (User Datagram Protocol) : 비신뢰성 비연결형 프로토콜입니다. 페킷을 잃거나 오류가 있어도 대처하지 않는 것을 말합니다. 따라서 UDP헤더는 간단한 구조를 갖고 있습니다.



4. 응용 계층 (Application Layer)

사용자와 가장 가까운 계층입니다. OSI7계층의 5계층부터 7계층까지의 기능을 담당하고 있지요.

서버나 클라이언트 응용 프로그램이 이 계층에서 동작합니다. 우리가 알고 있는 브라우저나 텔넷같은 서비스가 이 계층에 동작하며, 동작하기 위해서는 전송계층의 주소, 즉 포트번호를 사용합니다.


이를테면 http는 포트번호 80번을 사용하지요.


역시 프로토콜은 무엇이 있나 살펴볼까요?


HTTP (Hyper-Text Transfer Protocol) : TCP기반의 프로토콜로 포트번호 80번을 사용합니다.

Telnet : TCP 포트번호 23번을 사용합니다. 원격 터미널을 접속할때 이 포로토콜을 사용합니다.

SSH (Secure Shell) : 텔넷과 같은 서비스는 보안에 취약합니다. 비밀번호가 암호화되지 않아 그대로 노출이 되기 때문이지요. 이것을 보완한것이 SSH입니다. 포트번호 22번을 사용합니다.

FTP(File Transfer Protocol) : 파일 전송 프로토콜입니다. 파일을 받거나 올릴때 FTP를 사용하지요. FTP는 파일을 올리거나 내려받을때 신뢰성을 중요시하기 때문에 TCP에서 동작하구요. 2개의 포트를 사용합니다. 

TCP 포트 20번은 데이터 전송을 위한 용도, TCP 포트 21번은 제어용으로 사용합니다.

SMTP (Simple Mail Transfer Protocol) : 메일 전송 프로토콜입니다. TCP 상에서 동작하며 포트는 25번을 사용합니다.

POP3 (Post Office Protocol Version3) : 메일 수신용 프로토콜입니다. 아웃룩같은 프로그램이 POP3라는 프로토콜을 사용하여 동작합니다. TCP 포트 110번을 사용합니다.

DNS (Domain Name System) : 도메인명에 대한 호스트 정보를 제공해줍니다. 기본적으로 UDP상에서 동작합니다. 기본적으로 실패하면 다시 한번 요청하면 되며 그렇게 중요한 정보가 아니기 때문이죠. 하지만 신뢰성을 요할 경우에는 TCP상에서도 동작합니다. 데이터의 길이가 길 경우같은 때 TCP 기반으로 동작할 수 있습니다.

UDP, TCP 포트 53번을 사용합니다.




이와 같이 포트번호가 특정 프로토콜이 사용해서 우리가 쓸 수 없는 포트들이 있습니다. 이런 포트들을 well-known port라고 합니다.


프로토콜 헤더 정보를 잘 읽고 분석할 수 있다면 네트워크를 더 잘 이해할 수 있을 겁니다.


따라서 다음 시간에는 헤더를 보고 무슨 정보가 있는지 살펴보는 기회를 갖도록 하겠습니다.

반응형
블로그 이미지

REAKWON

와나진짜

,