암호를 아무리 길고 사전에 없는 해괴한 형태로 만든다 한 들, 인간이 암기하고 입력할 수 있는 암호에는 기억력과 시간의 한계가 있다. 반면 컴퓨터의 처리속도는 인간의 것에 비할 바가 아니기에 Brute-force 공격앞에 당해낼 재간이 없다. 모든 경우의 수를 빠르고, 누락되는 것 없이, 쉬지도 않고 될 때까지 시도한다. 따라서 아무나 접근할 수 있는 공개된 네트워크에서 서버를 보호하려면 일반적인 계정 인증이 아닌 다른 인증 방법을 심도있게 고려하여야 한다.

 

공개키 인증방식은 임의의 장문을 생성하여 보관하고 그것으로 데이터를 암호화, 복호화 한다. 그리고 암호화, 복호화에 사용되는 키가 다르므로 대칭키에 비하여 키의 유출로 인한 위협을 줄일 수 있다. 나아가 그 개인키도 공인인증서처럼 암호를 걸어 사용할 수 있다. 대신 개인키를 잃어버리면 주인도 못 들어간다.

 

암호를 사용한 SSH 접속의 설정을 완료한 상태에서 시작합니다.

 

암호 인증 SSH부터 구축하려면: 2018/09/04 - [CentOS 7] 내가 정한 포트로 SSH 구현하기

 

 

 

 

0. SSH에 사용할 공개키, 개인키 쌍을 만든다. 개인키는 유출에 각별히 주의한다.

 

공개키, 개인키는 단일 장치에서 동시에 만들어서 공개키는 서버에 두고, 개인키는 사용자가 보유해야한다.

 

키 쌍은 서버에서도, 클라이언트에서도 만들 수 있으나 개인키의 보안이 훨씬 중요하므로 클라이언트에서 만들고 키 쌍을 만들고 공개키를 서버에 업로드 하는 것이 바람직 할 것이다. 물론 반대로 해도 안되는 것은 아니다.

 

윈도우에서는 Xshell이나 Putty, 리눅스에서는 ssh-keygen 등을 사용해 키 쌍을 만들 수 있다.

 

키는 대체로 1024 비트 이상이 권장된다.

 

 

위의 것이 개인키, 아래의 것(*.pub)이 공개키이다.

 

 

 

1. 공개키를 저장할 폴더를 만들고 권한을 지정한다.
[glacier@glacier ~]$ mkdir ~/.ssh -m 700
[glacier@glacier ~]$ ls -al ~ | grep ssh
drwx------.  2 glacier glacier 4096 12월 24 12:36 .ssh

 

 

 

2. 공개키를 업로드하고 권한을 지정한다.
[glacier@glacier ~]$ vi ~/.ssh/authorized_keys
[glacier@glacier ~]$ chmod 600 ~/.ssh/authorized_keys 

SCP도 좋고 파이프도 좋지만 가장 쉬운 방법, 공개키를 텍스트에디터로 열어서 복사, vi열고 붙여넣기 해도 된다.

 

 

 

3. 키가 있는 경로에 "ssh_home_t" 보안 컨텍스트가 있는지 확인한다. (아닌 경우 restorecon -Rv ~/.ssh)

[glacier@glacier ~]$ ls -alZ ~/.ssh
drwx------. glacier glacier unconfined_u:object_r:ssh_home_t:s0 .
drwx------. glacier glacier unconfined_u:object_r:user_home_dir_t:s0 ..
-rw-------. glacier glacier unconfined_u:object_r:ssh_home_t:s0 authorized_keys

 

 

 

4. /etc/ssh/sshd_config 를 수정한다.

[glacier@glacier ~]$ sudo vi /etc/ssh/sshd_config

StrictModes yes
#로그인을 허가하기 전 사용자의 홈폴더 권한을 검사
PubkeyAuthentication yes
#공개키인증 활성화
AuthorizedKeysFile .ssh/authorized_keys
#공개키경로 지정
ChallengeResponseAuthentication no
#로그인 시도에 대하여 답변 메시지를 보내지 않음

#RSAAuthentication yes
#설정할 필요 없음. SSHv1에서만 사용되는 옵션.
#UsePAM no
#설정금지. RHEL 미지원으로 문제가 발생할 가능성 있음.

 

 

 

5. sshd를 재시작하고 개인키로 SSH 접속을 시도해본다.

[glacier@glacier ~]$ sudo systemctl restart sshd

 

 

 

6. 성공했다면 /etc/ssh/sshd_config 를 수정하여 패스워드 인증을 끄고 sshd를 재시작한다.

[glacier@glacier ~]$ sudo vi /etc/ssh/sshd_config

PasswordAuthentication no

[glacier@glacier ~]$ sudo systemctl restart sshd

 

 

 

참고:

 

https://www.server-world.info/en/note?os=CentOS_7&p=ssh&f=4

https://www.hugeserver.com/kb/secure-ssh-on-centos-7/

https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-centos7

https://www.ibm.com/support/knowledgecenter/ko/SSIGMP_1.0.0/pim/unixandlinux/install_config/t_key_unilinux.htm?cp=SSRMWJ_7.0.1.10

https://www.ibm.com/support/knowledgecenter/ko/SSPFMY_1.3.3/com.ibm.scala.doc/config/iwa_config_secure_streaming.html

https://wiki.centos.org/HowTos/Network/SecuringSSH#head-9c5717fe7f9bb26332c9d67571200f8c1e4324bc

Posted by 비형랑#
:




콘솔로 장비를 설정하고 통신이 가능한 상태가 되면 콘솔보단 원격에서 장비를 관리하게 된다.
원격으로 장비에 접근하려면 텔넷이나 SSH를 사용해야 하는데, 텔넷은 데이터를 암호화하지 않아 캡쳐될 경우 설정내역이 그대로 노출되게 된다.
실습망과 같이 상용네트웍이 아니라면 텔넷을 사용해도 문제가 없지만 보안이 요구되는 네트워크의 경우 매우 치명적이다.
데이터를 암호화하여 전송하는 SSH를 적용하고, 포트번호도 기본값에서 바꿔주면 데이터의 유출과 무분별한 접근을 차단할 수 있다.

요구사항
k9(crypto)기능이 포함된 Cisco IOS image.
ex) c3750e-universalk9-tar.122-35.SE5.tar

1. 호스트네임 설정
Router(config)#hostname keysco
keysco(config)#

2. 도메인네임 설정
keysco(config)#ip domain-name keysco.com
keysco(config)#

3. RSA 키 생성 (시스코 권고안에 따라 1024비트 사용)
keysco(config)#crypto key generate rsa  
The name for the keys will be: keysco.keysco.com
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 1024 bit RSA keys, keys will be non-exportable...[OK]

keysco(config)#
*Mar  1 00:02:18.263: %SSH-5-ENABLED: SSH 1.99 has been enabled
keysco(config)#


4. 인증을 위한 계정 설정
keysco(config)#username cisco secret cisco
keysco(config)#enable secret cisco

5. 계정 인증 및 SSH 접근 설정
keysco(config)#line vty 0 4
keysco(config-line)#login local
keysco(config-line)#transport input ssh
keysco(config-line)#

6. SSH 파라미터 설정 (v1보다 보안이 강력한 v2적용. v1+v2: no ip ssh version)
keysco(config)#ip ssh version 2
keysco(config)#ip ssh time-out ?
  <1-120>  SSH time-out interval (secs)

keysco(config)#ip ssh time-out 30
keysco(config)#ip ssh authentication-retries ?
  <0-5>  Number of authentication retries

keysco(config)#ip ssh authentication-retries 3
keysco(config)#

7. 포트 변경
keysco(config)#ip ssh port 2222 rotary 1 
keysco(config)#ip access-list extended sshBlock
keysco(config-ext-nacl)#permit tcp any any eq 2222
keysco(config-ext-nacl)#exit
keysco(config)#line vty 0 4
keysco(config-line)#rotary 1
keysco(config-line)#access-class sshBlock in

8. 검증
Xshell 5 (Build 1339)
Copyright (c) 2002-2017 NetSarang Computer, Inc. All rights reserved.

Type `help' to learn how to use Xshell prompt.
[c:\~]$ ssh 1.0.0.150 22


Connecting to 1.0.0.150:22...
Could not connect to '1.0.0.150' (port 22): Connection failed.

Type `help' to learn how to use Xshell prompt.
[c:\~]$ 
SSH 기본포트인 22번이 차단되었다.

Xshell 5 (Build 1339)
Copyright (c) 2002-2017 NetSarang Computer, Inc. All rights reserved.

Type `help' to learn how to use Xshell prompt.
[c:\~]$ ssh 1.0.0.150 2222


Connecting to 1.0.0.150:2222...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.


keysco>en
Password: 
keysco# 
새로 지정한 포트인 2222로 SSH연결이 성립되었다.

keysco#show ssh
Connection Version Mode Encryption  Hmac	 State	               Username
99         2.0     IN   aes128-cbc  hmac-sha1    Session started       cisco
99         2.0     OUT  aes128-cbc  hmac-sha1    Session started       cisco
%No SSHv1 server connections running.
keysco#
keysco#show ip ssh
SSH Enabled - version 2.0
Authentication timeout: 30 secs; Authentication retries: 3
라우터에서 확인


Posted by 비형랑#
: