echo "test test test test" | mutt -x -a aaa.txt -s "test4" "leopit@naver.com"

'Tip' 카테고리의 다른 글

host 커맨드를 이용해 특정 도메인의 메일서버 알아내기  (0) 2017.01.06
Linux cpu, mem 등 확인하기  (0) 2017.01.06
TCP 연결수 확인 스크립트  (0) 2017.01.06
nslookup  (0) 2017.01.06
증분백업/복구  (0) 2016.12.31

power off
power on ctrl + break 여러번
>o/r 0x2142
>i
sh version

Would you like to enter the initial configuration dialog? [yes]: no

Router> en
Router#

conf t
enable secret cisco
config-register 0x2102
end
write
reload

sh flash (4096K bytes)
----------------------------------------------------------------------

*test2*

#router config#
en
conf t
hostname r1
int s0 
ip address 10.1.1.1 255.255.255.0
no shut
clock rate 64000
enc ppp
end
sh run
sh ip int brief
ping 10.1.1.2


#ethernet config#
conf t
int e0
ip address 192.168.1.1 255.255.255.0
no shut
end
sh ip int brief
#pc config#
ipconfig ip/ip 192.168.1.2 255.255.255.0
ipconfig dg 192.168.1.1

#network add#
conf t
router rip
network 10.0.0.0 <-- 자신이 서비스 하는 네트웍
network 192.168.1.0 <-- 상동 
end

----------------------------------------
telnet.console 접속및 비밀번호 설정 과 접속 해제실습
conf t
line con 0
login
password cisco
line vty 0 4
login password sist
exit
1.enable password cisco
2.enable secret router
sh run
telnet
x
sh sess
sh user
resum 1e

disconnect
세션은 끊는다(자신이 연결한것을 자신이 끊는다)
clear line 11
세션을 끊는다(상대방이 접속한 세션을 강제로 끊는다)

*부팅 플러쉬내용을 램으로 불러온다
bootstrap rom(sub ios)
ios flash
설정 파일 nvram 
ram 

0x2142 :nvram설정파일을 무시하고 부팅하라
네크웍이 연결된곳에서 ios가져온다
롬모드
0x0 수동으로 부팅
0x1 자동으로 부팅 
0x2 to 0xF 정상적으로 플래쉬에서 부팅
command configer-regeister 0x2102
ctol+z =end
reload =reboot

ram <-------->pc ip로 통신한다
라우터와 랜카드 L3 L3 cross cable
라우터와 연결된 스위치(etrhnet interface)와 랜카드 L2-L3 direct cable
랜카드가 2개인경우 남는 이더넷카드와 라우터와 연결
ㄱ.2번째랜카드에 ip.gateway설정
ㄴ.ping 확인
ㄷ.tftp server 활성
ㄹ.copy run tftp
ㅁ.tftp>cisco system>cisco tftp server>file 저장확인

*버전 다른 라우터
라우터 ㅡㅡ네트웍서버ㅡㅡ라우터
access,space,filename contconvention
=>sh flash 로 파일명 확인
copy flash tftp
copy fftp flash(filename 주의)
----------------------------------------------------------------------
*스위치 중요한 3가지 기능
1 address learning(mac)
2 forward/filter decision
3 loop avoidance 
unicast / broadcast
동일 프레임이 쌓이므로(broadcast storm)
맥테이블이 불안

stp :포트를 블락 시킴으로서 루프를 없앨수 있다

*스위치설정*

r1 192.168.1.1
r2 192.168.1.2
sw 192.168.1.6
송pc 192.168.1.5
second lan192.168.1.4
스위치에 아이피 부여
텔넷설정
라우터에서 텔넷접근
conf t
int vlan 1
ip address 192.168.1.6 255.255.255.0
no shut
exit
enable pasword cisco
line vty 0 4
login
password cisco
end
telnet 192.168.1.5//라우터에서 스위치로 테스트

*스위치 명령어
interface vlan 1
ip address
duplx auto full 전화 half 무전
sh mac address
sh port-security
*erase startip-config*
show version
reload

*Spanning Tree Protocol
역할:루프 해결
동작방법:한포트를 블락
어떤 포트를 블락 할 것인가..
stp
rstp
*stp 포트 결정
네트웍당 루트 브릿지는 하나 (패킷을 받는다)이며 각포트들은 designated port
루트포트 :루트 브릿지로 가는 최적경로 norootbrige 는 하나의 루트 포트만 있다
dp;세그먼트당 지정이 포트는 하나

루트브릿지 결정
*브릿지 아이디(브릿지 piority+mac address)를 보고 결정
BPDU 
root bridge =brige with the lowest brigde id

*
새로운루트스위치 추가시 연결되는 norootbridge의 root port를 막는 후에 루트스위치를 설정


BPDU 루프가 어디서 돌고 있는지 알아낼수 있다
root id = b id 자신이 바로 루트인경우
root id x b id 자신이 루트가 아닌경우

세션을 연결하기 위해 확인 :헬로우 타임bpdu 2초
----------------------------------
sw1실습
1홀수:192.168.1.0/24
짝수 :192.168.2.0/24

2홀수:vlan3
짝수 :valn4

3domail:sist
4server:s1(s2.s3 client mode)
--------------------------------
router 활성

##si setting##
vlan database
vtp domain sist
vtp server
vlan 3 name vlan3
vlan 4 name vlan4
end
sh vtp status//확인명령
sh vlan //확인명령

client(s2.s3)
vlan database
vtp domain sist
vtp client

*trunk port 설정
conf t
int f0/11 
switchport trunk enc 
switchport mode trunk

sh spanning-tree
sh vlan


*vlan setting*
int f0/1
switchport mode access
switchport access vlan 3

sh span
sh run

'Network' 카테고리의 다른 글

netstat 상태 설명  (0) 2017.01.06
각 포트별 TCP/UDP 서비스  (0) 2017.01.06
PCAP 파일에서 UNIX 도구를 이용한 IP 주소 요약  (0) 2017.01.06
SLB 구성 - DSR vs Inline  (0) 2017.01.05
tcpdump  (0) 2017.01.04

HOW-TO Configuration sendmail.cf

SMTP(Simple Mail Transport Protocol)는 TCP/IP 메일 전송 프로토콜입니다. Linux 에서는 기본적으로 sendmail프로그램을
통해 SMTP를 완벽하게 지원합니다. 간혹 sendmail데몬과 pop3데몬의 역할에 대해 잘못 알고 계시는 분이 계신데 sendmail
은 메일의 발신, 수신, 중계의 역할을 합니다. 즉 sendmail데몬은 메일을 보내고 받고 하는 역할을 합니다.
pop3데몬은 sendmail이 수신한 사용자의 메일을 사용자의 메일 클라이언트에서 받아 볼 수 있는 역할을 합니다.

0. 들어가기 전에
sendmail.cf 파일을 다루는 능력이 안된다고 해서 sendmail을 사용할 수 없는건 아닙니다. sendmail을 설치하면 기본적으로 설정되어 있는 sendmail.cf파일만으로도 충분히 아니 만족스러울 정도로 sendmail을 가동할 수 있습니다.
이번 강좌에서 다루는 sendmail.cf 설정들의 설명은 쉽고 자주 이용되는 설정에 대해서만 다룰려고 합니다. 하지만 이번 강좌에서 다루는 내용만으로도 sendmail을 사용하는데 아무런 지장이 없을 것입니다. 센드메일 관련 질문들을 봐도 이 범위에 벗어난 질문은 없는 것 같군요. 사실 더 이상 자세히 다룰 실력도 안되고, 워낙 sendmail의 기능이 많아서...
(800페이지 분량의 sendmail만을 다룬 책도 있습니다)
사실 sendmail.cf 파일에 대해서 공부하는것이 무척 부담스러울 것이다. 부담 되시는 분이나 처음부터 이해가 되지 않아 이 페이지를 닫으실 분들은 \"1.3 Options 섹션\" 부분만이라도 한번 읽어 보길 바란다.

1. sendmail.cf(sendmail 환경설정)
1.1-1 sendmail.cf의 규칙
-->>sendmail.cf의 각 행들은 다음과 같은 규칙이 적용됩니다.
1) 빈행은 무시한다.
2) #로 시작하는 행은 주석행이다.
3) C, D, F, H, K, M, O, P, R, S, V로 시작하는 행은 설정행이다.
4) 하나이상의 빈 공간으로 시작하는 행은 앞 행의 연장이다.

sendmail.cf 파일은 7개의 색션으로 나누어져 있는 아주 복잡한 파일이다.
아마 초보 분들은 sendmail.cf파일을 열고 그 내용의 방대함에 놀라 그냥 파일을 닫는 분도 있을 겁니다. 저도 첨에sendmail.cf 파일을 열어봤을 땐 짜증이 확 밀려 왔으니까.....
우선 간략하게 7개의 섹션들에 대해서 잠깐 살펴보고 넘어 갑니다.. 아주 간략하게.. 지금부터 바짝 긴장 하시길.. ^^;

