본문으로 바로가기

Red Hat 5 보안 설정

category 웹/웹.리눅스.SQL 2009. 8. 16. 13:03

레드햇 리눅스을 설치하고 환경 설정을 한지 하루 만에 뚫렸습니다. -_-;
로그를 보니 중국, 미국, 프랑스 애들이 덤볐는데 미국 달라스에 사는 넘이 결국 들어온듯 합니다.  이 일을 계기로 몇 가지 원칙을 세웠습니다.

1. 쉽게 유추할 수 있는 계정 이름을 쓰면 안됩니다.
  - admin, root, ftp, ftpsuer, user, administrator, webadmin 등의 이름으로 평소에도 무작정 접속을 합니다.

2. 패스워드는 꼭 특수문자를 사용해서 처리합니다.
 - 대소문자를 조합하거나, 숫자 키 윗쪽의 !@#$ 등의 기호를 사용해서 만듭니다.

3. 인터넷으로 접속 가능한 포트를 변경합니다.
- 웹 서비스 80은 어쩔 수 없다고 하더라도 ssh, ftp 등의 알려진 서비스의 포트는 기본적으로 바꾸어야 합니다. 이거만 해도 외부 시도가 반 이상 줄어듭니다.

4. 최신 버전으로 업데이트 하거나 소스로 설치합니다. 


결국 운영체제부터 다시 설치하면서 정리를 해봅니다. 이번에는 'SELinux 경고' 출력 옵션을 강제적으로 동작하게 만들었습니다.


SELinux 설정

웹 서버 사용시 SELinux로 인해 웹으로의 접속이 원활하지 못합니다. 특히나 아파치 모듈을 추가하게 되면 추가한 모듈의 로딩이 되지 않아서 구동조차 되지 않습니다.

제 경우 mod_jk.so 파일로 인해 httpd 가 구동하다가 오류로 정지 합니다. 추가한 파일 mod_jk.so 나 workers.properties 과 /var/www/html 디렉토리, /var/www/html/test 디렉토리(jdbc.jsp, phpinfo.php, hello.jsp 등)에 대해 액세스를 허용해야 합니다.

restorecon -v '/etc/httpd/modules/mod_jk.so'     <-- 파일일 경우
restorecon -R -v '/etc/httpd/conf'                     <-- 디렉토리인 경우
웹 홈 디렉토리
...

프로그램 > 시스템 도구 > SELinux Troublesshooter를 선택해서 로그를 보면(패널에 노란색 별모양의 아이콘을 선택) 오류에 대한 설명을 보고 처리하면 됩니다. 설명대로 명령을 입력해서 처리할 수 있습니다.

# cd /etc/httpd/modules/

# restorecon -v './mod_jk.so' 
또는
# restorecon -R -v '.'

# restorecon -v './jk.conf'

# setsebool -P httpd-unified=1

# restorecon -R -v '/var/www/html/test'






sshd 설정

외부접속을 안 할수 없으므로 포트부터 바꿔줍니다.

ssh_config file : 클라이언트 툴의 접근에 대한 설정 파일
sshd_config file : ssh 데몬 설정을 위한 설정 파일


# vi /etc/ssh/sshd_config

#Port 22
Port 33633     <-- 포트 번호 변경 

Protocol 2         <-- 프로토콜 1은 보안때문에 사용 안함

#ListenAddress 0.0.0.0
ListenAddress 0.0.0.0  <-- 로 바꾸거나
ListenAddress xxx.xxx.xxx.xxx <-- 사용중인 IP 로 변경, 미변경시 /var/log/secure 파일에 error: Bind to Port xx on 0.0.0.0 failed: Address already in use. 오류 발생

#LoginGraceTime 2m
LoginGraceTime 1m  <-- 사용자의 로그인 대기 시간, 로그인 하지 못하면 해제

#PermitRootLogin yes
PermitRootLogin no    <-- root 로그인 허용 여부, su 명령으로 root 로 전환하여 사용하는 것이 안전

PasswordAuthentication yes  <-- 프로토콜1, 2에서 패스워드 인증 설정

#MaxAuthTries 6
MaxAuthTries 2   <-- 로그인 시도 최대 횟수


# 아래 두 부분은 사용 중지 중
#PubkeyAuthentication yes  <-- 주석처리시 기본값 yes, no 일시 공개키로 접속 인증, 프로토콜 2 에서 적용되는 옵션

#AuthorizedKeysFile    .ssh/authorized_keys
AuthorizedKeysFile    .ssh/authorized_keys    <-- 인증키를 저장할 위치 및 파일명을 지정하는 지시자


# vi /etc/ssh/ssh_config

#Port 22

Host *       <-- 여기 아래에 다음 줄 복사
Port 33733 <-- 포트번호 변경

# service sshd start

# sftp 유저@localhost

sftp 접속시 'Received message too long' 오류가 날수 있습니다.
이 경우 로그인시 문자를 출력하는 부분이 있으면 안됩니다. 바꿔 이야기 하면 .bashrc 파일이나 .chsrc 파일에 'echo', 'date' 류의 명령을 사용하면 안됩니다(관련 링크 : http://www.snailbook.com/faq/sftp-corruption.auto.html).

앞 블로그에서 사용했던 .bashrc파일에서 'echo' 와 'date' 출력 부분을 주석처리하면 잘 동작합니다.

vsftp 프로그램이 sftp 프로그램보다 속도가 빠릅니다. 로컬 접속임에도 불구하고 sftp 접속시 333 KB/s 정도 나옵니다. 지금 사용하려는 리눅스 기종은 웹 환경으로 구축되는 기계여서 sftp 로도 충분할 듯 합니다. 하지만 vsftpd를 설치해 두었습니다. 미리 준비를 해 두었습니다. ^_^; 대용량 파일 전송시에만 vsftpd를 실행하는 방법을 사용하려 합니다.

아직 vsftpd 포트의 설정은 처리하지 못했습니다. /etc/vsftpd/vsftpd.conf 파일을 수정해도 pam 설정과 맞물려서 제대로 설정을 맞추지 못했습니다. 다만 사용시에만 열어둘 목적이므로 ssh 접속후 서비스를 구동하는 방법으로 처리하려 합니다.



각종 포트 막기

외부로 접속되는 8009, 8080 포트는 막아둡니다. 내부적으로는 포트 사용의 제한이 없게 설정을 합니다. '시스템 > 관리 > 보안 수준 및 방화벽'을 선택해서 사용하지 않는 포트를 막아둡니다. 여기서의 설정은 외부로의 설정만 처리합니다.
http://localhost/hello.jsp 접속시 외부로는 80 포트로 접속하나 내부적으로 8009 포트(connector)를 통해 톰캣(8080)으로 연결해서 처리를 합니다. 따라서 8080이나 8009 는 외부에서 접속을 막아두어도 무방합니다.

마찬가지로 vncserver 5901 포트도  외부에서는 막고, 터널링을 통해 외부에서는 ssh  사용 포트만 열어두면 됩니다.




국가별 IP 막기

http://people.netfilter.org/peejix/geoip/database/20050410/

geoipdb.bin, geoipdb.idx 파일 다운로드 커널 컴파일.. !! @.@..  나중에...


사용자 인증
공개키를 위한 사용자 인증.. 추후에 작업 예정..