출처 : http://www.andrewault.net/2010/05/17/securing-an-ubuntu-server/
1. 기본값 변경
참고: StricterDefaults
1.1. 공유 메모리(/dev/shm)에 접근하지 못하도록 변경
/dev/shm은 httpd 같은 실행중인 서비스를 공격하기 위해 사용될 수 있음.
$ sudo vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,noexec,nosuid 0 0
1.2. root 계정으로 SSH 로그인을 못하도록 변경
우분투는 기본적으로 root 로그인 자체가 제한되어 있지만 Slicehost나 Linode를 설치하면 그게 풀림.
(*) sudo passwd root 커맨드를 입력해서 제한을 풀 수도 있음.
(*) sudo passwd root 커맨드를 입력해서 제한을 풀 수도 있음.
$ sudo vi /etc/ssh/sshd_config
# ...
PermitRootLogin no
# ...
1.3. 관리자 그룹만 su를 사용하도록 변경
우분투는 관리자 그룹(admin)이 없으므로 일단 만들어야 함.
$ sudo groupadd admin
현재 사용자를 admin 그룹에 등록
$ sudo usermod -a -G admin [username]
admin 그룹만 사용할 수 있도록 /bin/su 접근 제한.
$ sudo dpkg-statoverride --update --add root admin 4750 /bin/su
변경된 내용 확인
$ ls -lh /bin/su
-rwsr-x--- 1 root admin 31K 2010-01-26 17:09 /bin/su
1.4. IP Spoofing(IP 주소 속이는 것)을 못하도록 인입 패킷의 소스 라우팅 제한
참고: TCP/IP Stack Hardening
$ sudo sysctl -w net.ipv4.conf.all.accept_source_route=0
$ sudo sysctl -w net.ipv4.conf.default.accept_source_route=0
1.5. 시스템 계정이 FTP 서버에 접근할 수 없도록 변경
이건 ftpd를 사용하는 경우에만 해당됨. SFTP가 좋음.
참고: ftpusers 매뉴얼
$ sudo vi /etc/ftpusers
# FTP 서버 접근 금지 계정 추가
backup
bin
daemon
games
gnats
irc
libuuid
list
lp
mail
man
mysql
news
ntp
postfix
proxy
sshd
sync
sys
syslog
uucp
www-data
2. UFW (Uncomplicated Firewall)
참고:
wikipedia
Ubuntu UFW Uncomplicated Firewall Examples
community documentation
server guide
ufw manual
project wiki
nice article
리눅스는 CLI 기반의 iptables라는 프로그램을 이용해 방화벽 설정을 할 수 있음.
이걸 좀 더 쉽게 사용할 수 있게 만든 것이 UFW임.
UFW도 CLI 기반이지만 GUI for Uncomplicated Firewall(gufw)이라는 프로그램도 있음.
이걸 좀 더 쉽게 사용할 수 있게 만든 것이 UFW임.
UFW도 CLI 기반이지만 GUI for Uncomplicated Firewall(gufw)이라는 프로그램도 있음.
설치
$ sudo aptitude install -y ufw
$ sudo ufw enable
명령어 보기
$ sudo ufw show
설정 보기
$ sudo ufw status
Apache 서버로 접근하는 SSH, HTTP 허용하기
$ sudo ufw allow ssh
$ sudo ufw allow http
설정할 수 있는 애플리케이션 목록
$ sudo ufw app list
서비스 목록
$ less /etc/services
3. DenyHosts로 SSH 공격 막기
참고: Denyhosts 홈페이지
$ sudo aptitude -y install denyhosts
/var/log/auth.log 파일을 주기적으로 스캔하여 지속적으로 로그인에 실패하는 IP를 발견하면 자동으로 /etc/hosts.deny 파일에 추가함.
4. Tiger(시스템 보안 스캐너)
Tiger: security system scanner
참고: Tiger – The Unix security audit and intrusion detection tool
시스템 설정과 파일을 분석하여 자동으로 보안 상태를 점검하고 보고서를 생성하는 프로그램.
/var/log/tiger 파일을 기반으로 잠재적인 보안 문제에 대한 보고서를 생성하며 tigexp 커맨드를 이용해 FAIL 코드의 상세한 내용을 확인할 수 있음.
/var/log/tiger 파일을 기반으로 잠재적인 보안 문제에 대한 보고서를 생성하며 tigexp 커맨드를 이용해 FAIL 코드의 상세한 내용을 확인할 수 있음.
설치
$ sudo aptitude -y install tiger
실행
$ sudo tiger
보고서 보기
$ sudo -i
less /var/log/tiger/`ls -t1 /var/log/tiger | head -1`
exit
FAIL 코드 상세 내용 보기
$ tigexp dev002f
이건 무시할 것.
--FAIL-- [dev002f] /dev/fuse has world permissions
--FAIL-- [logf005f] Log file /var/log/btmp permission should be 660
이 파일의 퍼미션을 변경하면 문제가 발생할 수 있음.
5. psad로 침입 탐지하기
참고: psad: Intrusion Detection and Log Analysis with iptables
psad는 iptables를 기반으로 침입 탐지 로그를 남기는 여러 개의 데몬으로 구성됨.
설치
$ sudo aptitude -y install psad
상태확인
$ sudo psad -S
6. Nmap
참고: Nmap
일종의 포트 스캐너라고 할 수 있음.
설치
$ sudo aptitude install -y nmap
포트 스캐닝
$ nmap -v -sT localhost
SYN 스캐닝
$ sudo nmap -v -sS localhost
스캔 옵션. 옵션이 되게 복잡한데 꼭 필요한 몇가지만 사용할 수 있으면 됨.
nmap GUI wrapper 프로그램도 존재함.
nmap GUI wrapper 프로그램도 존재함.
(*) 어떤 네트워크는 nmap으로 네트워크를 탐색하게 되면 연결이 끊어지는 문제가 발생할 수 있음.
네트워크 장비가 보안을 위해 일부러 연결을 끊는 경우도 있고 네트워크 장비가 노후되어 멈추는 경우도 있음.
네트워크 장비가 보안을 위해 일부러 연결을 끊는 경우도 있고 네트워크 장비가 노후되어 멈추는 경우도 있음.
(*) Network Topology(네트워크 토폴로지)라는 용어가 있음.
이건 네트워크 구성 현황을 그림으로 보여주는 건데 네트워크 관리 프로그램(혹은 시스템)은 이걸 자동으로 만들어주는 기능이 있음.
그림 뿐만 아니라 장비의 상태도 한 눈에 확인할 수 있으므로 매우 유용한데 이거 아무렇게나 실행하면 네트워크 전체가 마비되는 문제가 발생할 수도 있음.
이건 네트워크 구성 현황을 그림으로 보여주는 건데 네트워크 관리 프로그램(혹은 시스템)은 이걸 자동으로 만들어주는 기능이 있음.
그림 뿐만 아니라 장비의 상태도 한 눈에 확인할 수 있으므로 매우 유용한데 이거 아무렇게나 실행하면 네트워크 전체가 마비되는 문제가 발생할 수도 있음.
7. 루트킷 검사
참고: chkrootkit
서버에 루트킷이 설치되어 있는지 검사함.
루트킷이라는 건 root 권한을 가진 상태로 실행되는 프로그램인데 ps 같은 일반적인 방법으로는 보이지 않는 악성 프로그램이라고 보면 됨.
루트킷이라는 건 root 권한을 가진 상태로 실행되는 프로그램인데 ps 같은 일반적인 방법으로는 보이지 않는 악성 프로그램이라고 보면 됨.
설치
$ sudo aptitude install -y chkrootkit
실행
$ sudo chkrootkit
8. LogWatch
참고: LogWatch
기본 로그 파일을 분석하여 보기 좋은 포맷으로 만들어 주는 프로그램.
설치
$ sudo aptitude -y install logwatch
실행
$ sudo logwatch | less
9. 지속적인 시스템 점검
이제 일주일에 한 번 정도는 지금까지 설치한 프로그램을 활용하여 점검할 것.
보안 관련 웹사이트
관리자로서 반드시 지켜야 할 것이 하나 있다면, 아무리 지겨워도 절대로 대충 점검하지 말라는 것이다.
매일 서버와 네트워크(방화벽 포함)를 점검했는데 점검이라는 게 정말 지겨운 일이다.
로그, 프로세스, CPU, 메모리, 애플리케이션 등 매일 같은 결과가 나옴에도 불구하고 이걸 꼭 해야 한다.
이상하게 평소에는 정말 잘 작동했는데 점검을 느슨하게 하는 날은 꼭 문제가 하나씩 터지더라.
물론 꼼꼼히 점검해서 사전에 이상 징후를 발견한 적도 있다.
그리고 서버와 네트워크 장비를 직접 관리한다면 반드시 장비의 LED를 확인하는 것도 좋다.