Local Info
--->> 0이 섹션은 해당 로컬 호스트의 구성 정보를 정의합니다.
Options
--->> sendmail 환경을 정의하는 옵션을 정의 한다.
Message Precedence 
--->> sendmail 메시지 순서 값을 정의 합니다.
Trusted Users 
--->> 발신인의 주소를 변경할 권한을 갖는 사용자를 정의합니다.
Format of Headers 
--->> 메일에 삽입도는 메일 헤더를 정의합니다.
Rewriting Rules
--->> 사용자의 메일 프로그램에 있는 e-mail 주소를 메일 배달 프로그램에 필요한 폼으로 다시 작성하는 명령이 들어 있습니다.
Mailer Definitions
--->> 메일을 배달하는데 사용되는 프로그램을 정의합니다. Mailer가 사용하는 재작성 규칙도 이 섹션에 정의되어
있습니다.

1.1-2 sendmai.cf에서 사용되는 명령
C : 클래스 정의(문자열)
D : 메크로 정의
E : 환경변수 지정
F : 클래스 정의(file, pipe)
H : Herder 정의
K : Key file 정의(map 정의)
M : mailer 정의
O : 옵션
P : Message precedences
R : 덮어쓰기
S : Ruleset(새로운 규칙 시작)
T : Truseted users(사용자 지정)
V : 설정파일 버젼

1.2 local info 섹션
Cwlocalhost
localhost를 w클래스로 정의 한겁니다.
다음에 나오는 Fw와의 차이점은 C는 문자열을 정의하고 F는 파일을 정의합니다.

Fw/etc/mail/local-host-names
Cwlocalhost와 같이 w클래스를 정의하는데 문자열 대신 파일을 정의합니다.
즉 /etc/mail/local-host-names에 추가할 내용을 Cwlocalhost aaa.com bbb.com 으로 설정해도 같은 효과가 납니다..

FR-o /etc/mail/relay-domains
Relay를 허용할 도메인을 설정합니다.
그러나 /etc/mail/access에서 Relay 제어를 할 수 있기 때문에 이 파일은 거의 쓰기 않는 파일입니다.

DnMAILER-DAEMON
sendmail이 return 메일을 보낼 때 사용하는 사용자 이름을 정의한다.
sendmail로부터 return 메일을 받아 본 사람들은 MAILER-DAEMON의 메일을 받아본 기억이 있을 겁니다.

Kmailertable hash -o /etc/mail/mailertable
Mailer 테이블을 작성하는 파일을 정의합니다.
K 명령은 모든 정보와 내부 이름, 데이터베이스의 유형, 이 데이터베이스를 가지고 있는 파일을 정의할 때 사용한다.
K명령은 \"mailertable\"라는 이름의 데이터 베이스를 선언하는데 이 데이터 베이스는 표준 Unix 데이터베이스 포맷인 hash 포맷으로 되었있다는 것을 정의한다.

Kvirtuser hash -o /etc/mail/virtusertable
가상 유저 테이블을 정의하고 있다.

Kaccess hash -o /etc/mail/access
메일 수신자 데이터 베이스 파일을 정의하고 있다.

1.3 Options 섹션
아마 서버 관리자의 취향에 따라 가장 많이 수정되어 지는 부분이 Options 섹션의 설정들이 아닌가 생각된다.
모든 옵션에 대해서 설명을 하지 않았지만 특별한 경우가 아니면 이 밖의 설정들을 건드릴 일은 없을 것이라고 생각된다.
O SevenBitInput=False
7비트로 받아 들이지 않게 설정하고 있다.

O EightBitMode=pass8
8비트 데이트로 처리하게 설정하고 있다.

O AliasFile=/etc/aliases
aliases파일의 위치를 정의하고 있다.

O MaxMessageSize=1000000
메일의 최대 용량을 제한하는 옵션이다. 기본적으로 주석처리 되어 있어 무제한으로 설정되어 있다.
메일 박스 용량과는 무관한 설정이다.

O DeliveryMode=background
센드메일을 백그라운드로 작동하게 설정하고 있다.

O MaxHopCount=17
최대 메일 포워딩 수를 정의하고 있다.
큐잉 서버를 만들 때 사용되는 것으로 기본적으로 주석 처리 되어 있다.

O HelpFile=/usr/lib/sendmail.hf
help파일의 위치를 정의하고 있다.

O ForwardPath=$z/.forward.$w:$z/.forward
.forward 파일의 위치를 정의하고 있다.
$w는 호스트 이름을 가리키는 매크로 값이고 $z는 사용자 홈 디렉토리를 가리킨다.

O QueueDirectory=/var/spool/mqeue
센드메일의 큐 디렉토리의 위치를 지정한다.
큐 디렉토리는 메일 발송 실패 또는 대기 하고 있는 메일들이 임시로 저장되는 곳이다.

O Timeout.connect=1m
타임 아웃을 1분으로 설정하고 있다.

O Timeout.queuereturn=5d
Return메일이 발송될 시간을 설정하고 있다.
특정 이유로 메일이 5일동안 발송되지 않으면 메일을 보낸 사람에게 반송된다.

O Timeout.queuewarn=4h
메일이 최종 발신지까지 4시간동안 발송되지 않으면 메일을 보낸 사람에게 경고 메일을 보낸다.
sendmail.cf 파일에는 위 3가지 Timeout 설정외에 많은 Timeout 설정들이 있다.

O StatusFile=/var/log/sendmail.st
센드메일의 status 파일의 위치를 지정한다.

O DefaultUser=8:12
Mailer 의 UID와 GID를 설정한다. (UID : 8 , GID : 12)

O MinQueueAge=30m
메일을 바로 발송하지 않고 최소한 30분동안 큐잉 상태로 대기 시킨다. 기본적으로 주석 처리 되어 있다

O

1.4 Mesage Procedure 섹션
메 시지 대기열에 들어가는 메시지의 우선 순위를 할당할 때 사용한다. 디폴트로 메일은 \"1종 우편물\"로 간주되어 0이라는 우선 순위가 할당된다. 우선 순위를 나타내는 수가 음수일 경우 메일로 보낼 에러 메시지가 만들어지지 않기 때문에 대량 메일링에는 낮은 우선 순위를가 유리하다. 아래의 우선 순위 설정들은 수정하지 말고 기본값으로 사용하길 바란다.
Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100

1.5 Trusted Users 섹션
Trust 된 사용자는 메일을 보낼 때 발신의의 주소를 변경할 수 있다. 단 trust된 사용자는 /etc/passwd 파일에 존재하는 사용자이어야 된다. 기본적으로 root, daemon, uucp가 설정되어 있다. 보안상 아래의 값을 변경하는 일은 없기 바란다.
Troot
Tdaemon
Tuucp

1.6 Format of Headers 섹션
메일 헤더를 정의하는 부분이다.
H?P?Return-Path: <$g>
HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
$.$?{auth_type}(authenticated$?{auth_ssf} (${auth_ssf} bits)$.)
$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}
(using ${tls_version} with cipher ${cipher} (${cipher_bits} bits) verified ${verify})$.$?u
for $u; $|;
$.$b
H?D?Resent-Date: $a
H?D?Date: $a
H?F?Resent-From: $?x$x <$g>$|$g$.
H?F?From: $?x$x <$g>$|$g$.
H?x?Full-Name: $x
# HPosted-Date: $a
# H?l?Received-Date: $b
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>
#^L 

1.7 Rewritng Rules 섹션
R$* $#error $@ 5.7.1 $: \"550 Relaying denied\"
이 설정은 localhost에서만 RELAY를 허용하라는 설정이다. 절대 주석 처리 되어 있으면 안된다.
만약 주석 처리 되어 있을 경우 스패머들의 놀리터가 될 수 있다.

Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
M=1000000, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u 
위의 \"M=1000000\" 설정을 통해서 사용자가 사용할 수 있는 전체 메일 용량이 아니라 들어오는 메일 용량을 제한 할 수
있다. 기본적으로 설정이 되어 있지 않다. (단위: bytes)

// 윤 일(admin@rootman.org)

'Server' 카테고리의 다른 글

/etc/alias 사용법  (0) 2017.01.06
FTP Command  (0) 2017.01.06
네임서버 구축  (0) 2017.01.06
samba 설정으로 윈도우에서 리눅스 접근하기  (0) 2017.01.06
/etc/passwd /etc/shadow 합치기/나누기  (0) 2017.01.06

:: 네임서버 구축

