강좌
클라우드/리눅스에 관한 강좌입니다.
네트워크 분류

라우터 원격접근 제한(remote access control)

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

11.1.2 라우터 원격접근 제한(remote access control)

 

암호를 어렵게 설정하였다 하더라도 어떠한 경로든 암호를 알게 되거나 또는 무작위 대입으로 암호를 알 수 있으므로 단순히 암호를 어렵게 설정하는 것만으로는 안심할 수 없다.

 

따라서 암호를 설정한 다음에는 라우터에 원격접속(telnet 접근)을 제한하도록 설정하여야 한다.

 

어차피 라우터의 관리를 위해 NOC나 특정한 관리자만 접근이 가능하면 되므로, 특정 IP에서만 접근 가능하도록 설정하면 된다.

 

이는 access-list를 이용하면 되는데, 다음은 실제 config 예제를 보여주고 있다.

 

 

 

 

access-list 10 permit host 192.168.2.3 access-list 10 permit host 192.168.2.4 access-list 10 deny any

line vty 0 4

access-class 10 in

exec-timeout 5 0

password 7 09581B031200032F064G173W2E25

login

 

 

라우터의 장치(device)에 대한 직접적인 접근을 제어하려면 access-list가 아니라 access-class를 사용하며, 위와 같이 설정하면 라우터에 원격으로 접근할 수 있는 IP192.168.2.3192.168.2.4로 제한하게 된다.

 

또한 access-class 대신 각각의 인터페이스에 access-list를 설정하여도 같은 효과를 기대할 수 있다.

 

 

 

라우터나 스위치에 telnet으로 접속하면 일반적인 유닉스 계정과 달리 로그인 계정 없이 암호만 물어보게 되어있기에 아이디에 관계없이 암호만 알면 접근이 가능하게 되므로 장비에 접근할 수 있는 가능성이 더 크다고 할 수 있다.

 

따라서 유저네임을 생성하여 아이디/암호 모두 인증하도록 설정하는 것이 좋은데, 이를 위해서는 다음과 같이 설정하면 된다.

 

 

 

Router# conf t

Router(config)# username abcnoc password 0 54321

 

위는 아이디: abcnoc, 암호: 54321로 생성하는 것을 뜻하며 여기에서 0은 암호화 방식을 뜻하는데, 0뒤에 설정된 암호는 평문을 의미이며 만약 7이라면 암호화된 암호를 뜻한다.

 

따라서 만약 0이 아니라 7이라면 54321은 실제 암호가 아니라 암호화된 암호를 뜻하게 되는 것이므로 실제 어떤 암호인지는 알 수 없을 것이다.

 

따라서 암호를 설정할 때에는 0을 사용하여야 하며 만약 아무런 암호화 방식을 지정하지 않으면 기본적으로 0이 된다.

 

또한 최근 버전에서는 enable뿐만 아니라 virtual user에 대해서도 type 5secret를 사용하도록 지원하고 있다.

 

따라서 위의 명령어 대신 “username abcnoc secret 5 54321”와 같이 실행하면 더욱 안전한 관리가 될 것이다.

 

 

암호를 설정한 다음에는 가상 터미널에서 접근할 때의 인증에 대해 설정할 차례이다.

 

Router(config)# line vty 0 4

Router(config-line)# login local

Router(config-line)# exit

 

여기에서 vty 0 4는 가상 터미널을 0부터 4까지 5개를 열어놓겠다는 의미이고(, telnet 으로 동시에 5명까지 접속할 수 있다는 뜻) 위와 같이 login할 때 local을 설정하여야 라우터에 로그인시 username을 묻게 된다.

 

, login : 암호를 체크한다는 의미이며 local 유저이름을 체크한다는 의미이다.

 

 

그렇지 않고 login만을 지정하면 아래와 같이 암호만 묻게 된다.

 

 

) 일반적인 라우터 접속

Trying router.com...

Connected to 192.168.1.126.

Escape character is '^]'.

 

User Access Verification

 

Password:

 

 

) login local을 설정 후 라우터 접속

 

 

Trying router.com ...

Connected to 192.168.1.126.

Escape character is '^]'.

User Access Verification

Username:

 

따라서 최상의 관리를 위해 login localaccess-list 설정을 함께하는 것이 좋으며 물론 원격으로 작업하지 않고 콘솔에서만 작업한다면 안전하게 라우터의 telnet listenerdisable하여 외부에서의 접속을 차단하는 것이 좋다.

 

아래는 telnet listener 자체를 disable하는 설정을 보여주고 있다.

 

 

Router(config)# line vty 0 4 Router(config)# transport input none

 

만약 위와 같이 설정하였다면 추가적으로 아래의 두 설정을 실행할 수 있는데, 여기에서 "no exec"란 이 모드에서 어떠한 명령어도 실행하지 않도록 하는 설정이며, "exec-timeout 0 1"은 아무런 키 입력 없이 01초가 지나면 자동으로 접속을 종료한다는 의미이다.

 

, 현실적으로 사용할 수 없도록 한다는 의미가 된다.

 

 

 

Router(config)# no exec

Router(config)# exec-timeout 0 1

 

????[유용한 팁]

만약 username 명령으로 유저를 생성한 후 필요 없거나 유저를 잘못 생성하였을 경우에는 해당 유저를 삭제하여야 한다.

 

이러한 경우 다음과 같이 "no username [삭제할유저]" 로 삭제하면 된다.

 

 

 

Router# conf t

Router(config)# no username test

 

또한 어떤 스위치를 보면 vty에 대한 config가 다음과 같이 되어 있는 것을 볼 수 있다.

 

 

0부터 4 즉 초기 5개의 접속에 대해서는 acllogin으로 보안 설정되어 있지만 이후 6번째부터의 접속은 line vty 5 15 부분에 해당하는데 여기에서 “no login"은 인증 없이 로그인을 허락한다는 의미가 되므로 매우 위험하다.

 

이를 악용하여 공격자는 동시에 5개의 동시 연결시도를 한 후 6번째를 실행하면 인증 없이 로그인하게 되는 것이다.

 

따라서 반드시 이 부분도 보안설정을 하여야 함을 명심하기 바란다.

 

 

line vty 0 4

access-class 8 in

exec-timeout 0 0

password 7 120D0C031A120F1772732A

login

transport input telnet

line vty 5 15

no login

 

또한 "no login" 이 아닌 “no password" 또는 아예 password가 설정되지 않을 경우에는 암호 없이 로그인을 허락한다는 의미가 아니라 아예 접속을 받아들이지 않는다는 의미가 된다.

 

각각의 차이를 살펴보기 바란다.

 

 

-. no login이 설정되었을 경우

# telnet 192.168.120.161

Trying 192.168.120.161...

Connected to 192.168.120.161 (192.168.120.161).

Escape character is '^]'.

 

switch>

 

-. no password가 설정되었을 경우

# telnet 192.168.120.161

Trying 192.168.120.161...

Connected to 192.168.120.161 (192.168.120.161).

Escape character is '^]'.

 

Password required, but none set

Connection closed by foreign host.

 

 

만약 공격자가 여러 방법을 이용하여 라우터에 악의적으로 접근하였다면 피어링(peering)을 맺고 있거나 주위의 다른 라우터 또는 스위치와 같은 네트워크 장비에 재접근을 시도할 수 있다.

 

이를 차단하기 위해서는 다음과 같은 설정을 추가할 수 있다.

 

이 설정을 추가할 경우 일단 라우터에 접근하였다 하더라도 다른 장비나 서버로의 telnet 접근을 차단하게 된다.

 

 

Router(config)# line vty 0 4

Router(config-line)# transport output none

Router(config-line)# exit

 

, input은 했을지 몰라도 output은 차단하겠다는 의미이다.

 

추가적으로, 만약 라우터에 원격 접속하여 작업할 때 갑자기 네트워크가 끊기는 현상이 있다.

 

그런데, 라우터에는 마치 접속해 있는 것처럼 계속적으로 프로세스가 남아있어 CPU부하를 유발하는 경우가 있다.

 

이러한 경우를 대비하기 위하여 다음과 같이 tcp-keepalives-in을 설정하면 라우터는 주기적으로 keepalive 메시지를 발송하여 비정상적으로 남아있는 프로세스는 삭제하도록 한다.

 

따라서 성능상의 관점에서 꼭 설정할 것을 권장한다.

 

 

Router(config)# service tcp-keepalives-in

Router(config)# exit

 

tcp-keepalives는 보안설정이라기 보다는 performance와 관련된 설정이다.

 

그러나 권장 설정 사항이다.

 

 

 

