서버설치후 해야할 일

Posted 2008. 11. 6. 17:59

출처 Small is beautiful~* | 으랏차차
원문 http://blog.naver.com/jjaiwook79/30009020151


1. 네트워크 접근제한


1) /etc/hosts.allow, hosts.deny 파일을 편집하여 접근을 제한한다.

======================== hosts.allow ========================
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
ALL : 218.232.117.*
ALL : 211.214.121.18
ALL : 203.250.136.217
ALL : 211.62.2.*
ALL : 211.62.6.*
ALL : 211.62.7.*
ALL : 211.62.8.*
ALL : 211.62.9.*
ALL : 211.62.15.*
ALL : 211.62.15.*
ALL : 211.196.157.14
===========================================================

======================== hosts.deny ========================
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
ALL : ALL
===========================================================

2) IPTABLE 을 사용하여 커널수준의 방화벽을 구성한다.

======================== rc.local ===========================
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F INPUT
iptables -F OUTPUT

# 웹서버일경우 80으로 들어오는 요청과 1.1.1.1 에서들어오는 ssh 요청을
# 받아들인다.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -s 1.1.1.1 --dport 22 -j ACCEPT

# 1초에 15번 이상의 HTTP 접근을 할경우 (DOS공격) 접근을 차단한다.
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -connlimit-mask 24 -j DROP

# 메일서버의 경우 동시에 5개이상 SMTP 접근자(스팸머)의 경우 5분동안
# 접근을 제한한다.
iptables -A INPUT -m recent --name spammer --rcheck --seconds 300 -j drop
iptables -A INPUT -p tcp --syn --dport 25 -m connlimit --connlimit-above 5 -m recent --name spammer --set -j DROP

# STRING 필터기능
# MSN 문자열이들어간 패킷 차단
iptables -A FORWARD -m string --string "messenger.msn.com" -j DROP
# 싸이월드로 접속차단
iptables -A FORWARD -p tcp --dport 80 -m string --string "Host: cyworld.nate.com" -j DROP

# 포트스캔을 차단한다.
iptables -A INPUT -m psd -j DROP

# 만약서버가 해킹당해 DOS공격지로 사용될때 적용시킴.
# DNS 쿼리이외에 UDP 패킷이 나가는 것을 방지
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP

# 이외 모든 접근을 차단한다.
iptables -A INPUT -j DROP
===========================================================


2. 시스템 보안


1) sshd를 변경한다. (/etc/ssh/)
======================== sshd_config ========================
# LINE 13 - SSH 포트변경
Port 250
# Line 37 - root계정으로 접근을 제한
PermitRootLogin no
===========================================================

2) 보안상취약한 TELNET 서비스중지
-----------------------------------------------------------
# setup <-- TELNET 해제
# chkconfig --list | grep telnet
krb5-telnet: 해제 <-- 확인
-----------------------------------------------------------

3) 명령어 보안

3-1) ADMIN그룹 사용자만 su 를 사용할 수 있도록 함
-----------------------------------------------------------
# groupadd admin
# useradd -g admin -c 'root 접근가능계정' jjaiwook79
# chgrp admin /bin/su
# chmod o-x /bin/su
-----------------------------------------------------------

3-2) 불법사용자가 다른 서버로 부터 파일을 가져 오지 못하게 제한한다
- 환경이 같으면 다른 서버의 바이너리파일을 가져와 사용할 수 있다
-----------------------------------------------------------
# cd /usr/bin
# chmod 700 scp wget curl lynx
-----------------------------------------------------------

3-3) 불법사용자가 해킹에 사용할 수 있는 명령어들의 권한을 제한한다.
-----------------------------------------------------------
# which nc (또는 netcat)
# chmod 700 /usr/bin/nc
# which gcc
# chmod 700 /usr/bin/gcc
# which cc
# chmod 700 /usr/bin/cc

# chgrp admin /usr/bin/ssh
# chmod o-x /usr/bin/ssh <-- 어드민사용할 수 있도록함. 경유지가되는 것을 막음.
-----------------------------------------------------------

4) 디렉터리보안

4-1) 커널취약성을 대비하여 불법사용자가 프로세스를 실행 못하게 한다.
-----------------------------------------------------------
# echo chmod 700 /proc >> rc.local <-- 부팅시마다 권한이 변하므로 rc.local에 등록해준다.
# chmod 700 /proc
-----------------------------------------------------------

4-2) 해킹에 자주악용되는 /tmp, /var/tmp, /dev/shm 등을 주기적으로 모니터링한다. 이상한 파일이 존재하는지 확인.


3. 보안도구 사용


1) modsecurity (http://www.modsecurity.org)]

웹서버 앞단에서 웹서버로 들어가는 URL요청들을 필터링 할 수 있다.


SecServerSignature " Microsoft-IIS/5.0"
SecFilterSelective THE_REQUEST "wget"
SecFilterSelective THE_REQUEST "lynx"
SecFilterSelective THE_REQUEST "mkdir"
SecFilterSelective THE_REQUEST "/tmp"
SecFilterSelective THE_REQUEST "/bin"
SecFilterSelective THE_REQUEST "/etc/passwd"
SecFilterSelective THE_REQUEST "/\.bash_history"


웹서버의 정보를 바꾸고 (Microsoft-IIS로 표시), 웹해킹에 자주사용되는 명령어 및 디렉터리들을 요청하는 http 접근을 차단한다.


2) promiscan (http://www.securityfriday.com/tools/promiscan_sla.html)

SNIFFING을 탐지할 수 있다.


3) chkrootkit, rkhunter

rootkit을 탐지 할 수 있다.


4) john the Ripper (http://www.openwall.com/john/)

알기쉬운 비밀번호를 사용하는 사용자를 체크한다.