암호를 아무리 길고 사전에 없는 해괴한 형태로 만든다 한 들, 인간이 암기하고 입력할 수 있는 암호에는 기억력과 시간의 한계가 있다. 반면 컴퓨터의 처리속도는 인간의 것에 비할 바가 아니기에 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 비형랑#
:






1. VNC서버 설치
[keysco@server ~]$ sudo yum install tigervnc-server

2. 방화벽이 VNC서버를 허용하도록 설정
[keysco@server ~]$ sudo firewall-cmd --add-service=vnc-server --permanent
[keysco@server ~]$ sudo firewall-cmd --reload

3. VNC암호 설정
[keysco@server ~]$ vncpasswd
Password:
Verify:

4. VNC 디스플레이 생성
[keysco@server ~]$ vncserver :1
Posted by 비형랑#
:





CentOS7에는 기본으로 OpenSSH 서버가 설치된다.

따라서 별도의 설치가 필요하지 않으나, 설치여부를 확인할 필요는 있다.




[keysco@server ~]$ rpm -qa openssh-server
openssh-server-6.6.1p1-11.el7.x86_64
[keysco@server ~]$

OpenSSH 서버 패키지가 설치되어 있는지 확인하고,




[keysco@server ~]$ systemctl status sshd
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since 화 2018-09-04 15:29:12 KST; 2min 44s ago
 Main PID: 1122 (sshd)
   CGroup: /system.slice/sshd.service
           └─1122 /usr/sbin/sshd -D

[keysco@server ~]$ 

sshd 데몬(서비스)의 가동 여부를 확인한다.





[keysco@server ~]$ sudo vi /etc/ssh/sshd_config

SSH 포트번호를 바꾸고 싶다면 "sshd_config" 파일을 열어서 "#Port 22" 를 "Port xxxx"로 바꿔준다.




[keysco@server ~]$ sudo service sshd restart
Redirecting to /bin/systemctl restart  sshd.service 

SSH 데몬을 재시작한다.




[keysco@server ~]$ ss -nalt
State      Recv-Q Send-Q                                      Local Address:Port                                        Peer Address:Port 
LISTEN     0      128                                                     *:22                                                     *:*     
LISTEN     0      128                                             127.0.0.1:631                                                    *:*     
LISTEN     0      100                                             127.0.0.1:25                                                     *:*     
LISTEN     0      128                                                    :::22                                                    :::*     
LISTEN     0      128                                                   ::1:631                                                   :::*     
LISTEN     0      100                                                   ::1:25                                                    :::*     
[keysco@server ~]$ 

새로 지정한 포트가 리스닝 상태인지 확인하고

만약 새로 지정한 포트가 없다면 SELinux의 SSH포트 정의에 추가해줘야 한다.




[keysco@server ~]$ sudo semanage port -l | grep ssh
ssh_port_t                     tcp      22
[keysco@server ~]$ 

현재 SSH포트를 확인하고




[keysco@server ~]$ sudo semanage port -a -t ssh_port_t -p tcp 12345
[keysco@server ~]$ 

ssh_port_t 정의에 TCP 포트 xxxx를 추가한다.




[keysco@server ~]$ sudo service sshd restart
Redirecting to /bin/systemctl restart  sshd.service
[keysco@server ~]$ ss -nalt
State      Recv-Q Send-Q                                      Local Address:Port                                        Peer Address:Port 
LISTEN     0      128                                                     *:12345                                                   *:*     
LISTEN     0      128                                             127.0.0.1:631                                                    *:*     
LISTEN     0      100                                             127.0.0.1:25                                                     *:*     
LISTEN     0      128                                                    :::12345                                                  :::*     
LISTEN     0      128                                                   ::1:631                                                   :::*     
LISTEN     0      100                                                   ::1:25                                                    :::*     
[keysco@server ~]$ 

다시 SSH 데몬을 돌리고 포트를 확인한다.

이제 포트는 열렸지만 SSH접속은 아직도 불가능하다. 방화벽에서 차단되었기 때문이다.




[keysco@server ~]$ firewall-cmd --list-all
public (default, active)
  interfaces: enp2s1
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
  
[keysco@server ~]$

현재의 방화벽 상태 확인




[keysco@server ~]$ sudo firewall-cmd --permanent --zone=public --add-port=12345/tcp
success
[keysco@server ~]$ 

새로운 포트를 방화벽 허용규칙에 추가해주고




[keysco@server ~]$ sudo firewall-cmd --reload
success
[keysco@server ~]$

방화벽 재시작




[keysco@server ~]$ firewall-cmd --list-all
public (default, active)
  interfaces: enp2s1
  sources: 
  services: dhcpv6-client ssh
  ports: 12345/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
  
[keysco@server ~]$ 

변경된 방화벽 확인.




Copyright (c) 2002-2017 NetSarang Computer, Inc. All rights reserved.

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


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

Last login: Tue Sep  4 15:30:21 2018
[keysco@server ~]$ 

마지막으로 변경된 SSH포트로 접속 테스트.

Posted by 비형랑#
: