본문 바로가기

네트워크/네트워크 좀 더 알아보기-공용

cisco 원격접속(텔넷,ssh,웹접속), NTP

TELNET 기본

크게 3가지 방식으로 접속 가능


1. 비밀번호 입력

Router(config-line)#line vty 0 4

Router(config-line)#transport input telnet

해당 명령어는 기본값 telnet을 쓸 때는 안써도 무방하다.

Router(config-line)#password cisco

Router(config-line)#login


2. 바로 접속

Router(config)#line vty 0 4

Router(config-line)#transport input telnet

Router(config-line)#no login


3. 유저 로그인 -> 가장 중요!!!, 대부분의 회사에서는 계정마다 권한을 부여해 사용한다.

Router(config)#username netdream privilege 15 password cisco

 ID는 netdream 비밀번호는 cisco, 권한은 15등급을 주었다. 권한 같은 경우 0, 15가 관리자 권한(최고 권한)이다.

Router(config)#username netdream2 privilege 2 password cisco

 권한을 2등급을 주었다. 1~14등급은 관리자가 직접 권한을 부여 할 수 있다.

Router(config)#line vty 0 4

Router(config-line)#login local



PC>telnet 1.1.1.1

Username: netdream

Password:

Router#show privilege

Current privilege level is 15 -> 15등급 권한

Router#conf t

Router(config)#

15등급 권한은 관리자 권한이기때문에 위와 같이 관리자 모드에서 어떤 명령어를 사용하든 무방하다.


PC>telnet 1.1.1.1

Username: netdream2

Password:

Router#show privilege

Current privilege level is 2 -> 권한 2등급

Router#conf t

^

% Invalid input detected at '^' marker..-> 2등급의 경우 관리자가 따로 권한을 부여해주지 않는한 대부분의 명령어가 사용이 불가능하다.


Telnet 권한 사용 지정

(pc에서)

Username: netdream2

Password:

Router#conf t

^

% Invalid input detected at '^' marker.-----------> 위와 같이 해당 명령어 사용이 불가능하다.


따라서 관리자로 직접 콘솔 로그인을 하여서

(라우터에서 직접 콘솔로)

Router(config)#privilege exec level 2 conf t

2등급은 exec(실행 모드) 창에서 conf t 입력이 가능하게해준다.


(pc에서)

Router#conf t

Enter configuration commands, one per line. End with CNTL/Z. -> 이번에는 성공한 모습을 볼 수 있다.


Router(config)#int f0/0

^

% Invalid input detected at '^' marker. -----------------------> 그러나 인터페이스 설정에서 역시 막히는 것을 확인 가능



(라우터에서 직접 콘솔로)


Router(config)#privilege configure level 2 interface

 2등급은 config 모드에서 interface 명령어가 사용 가능하게 해라


(pc에서)
Router(config-if)#int f0/1
 이번에도 역시 성공하는 모습
Router(config-if)#no sh
                     
% Invalid input detected at '^' marker.------------------->  그러나 다음과 같이 no sh 명령어를 인식하지 못한다.


(다시 라우터에서)
Router(config)#privilege interface level 2 no sh
 역시 똑같이 콘솔에서 2등급은 인터페이스 설정 모드에서 no shutdown 명령어가 가능하게 바꿔준다.

(다시 pc에서)
Router(config)#int f0/1
Router(config-if)#no sh
 다음과 같이 성공하는 것을 확인 가능

*해당 실습은 패킷트레이서에서는 원활하게 진행되지않으므로 GNS3에서 진행!!
이런식으로 각 보안 level에 맞게 권한을 할당해줄 수 있다.








telnet  user
show users라는 명령어를 입력하면 현재 접속해있는 telnet 유저를 확인 할 수 있다.

Router#show users
    Line       User       Host(s)              Idle       Location
   0 con 0                idle                 00:02:18
*226 vty 0     netdream2  idle            00:00:00 1.1.1.254

  Interface    User               Mode         Idle     Peer Address

현재 netdream2 user가 226번 라인으로 접속해있는 것을 확인 할 수 있다.
send [line number] 명령어로 특정 유저에게 원하는 메시지를 전송해보자.

Router#send 226
Enter message, end with CTRL/Z; abort with CTRL/C:
hi
^Z
Send message? [confirm]