[root@s92 bind-9.3.0]# service named stop
named 를 정지함:
[root@s92 bind-9.3.0]# rpm -qa | grep bind
bind-chroot-9.2.4-2
bind-libs-9.2.4-2
ypbind-1.17.2-3
bind-9.2.4-2
system-config-bind-2.0.3-1
bind-devel-9.2.4-2
kdebindings-3.3.0-3
bind-utils-9.2.4-2
kdebindings-devel-3.3.0-3
[root@s92 bind-9.3.0]# yum remove bind
Setting up Remove Process
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Package bind.i386 20:9.2.4-2 set to be erased
--> Running transaction check
Setting up Repos
http://ftp.rhnet.is/pub/fedora/3/i386/os/repodata/repomd.xml: [Errno 4] IOError: HTTP Error 404: Not Found
Trying other mirror.
base 100% |=========================| 1.1 kB 00:00
updates-released 100% |=========================| 951 B 00:00
Reading repository metadata in from local files
base : ################################################## 2622/2622
primary.xml.gz 100% |=========================| 362 kB 00:04
MD Read : ################################################## 962/962
updates-re: ################################################## 962/962
--> Processing Dependency: bind = 20:9.2.4-2 for package: bind-chroot
--> Processing Dependency: bind for package: system-config-bind
--> Processing Dependency: bind for package: caching-nameserver
--> Processing Dependency: bind >= 9.1.3-0.rc2.3 for package: caching-nameserver
--> Processing Dependency: bind = 20:9.2.4-2 for package: bind-devel
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Package caching-nameserver.noarch 0:7.3-3 set to be erased
---> Package bind-devel.i386 20:9.2.4-2 set to be erased
---> Package system-config-bind.noarch 0:2.0.3-1 set to be erased
---> Package bind-chroot.i386 20:9.2.4-2 set to be erased
--> Running transaction check

Dependencies Resolved
Transaction Listing:
Remove: bind.i386 20:9.2.4-2

Performing the following to resolve dependencies:
Remove: bind-chroot.i386 20:9.2.4-2
Remove: bind-devel.i386 20:9.2.4-2
Remove: caching-nameserver.noarch 0:7.3-3
Remove: system-config-bind.noarch 0:2.0.3-1
Total download size: 0
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Test

Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing: bind-devel 1/5
Erasing: caching-nameserver 2/5
warning: /etc/sysconfig/named saved as /etc/sysconfig/named.rpmsave
warning: /etc/rndc.key saved as /etc/rndc.key.rpmsave
Erasing: bind 3/5
Erasing: system-config-bind 4/5
/var/tmp/rpm-tmp.31911: line 15: /etc/init.d/named: 그런 파일이나 디렉토리가 없음
Erasing: bind-chroot 5/5
/var/tmp/rpm-tmp.31911: line 7: /etc/init.d/named: 그런 파일이나 디렉토리가 없음

Removed: bind.i386 20:9.2.4-2
Dependency Removed: bind-chroot.i386 20:9.2.4-2 bind-devel.i386 20:9.2.4-2 caching-nameserver.noarch 0:7.3-3 system-config-bind.noarch 0:2.0.3-1
Complete!

[root@s92 bind-9.3.0]# rpm -qa | grep bind
bind-libs-9.2.4-2
ypbind-1.17.2-3
kdebindings-3.3.0-3
bind-utils-9.2.4-2
kdebindings-devel-3.3.0-3

[root@s92 bind-9.3.0]# rpm -e --nodeps bind-libs-9.2.4-2
[root@s92 bind-9.3.0]# rpm -e --nodeps bind-utils-9.2.4-2
[root@s92 bind-9.3.0]# rpm -qa | grep bind
ypbind-1.17.2-3
kdebindings-3.3.0-3
kdebindings-devel-3.3.0-3

[root@s92 bind-9.3.0]# ./configure --prefix=/usr --sysconfdir=/etc \\
> --localstatedir=/var --with-openssl --with-libtool

[root@s92 bind-9.3.0]# make ; make install
[root@s92 src]# useradd -u 25 -c \"DNS SERVER\" -r -d /var/named \\
> -s /bin/false named
[root@s92 src]# grep named /etc/passwd
named:x:25:25:DNS SERVER:/var/named:/bin/false

[root@s92 src]# ls /var/named
chroot

# named 디렉토리를 다운받았음
# /var/named/chroot/var/named 에 있는 파일이 /var/named 에 링크되어있는지 확인해봐야 한다.
# 여기서는 링크가 되어있지 않아서 다른곳에서 named 디렉토리를 통채로 다운받았다
[root@s92 src]# chmod 770 /var/named
[root@s92 src]# chgrp named /var/named
[root@s92 src]# ls -ld /var/named
drwxrwx--- 3 root named 4096 11월 25 10:52 /var/named
[root@s92 src]# chown named /var/named
[root@s92 src]# ls -ld /var/named
drwxrwx--- 3 named named 4096 11월 25 10:52 /var/named
[root@s92 src]# ls -l /etc/named.conf
ls: /etc/named.conf: 그런 파일이나 디렉토리가 없음 <- 그래서 다운받았음

[root@s92 named]# cd /var/named
[root@s92 named]# mkdir data
[root@s92 named]# chmod 770 data
[root@s92 named]# ls -l
합계 16
drwxrwx--- 5 root named 4096 11월 7 14:49 chroot
drwxrwx--- 2 root root 4096 11월 25 11:29 data
[root@s92 named]#
mkdir data
[root@s92 named]# chmod 770 data
[root@s92 named]# ls -l
합계 16
drwxrwx--- 5 root named 4096 11월 7 14:49 chroot
drwxrwx--- 2 root root 4096 11월 25 11:29 data
[root@s92 named]#

[root@s92 named]# vi named.ca
# named.ca 업데이트
[root@s92 named]# dig @a.root-servers.net . NS | grep -v \"^;\" > named.ca
[root@s92 named]# pwd
/var/named/chroot/var/named

[root@s92 named]# cd /etc/rc.d/init.d
[root@s92 init.d]# ls -l named <- 다운받은 name 구동 스크립트
-rwx------ 1 root root 3184 11월 25 11:23 named
[root@s92 init.d]# pwd
/etc/rc.d/init.d
[root@s92 init.d]#

[root@s92 named]# rndc-confgen > /etc/rndc.conf
[root@s92 named]# vi /etc/rndc.conf

[root@s92 named]# chkconfig --add named
[root@s92 named]# chkconfig --list named
named 0:해제 1:해제 2:해제 3:해제 4:해제 5:해제 6:해제
[root@s92 named]# chkconfig --level 35 named on
[root@s92 named]# chkconfig --list named
named 0:해제 1:해제 2:해제 3:활성 4:해제 5:활성 6:해제


[root@s92 etc]# rndc-confgen -a
wrote key file \"/etc/rndc.key\"
[root@s92 etc]# cat /etc/rndc.key
key \"rndc-key\" {
algorithm hmac-md5;
secret \"/rY70AngJU5iWlgxo4jDQw==\";
};
[root@s92 etc]# grep secret /etc/rndc.conf
secret \"D7za6FzVwTL0KvN04wOduA==\";
# secret \"D7za6FzVwTL0KvN04wOduA==\";
[root@s92 etc]# grep rndc-key /etc/rndc.conf
key \"rndc-key\" {
default-key \"rndc-key\";
# key \"rndc-key\" {
# allow { 127.0.0.1; } keys { \"rndc-key\"; };
[root@s92 etc]# grep rndckey /etc/named.conf
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
[root@s92 etc]# vi /etc/named.conf
[root@s92 etc]# grep rndckey /etc/named.conf
[root@s92 etc]# grep rndc /etc/named.conf
inet 127.0.0.1 allow { localhost; } keys { rndc-key; };
include \"/etc/rndc.key\";
[root@s92 etc]# service named start

'Server' 카테고리의 다른 글

FTP Command  (0) 2017.01.06
sendmail.cf  (0) 2017.01.06
samba 설정으로 윈도우에서 리눅스 접근하기  (0) 2017.01.06
/etc/passwd /etc/shadow 합치기/나누기  (0) 2017.01.06
리눅스 계정 관리  (0) 2017.01.06

:: 윈도우에서 리눅스 접근하기
첫번째 - 암호화 하지 않고 접근

레지스트리 수정 : [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\LanmanWorkStation\\Parameters
1로 수정`

[root@s92 linux]# vi /etc/samba/smb.conf

[GLOBAL]
workgroup = Sistsong # 윈도우 작업그룹
netbios name = leopit
server string = samba
log file = /var/log/samba/log.%m
max log size = 50 byte
security = user
encrypt passwords = no
socket options = TCP_NODELAY
dns proxy = No

[HOMES] #User\'s Home
comment = User\'s Home Directories
browseable = no
writable = yes

[root@s92 samba]# testparm
[root@s92 samba]# /etc/rc.d/init.d/smb start

두번째 - 암호화 하고 접근

레지스트리 수정 : [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\LanmanWorkStation\\Parameters
0으로 수정`

[root@s92 linux]# vi /etc/samba/smb.conf

encrypt passwords = yes 로 바꿈

[root@s92 linux]# cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
[root@s92 samba]# smbpasswd linux
New SMB password:
Retype new SMB password:

[root@s92 samba]# grep linux smbpasswd
linux:502:50831B500C427533AAD3B435B51404EE:F0873F3268072C7B1150B15670291137:[U ]:LCT-43850C6C:

[root@s92 samba]# testparm
[root@s92 samba]# service smb restart

:: 연결된 모습

[root@s92 samba]# netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 211.63.89.92:139 211.63.89.91:1102 SYN_RECV
tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
tcp 0 0 211.63.89.92:139 211.63.89.91:1114 ESTABLISHED
tcp 1 1 211.63.89.92:32954 205.156.51.200:80 LAST_ACK
tcp 0 0 :::22 :::* LISTEN
[root@s92 samba]# w
09:29:02 up 1:36, 2 users, load average: 0.02, 0.03, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 - 07:53 ?xdm? 1:07 0.42s /usr/bin/gnome-session
root pts/1 :0.0 07:54 0.00s 0.05s 0.00s w
[root@s92 samba]# who
root :0 Nov 24 07:53
root pts/1 Nov 24 07:54 (:0.0)
[root@s92 samba]#


######################################################

:: 리눅스에서 윈도우로 접근하기
윈도우에 폴더 하나를 공유시키고 계정 하나를 만든다
mkdir /mnt/MS
nmblookup sist221
smbmount //sist221/Share /mnt/MS -o username=wind

######################################################

:: FTP 처럼 윈도우로 접속하기
[root@s92 /]# smbclient //sist221/Share -U wind

######################################################

:: 프로젝트 공간 할당하기
groupadd -g 50000 project
[root@s92 samba]# useradd pro -g project
[root@s92 samba]# grep project /etc/group
[root@s92 samba]# smbpasswd -a pro
[root@s92 samba]# mkdir -p /usr/samba/project
[root@s92 samba]# chown root.project /usr/samba/project
[root@s92 samba]# chmod 770 /usr/samba/project
[root@s92 samba]# vi /etc/samba/smb.conf

smb.conf에 다음과 같이 추가
[project]
comment = Project Directory
path = /usr/samba/project
public = no
writable = yes
write list = @project

######################################################

:: File Server 상에 공유디렉토리 만들기
[root@s92 samba]# cd /usr/samba
[root@s92 samba]# mkdir multimedia
[root@s92 samba]# chown pro /usr/samba/multimedia
[root@s92 samba]# vi /etc/samba/smb.conf
[root@s92 samba]# service smb restart

[MEDIA]
comment = Multimedia Files
path = /usr/samba/multimedia
public = yes
writable = yes
write list = pro
printable = no
create mask = 0755

######################################################

:: 삼바 웹에서 컨트럴 하기
[root@s92 xinetd.d]# vi /etc/xinetd.d/swat
# default: off
# description: SWAT is the Samba Web Admin Tool. Use swat \\
# to configure your Samba server. To use SWAT, \\
# connect to port 901 with your favorite web browser.
service swat
{
disable = no
port = 901
socket_type = stream
wait = no
only_from = 127.0.0.1
user = root
server = /usr/sbin/swat
log_on_failure += USERID
}

[root@s92 xinetd.d]# service xinetd restart
http://localhost:901

'Server' 카테고리의 다른 글

sendmail.cf  (0) 2017.01.06
네임서버 구축  (0) 2017.01.06
/etc/passwd /etc/shadow 합치기/나누기  (0) 2017.01.06
리눅스 계정 관리  (0) 2017.01.06
grep  (0) 2017.01.06

[root@s92 download]# pwunconv
[root@s92 download]# grep leopit /etc/passwd /etc/shadow
/etc/passwd:leopit:$1$AV2qeQF9$기JtavMlGJ.QlS7uqKKND0x0:501:501::/home/leopit:/bin/bash
grep: /etc/shadow: 그런 파일이나 디렉토리가 없음

[root@s92 download]# pwconv
[root@s92 download]# grep leopit /etc/passwd /etc/shadow
/etc/passwd:leopit:x:501:501::/home/leopit:/bin/bash
/etc/shadow:leopit:$1$AV2qeQF9$JtavMlGJ.QlS7uqKKND0x0:13102:0:99999:7:::

[root@s92 download]#

'Server' 카테고리의 다른 글

네임서버 구축  (0) 2017.01.06
samba 설정으로 윈도우에서 리눅스 접근하기  (0) 2017.01.06
리눅스 계정 관리  (0) 2017.01.06
grep  (0) 2017.01.06
LSOF 설치 및 사용가이드  (0) 2017.01.06

디폴트로 계정을 생성하면 유저아이디가 기본그룹, 보조그룹니다.
그러나 -t 옵션을 붙혀주면 유저아이디가 기본그룹이 되고 GID 100 번의 그룹의 보조그룹이 된다.

또한 /etc/group 에 admin:x:55000:win,open 이런 형식으로 아이디를 추가하면 해당 그룹이 보조그룹이 된다.

[root@s92 ~]# useradd win
[root@s92 ~]# useradd -n open
[root@s92 ~]# groupadd -g 55000 admin
[root@s92 ~]# vi /etc/group

admin:x:55000:win,open #이 그룹이 보조그룹으로 속할 계정

[root@s92 ~]# groups win
win : win admin
[root@s92 ~]# groups open
open : users admin

[root@s92 ~]# vi /etc/group

admin:x:55000:

[root@s92 ~]# groups win
win : win
[root@s92 ~]# groups open
open : users

:: 카피할 설정파일들 디렉토리 변경하기
useradd leopit -m -k /etc/skel2 -g group

:: 효율적으로 등록하기
useradd 계정명 -g 기본그룹명 -G 보조그룹명,보조그룹명 

ex) 
[root@s92 ~]# useradd open1 -g linux -G sist,users
[root@s92 ~]# groups open1
open1 : linux users sist
[root@s92 ~]# vi /etc/group
:
users:x:100:open1
sist:x:500:open1
:


:: 계정 수정하기
사용자 계정정보를 수정하는 명령어이다.
기존에 생성되어 있는 계정사용자의 다음과 같은 계정정보들을 수정할 수 있다.

사용형식

usermod [-c comment] [-d home_dir [ -m]]
[-e expire_date] [-f inactive_time]
[-g initial_group] [-G group[,...]]
[-l login_name] [-p passwd]
[-s shell] [-u uid [ -o]] [-L|-U] login


사용예 #1

다음은 sspark5라는 계정사용자의 /etc/passwd, /etc/shadow, /etc/group내에 설정된 기본 설정내용이다.

[root@host3 root]# grep sspark5 /etc/passwd
sspark5:x:506:508::/home/sspark5:/bin/bash
[root@host3 root]#
[root@host3 root]# grep sspark5 /etc/shadow
sspark5:$1$/H.bOlGk$jeEdF1g7naK9vVe4v5i/s/:12314:0:99999:7:::
[root@host3 root]#
[root@host3 root]# grep sspark5 /etc/group
sspark5:x:508:
[root@host3 root]#

위의 초기 설정값을 간단히 보면 UID는 506, GID는 508, 코멘트는 현재 없으며, 홈디렉토리는 /home/sspark5이며, 사용하는 기본쉘은 bash쉘임을 알 수 있다.
이제 이 값들을 usermod로 바꾸어 보도록 하자.


먼저, sspark5사용자의 코멘트를 입력해 보자.

[root@host3 root]# usermod -c 박성수 sspark5
[root@host3 root]#

위의 예와 같이 코멘트를 수정하는 usermod의 옵션은 -c이다.


다음은 /etc/passwd내에 sspark5의 변경된 코멘트를 확인한 것이다.

[root@host3 root]# grep sspark5 /etc/passwd
sspark5:x:506:508:박성수:/home/sspark5:/bin/bash
[root@host3 root]#


사용예 #2

이번에는 sspark5사용자의 홈디렉토리를 변경해보자.
usermod에서 홈디렉토리를 변경하는 옵션은 -d이다.

[root@host3 root]# usermod -d /usr/sspark5 sspark5
[root@host3 root]#

위와 같이 홈디렉토리를 변경하였다.

다음은 변경된 값을 확인한 것이다.

[root@host3 root]# grep sspark5 /etc/passwd
sspark5:x:506:508:박성수:/usr/sspark5:/bin/bash
[root@host3 root]#

한가지 주의할 것은 홈디렉토리의 위치가 변경되었지만 원래 있던 홈디렉토리파일들이 삭제되거나 이동되는 것은 아니다.
원래의 홈디렉토리내에 존재하는 파일들은 모두 그대로 존재한다.


사용예 #3

이번에는 -e옵션을 사용하여 sspark5의 계정 종료일을 설정해보자.

[root@host3 root]# usermod -e 2006-12-31 sspark5
[root@host3 root]#

위와 같이 설정한 후에 /etc/shadow파일을 확인한 것이다.
계정 종료일의 설정은 위에서 보았던 /etc/shadow파일의 내용과는 달리 \'13513\"이 설정되어 있는 거을 알 수가 있다.

[root@host3 root]# grep sspark5 /etc/shadow
sspark5:$1$/H.bOlGk$jeEdF1g7naK9vVe4v5i/s/:12314:0:99999:7::13513:
[root@host3 root]#


사용예 #4

이번에는 sspark5의 기본사용쉘을 변경해 보자.
sspark5의 원래 사용했던 기본사용쉘은 /bin/bash(Bash Shell)이였다.
이것을 usermod로 다음과 같이 /bin/csh(C Shell)로 변경한 것이다.

