[ Linux Server 보안설정 5 가지팁 ] 코리아서버호스팅 서비스운영팀
- 목차 - 1. 서버에서실행되는서비스확인 2. 원격접속 (SSH) 보안설정 3. /tmp 디렉터리보안설정 4. iptable 설정 / hosts.allow & hosts.deny 설정 5. 시스템파일변조체크 문서작성간에테스트된환경 - CentOS 5.6 32bit - Openssh-4.3p2 - iptables-1.3.5 - rkhunter-1.3.8 개요 - 최근게임사이트, 포털사이트등개인정보유출사고가빈번하게일어나는것을알수있습니다. 이와같은보앆사고는주요사이트뿐만아니라네트워크가연결된모든서버는공격대상이될수있습니다. 서버보앆에각별한관심이필요합니다. - 해당문서는 OS 상에서설정가능한보앆설정에대한내용을기술하고있으며, 서버관리자 분들께서서버운영에참고해주시기바랍니다.
1. 서버에서실행되는서비스확인 - 서버에서실행되는서비스를확인하고, 사용하지않는서비스는사용하지않는것이좋습니다. 서버자원소모뿐만아니라, 사용하지않는서비스들을통해해킹의위협에노출될수있기때 문입니다. 1 서비스확인 : 아래명령어를통해현재서버에 Open 되어있는서비스및 Port 를확인 root@localhost # netstat nlp ex) 기본적인 httpd, mysql, ssh, vsftp 가실행되어있는부분입니다. 서비스별포트목록 서비스명 기본포트 서비스명 기본포트 FTP 21 IMAP 143 SSH 22 MMS 554 TELNET 23 MSSQL 1433 SMTP 25 / 587 ORACLE 1521 DNS 53 MYSQL 3306 HTTP 80 RDP 3389 POP3 110 TOMCAT 8080 HTTPS 443
2 부팅시불필요서비스실행방지 : 사용하지않는서비스가있으실경우, 서버가부팅될때실행되지않도록하는것이 좋습니다. root@localhost # chkconfig list grep 3: 활성또는 root@localhost # chkconfig list grep 3:on 예시 ) chkconfig list 중활성화되어있는서비스들만확인 root@localhost # chkconfig [ 서비스명 ] off 예시 ) chkconfig 명령어를이용하여 xinetd 데몬이재부팅시자동실행되지않도록설정 3 서비스종료 : 사용하지않는프로그램종료 root@localhost# service [ 서비스명 ] stop 예시 ) service 명령어를이용하여 xinetd 서비스종료
2. 원격접속 (SSH(Secure Shell)) 보안설정 - SSH(Secure shell) 란 telnet 서비스가보앆에취약한점을보완하기위해서개발된것으로, telnet 과달리주고받는패킷들이모두암호화되어전송되기때문에보앆에취약한점을보 완할수있습니다. - Linux Server 에서사용하는일반적인원격접속프로토콜입니다. SSH 설정파일경로 /etc/ssh/sshd_config SSH 서비스재실행 root@localhost# services sshd restart 1 SSH Root 접근제한 : 초기 ssh 접속시관리자계정인 root 접근을제한 : ssh나 openssh를사용할경우대부분 root로의직접로그인을허용하고있습니다. 이러한경우원격지에서무차별대입법등으로원격지에서 root 으로로그인할수있으므로 root로의직접적인로그인은가급적차단하는것이좋습니다. 일반사용자계정으로로그인하여 su 등을통해 root으로로그인하도록설정하는것이좋습니다. root@localhost# vi /etc/ssh/sshd_config PermitRootLogin 를 YES 를 NO 으로변경 주의!! 일반사용자계정이생성되어있으셔야합니다.
2 SSH 접속계정제한 : SSH 으로접속할수있는사용자계정을제한 root@localhost# vi /etc/ssh/sshd_config AllowUsers [ 사용자계정명 ], 내용추가 root@localhost# useradd ksidc 일반사용자계정추가 root@localhost# passwd ksidc 생성한사용자계정패스워드설정 ksidc@localhost# su [root 암호입력 ] SSH 일반사용자계정으로접속하여, root 으로접속하기
3 SSH 접속포트변경 : 기본적인 SSH 포트는 22번이지만, 반드시 22번포트를사용할필요는없기때문에임의의번호로변경하여외부에서접속시변경한임의포트로접속할수있도록합니다. root@localhost# vi /etc/ssh/sshd_config Port 22 주석처리후, Port [ 임의포트 ] 내용추가 SSH 설정파일변경후, SSH 서비스를재실행하셔야만설정이적용됩니다. 일반사용자계정 ksidc 및 Port 1234 는임의값으로절대똑같이설정하지마시기바 랍니다.
3. /tmp 디렉터리보안설정 - 웹서버운영시 /tmp 디렉터리가필요하며, /tmp 디렉터리는기본적으로아무나읽고, 쓰고, 실행하도록권한이설정되어있습니다. 때문에웹서비스를통해 /tmp 디렉터리에악성스크립 트를넣어실행시킬수있으며, 서버보앆에치명적일수있습니다. 1 fstab 파일수정하기 : fstab 이란, 리눅스부팅시각파티션으로마운트하는정보및권한등에대한설정정 보가있는파일입니다. root@localhost# vi /etc/fstab tmp 설정중 default 로되어있는부분외에 noexec,nodev,nosuid 를추가합니다. 2 /var/tmp 소프트링크설정 : /tmp 디렉터리외에도 /var/tmp 디렉터리가존재하며, 서로동일하도록소프트링크 를설정해줍니다. root@localhost# rm rf /var/tmp 우선 /var/tmp 디렉터리를삭제합니다. root@localhost# ln s /tmp /var/tmp /var/tmp 접속시 /tmp 으로연결되도록링크를설정합니다. /tmp 보안설정의경우, /tmp가별도파티션으로구분되어있어야합니다. mysql의 mysql.sock 파일생성경로가 /tmp으로설정되어있을경우, 홈페이지에서데이터베이스접속장애가발생할수있습니다. 때문에 mysql 설정을변경하신뒤적용하셔야합니다. fstab 설정을변경한뒤서버를재부팅해야해당설정이적용됩니다.
4. iptable 설정 / hosts.allow & hosts.deny 설정 I. iptable 설정 - iptable 이란커널에존재하는 netfilter 의룰을이용하기위한일계의유틸리티툴입니다. Netfilter 란커널에서패킷을정책에따라필터링해주는모듈입니다. iptables 설정파일경로 /etc/sysconfig/iptables iptables 서비스재실행 root@localhost# /etc/init.d/iptables restart 1 현재 iptable 설정확인 root@localhost# iptables nl : 서버방화벽이설정되어있지않을경우, : 서버방화벽이설정되어있는경우,
2 방화벽설정 root@localhost# vi /etc/sysconfig/iptables : vi 편집기를이용하여사용하는서비스 Port 만등록 < iptable 옵션 > 옵션 설 명 옵션 설 명 -A 체인추가설정 (INPUT/OUTPUT ) --sport 출발지포트지정 -s 출발지주소 --dport 도착지포트지정 규칙설정 -d 목적지주소 -j (ACCEPT : 허용, DROP : 차단 ) -m / -p 사용할프로토콜지정 (TCP/UDP/ICMP 등 ) Tip) 명령어를통한 iptables 설정 : 명령어를통해 iptables 를설정할경우 iptables 서비스를재실행하지않으셔도됩니다. 예시 ) iptables 에서웹서비스 Port 80 을허용할경우 root@localhost# iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -- dport 80 -j ACCEPT root@localhost# /etc/init.d/iptables save iptable 설정파일변경후, iptables 서비스를재실행하셔야만설정이적용됩니다.
II. hosts.allow & hosts.deny 설정 - iptable 과같이방화벽기능을하며, tcp_wrapper 를이용하여패킷을필터링합니다. - 서비스를재실행하지않고, 설정파일을수정하면적용됩니다. - iptable 과는달리포트가아닌서비스명으로등록가능합니다. hosts.deny 및 hosts.allow 설정파일경로 /etc/hosts.allow /etc/hosts.deny root@localhost# vi /etc/hosts.allow : 접속허용설정 root@localhost# vi /etc/hosts.deny : 접속차단설정
5. 시스템파일변조체크 - 크래커가서버를해킹했을경우, 거의대부분이미백도어및루트킷설치, 시스템파일을변 조했을가능성이높습니다. - 이러한시스템에대한전체적인점검이가능한프로그램이있으며, chkrootkit, rkhunter 등이 이에속합니다. - chkrootkit 등과같은많은프로그램이존재하지만해당문서에서는 rkhunter 에대해앆내하고 있습니다. 백도어란? : 공격자가시스템에침입한뒤차후에다시 root 등의최상위권한으로접근을용이하게하기 위해사용되는프로그램이나도구를가리킵니다. 루트킷이란? : 백도어와같은프로그램이나도구의모음을가리킵니다. 1 rkhunter 다운로드및설치 root@localhost# wget http://downloads.sourceforge.net/rkhunter/rkhunter-1.3.8.tar.gz wget 명령어를이용하여, 설치파일을다운로드받습니다.
root@localhost# tar xvfz rkhunter-1.3.8.tar.gz 압축을해제합니다. root@localhost #./installer.sh --layout /usr/local install 설치를짂행합니다.
2 rkhunter 명령어확인및옵션 root@localhost# ls /usr/local/bin/rkhunter 명령어위치확인 옵션 설 명 -c 시스템체크 --logfile [ 파일명 ] 로그파일경로지정. 기본 /var/log/rkhunter.log -V rkhunter 버전확인 --update 업데이트 예시 ) rkhunter 를이용하여시스템을체크 root@localhost# /usr/local/bin/rkhunter -c rkhunter 의경우시스템점검만가능하며, 변조된내용의경우수동으로변경하셔야합니다.