특정 텍스트를 입력 후 ctrl+z를 눌러 메시지를 넘길 수 있다.
다시 226번 라인으로 넘어가 확인해보면

***
***
*** Message from tty0 to tty226:
***
hi

다음과 같이 메시지가 도착한 것을 확인 할 수 있다.



라우터 R1, R2, R3 세개가 있다고 가정했을 때
R1에서 R2로 접속 후 다시 R3로 접속하는 이중 접속 또한 가능하다.
(R1 -> R2 -> R3 접속)

R1#telnet 1.1.12.2
Trying 1.1.12.2 ... Open
R2>telnet 1.1.23.3
Trying 1.1.23.3 ... Open
R3>

이때 R3에서 show users로 보면


R3#show users
    Line       User       Host(s)              Idle       Location
*  0 con 0                idle                 00:00:00
 226 vty 0                idle                 00:00:02   1.1.23.2

다음과 같이 226번의 location이 1.1.23.2 즉 R2의 IP로 나온다.

분명 R1으로 접속했지만 R2로 접속한 것으로 나오는 것이다.

이것은 IP를 우회하여 특정 공격이 가능하다는 뜻.

따라서 telnet에서는 보통 이러한 이중 접속을 막아둔다.


R2(config-line)#transport output none

텔넷 설정모드(line vty 0 4)에서 다음과 같은 명령어를 입력 후

다시 R1에서 R2로 R2에서 R3로 이중접속 telnet을 해보면


R1#telnet 1.1.12.2

Trying 1.1.12.2 ... Open


R2>telnet 1.1.23.3

% telnet connections not permitted from this terminal


다음과 같이 R2에서 R3로 가는 telnet이 거절된 것을 볼 수 있다.


telnet은 또헌  access-list와 연계가 가능하다.

access-list로 특정 호스트를 거부 할 수있다.

ACL은 기존 문법과 똑같이 작성하며 이때 ACL 적용을 텔넷 설정모드에서 해주면 된다.


R2(config)#access-list 10 deny 1.1.12.1 0.0.0.0

R2(config)#access-list 10 permit any

 기존과 같은 ACL 명령어

R2(config-line)#line vty 0 4

R2(config-line)#access-class 10 in

적용만 텔넷 설정모드에 들어가서 해주면 된다.

R1#telnet 1.1.12.2
Trying 1.1.12.2 ...
% Connection refused by remote host------> ACL에 의해 거절된 것을 확인 가능하다.



Telnet autocommand
telnet과 같은 원격 접속에서 가장 중요한 것은 접속 user에게 최소 권한을 주는 것이다.
이것을 위한 대표적인 기능이 autocommand와 menu telnet이다.

특정 계정에 autocommand를 적용하면 특정 명령어의 결과가 출력되고 바로 접속이 끊어진다.

R2(config)#username auto password cisco
 특정 유저 생성 후
R2(config)#username auto autocommand show ip int bri
 autocoomand 원하는 명령어를 입력한다.
R1#telnet 1.1.12.2
Trying 1.1.12.2 ... Open


User Access Verification

Username: auto
Password:
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            1.1.12.2        YES manual up                    up
FastEthernet0/1            1.1.23.2        YES manual up                    up
[Connection to 1.1.12.2 closed by foreign host]
R1#

해당 계정으로 로그인 시 지정해둔 명령어의 결과가 출력되고 다시 연결이 끊긴다.



telnet menu는 사용자에게 간단한 선택지를 주고 특정 항목을 선택 할 수 있게하는 것이다.

R2(config)#menu aaa title /
Enter TEXT message.  End with the character '/'.
this is a router
/
menu [임의의 이름] title로 해당 메뉴에 관한 배너를 지정 할 수 있다. 이때 배너로 사용 할 문자열은 특수문자(/, * 기타 등등) 사이에 들어간다.
 
R2(config)#menu aaa text 1. Do you want to view my routing table
 menu [임의의 이름] text 명령어로 메뉴를 작성 할 수 있다.
R2(config)#menu aaa command 1. show ip route
 menu [임의의 이름] command로 해당 메뉴를 입력 시 출력되는 결과를 지정 할 수 있다.
 해당 명령의 결과로 1번을 누르면  라우팅 테이블이 추가된다.