[root@host3 root]# usermod -s /bin/csh sspark5 
[root@host3 root]#

이를 확인하기 위하여 /etc/passwd의 내용을 확인하였다.

[root@host3 root]# grep sspark5 /etc/passwd
sspark5:x:506:508:박성수:/usr/sspark5:/bin/csh
[root@host3 root]#

사용예 #5

이번에는 sspark5의 UID를 변경해 보자.
UID를 변경하기 위해서는 -u옵션을 사용하면 된다.

[root@host3 root]# usermod -u 508 sspark5 
[root@host3 root]#

원래 sspark5의 UID는 506이였던 것을 508로 변경한 것이다.
다음은 변경된 UID값을 확인한 것이다.

[root@host3 root]# grep sspark5 /etc/passwd
sspark5:x:508:508:박성수:/usr/sspark5:/bin/csh
[root@host3 root]#


이상과 같이 usermod에 대해서 살펴보았다.
usermod명령어는 useradd, useradd -D, userdel과 함께 익혀두는 것이 바람직한다.
여러분들의 건투를 빈다.

'Server' 카테고리의 다른 글

samba 설정으로 윈도우에서 리눅스 접근하기  (0) 2017.01.06
/etc/passwd /etc/shadow 합치기/나누기  (0) 2017.01.06
grep  (0) 2017.01.06
LSOF 설치 및 사용가이드  (0) 2017.01.06
syslog.conf 로그파일 종류  (0) 2017.01.06

grep 계열 명령어


3.1 grep 명령어


3.1.1 grep의 의미


grep : 파일 전체를 뒤져 정규표현식에 대응하는 모든 행들을 출력한다.

egrep : grep의 확장판으로, 추가 정규표현식 메타문자들을 지원한다.

fgrep : fixed grep 이나 fast grep으로 불리며, 모든 문자를 문자 그래도 취급한다. 즉, 정         규표현식의 메타문자도 일반 문자로 취급한다.


3.1.2 grep의 동작 방법


grep에서 사용하는 정규표현식 메타문자

메타문자

기    능

사용 예

사용 예 설명

^

행의 시작 지시자

\'^love\'

love로 시작하는 모든 행과 대응

$

행의 끝 지시자

\'love$\'

love로 끝나는 모든 행과 대응

.

하나의 문자와 대응

\'l..e\'

l 다음에 두 글자가 나오고 e로 끝나는 문자열을 포함하는 행과 대응

*

선행문자와 같은 문자의 0개 혹은 임의개수와 대응

\' *love\'

0개 혹은 임의 개수의 공백 문자 후에 love로 끝나는 문자열을 포함한 행과 대응

[]

[] 사이의 문자 집합중 하나와 대응

\'[Ll]ove\'

love나 Love를 포함하는 행과 대응

[^ ]

문자집합에 속하지 않는 한 문자와 대응

\'[^A-K]love\'

A와 K 사이의 범위에 포함되지 않는 한 문자와 ove가 붙어있는 문자열과 대응

\\<

단어의 시작 지시자

\'\\<love\'

love로 시작하는 단어를 포함하는 행과 대응(vi,grep에서 지원)

\\>

단어의 끝 지시자

\'love\\>\'

love로 끝나는 단어를 포함하는 행과 대응

(vi,grep에서 지원)

\\(..\\)

다음 사용을 위해 태그를 붙인다.

\'\\(lov\\)ing\'

지정된 부분을 태크1에 저장한다. 나중에 태그값을 참고하려면 \\1을 쓴다. 맨 왼쪽부터 시작해 태그를 9개가지 쓸 수 있다. 왼쪽 예에서는 lov가 레지스터1에 저장되고 나중에 \\1로 참고할 수 있다.

x\\{m\\}

문자 x를 m번 반복한다.

\'o\\{5\\}\'

문자 o가 5회 연속적으로 나오는 모든 행과 대응

x\\{m,\\}

적어도 m번 반복한다.

\'o\\{5,\\}\'

문자 o가 최소한 5회 반복되는 모든 행과 대응

x\\{m,n\\}

m회 이상 n회 이하 반복한다.

o\\{5,10\\}\'

문자 o가 5회에서 10회 사이의 횟수로 연속적으로 나타나는 문자열과 대응


grep의 옵션

옵션

동작 설명

-b

검색 결과의 각 행 앞에 검색된 위치의 블록 번호를 표시한다. 검색 내용이 디스크의 어디쯤 있는지 위치를 알아내는데 유용하다.

-c

검색 결과를 출력하는 대신, 찾아낸 행의 총수를 출력한다.

-h

파일 이름을 출력하지 않는다.

-i

대소문자를 구분 하지 않는다.(대문자와 소문자를 동일하게 취급).

-l

패턴이 존재하는 파일의 이름만 출력한다.(개행문자로 구분)

-n

파일 내에서 행 번호를 함께 출력한다.

-s

에러 메시지 외에는 출력하지 않는다. 종료상태를 검사할 때 유용하게 쓸 수 있다.

-v

패턴이 존재하지 않는 행만 출력한다.

-w

패턴 표현식을 하나의 단어로 취급하여 검색한다.


# grep -n \'^jack:\' /etc/passwd

(/etc/passwd 파일에서 jack을 찾는다. jack이 행의 맨 앞에 있으면 행 번호를 화면으로 출력한다.)


3.1.3 grep과 종료 상태

grep은 파일 검색의 성공 여부를 종료 상태값으로 되돌려준다.

패턴을 찾으면 0, 패턴을 찾을 수 없으면 1, 팡리이 존재하지 않을 경우 2

sed,a자 등은 검색의 성공 여부에 대한 종료 상태값을 반환하지 않는다. 다만 구문 에러가 있을 경우에만 에러를 보고한다.


3.2 정규표현식을 사용하는 grep의 예제

# grep NW datafile

# grep NW d*

(d로 시작하는 모든 파일에서 NW를 포함하는 모든 행을 찾는다.)

# grep \'^n\' datafile

(n으로 시작하는 모든 행을 출력한다.)

# grep \'4$\' datafile

(4로 끝나는 모든 행을 출력한다.)

# grep TB Savage datafile

(TB만 인자이고 Savage와 datafile은 파일 이름이다.)

# grep \'TB Savage\' datafile

(TB Savage를 포함하는 모든 행을 출력한다.)

# grep \'5\\.\' datafile

(숫자 5, 마침표, 임의의 한 문자가 순서대로 나타나는 문자열이 포함된 행을 출력한다.)

# grep \'\\.5\' datafile

(.5가 나오는 모든 행을 출력한다.)

# grep \'^[we]\' datafile

(w나 e로 시작하는 모든 행을 출력한다.)

# grep \'[^0-9]\' datafile

(숫자가 아닌 문자를 하나라도 포함하는 모든 행을 출력한다.)

# grep \'[A-Z][A-Z] [A-Z]\' datafile

(대문자 2개와 공백 1개, 그리고 대문자 하나가 연이어 나오는 문자열이 포함된 행을 출력한다.)

# grep \'ss* \' datafile

(s가 한 번 나오고, 다시 s가 0번 또는 여러번 나온 후에 공백이 연이어 등장하는 문자열을 포함한 모든 행을 출력한다.)

# grep \'[a-z]\\{9\\}\' datafile

