이럴수가 asdf 마구 치다가 우연히 찾은 명령어다.

아직 자세하게 뭔지는 모르기에 man page 가져다 붙여두고

좀 봐야겠다. 


SADF(1)                       Linux User's Manual                      SADF(1)


NAME

       sadf - Display data collected by sar in multiple formats.


SYNOPSIS

       sadf [ -d | -D | -H | -p | -x ] [ -t ] [ -V ] [ -P { cpu | ALL } ] [ -s

       [ hh:mm:ss ] ] [ -e [ hh:mm:ss ] ] [ -- sar_options...  ] [ interval  [

       count ] ] [ datafile ]


DESCRIPTION

       The sadf command is used for displaying the contents of data files cre-

       ated by the sar(1) command. But unlike sar, sadf can write its data  in

       many  different  formats.  The default format is one that can easily be

       handled by pattern processing commands like awk (see option -p).


       The sadf command extracts and writes to standard output  records  saved

       in  the datafile file. This file must have been created by a version of

       sar which is compatible with that of sadf.   If  datafile  is  omitted,

       sadf uses the standard system activity file, the /var/log/sa/sadd file,

       where the dd parameter indicates the current day.


       The interval and count parameters are used to tell sadf to select count

       records  at  interval  second  intervals. If the count parameter is not

       set, then all the records saved in the data file will be displayed.


       All the activity flags of sar may be entered on  the  command  line  to

       indicate  which  activities are to be reported. Before specifying them,

       put a pair of dashes (--) on the command line in order not  to  confuse

       the  flags  with  those of sadf.  Not specifying any flags selects only

       CPU activity.



실행 결과

------------------------------------------


$ sadf
TEST    604 1343229001  all %user   0.50
TEST    604 1343229001  all %nice   0.00
TEST    604 1343229001  all %system 1.75
TEST    604 1343229001  all %iowait 0.01
TEST    604 1343229001  all %steal  0.00
TEST    604 1343229001  all %idle   97.74
TEST    604 1343229601  all %user   0.46
TEST    604 1343229601  all %nice   0.04
TEST    604 1343229601  all %system 1.72
TEST    604 1343229601  all %iowait 0.00
TEST    604 1343229601  all %steal  0.00
TEST    604 1343229601  all %idle   97.77
TEST    603 1343230201  all %user   0.48
TEST    603 1343230201  all %nice   0.00
TEST    603 1343230201  all %system 1.74
TEST    603 1343230201  all %iowait 0.00
TEST    603 1343230201  all %steal  0.00
TEST    603 1343230201  all %idle   97.79
TEST    604 1343230801  all %user   0.47
TEST    604 1343230801  all %nice   0.00
TEST    604 1343230801  all %system 1.72
TEST    604 1343230801  all %iowait 0.00
TEST    604 1343230801  all %steal  0.00
TEST    604 1343230801  all %idle   97.80
TEST    605 1343231401  all %user   0.47
TEST    605 1343231401  all %nice   0.00
TEST    605 1343231401  all %system 1.73
TEST    605 1343231401  all %iowait 0.00
TEST    605 1343231401  all %steal  0.00
TEST    605 1343231401  all %idle   97.79
TEST    604 1343232001  all %user   0.47
TEST    604 1343232001  all %nice   0.00
TEST    604 1343232001  all %system 1.74
TEST    604 1343232001  all %iowait 0.01
TEST    604 1343232001  all %steal  0.00
TEST    604 1343232001  all %idle   97.78


------------------------------------------

반응형

Server측에서 poll 함수를 가지고 주기적으로 돌고 있고

Client측에서 포트번호를 자동적으로 증가시켜가면서 붙는데

도대체 이 포트번호의 범위가 어딘지 모르겠다.

 

그래서 찾아봤다.

 

sysctl이라고 시스템 커널과 관련하여 다양한

설정값을 확인할 수 있다. (루트권한)

 

 

# sysctl -a |grep port
sunrpc.max_resvport = 1023
sunrpc.min_resvport = 665
dev.parport.default.spintime = 500
dev.parport.default.timeslice = 200
net.ipv4.ip_local_port_range = 32768 61000
fs.nfs.nlm_tcpport = 0
fs.nfs.nlm_udpport = 0

 

따라서 요렇게 수행하면 범위가 나온다.

# sysctl -a |grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 61000

 

생각보다 간단하게 찾아진다..

반응형

 stadard error가 프로세스 수행하면 막 뜨는데
이걸 파일이나 어디 다른데다가 기록하게 할 수 없는지
방법을 찾아야했는데 이런게 있다. 괜찮네.. 간단하고..

std 관련 설명

[a] stdin - Use to get input (keyboard) i.e. data going into a program.

[b] stdout - Use to write information (screen)

[c] stderr - Use to write error message (screen)

I/O streams 숫자의 의미

The Unix / Linux standard I/O streams with numbers:

Handle

Name

Description

0

stdin

Standard input

1

stdout

Standard output

2

stderr

Standard error

1. stderr 를 file에 쓰는 경우

만약에error.log 파일에 stderr를 쓰려면

아래처럼 수행한다:

$ program-name 2> error.log

$ command1 2> error.log

2. stderr 와 stdout 을 file에 쓴다.

아래처럼 수행한다:

$ command-name &>file

혹은:

$ command > file-name 2>&1

다른 방식으로 하려면:

# find /usr/home -name .profile 2>&1 | more

3. stderr 를 stdout 으로

아래처럼 수행한다:

$ command-name 2>&1

반응형

TCP 를 통해서 Newwrok Throughput 을 확인하는 툴이다. (UDP도 가능)

영어로 된 옵션들 보기 좋으라고 간단하게 한글로 썼다.

   

   

 클라이어트 모드 -c 옵션 주면 된다

#iperf -c 10.1.1.1

------------------------------------------------------------

Client connecting to 10.1.1.1, TCP port 5001

TCP window size: 16384 Byte (default)

------------------------------------------------------------

[ 3] local 10.6.2.5 port 33453 connected with 10.1.1.1 port 5001

[ 3]   0.0-10.2 sec   1.26 MBytes   1.05 Mbits/sec

   

서버모드   -s 옵션 주면된다.

#iperf -s

------------------------------------------------------------

Server listening on TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 33453

[ ID]   Interval          Transfer       Bandwidth

[852]   0.0-10.6 sec   1.26 MBytes   1.03 Mbits/sec

   

   

클라이언트모드에  -f  옵션 주면

결과 값을 설정 가능하다. 아래와 같이 -f b 로 하면 bits로 나오는데

bits(b), bytes(B), kilobits(k), kilobytes(K), megabits(m), megabytes(M), gigabits(g) or gigabytes(G).

이런식으로 볼 수 있다.

#iperf -c 10.1.1.1 -f b

------------------------------------------------------------

Client connecting to 10.1.1.1, TCP port 5001

TCP window size: 16384 Byte (default)

------------------------------------------------------------

[ 3] local 10.6.2.5 port 54953 connected with 10.1.1.1 port 5001

[ 3]   0.0-10.2 sec   1359872 Bytes   1064272 bits/sec

#iperf -s

------------------------------------------------------------

Server listening on TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 33453

[ ID]   Interval          Transfer       Bandwidth

[852]   0.0-10.6 sec   920 KBytes   711 Kbits/sec

   

윈도우 사이즈옵션 주려면 -w 하고 숫자 넣어주면 간단하게 된다.   

요거는 서버 쪽에서도 맞춰 줘야 한다.

#iperf -c 10.1.1.1 -w 2000

WARNING: TCP window size set to 2000 bytes. A small window size

will give poor performance. See the Iperf documentation.

------------------------------------------------------------

Client connecting to 10.1.1.1, TCP port 5001

TCP window size: 3.91 KByte (WARNING: requested 1.95 KByte)

------------------------------------------------------------

[ 3] local 10.6.2.5 port 51400 connected with 10.1.1.1 port 5001

[ 3]   0.0-10.1 sec   704 KBytes   572 Kbits/sec

   

#iperf -s -w 4000

------------------------------------------------------------

Server listening on TCP port 5001

TCP window size: 3.91 KByte

------------------------------------------------------------

[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 51400

[ ID]   Interval          Transfer       Bandwidth

[852]   0.0-10.1 sec   704 KBytes   570 Kbits/sec

 

포트 번호 설정은 -p, 그리고 -t는 전체 시간이고 -i는 인터벌(시간간격)
가지고 구하는 경우

#iperf -c 10.1.1.1 -p 12000 -t 20 -i 2

------------------------------------------------------------

Client connecting to 10.1.1.1, TCP port 12000

TCP window size: 16.0 KByte (default)

------------------------------------------------------------

[ 3] local 10.6.2.5 port 58316 connected with 10.1.1.1 port 12000

[ 3]    0.0- 2.0 sec    224 KBytes    918 Kbits/sec

[ 3]    2.0- 4.0 sec    368 KBytes    1.51 Mbits/sec

[ 3]    4.0- 6.0 sec    704 KBytes    2.88 Mbits/sec

[ 3]    6.0- 8.0 sec    280 KBytes    1.15 Mbits/sec

[ 3]    8.0-10.0 sec    208 KBytes    852 Kbits/sec

[ 3]   10.0-12.0 sec   344 KBytes    1.41 Mbits/sec

[ 3]   12.0-14.0 sec   208 KBytes    852 Kbits/sec

[ 3]   14.0-16.0 sec   232 KBytes    950 Kbits/sec

[ 3]   16.0-18.0 sec   232 KBytes    950 Kbits/sec

[ 3]   18.0-20.0 sec   264 KBytes    1.08 Mbits/sec

[ 3]    0.0-20.1 sec   3.00 MBytes   1.25 Mbits/sec

 

#iperf -s -p 12000

------------------------------------------------------------

Server listening on TCP port 12000

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[852] local 10.1.1.1 port 12000 connected with 10.6.2.5 port 58316

[ ID] Interval Transfer Bandwidth

[852]   0.0-20.1 sec   3.00 MBytes   1.25 Mbits/sec

   

 

   

Maximum Segment Size (-m argument) MSS 크기 설정 가능하게 해준다.
디폴트값은 1500Bytes.

  

Client side:

   

   

#iperf -c 10.1.1.1 -m

------------------------------------------------------------

Client connecting to 10.1.1.1, TCP port 5001

TCP window size: 16.0 KByte (default)

------------------------------------------------------------

[ 3] local 10.6.2.5 port 41532 connected with 10.1.1.1 port 5001

[ 3]   0.0-10.2 sec   1.27 MBytes   1.04 Mbits/sec

[ 3] MSS size 1448 bytes (MTU 1500 bytes, ethernet)

   

Here the MSS is not equal to 1500 - 40 but to 1500 - 40 - 12 (Timestamps option) = 1448

   

   

#iperf -c 10.1.1.1 -M 1300 -m

WARNING: attempt to set TCP maximum segment size to 1300, but got 536

------------------------------------------------------------

Client connecting to 10.1.1.1, TCP port 5001

TCP window size: 16.0 KByte (default)

------------------------------------------------------------

[ 3] local 10.6.2.5 port 41533 connected with 10.1.1.1 port 5001

[ 3]   0.0-10.1 sec   4.29 MBytes   3.58 Mbits/sec

[ 3] MSS size 1288 bytes (MTU 1328 bytes, unknown interface)

   

병렬 테스트를 하고자 하면 -p 옵션 주면 된다.

Client side:

   

   

#iperf -c 10.1.1.1 -P 2

------------------------------------------------------------

Client connecting to 10.1.1.1, TCP port 5001

TCP window size: 16.0 KByte (default)

------------------------------------------------------------

[ 3] local 10.6.2.5 port 41534 connected with 10.1.1.1 port 5001

[ 4] local 10.6.2.5 port 41535 connected with 10.1.1.1 port 5001

[ 4]     0.0-10.1 sec   1.35 MBytes   1.12 Mbits/sec

[ 3]     0.0-10.1 sec   1.35 MBytes   1.12 Mbits/sec

[SUM]  0.0-10.1 sec   2.70 MBytes   2.24 Mbits/sec

   

마지막으로 내가 사용하는 주로 쓰는 옵션은..
-n 옵션은  Transfer하는 데이터 크기를 정해서 주고 받는 옵션이다.


클라이언트

$ iperf -c 10.10.1.57 -p 50000 -n 300M
------------------------------------------------------------
Client connecting to 10.10.1.57, TCP port 50000
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  3] local 10.10.4.55 port 41529 connected with 10.10.1.57 port 50000
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-26.3 sec    300 MBytes  95.8 Mbits/sec

 

서버

$ iperf -s -p 50000
------------------------------------------------------------
Server listening on TCP port 50000
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 10.10.1.57 port 50000 connected with 10.10.4.55 port 41529
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-26.8 sec    300 MBytes  93.7 Mbits/sec
   

   

Client/Server:

   

-f

-i

-l

-m

-p

-u

-w

-B

-C

-M

-N

-V

--format

--interval

--len

--print_mss

--port

--udp

--window

--bind

--compatibility

--mss

--nodelay

--IPv6Version

[kmKM]

#

#[KM]

   

#

   

#[KM]

"host"

   

#

   

   

format to report: Kbits, Mbits, KBytes, MBytes

seconds between periodic bandwidth reports

length of buffer to read or write (default 8 KB)

print TCP maximum segment size (MTU - TCP/IP header)

server port to listen on/connect to

use UDP rather than TCP

TCP window size (socket buffer size)

bind to "host", an interface or multicast address

for use with older versions does not sent extra msgs

set TCP maximum segment size (MTU - 40 bytes)

set TCP no delay, disabling Nagle's Algorithm

Set the domain to IPv6

Server specific:

   

-s

-U

-D

--server

--single_udp

--daemon

               

   

   

run in server mode

run in single threaded UDP mode

run the server as a daemon

Client specific:

   

-b

-c

-d

-n

-r

-t

-F

-I

-L

-P

-T

--bandwidth    

--client

--dualtest

--num

--tradeoff

--time

--fileinput

--stdin

--listenport

--parallel

--ttl

#[KM] 

"host"

   

#[KM]

   

#

"name"

   

#

#

#

for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec, implies -u)

run in client mode, connecting to "host"

Do a bidirectional test simultaneously

number of bytes to transmit (instead of -t)

Do a bidirectional test individually

time in seconds to transmit for (default 10 secs)

input the data to be transmitted from a file

input the data to be transmitted from stdin

port to recieve bidirectional tests back on

number of parallel client threads to run

time-to-live, for multicast (default 1)

Miscellaneous:

   

-h

-v

--help

--version

                    

   

print this message and quit

print version information and quit

 

반응형

기본적인 이론에 대한 글이라 저작권이라기에도 참 애매하다..

출처 : http://www.otl.ne.kr/

TCP 연결 단계 (RFC 793)

       TCPA                                                                                         TCP B

1.  CLOSED                                                                                            LISTEN

2.  SYN-SENT    --> < SEQ=100>< CTL=SYN>                                   -->  SYN-RECEIVED

3.  ESTABLISHED <-- < SEQ=300>< ACK=101>< CTL=SYN,ACK>       <--    SYN-RECEIVED

4.  ESTABLISHED --> < SEQ=101>< ACK=301>< CTL=ACK>                -->  ESTABLISHED

5.  ESTABLISHED --> < SEQ=101>< ACK=301>< CTL=ACK>< DATA>   -->  ESTABLISHED

 

LISTEN       : 데몬이 요청을 발을 수 있도록 연결 요구를 기다리는 상태.

                   , http(80), mail(25), ftp(21), telnet(23) 등의 포트가 열려있음을 의미.

                   윈도우즈에서는 LISTENING으로 표시.

SYN_SENT : 로컬에서 원격으로 연결 요청(SYN 신호를 보냄)을 시도한 상태.

SYN_RECV : 원격으로 부터 연결 요청을 받은 상태.

                   요청을 받아 SYN+ACK 신호로 응답은 한 상태이지만 ACK는 받지 못했다.

                   netstat로 확인할 때 SYN_RECV가 아주 많다면 TCP SYN 플러딩(Flooding) 공격일 가능성이 있다.

                   윈도우즈와 솔라리스에서는 SYN_RECEIVED으로, FreeBSD SYN_RCVD으로 표시.

ESTABLISHED : 서로 연결이 되어 있는 상태

                   위에서 192.168.123.10의 포트 32794 218.xxx.xx.xx의 포트 22(ssh)이 서로 연결되어 있는 상태.

 

  

TCP 종료 단계

* 정상적인 연결 종료 과정

      TCP A                                                                                     TCP B

1.  ESTABLISHED                                                                           ESTABLISHED

2.  (Close)

     FIN-WAIT-1       --> <SEQ=100><ACK=300><CTL=FIN,ACK>  -->  CLOSE-WAIT

3.  FIN-WAIT-2      <--  <SEQ=300><ACK=101><CTL=ACK>       <--   CLOSE-WAIT

4.                                                                                                 (Close)

    TIME-WAIT      <--  <SEQ=300><ACK=101><CTL=FIN,ACK>  <--    LAST-ACK

5.  IME-WAIT         --> <SEQ=101><ACK=301><CTL=ACK>         -->  CLOSED

6.  (2 MSL)

     CLOSED                                                    

 

