SSH 기본보안설정 #1 

레드햇 배포판을 기본설치하고 나면 의외로 취약점이 많다. 기본적으로 패키지가 구형이라면 패치하면되지만, 기본설정역시 중요하다. 그래서 이번엔 OpenSSH 버젼의 취약점과 기본 보안설정에 대해서 쓰고자 한다. ps) 체리님 블로그에 댓글달로갓다가 팁하나보고 문득정리해야겠다는 생각에 추가함. 

1. 패키지확인. 
먼저 쉘에서 사용중인 openssh 패키지의 버젼을 확인한다. 
----------------------------------------------------- 
[root@www1 log]# rpm -qa | grep ssh 
openssh-clients-3.9p1-8.RHEL4.4 
openssh-server-3.9p1-8.RHEL4.4 
openssh-3.9p1-8.RHEL4.4 
[root@www1 log]# 
----------------------------------------------------- 

현재나는 CentOS 4.1 을 쓰고 있는데, yum 을 통해서 항상 최신버젼을 유지하고있는터라 
2005년 08월 12일자 해당버젼에 대해서 보안권고는 없었다. 
ssh가 원격에서 접속이 가능하고 포트를 항상개방해놓아야 되기 때문에 버젼이 낮다면 업데이트먼저하기를 바란다. 

단! openssh를 rpm 이나 기타 패키지 매니저를 통한 방법으로 업데이트 하지않을 경우는 필히 주의해서 해야한다; 초보때 IDC를 한번 더가야했던.. 

2. 원격에서 root 접속 설정. 
root 라는 아이디자체가 워낙 코흘리게도 아는 아이디다 보니.. 사전공격에 가장 취약하다고 볼수있다. 또, openssh 1.x 버젼은 보안구멍이 많은 버젼으로 필히 패치하기 바란다. 그리고 root 의 비밀번호는 자주변경해줘야하고. root 비밀번호만큼은 나도 그때그때 암호표를 작성해서 접속할때마다 본다; 

RPM 설치시 - 
/etc/ssh/sshd_config 
------------------------- 
#LoginGraceTime 2m 
#PermitRootLogin yes 
#StrictModes yes 
#MaxAuthTries 6 
----------------------------------------------- 

#PermitRootLogin yes -> PermitRootLogin no 
로 변경한다. 
#LoginGraceTime 2m -> LoginGraceTime 60 
로 변경 / 로그인을 하지못햇을 경우 60초 뒤에 서버와 연결을 끊음 
#MaxAuthTries 6 -> MaxAuthTries 3 
로 변경 / 인증실패시 암호를 묻는 재시도 횟수 설정 

3. 원격 접속 포트 변경, 접속 프로토콜 설정. 
서버를 운영하다 보면 /var/log/message 로그에서 다음과 같은 줄을 발견할수있을것이다. 
/var/log/message 
---------------------------------------------------------------------- 
Aug  7 13:05:13 cls sshd(pam_unix)[10288]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=61.x.x.x 
Aug  7 13:05:14 cls sshd(pam_unix)[10290]: check pass; user unknown 
---------------------------------------------------------------------------------------- 
ssh 기본포트( no. 22 )원격지에서 스캐닝, 사전공격 등을 하면 기록이 된다. 무시하면 상관이 없지만.. 개인적인 생각으로 관리자라면 작은부분에서도 신경을 써야한다는거.. 해결책은 포트를 변경g해도 상당한 효과를 볼수있다 ^^ 

RPM 설치시 - 
/etc/ssh/sshd_config 
------------------------- 
#Port 22 
#Protocol 2,1 
#ListenAddress 0.0.0.0 
#ListenAddress :: 
----------------------------------------------- 

#Port 22 -> Port 2222 
 나는 2222번 포트로 운영을 한다. 임의의 포트로 지정을 해서 사전공격 및 스캐닝에 대해서 방지한다. 
#Protocol 2,1 -> Protocol 2 
ssh2 프로토콜로 요청하는 클라이언트만 받아드린다. 
#ListenAddress 0.0.0.0 
이 부분은 접속가능한 아이피를 설정하는 부분인데.. 기본설정은 모든곳에서 접속가능하도록 되어있다. 접속제한은 sshd 의 설정에서 하지 않고 tcpd 의 /etc/hosts.allow ; /etc/hosts.deny 를 사용하여 제어한다. 

4. 특정그룹, 특정유저만 원격접속 제한 
기본설정에는 포함되어있지 않으나 #man sshd_config 를 보면 AllowGroups, AllowUsers 라는 항목을 볼수있다. 

원격에서 ssh 를 이용함에 있어서 접속이 가능한 유저, 그룹을 설정하는 내용이다. 
설정하시기 전에 꼭 그룹과 유저를 확인하기 바랍니다. 
/etc/ssh/sshd_config 의 적당한 부분에 아래 내용을 포함시킨다. 
------------------------- 
AllowGroups wheel 
AllowUsers lampwzd 
------------------------------------------------------------------------------------- 

빨간색으로 된부분에 각자 관리자 아이디를 넣으면 됨. 
본인의 경우는 관리자 아이디를 wheel 그룹으로 설정해 놓아서 AllowGroups 에 그룹 wheel 을 추가해놓았다. 

반대로 
DenyGroups wheel 
DenyUsers lampwzd 
으로 지정해놓으면 해당 그룹, 유저가 접속이 거부된다. 

5. sshd 재시작 
RPM 설치시 
-------- 
#/etc/rc.d/init.d/sshd restart 
또는 
#killall -HUP sshd