=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
(1) 꼭 필요한 프로그램들만 설치 하고 사용자들의 접근을 최대한 제한
(2) 서버 운영 관련 프로그램들을 자주 업데이트
(3) 사용자에 대해 정확한 정보를 파악하라.
(4) 시스템 보안의 목표
- 정보의 비밀성 : 비인가자 및 불법 사용자로부터 비밀자료의 누출 방지를 보장
- 정보의 무결성 : 자료의 변경, 삭제, 생성, 파괴 등으로 부터 보호
- 정보의 가용성 : 적시 적소에서 정보에 접근 가능하고, 사용할 수 있는 상태 확보
- 서비스 기록성 : 서비스에 관한 로그파일 기록 및 감시
- 부인 봉쇄 : 부인 할 수 없는 증거의 확보
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1. 기본적인 컴파일러 속성을 root만 사용할 수 있도록 퍼미션 변경
# chmod 100 /usr/bin/gcc /usr/bin/g++
# chattr +i /usr/bin/gcc /usr/bin/g++
-> 컴파일러는 root만 실행, 일반유저가 파일을 수정/복사/삭제 안됨.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2. 주요 환경 설정파일 압축 보관
# tar -cvzf etc.tgz /etc
# tar -cvzf named.tgz /var/named
# tar -cvzf qmail.tgz /var/qmail
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
3. 홈디렉토리 파티션과 백업 디스크를 준비한다.
# df -h
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
4. 런레벨별 시작스크립트 활성화 상황을 분석하고 재정의 한다
# chkconfig --list
# ntsysv
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5. ssh 원격 접속 서비스 보안
# vi /etc/ssh/sshd.conf
-> PermitRootLogin no 로 변경
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6. proftpd 서버에서의 chroot 적용 및 root 접속 제한하기
# vi /usr/local/server/proftpd/etc/proftpd.conf
-> DefaultRoot ~!wheel
-> RootLogin off
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7. su 명령어는 wheel 그룹 사용자만 실행 권한 부여하기
# chown root.wheel /bin/su
# chmod 4750 /bin/su
# chattr +i /bin/su
# vi /etc/group
-> wheel:x:10:root,kim,(..추가하고 싶은 유저)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8. 사용자 관련 명령어 파일속성 변경금지 설정
# chmod 750 /usr/sbin/useradd /usr/bin/top /sbin/fdisk /sbin/mkfs* /sbin/fsck*
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9. root 소유의 SetUID, SetGID 파일 검색 후 퍼미션 조정하기
# find / -user root -perm -4000 -print
굳이 root로 실행 될 필요없는 ping,ping6 퍼미션을 100으로 변경
# chmod 100 /bin/ping /bin/ping6
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10. 기본 시스템 정보 오픈 파일들 점검
- /etc/issue : 콘솔로 로그인 시도시 보여주는 메시지 설정파일(telnet)
- /etc/issue.net : 원격에서 로그인 시도시 보여주는 메시지 설정파일(telnet)
- /etc/redhat-release : 원격에서 로그인 시도시에 리눅스 배포판 정보를 보여주는 메시지(telnet)
- /etc/motd : 로그인을 성공한 다음 보여주는 메시지 (telnet,ssh)
--> 내용을 빈파일로 만들거나 다른 문자로 변경하도록 한다.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
11. /etc/sysctl.conf와 /proc파일 시스템 설정
(1) icmp ping 값에 응답하지 않게 하기
# sysctl -w net.ipv4.icmp_echo_ignore_all=1
(2) 커널 버전 및 운영체제 이름 알아보기
# cat /proc/sys/kernel/osrelease
# cat /proc/sys/kernel/ostype
(3) 특정 네트워크의 브로드캐스트 주소를 대상으로 하는 ping 테스트 막기
# sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
(4) tcp 연결 세션 유지시간(기본값 60[초])
# cat /proc/sys/net/ipv4/tcp_fin_timeout
(5) tcp keep alive 시간 : TCP 연결상태를 유지하는 시간을 설정 (기본값 :7200[초])
# sysctl -w net.ipv4.tcp_keepalive_time=1200
(6) 서버내에서의 로컬 포트 범위를 지정하고 있는 파일
# cat /proc/sys/net/ipv4/ip_local_port_range
(7) ip포워딩을 지정하는 파일 (기본값:0)
# cat /proc/sys/net/ipv4/ip_forward
(8) 서버의 날짜 정보를 외부의 네트워크로 부터 막기 (0이면 못가져감)
# cat /proc/sys/net/ipv4/tcp_timestamps
(9) SYN Flooding 공격막기 (백로그큐 늘려주기 or tcp_syncookies를 1로 바꿔줌)
# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
(10) ICMP redirect의 변조된 accept 패킷 차단 (0이면 패킷 차단)
# cat /proc/sys/net/ipv4/conf/default/accept_redirects
# sysctl -w net.ipv4.conf.default.accept_redirects=0
(11) DOS공격의 소스 서버로 사용을 차단 (IP 스푸핑 방지=1)
# cat /proc/sys/net/ipv4/conf/default/rp_filter
(12) 스푸핑 패킷에 로그 생성 (기본값=0, 로그 남김=1)
# cat /proc/sys/net/ipv4/conf/default/log_martians
(13) source route 패킷허용 막기 (0이면 막기 설정)
# cat /proc/sys/net/ipv4/conf/default/accept_source_route
(14) 커널에서 사용할 수 있는 최대 파일의 수 설정
# cat /proc/sys/fs/file-max
(15) CPU 정보 보기
# cat /proc/cpuinfo
(16) 서버 메모리 정보 보기
# cat /proc/meminfo
(17) 서버 디바이스 장치 알아보기
# cat /proc/devices
(18) 커널에서 인식할 수 있는 파일시스템 알아보기
# cat /proc/filesystems
(19) 현재 사용되고 있는 메모리 번지값 알아보기
# cat /proc/iomem
(20) 서버에 장착된 입출력 포트들의 번지값 알아보기
# cat /proc/ioports
(21) 서버의 평균 부하율 알아보기
# cat /proc/loadavg
(22) 커널에 로드되어 있는 모듈들 알아보기
# cat /proc/modules
(23) 현재 리눅스 시스템에 마운트된 장치 디바이스 정보 알아보기
# cat /proc/mounts
(24) 파티션 정보 알아보기
# cat /proc/partitions
(25) 커널 버전 알아보기
# cat /proc/version
(26) 장치들의 IRQ 값 알아보기
# cat /proc/interrupts
--> 재부팅시에도 적용이 되도록 하려면 /etc/sysctl.conf 파일에 정의해 주면 됨.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
12. 시작 프로그램의 수동 등록
# cat /etc/rc.d/rc.local
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
13. 서버의 표준시간 설정
# rdate -s time.bora.net && clock -w
# date && clock
# crontab -e
00 01 * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
14. SetUID, SetGID, StickyBit
- 4xxx : SetUID 퍼미션 부여
- 2xxx : SetGID 퍼미션 부여
- 1xxx : Stickybit 퍼미션 부여
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
15. 파일 검색을 위한 find 명령어 사용
(1) 지정한 날짜 이후에 변경된 적이 있는 파일 찾기
# find / -used 2 -exec ls -l {} \;
(2) 지정된 파일보다 이후에 생성된 파일 검색
# find / -newer /root/test.txt -exec ls -l {} \;
(3) root 소유의 SetUID 파일 검색
# find / -user root -perm -4000 -print
(4) 리눅스 서버내의 백도어 파일 검색
# find /dev -type f -exec ls -l {} \;
(5) 서버 내부의 .rhost 파일 검색
# find / -name .rhosts -exec ls -l {} \;
(6) 서버 내부의 .bash_history 파일 모두 검색 확인
# find / -name .bash_history -exec ls -l {} \;
(7) 소유자가 없는 파일 or 소유그룹이 없는 무적 파일 검색
# find / -nouser -o -nogroup -print
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
16. root 관리자 명령어와 일반 사용자 명령어 실행 경로(PATH) 설정
(1) root 관리자의 id와 실행파일 경로 PATH 보기
# id
# echo $PATH
(2) 유저의 id와 실행파일 경로 PATH 보기
# id
# echo $PATH
# cat .bash_profile
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
17. 파일속성 설정으로 리눅스 파일 변형 막기(chattr, lsattr)
- chattr [-RV] [-v 설정버전] [+- 설정모드] [대상파일들]
- lsattr [-RVadv] [대상파일들]
- i 속성: 안지워짐 , a속성 : 추가만 가능
(예)
# touch test1.txt
# chattr +i test1.txt
# lsattr test1.txt
# rm test1.txt -> 안지워짐
# chattr -i test1.txt
# rm test1.txt -> 지워짐
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
18. TCP Wrapper를 이용한 호스트 접근제어 (/etc/hosts.deny, /etc/host.allow)
- TCP 기반 서비스들의 모니터링과 필터링을 TCP Wrapper를 통하여 설정 가능.
- xinetd 수퍼데몬으로 관리하는 서비스 데몬만 제어가 가능함.
- standalone 방식으로 서비스하는 데몬은 TCP Wrapper로 접근 제어가 불가능.
- /etc/hosts.deny 파일 적용후 /etc/hosts.allow 적용
- 대부분의 방화벽 설정은 tcp wrapper를 사용하지 않고 패킷 제한방법인 iptables를 사용함.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
19. nmap 보안스캐너 사용하기
(예)
# nmap -v -sT -O localhost
# nmap -sV localhost <-- 포트 서비스 버전까지 나옴
# nmap -sU -sV localhost <-- UDP 사용포트 스캔
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20. 보안 쉘접속을 위한 ssh 쉘접속 사용
# vi /etc/ssh/sshd_config
(1) 원격에서의 root로 접속을 제한하기 위해서는
PermitRootLogin no
(2) ssh 접속을 특정 유저에게만 오픈하고자 한다면
AllowUsers linux lug
(3) 서비스 포트 변경
Port 22222
(4) 서비스 포트 변경 후 접속시
# ssh linux@127.0.0.1 -p 22222
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21. portsentry를 이용한 실시간 포트 스캔 방어
- portsentry는 실시간으로 메모리에 상주에 있으면서 포트스캔을 탐지하고 대응하는 프로그램.
- 비정상적인 방법으로 스캔하면 감지하여 자동으로 /etc/hosts.deny파일에 ip추가하여 차단함
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22. chkrootkit을 이용한 rootkit 탐지 (http://www.chkrootkit.org)
# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
# make sense
# ./chkrootkit <- rootkit 감염여부 검사
# ./chkproc -v <- ps명령으로 PID가 보이지 않는 프로세스들을 검출
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
23. rootkithunter 설치 및 사용법
- 백도어나 루트킷을 검출하며, 루트킷이 사용하는 파일 및 숨김파일의 존재여부를 판별해 준다.
# ./installer.sh --install
# rkhunter --update
# rkhunter -c
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
24. OSSEC 유틸리티 (http://www.ossec.net)
- chkrootkit 프로그램과 다르게 시스템상 데몬으로 동작하면서 지속적으로 시스템의 주요파일 및
로그들을 확인하고, 외부공격에 대해 바로 대응 할 수 있는 유틸리티
- 관리자에게 실시간으로 메일을 발송한다.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
25. iptables를 이용한 방화벽 설정하기 (http://www.netfilter.org)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'Server > Linux' 카테고리의 다른 글
CentOS SELINUX 비활성화 설정 (0) | 2011.12.28 |
---|---|
CentOS 설치후 네트워크 설정 (0) | 2011.12.28 |
grep 명령어로 kill (0) | 2011.11.27 |
grub vga modes (0) | 2011.09.23 |
리눅스 네트워크 설정 . (0) | 2011.09.23 |