FIN_WAIT1     : 소켓이 닫히고 연결이 종료되고 있는 상태. 원격의 응답은 받을 수 있다.

                      솔라리스에서는 FIN_WAIT_1로 표시.

FIN_WAIT2     : 로컬이 원격으로 부터 연결 종료 요구를 기다리는 상태.

                      솔라리스에서는 FIN_WAIT_2로 표시.

CLOSE_WAIT : 원격의 연결 요청을 받고 연결이 종료되기를 기다리는 상태 .

                      원격으로 부터 FIN+ACK 신호를 받고 ACK 신호를 원격에 보냈다.

TIME_WAIT    : 연결은 종료되었으나 원격의 수신 보장을 위해 기다리고 있는 상태.

                      이 상태를 특히 자주 보게되는 경우 => Apache에서 KeepAlive OFF로 해둔 경우, Tomcat 서버를 쓰는 경우 등.

LAST_ACK    : 연결은 종료되었고 승인을 기다리는 상태.

CLOSED       : 완전히 연결이 종료된 상태.

 

※ 위의 FIN_WAIT1, FIN_WAIT2, CLOSE_WAIT 3개 상태는

    연결 종료를 위해 서로간에 신호를 주고받는 과정에 나타나는 상태로 이해하면 된다.

    종료 요청을 한 곳에서는 FIN_WAIT1, FIN_WAIT2, TIME_WAIT 상태가,

    종료 요청을 받는 곳에서는 CLOSE_WAIT, LAST_ACK 상태가 표시된다.

 

 

 

 

 

TIME_WAIT 상태 없애기

이미 발생한 TIME_WAIT 상태는 일정시간이 지나면 없어지지만,

client server에 매우 빈번히 connect/disconnect를 반복한다면

많은 TCP portTIME_WAIT 상태가 되서 문제가 생길 수 있음.

 

client application에서 socket option linger option off 시키면,

client에 의한 connection close TIME_WAIT 상태를 거치지 않고

ClOSED 상태로 바뀌게 되므로, TIME_WAIT 상태가 발생하지 않게 됨.

 

/* 중략 */

int sock

struct linger   ling;

 

ling.l_onoff = 1;

ling.l_linger = 0;      /* 0 for abortive disconnect */

 

setsockopt(sock, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling))

 

 

 

 

 

 

TCP 상태별 정의

ESTABLISHED

   3단계 핸드쉐이킹 후 연결 성립

 

SYN_SENT

   원격 호스트에 능동적인 개설 요청(능동적 열기)

 

SYN_RECV

   네트워크 통한 연결요청 받음(수동적 열기)

 

FIN_WAIT1

   능동적 닫기(active close) 요청을 한 상태

 

FIN_WAIT2

   로컬에서 종결(FIN)세그먼트를 전송하였고 원격 시스템에서 이에 대한 확인메시지를 수신하였지만,

   원격 애플리케이션이 작업을 종료하지 않아 원격 호스트의 종결 세그먼트를 기다리는 상태

 

TIME_WAIT

   회선의 종결 절차가 완료되었지만 분실되었을지 모르는 느린 세그먼트를 위해

   소켓을 열어 놓고 유지하고 있는 상태

 

CLOSED

   회선이 종결되고 모든 자원을 해제한 상태

 

CLOSE_WAIT

   수동적 닫기를 하고 있는 상태로 FIN 종결 세그먼트를 수신하고 이에 대한 확인 메시지를 전송한 상태

 

LAST_ACK

   FIN 종결 요청을 받고 로컬에서도 회선 종결에 합의하여 종결을 요청(FIN)한 상태로

   이에 대한 확인 메시지가 수신되면 회선이 종결됨

 

LISTEN

   서버 애플리케이션에서 수동적 열기로 연결 요청을 기다리고 있는 상태

 

CLOSING

   로컬 TCP FIN_WAIT_1에서 설명한대로 FIN 종결 세그먼트를 전송하였고,

   LAST_ACK에서 설명한대로 원격 시스템의 종결 세그먼트도 수신하였지만,

   FIN_WAIT_1 단계에서 전송한 세그먼트에 대한 확인 메시지(ACK)를 수신하지 못한 상태로

   보통 확인 메시지가 전송 도중 분실되었다는 것을 나타냄

 

UNKOWN

   소켓의 상태에 대해서 확인이 안되는 경우

 

 

반응형

간단한 명령어로 확인이 가능하다.

LONG 때문에 TCP 통신하는 경우 32/64bit 간에 오류가

나게 되는데 아래와 같이 하면 쉽게 확인이 된다.

 

출처 : http://baljack.tistory.com/6

 

LINUX
# getconf LONG_BIT

HP UX

11.xx 일 경우
# getconf KERNEL_BITS
64

10.xx 일 경우
# getconf LONG_MAX
2147483647
(64비트임)로 확인할 수 있습니다

AIX

현재 load된 kernel 이 32-bit 혹은 64-bit 인지 확인하는 명령어
# bootinfo -K
32

사용중인 machine이 32-bit 혹은 64-bit 인지 확인하는 명령어
# bootinfo -y
32


SOLARIS

# isainfo -kv
64-bit sparcv9 kernel modules
현재 이 시스템은 64bit 커널을 가지고 운영을 하는 시스템 이다.

# isainfo -kv
32-bit sparcv kernel modules
이 시스템은 32bit 커널을 가지고 운영을 하는 시스템이다.

# isainfo -v
64-bit sparcv9 applications

32-bit sparc applications
"-v"만 했을 경우 이 시스템에서는 32bit / 64bit 체계의 프로그램을 사용할 수 있다.

# isainfo -v
32-bit sparc applications
이 시스템은 32bit 체계의 프로그램만 구성하여 사용할 수 있다.

 

 

반응형

출처 : http://www.3rabbitz.com/f01c33e7d8367da2#857542b4ddd63403#

2.1설정하기에 앞서