R2(config)#menu aaa text 2. Do you want to exit
R2(config)#menu aaa command 2. exit
R2(config)#username a password cisco
R2(config)#username a autocommand menu aaa
 만든 메뉴를 autocommand 명령어로 지정해준다.


직접 로그인 해보면 다음과 같은 결과가 나타난다.
R1#telnet 1.1.12.2
Trying 1.1.12.2 ... Open


User Access Verification

Username: a
Password:
this is a router -> 배너


    1.         Do you want to view my routing table ->메뉴 1

    2.         Do you want to exit -> 메뉴 2


Telnet 포트/배너
텔넷은 기본적으로 23번 포트를 사용한다. 그러나 알려진 23번 포트를 쓰는 것은 보안적인 관점에서 적절하지 않다
따라서 임의로 포트번호를 바꿀 수도 있다.
해당 실습은 telnet 포트 번호를 3011번으로 바꿔보겠다.

R2(config)#access-list 100 permit tcp any any eq 3011
 우선 3011번 외에 다른 포트로 telnet을 쓰면 안되니 해당 포트만 열어둔다.
R2(config)#line vty 0 4
R2(config-line)#access-class 100 in
R2(config-line)#rotary 11
 telnet 포토를 3011번으로 돌리겠다는 명령어이다. 3000은 기본 값이므로 생략하고 뒤에 11만 써도 된다.

R1#telnet 1.1.12.2 3011
그냥 telnet [IP-addr] 만 입력 시 접속이 불가능하다. 따라서 위처럼 뒤에 포트번호를 명시해주자.


마지막으로 텔넷에는 배너를 지정해줄 수 있다.

아까 메뉴텔넷에서 배너를 지정해주는 것과 동일하다.

배너는 메시지를 어느 시점에 띄우냐에 따라 총 3가지로 나누어져있다. 3가지 모두 실행 후 어느 시점에 메시지가 뜨는지 확인해보자


R2(config)#banner login *

Enter TEXT message.  End with the character '*'.

1234

*

R2(config)#banner motd *

Enter TEXT message.  End with the character '*'.

5678

*

R2(config)#banner exec *

Enter TEXT message.  End with the character '*'.

910



R1#telnet 1.1.12.2 3011
Trying 1.1.12.2, 3011 ... Open

5678  -> banner motd 명령어가 제일 위에 뜬다.

1234  -> 바로 밑에 banner login 명령어 


User Access Verification

Username: netdream
Password:
910  -> 로그인 하고나서야 비로소 banner exec 명령어가 뜬다.



SSH

SSH는 텔넷과 같은 원격 접속을 암호화를 통해서 제공하는 서비스이다.
SSH는 AES 방식과  RSA 방식 두가지 암호화 알고리즘을 사용하여 암호화한다.

*암호화 알고리즘
1. 대칭키 알고리즘
암호화키==복구화키 , 즉 암호화키와 복구화키가 일치!!!
장점:연산 속도가 매우 빠르다.
단점: 키 분배가 불안하다.(사람마다 암호화 키가 달라야하므로 매우 많은 키 생성, 또한 하나의 키를 들키면 나머지 키도 들킴)
ex)DES, 3DES, AES, SEED, ARIA

2. 비대칭키 알고리즘
암호화키 != 복구화키, 즉 두가지 키가 서로 일치하지 않는다.
장점: 키 분배가 안정적이다.
단점: 연산부하가 많이 생긴다.
ex)DH, RSA

3. 해쉬
-무결성 체크, 인증/압축에 사용되는 알고리즘
ex)MD5, SHA-1


*암호화 방식

block cipher

-위에 나온 대부분의 암호화 알고리즘이 사용

-암호화 단위를 블록 단위로 한다.

-보안성이 높으나 연산부하가 많음

-주로 컴퓨터에서 사용

stream cipher

-애니그마, RC4, TKIP 등의 방식에서 사용

-bit 단위로 암호화

-가볍고 부하가 적으나 보안성이 약하다.

-요즘은 OTP와 연계되서 많이 사용된다.

-주로 IOT 분야에서 사용


ssh를 사용하기 위해서는 키 생성이 필요하다.

키 생성에는 hostname, serial-number, domain이 필요하다.

hostname과 serial number는 기본적으로 장비가 가지고있다..

따라서 domain의 생성만 따로 해주면 된다.


R2(config)#ip domain name netdream.com

 도메인을 따로 생성해준 후