(소문자가 9번 이상 반복되는 문자열을 포함하는 모든 행을 출

//유닉스 쉘 바이블 (엘리 퀴클리 지음)에서 발췌

'Server' 카테고리의 다른 글

/etc/passwd /etc/shadow 합치기/나누기  (0) 2017.01.06
리눅스 계정 관리  (0) 2017.01.06
LSOF 설치 및 사용가이드  (0) 2017.01.06
syslog.conf 로그파일 종류  (0) 2017.01.06
ssh RSA 암호화 키로 접속하기  (0) 2017.01.06

LSOF 설치 및 사용가이드


1. 소개

LSOF는 \'List Open File\'의 약자로, 해당 System에서 구동되고 있는 프로세스들에 의해서 열려진 파일들을 확인 할 수 있는 툴이다. 시스템의 의심스러운 프로세스에 대한 확인이 용이하고, 설치가 비교적 쉬워 많이 이용되고 있다.

[cert:root]:/user/kong/lsof_4.56> lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sched 0 root cwd VDIR 32,0 1024 2 /
sched 0 root 0u VCHR 12,2 0t0 140375 /devices/pseudo/sad@0:user(COMMON)
.....
.....
sendmail 23403 root 13u inet 0x603ca5b8 0t2290 TCP cert:52969->211.45.162.90:smtp (ESTABLISHED)
sendmail 23403 root 14u inet 0x603ca5b8 0t2290 TCP cert:52969->211.45.162.90:smtp (ESTABLISHED)
......

[그림 1] LSOF 실행 예

 

2. LSOF 다운로드 받기

최신 버전은 ftp://vic.cc.purdue.edu/pub/tools/unix/lsof 에서 확인 할 수 있으며, 여러 개의 Mirror site 가 존재해 쉽게 다운로드 받을 수 있다.

Mirror site URL :

ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutiles/lsof
ftp://ftp.cert.dfu.du/pub/tools/admin/lsof
ftp://ftp.cetis.hvu.nl/pub/lsof
ftp://ftp.crc.doc.ca/packages/

Version 4 LSOF 는 gzip으로 압축되어 있으며, 파일명에 revision number를 포함하고 있다.

ftp://vic.cc.purdue.edu/pub/tools/unix/lsof_<rev>_W.tar.gz
또는 ftp://vic.cc.purdue.edu/pub/tools/unix/lsof_<rev>_W.tar.Z

※ 리눅스 시스템의 경우에는, 대부분 기본적으로 LSOF가 설치되어 있다. (만약 설치가 안되어 있는 상태라면 rpm 패키지로 배포하고 있으므로 linux 배포사이트를 이용하면 될 것이다.)

3. 압축해제

이 문서에서는 ver.4(revision 4.56) LSOF를 Solaris OS에서 설치하는 과정을 보이도록 한다.

gzip -d lsof_4.56_W.tar.gz
tar -xvf lsof_4.56_W.tar

※ 참고로 4.56 버전의 lsof.tar 파일의 md5 checksum 값은 다음과 같으며, MD5 (lsof_4.56.tar) = 92155bb6430d14d044f8ca96858e63b8

md5 checksum tool은 아래 사이트에서 구할 수 있다.
ftp://ftp.cerias.purdue.edu/pub/tools/unix/crypto/md5

4. 설치하기

LSOF 설치과정은 크게 압축해제 -> Inventory -> Configure -> Install 4단계로 볼 수 있다.

① 압축 풀기

우선 초기 Wrapper에 쌓인 파일 압축을 풀면 해당 디렉토리 내에 다음과 같은 5개 의 파일이 생성되고, 이와 함께 lsof_4.56 디렉토리가 생성된다.

[cert:root]:/user/kong> tar -xvf lsof_4.56_W.tar
x RELEASE.SUMMARY_4.56, 12803 bytes, 26 tape blocks
x README.lsof_4.56, 4129 bytes, 9 tape blocks
x 00.README.FIRST_4.56, 700 bytes, 2 tape blocks
x lsof_4.56.tar, 3317760 bytes, 6480 tape blocks
x lsof_4.56.tar.asc, 284 bytes, 1 tape blocks

생성되는 파일

설명

00.README.FIRST_4.56

Readme file for the distribution

README.lsof_4.56

Contains distribution and security information

RELEASE.SUMMARY_4.56

Summary of the lsof 4.56 distribution

lsof_4.56.tar

LSOF 4.56 tar archive

lsof_4.56.tar.asc

Detached PGP certificate for lsof_4.56.tar

[표 1] lsof_4.56_W.tar 압축 해지 후 생성되는 파일들

 

※ 생성된 lsof_4.56 디렉토리에 생성되는 주요 파일들

[sparc5:root]:/user/kong/lsof_4.56> ls
./ 00DIST 00README arg.c lsof_fields.h proto.h
../ 00FAQ 00XCONFIG dialects/ main.c regex.h
00.README.FIRST 00LSOF-L AFSConfig* lib/ misc.c scripts/
00CREDITS 00MANIFEST Configure* lsof.8 node.c store.c
00DCACHE 00PORTING Customize* lsof.h print.c usage.c
00DIALECTS 00QUICKSTART Inventory* lsof.man proc.c version

② Inventory

LSOF를 설치 할때 절대적으로 필요한 과정은 아니다. 그러나 subdirectory들을 체크하고, 각 스크립트들과 파일 헤더들, 소스파일들이 실제로 존재하는지 등 패키지 상태를 체크 해 볼 필요가 있다. 다음과 같이 Inventory 스크립트를 실행하게 되면, inventory 작업에 대한 소개 가 나오고 실행할 것인지 여부를 물어오는데 \'y\' 로 답하면서 진행하게 되면 디렉토리들의 list 를 확인할 수 있다.

[cert:root]:/user/kong/lsof_4.56> ./Inventory
Conducting an inventory of the lsof distribution; this will take a while.
Examining /user/kong/lsof_4.56: OK
Examining dialects: OK
....
....
Examining lib: OK
Examining scripts: OK
This lsof distribution seems to be complete.

③ Configure

환경설정에 필요한 여러 단계의 작업을 하게 되는데, 아래와 같이 해당 OS에 맞 게 선택하고 Configure 스크립트를 구동하면 된다.

※Configure 스크립트 구동방법

Configure <options> <target-dialect>
<options>: -clean : clean up previous configuration
-d|-dialects : display a list of supported dialect versions
-h|-help : display help information
-n : avoid AFS, customization, and inventory checks

aix | aixgcc : IBM AIX xlc (aix)
or gcc (aixgcc)
bsdi : BSDI BSD/OS
darwin : Apple Darwin
decosf : DEC OSF/1
digital_unix|du : Digital UNIX
freebsd : FreeBSD
hpux|hpuxgcc : HP-UX cc (hpux)
or gcc (hpuxgcc)
linux : Linux
netbsd : NetBSD

nextstep|next|ns|nxt : NEXTSTEP
openbsd : OpenBSD
openstep|os : OpenStep
osr | sco : SCO OpenServer,
SCO devloper\'s compiler
osrgcc|scogcc : SCO OpenServer,gcc compiler
ptx : Sequent PTX
solaris | solariscc : Solaris gcc (solaris)
or cc(solariscc)
tru64 : Tru64 UNIX
unixware | uw : SCO UnixWare

[표 2] Configure 스크립트 구동시 OS 지정

 

[sparc5:root]:/user/kong/lsof_4.56> ./Configure solaris
Testing prdata.h for PR_GWINDOWS, using gcc
Testing prdata.h for PR_LDT, using gcc
Testing vnode.h for VSOCK, using gcc
.....

각 헤더파일 testing이 끝나면, 다시 inventory 해 볼 것인지를 물어보는데 file tree들을 변화시킬 것이 없다면 inventory과정을 re-run할 필요없다.

....
....
Do you want to take inventory (y|n) [y]? n
rm -f ddev.c dfile.c dlsof.h dmnt.c dnode*.c dproc.c dproto.h dsock.c dstore.c kernelbase.h machine.h machine.h.old new_machine.h __lseek.s Makefile
ln -s dialects/sun/ddev.c ddev.c
ln -s dialects/sun/dfile.c dfile.c
ln -s dialects/sun/dlsof.h dlsof.h
.....
ln -s dialects/sun/machine.h machine.h
kernelbase.h assembled.
Makefile and lib/Makefile created.

위 과정에서 Make 파일이 생성됨을 볼 수 있으며, 이어 LSOF를 customize 할 것인지를 물어오는데 [yes/no] question을 따라 다음의 각 옵션을 사용자가 선택할 수 있다.

Name

Description

Default Value

HASSECURITY

enabled : root 만이 lsof를 이용해 열려진 파일들을 확인 할 수 있음.
disabled :누구든 모든 열려진 파일들을 lsof를 이 용해 확인 할 수 있음.

Disabled

WARNINGSTATE

enabled : lsof가 필요할 경우 언제든지 warning messages를 출력함.
disabled : warning messages를 출력하지 않음. -w (disables) +w (enables) 로 조절 가능함.

Enabled

WARNDEVACCESS

enabled : lsof가 /dev (또는 /devices)를 억세스 할 수 없을 때, warning messages를 출력함.
disabled : lsof가 /dev (또는 /devices)를 억세스 할 수 없을 때, skip 해 버림.

Enabled

HASDCACHE

enabled : lsof가 /dev (또는 /devices)의 파일들에 관한 정보를 포함하고 있는
device cache file을 생성함.

< define path options >

HASENVDC, HASPERSDC,
HASPERSDCPATH, HASSYSDC
disabled : lsof 가 device cache file 생성하지 않음.

Enabled

HASENVDC

HASPERSDC

HASPERSDCPATH

HASDCACHE를 정의하면, device cache file path를 기술하기 위해 연관된
다른 옵션들의 구성도 정의해 주어야 한다.

< 현재 설정된 path options >

#define HASENVDC "LSOFDEVCACHE"
#define HASPERSDC "%h/%p.lsof_%L"
#define HASPERSDCPATH "LSOFPERSDCPATH"
※ 자세한 사항은 00DCACHE ,00FAQ 참고

"LSOFDEVCACHE"

"%h/%p.lsof_%L"

"LSOFPERSDCPATH"

HASKERNIDCK

lsof가 현재의 커널상태와 최초 lsof가 설치되어 구동되었을 당시의 커널과 비교하여,
시스템에서 부적절하게 실행되는 것을 탐지할 수 있다.

kernel identity check로 인해 일부 UNIX
(예:AIX) 시스템에서 구동시간이 많이 걸리는 경우가 있어서 disable 시켜야 할 때가 있을 수도 있지만,
lsof를 부적절하게 구동함으로써 오는 위험요소가 증가할 수 있다는 것을 배제할 수 없다.

Enabled

[표 3] Customize 옵션

 

위의 각 항목들 및 설정값들은 LSOF가 기본적으로 제공하는 것으로 변경을 원할 경우에는 machine.h 파일을 직접 수정하거나 Customize 스크립트를 직접 구동하여 변경할 수도 있다.

④ build & install

Configure 과정을 마치고 나면, 시스템에 인스톨 할 수 있다. 기본적인 install 과 정은 아래와 같다.

■ build LSOF system

[cert:root]:/user/kong/lsof_4.56> make
(cd lib; make DEBUG="-O" CFGF="-Dsolaris=20600 -DHASPR_GWINDOWS -DHAS_VSOCK -DLSOF_VSTR=\\"5.6\\"")
gcc -Dsolaris=20600 -DHASPR_GWINDOWS -DHAS_VSOCK -DLSOF_VSTR="5.6" -O -c ckkv.c
.....
.....
gcc -o lsof -Dsolaris=20600 -DHASPR_GWINDOWS -DHAS_VSOCK -DLSOF_VSTR=\\"5.6\\" -O ddev.o dfile.o dmnt.o dnode.o dnode1.o dnode2.o dproc.o dsock.o dstore.o arg.o main.o misc.o node.o print.o proc.o store.o usage.o -L./lib -llsof -lkvm -lelf -lsocket -lnsl

■ Install LSOF system

[cert:root]:/user/kong/lsof_4.56> make install
(cd lib; make DEBUG="-O" CFGF="-Dsolaris=20600 -DHASPR_GWINDOWS -DHAS_VSOCK -DLSOF_VSTR=\\"5.6\\"")
Constructing version.h
gcc -Dsolaris=20600 -DHASPR_GWINDOWS -DHAS_VSOCK -DLSOF_VSTR=\\"5.6\\" -O -c usage.c
gcc -o lsof -Dsolaris=20600 -DHASPR_GWINDOWS -DHAS_VSOCK -DLSOF_VSTR=\\"5.6\\" -O ddev.o dfile.o dmnt.o dnode.o dnode1.o dnode2.o dproc.o dsock.o dstore.o arg.o main.o misc.o node.o print.o proc.o store.o usage.o -L./lib -llsof -lkvm -lelf -lsocket -lnsl

여기까지 과정을 마치면 일반적인 설치는 모두 끝나고 lsof 실행파일이 생성된다.

※ 별도로 install ruleset 지정하고자 할 경우

가상메모리의 커널 image를 담고있는 파일인 /dev/kmem(또는 /dev/mem)를 read 할 수 있도록 LSOF는 setgid 로 설치되어야 하는데, 일반적으로 다음과 같은 ruleset 형태로 지정한다.

SunOS install rule actions :
install <options> -m 2755 -g kmem lsof <bin_dest>
install <options> -m 444 lsof.8 <man_dest>
Solaris install rule actions :

install -[cf] <bin_dest> <options> -m 2755 -g sys lsof
install -[cf] <man_dest> <options> -m 444 lsof.8

5. LSOF 사용하기

■ LSOF 옵션

옵션

기 능

옵션

기 능

-?
-h

list help

-a

AND selections (OR)

-d
-D

s select by FD set
D ?|i|b|r|u[path]

+|-f

-files +filesys

-l

list UID numbers

-n
-N

no host names
select NFS files

-s

list file size

-t
-T

terse listing
disable TCP/TPI info

-v
-V

display version info
verbose search

-F [f]

select fields;-F? for help

-o o

o 0t offset digits (8)

-S [t]

t second stat timeout(15)

-i i

select by IPv4 address: [proto][@host|addr][:svc_list|port_list]

+|-r [t]

repeat every t seconds (15);
+ until no files, - forever

-b

avoid kernel blocks

-c c

list command c

-P

no port names

-i

select IPv4 files

-p s

select by PID set

-C

no kernel name cache

+|-w

Warnings (+)

-R

list paRent PID

-k k

kernelsymbols (/dev/ksyms)

-U

select Unix socket

-u s

exclude(^)/select login/UID s

-m m

kernel memory (/dev/kmem)

+|-M

portMap registration (-)

--

end option scan

-g [s]

select by process group ID set and print process group IDs

names

select named files or files on named file systems

 

■ 실행결과 보기

실행결과에 해당되는 각 column 들을 간단하게 살펴보면 다음 [표5] 와 같다.

Column

설 명

Command

프로세스와 관련된 Unix command 이름

PID
PPID
PGRP

Process IDentification number

Parent Process IDentification number
(해당 프로세스의 부모 프로세스 ID)

Process Group IDentification number
(해당 프로세스와 관련된 프로세스 그룹 ID)

USER

해당 프로세스를 소유한 사용자 ID 또는 login name

FD

File Descriptor number
(ex) cwd : current working directory
r : read access / w : write access / u : read and write access

TYPE

해당 파일과 관련한 노드 타입
(ex) inet : Internet domain socket

DEVICE

device number

SIZE
SIZE/OFF
OFFSET

file 이나 file offset의 사이즈

INODE
NODE-ID

local file 의 node number 또는 Internet protocol type
또는 서버 호스트의 NFS file의 inode number

NAME

해당 파일이 소속된 mount point나 파일 시스템의 이름

[표 6] lsof 실행결과의 각 Column

 

■ LSOF 주요 옵션 사용 예

* 특정 파일을 억세스하고 있는 프로세스 확인 : lsof <path/file-name>

[cert:root]:/> lsof /etc/passwd
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
ns-httpd 244 root 9r VREG 32,0 3044 99217 /etc/passwd
....

* internet socket 확인 : lsof -i

Internet address 출력형식 : [protocol][@hostname|hostaddr][:service|port]

- 특정 호스트(또는 ip)에 대한 접속 확인

[cert:root]:/> lsof -i@172.16.2.146
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
in.telnet 10124 root 0u inet 0x61d4b788 0t71 TCP cert:telnet->172.16.2.146:1109 (ESTABLISHED)
in.telnet 10124 root 1u inet 0x61d4b788 0t71 TCP cert:telnet->172.16.2.146:1109 (ESTABLISHED)
in.telnet 10124 root 2u inet 0x61d4b788 0t71 TCP cert:telnet->172.16.2.146:1109 (ESTABLISHED)
.....

- 특정 포트로 접속한 리스트 확인

[cert:root]:/usr/sbin> lsof -i @certcc.or.kr:23
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
in.telnet 104 root 2u inet 0x612df850 0t152 TCP cert:telnet->172.16.2.159:1176 (ESTABLISHED)
in.telnet 28462 root 0u inet 0x61aee578 0t71 TCP cert:telnet->172.16.2.146:4250 (ESTABLISHED)
.....

* 특정 user가 오픈한 프로세스를 확인 : lsof -u <loginname> 혹은 lsof -u <UID>

[cert:root]:/> lsof -u kong
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
csh 21309 kong cwd VDIR 32,4 1536 223602 /user/kong/lsof_4.56
csh 21309 kong txt VREG 32,6 158608 298136 /usr/bin/csh
.......

- 특정사용자 제외시 "^" 심볼을 사용하고, 여러명을 동시에 지정하려면 ","를 이용한다.

[cert:root]:/dev/pts> lsof -u ^root,kong,yjkim
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
csh 8992 yjkim cwd VDIR 32,0 1024 2 /
csh 8992 yjkim txt VREG 32,6 158608 298136 /usr/bin/csh
csh 8992 yjkim txt VREG 32,6 70996 136979 /usr/lib/locale/ko/ko.so.1
csh 8992 yjkim txt VREG 32,6 1024888 6749 /usr/lib/libc.so.1
.....
csh 21309 kong cwd VDIR 32,4 1536 223602 /user/kong/lsof_4.56
csh 21309 kong txt VREG 32,6 158608 298136 /usr/bin/csh
....

* 특정 프로세스가 오픈한 파일 리스트 확인 : lsof -p <PID>

- PID 112를 가진 프로세스가 사용하는 파일들 확인

[cert:root]:/usr/sbin> lsof -p 143
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
inetd 143 root cwd VDIR 32,0 1024 2 /
inetd 143 root txt VREG 32,6 33492 310933 /usr/sbin/inetd
inetd 143 root txt VREG 32,6 10696 6352 /usr (/dev/dsk/c0t0d0s6)
....
....
inetd 143 root 4u inet 0x603cab38 0t0 TCP *:ftp (LISTEN)
inetd 143 root 5u inet 0x610b13c0 0t0 TCP *:telnet (LISTEN)
inetd 143 root 6u inet 0x610b1240 0t0 TCP *:pop3 (LISTEN)
......

* ps 명령이 변조된 시스템에서는 의심스러운 포트 확인하기 예

[root@linux /root]# netstat -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:auth *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:login *:* LISTEN
tcp 0 0 *:2626 *:* LISTEN
.......
[root@linux /dev]# fuser -n tcp 2626
2626/tcp: 607
[root@linux /dev]# lsof -p 607
PID TTY STAT TIME COMMAND
607 ? S 0:00 /usr/sbin/mingetty


※ 참고자료

1. lsof 4.56 README file and man page

2. Installing, configuring and using lsof 4.50 to list open files on systems running Solaris 2.x
http://www.cert.org/security-improvement/implementations/i042.05.html


공재순/ kong@certcc.or.kr

'Server' 카테고리의 다른 글

리눅스 계정 관리  (0) 2017.01.06
grep  (0) 2017.01.06
syslog.conf 로그파일 종류  (0) 2017.01.06
ssh RSA 암호화 키로 접속하기  (0) 2017.01.06
ab 커맨드  (0) 2017.01.06

PCAP파일을 awk, uniq, sed 사용하여 유용한 정보 추출하기


# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c | awk '{print $2 "\t" $1 }'

1) tcpdump 를 사용하면서 -n 은 resolving 을 하지 말라는 것이다. 그리고 -t 옵션은 날짜/시간을 출력하지 않으며, -r 은 fake2.pcap 파일을 읽어들이라는 뜻이다. resolving 이라고 표현한 것은 tcpdump 를 통해서 볼때 IP 주소로 안 나오고 DNS 로 변환되어 나오는 것들을 말하는데, -n 은 IP 로만 출력된다고 보면 된다.