CentOS에서 어떠한 작업을 하게된다면 다음의 내용은 반드시 알고 있어야 한다.

설정파일 텍스트(text)파일로 저장되어 있기 때문에 파일을 복사, 수정, 저장 등을 할 수 있어야 한다. 따라서 다음 명령어들의 기본사용법을 알아두어야 한다.

vi - Unix 및 Linux에 쓰이는 표준 편집기

http://www.cals.wisc.edu/calslab/pdf/Vi.pdf

명령 모드와 삽입 모드

대부분의 워드 프로세싱 소프트웨어와는 달리, vi 편집기는 두 가지 모드를 사용합니다

  • (또한 편집 모드라고도 함) 명령 모드
  • 모드를 삽입

당신은 명령 모드에서 입력 명령

  • 텍스트를 변경할 수 있도록 - 타이핑 오류를 수정 추가하거나 라인을 빼기 등
  • 일반적으로 화면에 인쇄되지 않습니다
  • 일반적으로 그들이 대문자와 소문자 사이에 차이가있다는 의미 ", 대소문자를 구분합니다"입니다 그들을 입력한 후 반환 키를 요구하지 않습니다.

파일에 텍스트를 추가하려면, 삽입 모드에서 이동 i를 눌러, vi 명령을 사용합니다.

당신은 삽입 모드에서 입력 무엇 :

  • 이 링크는 편집중인 파일의 일부가
  • 당신은 텍스트의 새 줄을 시작하려면 RETURN 키를 눌러해야합니다.

명령 모드로 돌아가려면 Esc 키를 누릅니다.

  • h , moves cursor left
  • j , moves cursor down
  • k , moves cursor up
  • l , moves cursor right
  • x , delete character
  • ##x , delete ## characters
  • dw , delete word
  • dd , delete line
  • p , put last deletion after cursor
  • u , undo last change
  • i , turn on insert mode (hit the esc key twice to stop)
  • :w ,write to the file already named
  • :q , quit editing
  • :wq , write file and quit
  • :q! , quit without saving file
  • ctrl f , move forward one page
  • ctrl b , move backward one page
  • :/text , will search for next occurance of 'text' (hitting n will find next occurence)
  • :?text ,search backward for first occurrence of text
  • G , go to end of file
  • 1G , go to first line of file
  • set nu , to set line number
  • :w filename , write to the file named filename
  • yy , yank line into buffer
  • ##yy , yank ## lines into general buffer
  • CONTROL-G print information about file: name, current line number
  • :%s/pattern/text/ substitute first occurrence of pattern on each line with text
  • :%s/pattern/text/g substitute every occurrence of pattern with text
  • p , put contents of general buffer after current line
  • P , put contents of general buffer before current line
  • :g/pattern/d delete every line containing pattern

2.2시스템 업데이트

네트워크가 설정되고 인터넷에 연결되고 나서, 가장 먼저 할 일은 바로 업데이트 작업이다. 최초 배포판이후에 알려진 보안, 버그 업데이트들을 시스템에 적용하는 것이다. 이 작업을 하기 전에 몇가지 참고할 사항을 설명한다.

느린 YUM Public mirror를 제외(exclude) 하는 방법

CentOS의 업데이트 서버 한국 미러서버에 mirror.khlug.org, data.nicehosting.co.kr가 있는데, 속도 제한(QoS)가 설정되어 있는지 1kb/sec의 속도가 나올정도로 상당히 느리다. 이로 인해 업데이트 작업이 엄청나게 오래 걸리게 되므로, 위 서버들은 예외되도록 설정하자.

[root@test1 ~]# cat /etc/yum/pluginconf.d/fastestmirror.conf
[main]
enabled=1
verbose=0
always_print_best_host = true
socket_timeout=3
# Relative paths are relative to the cachedir (and so works for users as well
# as root).
hostfilepath=timedhosts.txt
maxhostfileage=10
maxthreads=15
exclude=mirror.khlug.org, data.nicehosting.co.kr

이 팁은 커피닉스 IRC채널에서 티니님이 알려주셔서 알게되었다.

2.3보안 관련 설정 중단

정보보호가 강조되는 시대에, 관련 기능을 중단시킨다는 것은 참으로 위험한 일이다. 그러나 본 책의 목적이 일단 LAMP서버 설정에 있으므로, SELinux나 iptables같은 보안 관련 기능은 추후에 다루기로 한다. 일단 LAMP서버 구성에 불편함이 없도록 보안관려된 서비스는 중단하기로 한다.

SELinux

상태 확인