* telnet 대신 ssh 사용 방법

 

라우터의 원격관리를 위해 telnet 대신 암호화가 지원되는 ssh를 사용할 수 있다.

 

그러나 ssh는 최신버전에서만 지원되므로 현재의 라우터에서 ssh가 지원되는지 확인해 보려면 간단히 "show ssh" 또는 "show ip ssh"를 실행하여 ssh 관련 명령어를 제공하는지 확인해 보면 된다.

 

ssh 설정 방법은 telnet 설정법과 동일하므로 그다지 어렵지 않을 것이다.

 

 

Router# conf t

Router(config)# no access-list 12 // 기존의 acl이 있다면 먼저 삭제한다.

 

Router(config)# access-list 12 permit host 14.2.9.1

Router(config)# line vty 0 4

Router(config-line)# access-class 12 in

Router(config-line)# exit

Router(config)# username admin password 0 g0d-pa$$word

Router(config)# line vty 0 4

Router(config-line)# login local

Router(config-line)# exit

 

여기까지는 이미 알고 있듯이 먼저 standard access-list를 설정하고, 접근 가능한 아이디/암호를 설정하여 로그인시 인증하도록 적용한 것을 알 수 있다.

 

다음은 라우터가 ssh 서버의 역할을 하기 위해 필요한 RSA 키 쌍을 생성할 차례이다.

 

이때 modulus 값을 입력하라고 묻는데, CISCO에서는 1024를 권장하므로 1024를 입력하면 된다.

 

만일 생성된 키 값을 삭제하려면 “crypto key zeroize rsa“를 실행하면 되는데, 키 쌍이 삭제되면 ssh 서비스도 자동적으로 disable 되므로 주의하기 바란다.

 

 

Router(config)# crypto key generate rsa

The name for the keys will be: North.dod.mil

Choose the size of the key modulus in the range of 360 to

2048 for your General Purpose Keys. Choosing a key modulus

greater than 512 may take a few minutes.

 

How many bits in the modulus [512]: 1024

Generating RSA Keys ...

[OK]

 

Router(config)# ip ssh time-out 90

Router(config)# ip ssh authentication-retries 2

 

이후 위의 두 명령어를 실행하면 되는데, 첫 줄은 암호를 인증할 때 얼마동안 입력을 기다릴 것인지를 설정하는 것인데 90초 정도면 적당하다.

 

두 번째는 암호 인증 시 잘못 입력하였을 경우 몇 번까지 재입력을 받아들일 것인지 지정하는 것인데 23을 입력하면 된다.

 

 

 

Router(config)# line vty 0 4

Router(config-line)# transport input ssh telnet

 

위는 virtual terminal telnet을 통해 sshtelnet 접속을 받아들인다는 의미이며, ssh 만 지정하였을 경우에는 ssh 접속만 받아들이게 된다.

 

 

Router(config-line)# exit

 

위와 같이 설정이 끝난 후 실제로 ssh 접속이 되는지 확인해 보자. ssh 접속 시 클라이언트 프로그램으로는 리눅스용 openssh나 상용 SSH(Secure Shell) 또는 Windows 기반의 SecureCRTPutty와 같은 프로그램을 이용하면 된다.

 

 

% ssh l admin router.com

admin@10.1.1.2’s password:xxxxxx

Warning: Remote host denied X11 forwarding

Router> enable

Password:xxxxx

Router# show ip ssh

SSH Enabled version 1.99

Authentication timeout: 90 secs; Authentication retries: 2

 

참고로 CISCO에서 제공하는 대부분의 sshssh v1프로토콜로서(최근에는 v2를 제공하기 시작하였다.

 

) ssh v1 프로토콜은 그 자체로 key recovery, CRC32, timing analysis 공격 등 많은 취약성을 가지고 있다.

 

또한 ssh가 기반으로 하고 있는 openssl에서도 수시로 보안 취약성이 발견되고 있다.

 

따라서 보안을 강화하기 위해 선택한 ssh가 오히려 보안의 위협이 될 수 있으므로 ssh를 사용할 것인지 여부를 신중히 고민해 선택하기 바라며, 사용을 한다면 최근의 보안 취약성이 패치 된 버전인지 반드시 확인하여야 한다.

 

 

강사 : 라쿠텐  홍석범부매니저

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,034 명
  • 현재 강좌수 :  35,785 개
  • 현재 접속자 :  211 명