2) 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' 는 필터 문법을 사용한 것으로 tcp[13] = 0x02 는 TCP SYN 패킷을 뜻하고 dst host 107.251.237.46 가 목적지 IP 주소와 dst port 80 은 목적지 포트 80번을 뜻한다. 아래와 같은 결과를 얻을 수 있다.

# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80'
reading from file fake2.pcap, link-type EN10MB (Ethernet)
IP 45.129.53.45.1107 > 107.251.237.46.80: S 2848095605:2848095605(0) win 65535 
IP 45.129.53.45.1109 > 107.251.237.46.80: S 2969874981:2969874981(0) win 65535 
IP 45.129.53.45.1113 > 107.251.237.46.80: S 3283036520:3283036520(0) win 65535 
IP 45.129.53.45.1117 > 107.251.237.46.80: S 1316869520:1316869520(0) win 65535 
IP 45.129.53.45.1118 > 107.251.237.46.80: S 416262863:416262863(0) win 65535 
IP 45.129.53.45.1119 > 107.251.237.46.80: S 1231482360:1231482360(0) win 65535 
IP 45.129.53.45.1120 > 107.251.237.46.80: S 4007769174:4007769174(0) win 65535 
IP 45.129.53.45.1121 > 107.251.237.46.80: S 2037777415:2037777415(0) win 65535 
IP 45.129.53.45.1122 > 107.251.237.46.80: S 2064521910:2064521910(0) win 65535 
IP 45.129.53.45.1125 > 107.251.237.46.80: S 2824615168:2824615168(0) win 65535 
IP 45.129.53.45.1126 > 107.251.237.46.80: S 578435425:578435425(0) win 65535 
IP 45.129.53.45.1127 > 107.251.237.46.80: S 3649101981:3649101981(0) win 65535 
IP 45.129.53.45.1128 > 107.251.237.46.80: S 4156669539:4156669539(0) win 65535 
IP 45.129.53.45.1130 > 107.251.237.46.80: S 2942142219:2942142219(0) win 65535 
IP 45.129.53.45.1131 > 107.251.237.46.80: S 1880140019:1880140019(0) win 65535 