[root@gserver1 ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: permissive
Policy version: 24
Policy from config file: targeted

SELinux는 설정을 변경하고 재시작해야 적용된다.

[root@test1 ~]# cat /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

재부팅 한 후에 확인한다.

[root@gserver1 ~]# sestatus
SELinux status: disabled

iptables(방화벽) 중단

방화벽 기능을 사용하지 않을 경우

chkconfig iptables off
chkconfig ip6tables off

확인

[root@gserver1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

2.4불필요한 서비스 중단

불필요한 서비스를 중단하므로써, 메모리도 절약하고, 보안 취약성도 낮추는등의 장점이 있다. 커널 모듈의 취약점이 발표되는 경우도 종종 있다.

iscsi나 FCoe와 같은 IP기반의 스토리지를 쓰지 않을 경우

chkconfig iscsi off
chkconfig iscsid off
chkconfig fcoe off
chkconfig lldpad off

NFS를 사용하지 않는 경우

chkconfig nfslock off
chkconfig rpcbind off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig netfs off

[root@gserver1 ~]# chkconfig --list | grep "3:on"
auditd         0:off        1:off        2:on        3:on        4:on        5:on        6:off
lvm2-monitor         0:off        1:on        2:on        3:on        4:on        5:on        6:off
network         0:off        1:off        2:on        3:on        4:on        5:on        6:off
rsyslog         0:off        1:off        2:on        3:on        4:on        5:on        6:off
sshd         0:off        1:off        2:on        3:on        4:on        5:on        6:off
udev-post         0:off        1:on        2:on        3:on        4:on        5:on        6:off

2.5시간서버 설정

서버의 시간을 표준시에 동기화시킨다. 정확한 시간은 서버 장애나 보안사고 발생시, 아주 중요하게 작용하므로 반드시 정확한 시간을 서버에 설정한다.

NTP 설정

[root@gserver1 ~]# yum install ntp
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
* base: ftp.daum.net
* extras: ftp.daum.net
* updates: ftp.daum.net
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package ntp.x86_64 0:4.2.4p8-2.el6.centos will be installed
--> Processing Dependency: ntpdate = 4.2.4p8-2.el6.centos for package: ntp-4.2.4p8-2.el6.centos.x86_64
--> Running transaction check
---> Package ntpdate.x86_64 0:4.2.4p8-2.el6.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================
Package Arch Version Repository Size
====================================================================================
Installing:
ntp x86_64 4.2.4p8-2.el6.centos base 444 k
Installing for dependencies:
ntpdate x86_64 4.2.4p8-2.el6.centos base 58 k

Transaction Summary
====================================================================================Install 2 Package(s)

Total download size: 501 k
Installed size: 1.2 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Package(s) data still to download: 501 k
(1/2): ntp-4.2.4p8-2.el6.centos.x86_64.rpm | 444 kB 00:00
(2/2): ntpdate-4.2.4p8-2.el6.centos.x86_64.rpm | 58 kB 00:00
------------------------------------------------------------------------------------Total 619 kB/s | 501 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : ntpdate-4.2.4p8-2.el6.centos.x86_64 1/2
Installing : ntp-4.2.4p8-2.el6.centos.x86_64 2/2

Installed:
ntp.x86_64 0:4.2.4p8-2.el6.centos

Dependency Installed:
ntpdate.x86_64 0:4.2.4p8-2.el6.centos

Complete!

[root@gserver1 ~]# cat /etc/ntp.conf
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
server kr.pool.ntp.org
server ntp.postech.ac.kr
server ntp.xbsd.kr

[root@gserver1 ~]# ntpdate kr.pool.ntp.org
21 Dec 16:58:38 ntpdate[1019]: step time server 222.239.76.224 offset -32.764434 sec

[root@gserver1 ~]# service ntpd start
Starting ntpd: [ OK ]

[root@gserver1 ~]# chkconfig ntpd on

[root@gserver1 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
118.219.234.251 216.171.124.36 2 u 15 64 1 14.547 -15.373 0.004
gps-ntp.postech .GPS. 1 u 14 64 1 11.879 -3.321 0.004
121.182.147.191 .GPS. 1 u 13 64 1 10.341 -3.890 0.004

5-10분 정도 후에 아래와 같이 *, +가 보이면 NTP서버와 시간이 동기화 되는 것이다.

[root@gserver1 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
118.219.234.251 216.171.124.36 2 u 18 64 17 10.310 -34.335 14.195
*ntp-server.post .GPS. 1 u 17 64 17 12.002 -25.004 15.716
+121.182.147.191 .GPS. 1 u 14 64 17 14.105 -26.837 17.016

2.6SSH보안 및 sudo설정

많은 방법이 있겠지만 최소한 다음 정도는 해주면 될것이다.

참고자료 :

http://fedorasolved.org/post-install-solutions/securing-ssh

  • SSH의 기폰 포트인 22번에서 다른 포트로 변경한다.
  • SSH 서버설정에서 원격(Remote)에서 root계정으로 바로 접속하지 못하게 설정한다.
  • 인증없이 서버에 접속할 수 있도록 하는 설정을 무시하도록 설정한다. 이것은 아주 옛날에 사용되었다.
  • SSH 접속을 허용할 사용자 그룹(Group)를 지정한다.

편집기로 /etc/ssh/sshd_config 를 열어서 다음과 각 항목들을 변경한다.

[root@gserver1 ~]# cat /etc/ssh/sshd_config
... 중략 ...
Port 220
... 중략 ...
IgnoreRhosts yes
... 중략 ...
PermitRootLogin no
... 중략 ...
AllowGroups wheel
... 생략 ...

설정을 변경하였으면 sshd를 재시작하여 시스템에 적용한다.

[root@gserver1 ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]

또는

[root@gserver1 ~]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]

위와 같이 설정하면 일반계정으로 접속후 su - 를 하여 root로 권한을 변경해야하는 번거로움이 생기는데, 이에 대한 편의성을 높여주는 sudo를 설정하여 특정 계정 사용자가 root권한을 편하게 사용할 수 있게 한다.

Connecting to 192.168.0.81:220...
Connection established.
Escape character is '^@]'.

Last login: Wed Dec 21 18:01:30 2011 from 192.168.0.102
[jjun@gserver1 ~]$ su -
Password:
[root@gserver1 ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@gserver1 ~]# logout
[jjun@gserver1 ~]$ sudo id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

sudo 설정

[root@gserver1 ~]# cat /etc/sudoers

중략...

## Same thing without a password
#%wheel        ALL=(ALL)        NOPASSWD: ALL
중략...

[root@gserver1 ~]# cat /etc/sudoers

중략...
## Same thing without a password
%wheel        ALL=(ALL)        NOPASSWD: ALL
중략...

사용자 추가

[root@gserver1 ~]# useradd -G wheel jjun1
[root@gserver1 ~]# passwd jjun1
Changing password for user jjun1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

테스트

[root@gserver1 ~]# su - jjun1
[jjun1@gserver1 ~]$ sudo id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[jjun1@gserver1 ~]$ cat /etc/group | grep wheel
wheel:x:10:root,jjun,jjun1

2.7IPv6 중단

어떠한 이유로 IPv6를 중단할려면 아래와 같이 하면된다. 그러나 CentOS 6 FAQ에 의하면 SELinux등과의 호환성 문제로 권장하지 않는다고 한다.

http://wiki.centos.org/FAQ/CentOS6#head-d47139912868bcb9d754441ecb6a8a10d41781df

참고자료 : http://www.proxar.co.uk/technical-support/technical-forum/how-to-disable-ipv6-on-red-hat-6

[root@gserver1 sysconfig]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:AC:C1:09
inet addr:192.168.0.81 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feac:c109/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11605 errors:0 dropped:0 overruns:0 frame:0
TX packets:1216 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:804736 (785.8 KiB) TX bytes:138162 (134.9 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

[root@gserver1 ~]# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf

[root@gserver1 ~]# reboot
Broadcast message from jjun@gserver1
        (/dev/pts/0) at 14:17 ...

The system is going down for reboot NOW!

[root@gserver1 sysconfig]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:AC:C1:09
inet addr:192.168.0.81 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:759 errors:0 dropped:0 overruns:0 frame:0
TX packets:87 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:52713 (51.4 KiB) TX bytes:10010 (9.7 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

2.8프로그램 설치

CentOS에서 무언가를 하고하 한다면, 다음과 같은 절차를 거치게 된다.

  1. 프로그램 설치
  2. 설정
  3. 서비스 시작
  4. 부팅시 시작되게 설정

그 과정에 대한 복잡한 설명은 이 문서와는 어울리지 않는다. 가볍게 건너뛰고 실제 사용법을 따라가 보자.

프로그램 검색

yum list 프로그램이름

프로그램 설치

yum install 프로그램이름

설정

이 단계를 위해서 간단히 vi나 nano같은 편집기 사용방법을 간단하게 알 필요가 있다.

vi 설정파일
또는
nano 설정파일

서비스 시작

service 서비스이름 start
또는
/etc/init.d/서비스이름 start

부팅시 시작되게 설정

chkconfig 서비스이름 on
확인은
chkconfig --list | grep 서비스이름

반드시 reboot하여 제대로 동작하는지 확인한다.

reboot

패키지 저장소 추가

  • Repoforge

http://repoforge.org/use/ 에서 RPM 파일을 다운로드 받아서 설치한다.

rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

  • EPEL

http://fedoraproject.org/wiki/EPEL 에서 RPM 파일을 다운로드 받아서 설치한다.

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm

  • Remi

http://rpms.famillecollet.com/ 에서 RPM 파일을 다운로드 받아서 설치한다.

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

일단은 disabled되게 설정해 놓자.

그리고

http://wiki.centos.org/PackageManagement/Yum/Priorities 를 설정한다.

이 설정은 여러 Repo에 동일한 패키지를 제공할 경우 우선순위를 설정할 수 있게 한다.

사용방법

yum --enablerepo=저장소이름 옵션

[root@gserver1 ~]# yum check-update
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
* base: centos.mirror.cdnetworks.com
* epel: mirror.bjtu.edu.cn
* extras: centos.mirror.cdnetworks.com
* rpmforge: ftp-stud.fht-esslingen.de
* updates: ftp.daum.net

[root@gserver1 ~]# yum --enablerepo=remi check-update
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
* base: mirror.yongbok.net
* epel: mirror.bjtu.edu.cn
* extras: mirror.yongbok.net
* remi: remi-mirror.dedipower.com
* rpmforge: ftp-stud.fht-esslingen.de
* updates: mirror.yongbok.net

[root@gserver1 ~]# yum --disablerepo=epel,rpmforge,remi check-update
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
* base: mirror.yongbok.net
* extras: mirror.yongbok.net
* updates: mirror.yongbok.net

2.9DenyHosts 설치

참고자료 :

http://www.ravisaive.in/2011/09/how-to-install-denyhosts-to-block-ssh.html

현재 떠 있는 외부 서비스를 확인해보자.

[root@gserver1 ~]# netstat -antlp | grep LISTEN
tcp 0 0 0.0.0.0:220 0.0.0.0:* LISTEN 951/sshd

sshd 가 있을 것이다. 이 순간에 인터넷이 연결되어 있다면, 이 ssh 서비스를 대상으로 무수한 해킹 및 스캔 시도가 있을 것이다. 이것을 감시하고 차단하는 설정을 하도록 한다.

[root@gserver1 ~]# cat /etc/denyhosts.conf | egrep -v "^#|^$"
############ THESE SETTINGS ARE REQUIRED ############
SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY = 4w
BLOCK_SERVICE = sshd
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 10
DENY_THRESHOLD_ROOT = 1
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /var/lib/denyhosts
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES
LOCK_FILE = /var/lock/subsys/denyhosts
############ THESE SETTINGS ARE OPTIONAL ############
ADMIN_EMAIL = root
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME]
AGE_RESET_VALID=5d
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ##########
DAEMON_LOG = /var/log/denyhosts

DAEMON_SLEEP = 30s
DAEMON_PURGE = 1h
######### THESE SETTINGS ARE SPECIFIC TO ##########
######### DAEMON SYNCHRONIZATION ##########

/etc/hosts.allow

sshd: 192.168.0.33, 192.168.0.44

/etc/hosts.allow 파일이 /etc/hosts.deny 보다 우선한다. 즉, /etc/hosts.deny에 IP가 등록되어 있어도 /etc/hosts.allow에 IP가 있다면, 차단하지 않는다.

[root@gserver1 denyhosts]# ll
total 36
-rw-r--r--. 1 root root 39 Dec 22 17:51 allowed-hosts
-rw-r--r--. 1 root root 27 Dec 22 17:19 allowed-warned-hosts
-rw-r--r--. 1 root root 81 Dec 22 17:56 hosts
-rw-r--r--. 1 root root 81 Dec 22 17:56 hosts-restricted
-rw-r--r--. 1 root root 81 Dec 22 17:56 hosts-root
-rw-r--r--. 1 root root 81 Dec 22 17:56 hosts-valid
-rw-r--r--. 1 root root 80 Dec 22 17:56 offset
-rw-r--r--. 1 root root 0 Dec 22 17:56 suspicious-logins
-rw-r--r--. 1 root root 190 Dec 22 17:56 users-hosts
-rw-r--r--. 1 root root 0 Dec 22 17:56 users-invalid
-rw-r--r--. 1 root root 64 Dec 22 17:56 users-valid
[root@gserver1 denyhosts]# grep 192.168.0.102 *
allowed-warned-hosts:192.168.0.102
hosts:192.168.0.102:0:Thu Dec 22 17:14:45 2011
hosts-restricted:192.168.0.102:0:Thu Dec 22 17:14:45 2011
hosts-root:192.168.0.102:2:Thu Dec 22 17:14:45 2011
hosts-valid:192.168.0.102:1:Thu Dec 22 17:52:00 2011
users-hosts:jjun - 192.168.0.102:1:Thu Dec 22 17:52:00 2011
users-hosts:root - 192.168.0.102:2:Thu Dec 22 17:14:45 2011

[root@gserver1 denyhosts]# tail -f /var/log/secure
Dec 22 17:51:50 gserver1 sshd[1578]: Failed password for jjun from 192.168.0.102 port 49859 ssh2
Dec 22 17:51:52 gserver1 sshd[1578]: Accepted password for jjun from 192.168.0.102 port 49859 ssh2
Dec 22 17:51:52 gserver1 sshd[1578]: pam_unix(sshd:session): session opened for user jjun by (uid=0)
Dec 22 17:51:56 gserver1 sshd[1578]: pam_unix(sshd:session): session closed for user jjun
Dec 22 17:53:22 gserver1 sshd[1612]: Accepted password for jjun from 192.168.0.33 port 1701 ssh2
Dec 22 17:53:22 gserver1 sshd[1612]: pam_unix(sshd:session): session opened for user jjun by (uid=0)
Dec 22 17:54:44 gserver1 sshd[1639]: refused connect from 192.168.0.102 (192.168.0.102)
Dec 22 17:55:33 gserver1 sshd[1645]: Accepted password for jjun from 192.168.0.102 port 49865 ssh2
Dec 22 17:55:33 gserver1 sshd[1645]: pam_unix(sshd:session): session opened for user jjun by (uid=0)
Dec 22 17:55:34 gserver1 sshd[1645]: pam_unix(sshd:session): session closed for user jjun

# jjun이 로그 아웃함
Dec 22 17:58:07 gserver1 sshd[1620]: channel_by_id: 0: bad id: channel free
Dec 22 17:58:07 gserver1 sshd[1620]: Disconnecting: Received ieof for nonexistent channel 0.
Dec 22 17:58:07 gserver1 sshd[1612]: pam_unix(sshd:session): session closed for user jjun

자 이제 LAMP 설치를 위한 기본 OS 준비가 끝났다. 기존의 서적들이 대부분 소스 컴파일 형태로 설명하였으나, 본 책에서는 RPM 설치를 통해 설명한다.

반응형

원본 출처 : http://bestheroz.blog.me/96293248

   

nmap으로 스캔하는 방법

"nmap -p 1-65535 localhost" 또는 "nmap -p 1-65535 공인IP" 실행하면 현재 자신의 시스템에 어떤 포트가 있는지 모든 포트에 대해 확인 가능하다. 만약 아무런 옵션을 주지 않고 "nmap localhost" 실행하면 사전에 정의된 Well Known 포트에 대해서만 스캔을 한다는 것을 주의하자. 또한 "nmap -p 21,23,53,80 192.168.1.0/24" 같이 스캔할 경우에는 192.168.1.0 대역( 192.168.1.1 부터 192.168.1.255까지 모든 호스트) 대해 21,23,53,80번등의 특정 포트가 열려있는지에 대해서만 스캔을 하게 된다.

   

   

netstat -l 확인해 보는 방법

% netstat -lnp

netstat에서는 많은 옵션을 제공하고 있는데, 현재 시스템 상에서 특정 포트를 점유하여 소켓 데몬 형태로 대기중인 서비스에 대한 사항은 listen 의미인 -l 옵션을 주면된다. 더불어서 -p 옵션을 주면 해당 포트를 사용 중인 program 이름도 확인할 있다.

위의 경우를 보면 좌측에 현재 리슨하고 있는 포트를 있으며 우측에 있는 정보를 보면 해당 포트가 어떤 PID(Process ID)이며 어떤 프로그램인지 확인할 있다. 만약 포트631/tcp 리슨하고 있는 프로세스 정보를 알고자 한다면 pid 2414이고 프로그램 이름이 cupsd 것을 알수 있는데, 상세히 알고자 한다면 앞에서 살펴본 바와 같이 ls -la /proc/<pid> 실행하면 된다.

   

   

tcp 경우 "telnet host_ip 포트번호" 확인하면 된다.

telnet 자체는 tcp 프로토콜이므로 tcp 관련 프로토콜에 대해서만 접속 가능하며 udp 포트에 대한 telnet 접속 시도는 의미가 없다. 따라서 이를테면 snmp 작동하는지 확인하기 위해 161/udp telnet 접속하는 것은 의미가 없다는 뜻이다.

   

   

   

   

   

   

아래의 사이트를 참조하면 특정한 포트 번호가 어떤 역할을 하는지에 대해서 상세한 정보를 얻을 있다.

http://www.grc.com/portdatahelp.htm

http://www.iss.net/security_center/advice/Exploits/Ports/default.htm

http://www.chebucto.ns.ca/~rakerman/port-table.html

http://www.networksorcery.com/enp/nav0204.htm

http://www.practicallynetworked.com/sharing/app_port_list.htm

   

   

   

반응형

+ Recent posts