R2(config)#crypto key generate rsa

 키를 생성해준다.

R2(config)#line vty 0 4

R2(config-line)#transport input ssh

 기본 값이 telnet이므로 ssh로 바꿔준다.

R2(config-line)#login local



PC>ssh -l netdream 1.1.12.2

 cisco 장비일 경우 다음과 같은 명령어로 접속이 가능하다.



패킷트레이서에서는 지원되지 않지만 -p 옵션을 추가해 포트번호 또한 지정해줄 수 있다.

만약 텔넷처럼 ssh에서 포트번호를 바꿔주고 싶다면 


R2(config)#ip ssh port 2000 rotary 1

 port 번호 2000이 rotary 1에 저장된다.

R2(config)#access-list 111 permit tcp any any eq 2000

R2(config)#line vty 0 4

R2(config-line)#access-class 111 in

R2(config-line)#rotary 1

rotary 1에는 port번호 2000이 저장되어 있다.



웹 접속 

cisco 상위 버전으로 가면 웹을 통해 해당 라우터에 접근 또한 가능하다.(패킷 트레이서 불가능)


R2(config)#ip http server

 http를 구동시켜주고

R2(config)#username admin privilege 15 password cisco

 특정 계정 생성 후

R2(config)#ip http authentication local

 계정으로 로그인하는 명령어를 입력해준다.


그리고 인터넷에 http://1.1.12.2/ 입력해준다.

           (해당 ip 라우터)


또한 http뿐 아니라 https를 통한 보안 통신도 가능하다.


R4(config)#no ip http server

 http를 off시켜주고

R4(config)#ip http secure-server

 https를 구동시켜준다.

R4(config)#username admin privilege 15 password cisco

R4(config)#ip http authentication local

인터넷에 https://1.1.12.2/ 입력



마지막으로 NTP를 애기하며 마무리하고싶다.

NTP란 Network Time Protocol의 약자이다.

NTP 서버를 통해 각 서버와 클라이언트는 시간을 동기화한다.

시간을 동기화한다는 것을 통신에 있어서 필수적인 요소이다.


NTP의 메커니즘은 다음과 같다.

우선 각 국가마다 혹은 지역마다 원자 시계가 존재한다. 원자시계는 매우 정확한 시계정도라고 생각하면 된다.

이 원자시계를 통해 NTP 서버는 시간을 받아온다. 또한 이 서버를 통해 다른 서버나 client가 시간을 받아와 동기화 시키는 메커니즘이다.

NTP를 받아오려면 인터넷을 통해 공개된 NTP 서버에서 받아오는 수 밖에 없다.

(원자 시계 -> NTP 서버 -> NTP client)


여기서는 time.goole.com에서 받아오도록 하겠다. 


R4#show clock 
*03:46:47.539 UTC Fri Mar 1 2002 -> 현재 시간을 보여준다.
R4#conf t
R4(config)#ip domain lookup
 도메인 네임 조회가 가능하게 해준다.(time.google.com을 조회하기 위해서)
R4(config)#ip name-server 168.126.63.1
 name server를 등록해준다. 해당 인터넷 선이 사용하는 DNS 서버를 등록해주면 된다.
R4(config)#ntp server time.google.com
  시간을 받아올 ntp server 등록해준다. 인터넷에 공개 NTP 서버를 검색하면 많은 NTP 서버들이 나온다.
R4#show clock
09:59:58.789 UTC Sun Aug 19 2018 -> 날짜는 맞는데 시간이 약간 이상하다. 해당 시간은 영국 시간이다.
R4(config)#clock timezone kor +9
 다음 명령어를 사용해 한국 시간으로 바꿔준다.
R4#show clock
19:00:51.832 kor Sun Aug 19 2018


이전에 받아온  R4를 NTP 서버로 쓰고 R1을 client라고 가정했을 때 다음과 같이 설정하면 NTP 서버/클라이언트 모델이 구축된다.
R4(config)#ntp master 4
 해당 서버를 NTP 서버로 쓰겠다. 뒤에 숫자는 원자 시계와의 거리

이제 R1(client)로 가서
R1(config)#ntp server 10.1.10.44
10.1.10.44 -> R4(NTP server)의 IP
R1(config)#clock timezone kor +9

다음과 같이 간단한 명령어를 입력해주면 된다.