3) 파이프와 awk ( | awk '{print $2}') 를 이용하여 tcpdump 의 결과중 출발지 IP 만 출력하게 한 것이다. 필드 $2 가 출발지 IP 이며, 목적지 주소로 할 경우 $4 로 변경하면 된다.


# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}'
reading from file fake2.pcap, link-type EN10MB (Ethernet)
45.129.53.45.1107
45.129.53.45.1109
45.129.53.45.1113
45.129.53.45.1117
45.129.53.45.1118
45.129.53.45.1119
45.129.53.45.1120
45.129.53.45.1121
45.129.53.45.1122
45.129.53.45.1125
45.129.53.45.1126
45.129.53.45.1127
45.129.53.45.1128
45.129.53.45.1130
45.129.53.45.1131


4) 파이프와 tr (| tr . ' ')를 이용하여 . 을 공백으로 바꾸는 것이다.


# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '
reading from file fake2.pcap, link-type EN10MB (Ethernet)
45 129 53 45 1107
45 129 53 45 1109
45 129 53 45 1113
45 129 53 45 1117
45 129 53 45 1118
45 129 53 45 1119
45 129 53 45 1120
45 129 53 45 1121
45 129 53 45 1122
45 129 53 45 1125
45 129 53 45 1126
45 129 53 45 1127
45 129 53 45 1128
45 129 53 45 1130
45 129 53 45 1131


5) 다시 파이프와 awk (| awk '{print $1"."$2"."$3"."$4}') 를 이용하여 IP 주소 형태로 구성한 것이다. $5는 포트인데 제외시킨 것이다.


# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}'
reading from file fake2.pcap, link-type EN10MB (Ethernet)
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45


6) sort 명령어를 ( | sort) 를 이용하여 트래픽을 IP 로 정렬한다. ** 여기 예에서는 하나의 IP 만 이용되었음을 참고하길 바란다.


0# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort
reading from file fake2.pcap, link-type EN10MB (Ethernet)
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45
45.129.53.45


7) 다음으로 | uniq -c 명령어를 통해 출발지 IP 가 몇번 반복했는지 출력하는 것이다.


# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c
reading from file fake2.pcap, link-type EN10MB (Ethernet)
15 45.129.53.45


8) 그러면 출발지 IP 45.129.53.45 가 15번 SYN 을 보냈다는 것을 알 수 있다. 다음 명령어인 awk '{print $2 "\t" $1 }' 는 보기 좋게 IP 주소와 카운트 출력을 서로 맞바꾼 것이다. 


# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c | awk '{print $2 "\t" $1 }'
reading from file fake2.pcap, link-type EN10MB (Ethernet)
45.129.53.45 15


다른 예제로 사용한 것은 목적지 80 번 포트로 목적지 IP 의 건수를 출력한 것이다. 위 예제와 큰 차이는 없다.


# tcpdump -ntr fake2.pcap 'dst port 80' | awk '{print $4}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c | awk '{print $2 "\t" $1 }'
reading from file fake2.pcap, link-type EN10MB (Ethernet)
103.215.23.19 119
105.143.221.251 5
105.143.229.47 5
107.211.203.241 20
107.251.105.215 34
107.251.237.46 75
111.157.46.185 653
111.190.92.253 12
111.200.248.236 21
111.212.148.21 40
121.166.117.57 25
121.205.250.221 10
121.205.250.223 24
123.187.14.83 31
123.187.14.89 15
125.167.70.221 15
159.180.121.215 11
189.252.57.215 5
189.252.57.217 5
43.197.190.189 6
45.219.248.116 15
59.185.219.21 5
59.185.219.245 28
59.185.219.57 113


다음은 목적지 포트번호인 $5 를 사용하였는데 출력을 시키고 정렬하면서 , sed 명령어로 제일 끝부부의 출력인 : 를 삭제하여 출력한 것이다.


# tcpdump -n -r fake2.pcap | awk '{print $5}' | tr . ' ' | awk '{print $5}' | sort | uniq -c | sed 's/:$//'
reading from file fake2.pcap, link-type EN10MB (Ethernet)
2
16 1039
3 1040
3 1041
30 1042
10 1043
10 1044
7 1045
6 1046
6 1047
7 1048
9 1049
7 1050
3 1051
3 1052
3 1053
21 1054
42 1055
64 1056
15 1057
10 1058
77 1059
49 1060
22 1061
16 1062
24 1063
22 1064
19 1065
21 1066

간단하게 원문의 예제와 다르게 수정한 것을 소개해 보았는데, 아주 기본적인 형태를 언급한 것이다. awk, sed 와 파이프 문만 잘 사용해도 출력되는 스트링을 자유자재로 편집하여 유용한 수치를 뽑아낼 수 있다. 나 또한 즐겨쓰는 유틸리티 인데, 이 각각의 도구가 책 한권씩 소개되어 있을만큼 문자열을 다루는데 있어서는 최고다.


tcpdump 를 예로 들어 설명했는데 tshark 의 결과를 이용하는데도 유용하다. tshark 는 출력시키고자 하는 내용을 원하는 포맷 형태로 맞추어 출력도 가능하여 효과적으로 사용할 수 도 있는데, 정리가 되는대로 여러분들에게 소개할 것이다.

'Network' 카테고리의 다른 글

각 포트별 TCP/UDP 서비스  (0) 2017.01.06
router root bridge  (0) 2017.01.06
SLB 구성 - DSR vs Inline  (0) 2017.01.05
tcpdump  (0) 2017.01.04
라우팅 테이블  (0) 2017.01.04

+ Recent posts