2011. 8. 20. 08:19

♧ 컴퓨터의 네트워크 인터페이스의 모든 데이터 패킷을 검사하여 컴퓨터를 보호하고,

그때 설정한 파라미터를 기반으로 패킷을 함께 해야 할지에 대해 결정한다. 현재 리눅스

커널에 내장된 방화벽은 iptables라고 한다(커널2.2의 iptables의 전신은 ipchains)

우분투는 완벽하게 iptables를 시작하고 리눅스를 설치할 때 구성한다.

 

iptables(www.netfilter.org)는 예외적으로 강력하지만 아직 커맨드라인에서의 사용은 복잡.

그래픽 인터페이스를 사용하여 방화벽 규칙을 설정 : firestarter 패키지 설치.

firestarter는 방화벽 구성 마법사 및 설정을 제공한다. 또한 그래픽 방화벽 구성을 위해서

FWBuilder(fwbuilder 패키지), Shorewall(shorewall 패키지) 같은 패키지를 추가할 수 있다.

 

 

▶ 리눅스 시스템의 방화벽이 현재 규칙을 어떻게 설정하는지 표시

☞ 우분투를 처음 설치할 때, 앞의 명령어 출력은 정의에 대한 어떠한 규칙도 없다.

iptables을 방화벽 테이블 기본 필터를 보여준다.

☞ udp 상에서 인터넷 프린팅 프로토콜(ipp)을 위한 패킷이 컴퓨터의 네트워크 인터페이스가 들어오는 것을

보여주고 tcp 프로토콜을 허용.

☞ 마찬가지로 FTP(ftp)와 매치되는 tcp 패킷, 시큐얼 쉘(ssh), 웹(http) 목적지 포트를 수용한다.

패킷이 활성화된 패킷과 연관이 있다면 또한 수용.

 

▶ 현재 iptables nat 테이블을 표시.

☞ nat 테이블은 단지 네트워크 주소 변환 기능이 적용되는 것을 보여줌.

☞ NAT 방화벽 뒤에 개인 어드레스 같은 것들을 허용한다.

☞ 내부 LAN 머신에서 패킷은 방화벽을 종료한다.

비공개 소스 어드레스는 방화벽의 외부 인터페이스의 IP 어드레스를 재작성한다.

방화벽은 LAN 머신을 통하여 트래픽 반환을 허용하기 위하여 세션 추적을 유지한다.

이 모든 것은 POSTROUTING체인에 있는 MASQUERADE 라인으로 구성된다.

 

PREROUTING 체인에 DNAT 라인은 내부 LAN IP 어드레스 10.0.0.155:22번 포트에서 포워드하여

IP 어드레스 11.22.33.44에 8785번 포트에 어떤 요청을 발생한다

(비표준 포트를 통해 방화벽 뒤에 컴퓨터에서 ssh로 누군가 트릭)

 

▶ 방화벽에 대한 정보를 나열( ipstate 명령어는 iptstate 패키지의 일부)

 

다음은 우분투 시스템에서 모든 iptables 규칙을 멈출 수 있는지 혹은 플러시할 수 있는 방법이다.

이 명령어는 모든 규칙을 제거한다. 그래서 실행할 때 주의하여야 한다.

바로 새로운 규칙의 추가를 원할지 모르기 때문이다.

 

▶ iptables 명령어로 활성화 방화벽 규칙을 어떻게 변경하여 사용하는지 몇 가지 예를 들어보자.

☞ 첫 번째 예 : 시스템의 25번 포트에 새로운 응답을 허용하는 규칙을 생성한다.

메일서버(센드메일, postfix, 혹은 SMTP 서비스)가 컴퓨터에 구성되어 있기 때문이다.

☞ 두 번째 예 : 소스 네트워크 어드레스 변환(SNAT)을 방화벽에 허용하여 nat 테이블에 규칙을 생성한다.

SNAT 기능을 사용하면 공용 인터넷 방화벽의 외부 IP 어드레스를 사용하여 통신할 수 있도록 방화벽 뒤에

있는 사설 IP 어드레스를 가지고 있다.

 

SNAT 혹은 다른 폼의 NAT를 사용하려면, 머신에서 IP 포워딩을 활성화해야만 한다.

/etc/sysctl.conf 파일을 편집하여 수행할 수 있고 다음 변수에 uncommenting 할 수 있다.

net.ipv4.conf.default.forwarding=1

 

방화벽 뒤에 머신에서 인터넷 서비스를 제공하는 경우,

머신이 서비스에 대한 요청을 포워드하도록 방화벽에 지시할 수 있다.

 

다음 예는 방화벽 뒤에 있는 머신에 방화벽을 통해 서비스에 대한 요청을 전달하도록 port forwarding 기능을 사용.

방화벽 동작의 변경을 만들 수 있는 많은 유형의 규칙이 있다.

iptables 사용의 더 많은 정보를 보려면 iptables 맨 페이지 혹은 Netfilter 웹사이트(www.netfilter.org)를 참조.

 

위와 같이 변경 후, 정의된 다음 규칙을 볼 수 있다.

 

모든 iptables 규칙 변경은 이 세션에서만 적용이 된다. 우분투를 재부팅하는 경우,

일반적으로 원하지 않은 기본 설정 규칙을 얻어 온다. iptables 규칙을 보존하려면, iptables-save 실행하라.

2단계 프로세스는 /etc/ 디렉토리에 대한 제한 때문에 필요하다.

( 제한을 변경할 수 있지만, 좋은 생각은 아니다) 여태까지 규칙은 나중에 사용을 위해 저장한다.

 

다음은 이더넷 인터페이스(시스템상에서 특정 각각의 네트워크 카드 혹은 인터페이스)가 가능하게

매시간 저장된 규칙을 로드할 수 있게 구성할 수 있다. /etc/network/interfaces 파일을 편집하라.

eth0 같은 이더넷 인터페이스를 위해 iface 구성후, 미리보기 표시된 iptables-restore를 호출.

인터페이스 파일에 추가로 /etc/iptables.rules 파일 이전에 규칙을 복원하기 위해 iptables-restore를 호출

 

 

 

ipTables HowTo 문서 : https://help.ubuntu.com/community/IptablesHowTo

Posted by devanix
2011. 8. 20. 07:28

♧ 사용자 계정을 생성한 후, 그리고 사용자가 컴퓨터를 풀어버리면

컴퓨터를 사용하는 방법을 추적하는데 사용할 수 있는 몇 가지 명령어.

 

find 명령 : 시스템에서 저장되어 있는 파일이 어디 있는지 시스템에서 검색.

du 명령 : 사용자의 홈 디렉토리에 얼마나 많은 공간이 사용 되었는지 확인.

fuser, ps, top 명령 : 어떤 사용자가 프로세스를 실행하는지 보려면.

 

▶ last : 가장 최근에 시스템에 로그인한 사람의 정보

$ last

devanixpts/2■■192.168.0.2■■Sat Aug 20 06:15 still logged in

devanixpts/1■■:0.0■■■■■■Sat Aug 20 06:08 - 06:24 (00:16)

devanixpts/0■■:0.0■■■■■■Sat Aug 20 05:49 - 06:24 (00:34)

devanixtty7■■■:0■■■■■■ Sat Aug 20 05:37 still logged in

☞ 언제 로그인햇는지, 얼마나 오랫동안 로그인 했는지, 혹은 'still 로그인'했는지 볼 수 있다.

pts 라인은 원격 컴퓨터 혹인 로컬 X 디스플레이(:0.0)에서 쉘을 연 사용자를 표시.

☞ 원격 클라이언트가 호스트 이름 쉽게 읽음 : $ last -a

 

▶ lastb :가장 최근 로그인에 성공하지 못한 목록

$ sudo lastb

julianssh:notty■■■ritchieMonAug6 12:28 - 12:28 (00:00)

 

▶ who -u : 현재 로그인한 목록(긴 형식)

$ who -u

devanixtty7■■■■2011-08-20 05:37■■■1124 (:0)

devanixpts/2■■■ 2011-08-20 06:15. ■■■ 2212 (192.168.0.2)

 

▶ users : 현재 로그인한 목록(짧은 형식)

$ users

devanixchrisfrancoisgreekjim

 

▶ 개별 사용자들에 대한 정보를 찾기 위한 몇 가지 명령어.

$ id ■■■■■■■■■■/* 아이덴터티(UID, GID 그리고 현재 쉘 그룹) */

uid=1000(devanix) gid=1000(devanix) 그룹들=1000(devanix),4(adm),20(dialout),24(cdrom),46(plugdev),112(lpadmin),120(admin)

$ who am i ■■■■■■/* 아이덴터티 (user, tty, 로그인 날짜, 위치) */

devanix pts/2 2011-08-20 06:15 (192.168.0.2)

$ finger -s devanix ■■/* 사용자 정보 (짧게) */

$ finger -l devanix ■■/* 사용자 정보 (길게) */

 

 

Posted by devanix
2011. 8. 20. 06:51

 

NFS를 사용하여 원격 디렉토리 공유

 

설치 : sudo apt-get install nfs-kernel-server

 

▶ exportfs : 모든 공유서버에서 해당 디렉토리 보여줌.

$ sudo /usr/sbin/exportfs -v

/export/myshare

client.example.com(ro,wdelay,root_squash,no_subtree_check)

/mnt/public

<world>(rw,wdelay,root_squash,no_subtree_sheck)

☞ (ro) : 읽기만 가능, (rw) : 읽고/쓰기 마운트

☞ (wdelay) : 공유에 더 쓰기가 예상될 때 성능 향상을 지연

☞ (root_squash) : 클라이언트 root 유저로부터 요청은 익명 사용자 UID를 맵핑

☞ (no_subtree_check) : 파일시스템 퍼미션 체크가 덜 이루어진다.

 

▶ NFS 공유 디렉토리 추가/수정

$ sudo /etc/init.d/nfs-kernel-server reload

공유 디렉토리 익스포트 reload

$ sudo exportfs -r

공유 디렉토리 익스포트 reload

$ sudo exportfs -rv

exporting client.example.com:/export/myshare

exporting *:/mnt/public

익스포트 공유의 자세한 reload

 

▶ showmount : 공유 디렉토리 출력

/* 리눅스 서버 시스템에서, 로컬 시스템이 사용하는 공유 디렉토리 출력 */

$ sudo showmount -e

Export list for server.example.com

/export/myshare client.example.com

/mnt/public *

/* 리눅스 시스템 클라이언트에서, 선택한 컴퓨터가 사용하는 공유 디렉토리 출력*/

$ sudo showmount -e server.example.com

/export/myshare client.example.com

/mnt/public *

 

 

◎ NFS 공유 마운트

▶ mount 명령을 사용하여 NFS 공유 마운트

$ sudo mkdir /mnt/server-share

$ sudo mount server.example.com:/export/myshare /mnt/server-share

 

▶ mount 명령어에 NFS의 특별한 옵션 추가. (-o)

$ sudo mount -o rw,hard,intr server.example.com:/export/myshare /mnt/server-share

 

기본적으로, NFS 버전3 프로토콜은 공유를 연결하는데 사용.

NFS버전4를 사용하려면, 인터넷과 방화벽을 통해 작동하도록 설계.

커맨드라인에 있는 파일시스템 유형은 다음과 같은 프로토콜을 나타낸다.

$ sudo mount -t nfs4 server.example.com:/ /mnt/server-share

 

 

 

 

삼바를 사용하여 원격 디렉토리 공유

♧ 삼바는 윈도우 파일의 오픈소스 구현이고 서버 메시지 블록(SMB)으로 알려진 인쇄 공유 프로토콜 이고

지금 일반 인터넷 파일 시스템(CIFS)이라고 한다.

삼바를 사용하려면 samba, samba-doc 패키지 설치.

 

웹기반 관리 툴 : SWAT(swat 패키지 설치) 이 삼바에 포함.

SWAT 시작하는 방법에 대한 내용 : https://help.ubuntu.com/community/Swat

 

◎ 삼바 공유 보기와 액세스

▶ SMB 호스트 네트워크 스캔

$ findsmb

■■■■■■■■■■■*=DMB

■■■■■■■■■■■+=LMB

IP ADDR■■■NETBIOS NAME■■WORKGROUP/OS/VERSION

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

192.168.1.1■■SERVER1■■■■+[MYWORKGROUP] [Unix] [Samba 3.0.25a-3.fc7]

 

▶ smbtree를 사용하여 네트워크 neighborhood(프린터 및 공유 디렉토리)의 텍스트 표현

$ smbtree

Password: ******

WORKGROUP

■■■\\THOMPSON

■■■■\\THOMPSON\

■■■■■\\THOMPSON\IPC$

 

▶ smbpasswd 명령을 사용하여 기존 리눅스 유저에 삼바 유저를 추가.

$ sudo smbpasswd -a devanix

New SMB password: ******

Retype new SMB password: ******

Added user devanix

☞ 암호를 요청하여 어떤 명령어를 수행하기 위한 삼바 패스워드 설정이 필요.

 

▶ 서버에서 익명 사용에게 서비스 목록을 제공.

$ smbclient -L WIN2003srv

password: ******

Anynymous login successful

Domain=[WIN2003] OS=[Windows Server 2003 3790 Service Pack 2] Server=[Windows…]

tree connect failed: NT_STATUS_LOGON_FAILURE

 

▶ 특정 유저를 smbclient로 출력

$ smbclient -L WIN2003srv -U administrator

Enter administrator's password:

Domain=[WIN2003] OS=[Windows Server 2003 3790 Service Pack 2] Server=[Windows…]

■■■Sharename■■Type■■Comment

■■■---------■■■----■■■-------

■■■print$■■■■Disk■■■프린터 드라이버

■■■C$■■■■■ Disk■■■ 기본 공유

■■■F$■■■■■ Disk ■■■기본 공유

■■■IPC$■■■■ IPC■■■■원격 IPC

 

▶ FTP 유형으로 삼바 공유에 연결

$ smbclient //192.168.1.1/myshare -U devanix

Password:

Domain=[WIN2003] OS=[Windows Server 2003 3790 Service Pack 2] Server=[Windows…]

smb: \>

 

대부분의 FTP 클라이언트에서 사용할 수 있는 명령어를 보려면 help 또는 ? 입력.

SMB 호스트에서 cd, ls, get, put, quit 같은 쉘 타입 명령어를 사용할 수 있다.

 

◎ 삼바 공유 마운트

▶ 로컬 혹은 원격 NFS 파일시스템에서 로컬 파일시스템으로 원격 삼바 공유를 마운트

$ sudo mount -t smbfs -o username=devanix,password=MySecret \

//192.168.1.1/myshare /mnt/mymount/

 

▶ smbstatus : 서버의 현재 연결과 잠금 파일을 볼 수 있다

$ sudo smbstatus

 

▶ nmblookup : 컴퓨터의 IP 어드레스를 결정

$ nmblookup thompson

querying Thompson on 192.168.1.255

192.168.1.1 server1<00>

 

▷ -U : 특정 서브넷에서 서버의 IP 어드레스를 발견

$ nmblookup -U 192.168.1.255 server1

querying server1 on 192.168.1.255

192.168.1.1 server1<00>

 

▶ 삼바 구성 파일(smb.conf) 체크

$ testparm

Load smb config files from /etc/samba/smb.conf

Processing section "[homes]"

☞ 삼바 공유를 사용할 수 없거나 삼바 서버 통신에 다른 어떤 문제가 있다면 삼바 구성을 테스트.

smb.conf 이외의 파일에 testparm을 사용 : $ testparm /etc/samba/test-smb.conf

 

 

 

 

SSHFS를 사용하여 원격 디렉토리 공유

SSH 프로토콜을 통해 또 다른 트릭으로 원격파일시스템을 마운트한다.

ssh 파일시스템(sshfs)을 사용하여 SSH 서버에서 유저 계정을 해당 로컬 리눅스 시스템에 액세스할 수 있는

디렉토리를 마운트할 수 있다. sshfs는 모든 데이터의 전송뿐만 아니라 마운트할 때 암호화를 제공.

 

sshfs의 또 다른 멋진 측면은 서버 측면에서 SSH 서비스를 실행하는 이외에 별다른 설정이 필요하지 않다.

 

▶ 원격 서버에서 로컬 디렉토리로 문서의 디렉토리를 마운트.

$ sudo apt-get install sshfs

sshfs 소프트웨어 설치

$ sudo mkdir /mnt/docs

마운트 지점 생성

$ sudo sshfs devanix@10.0.0.50:/var/docs /mnt/docs

원격 디렉토리 마운트

 

▶원격 디렉토리를 사용했을 때, fusermount 명령어로 언마운트.

$ sudo fusermount -u /var/docs

원격 디렉토리 언마운트

 

 

Posted by devanix
2011. 8. 19. 17:52

FTP 명령어를 사용하여 파일 전송

♧ 우분투는 대부분의 유닉스와 윈도우 시스템에서 동일한 방식으로 작동하는 표준 FTP 클라이언트를 제공.

 

▶ lftp로 FTP 서버에 접속하는 예:

$ lftp mirrors.kernel.org

lftp mirrors.kernel.org:~>

익명 연결

$ lftp devanix@example.com

lftp example.com:~>

인증된 연결

$ lftp -u devanix example.com

Password: ******

인증된 연결

$ lftp -u devanix, Mypasswd example.com

lftp example.com:~>

패스워드로 인증

$ lftp

lftp :~> open mirrors.kernel.org

lftp mirrors.kernel.org:~>

Start lftp with no connection

lftp 세션 연결 시작

☞ 네 번째 예(패스워드 인증)은 현실에서는 피해야 한다 (다른 사용자가 ps auwx의 출력으로 볼 수 있음)

 

▶ lftp 세션에서 다운로드할 때 유용한 명령어 예:

$ lftp mirrors.kernel.org

lftp mirrors.kernel.org:~> pwd

ftp://mirrors.kernel.org

현재 디렉토리 체크

lftp mirrors.kernel.org:~> ls

drwxr-xr-x 7 400 400 4096 Jul 02 20:18 debian/

현재 디렉토리 목록

lftp mirrors.kernel.org:~> cd ubuntu-releases/natty/

디렉토리 변경

lftp mirrors.kernel.org:…> get ubuntu-11.04-desktop-i386.iso

파일 다운로드

lftp mirrors.kernel.org:…> <Ctrl+z>

백그라운드에서 다운로드 전송

lftp mirrors.kernel.org:…> mget /gnu/ed/*

/gnu/ed 안에서 모두 가져옴

lftp mirrors.kernel.org:…> !ls

ls 로컬 실행

lftp mirrors.kernel.org:…> bookmark add Live

즐겨찾기 위치

lftp mirrors.kernel.org:…> quit

lftp 종료

 

▶ lftp 인증된 세션에서 업로드할 때 유용한 명령어 예:

$ lftp devanix@example.com

Password: ******

 

lftp example.com:~> lcd /home/devanix/songs

로컬 디렉토리로 변경

lftp example.com:~> cd pub/uploads

서버 디렉토리로 변경

lftp example.com:~> mkdir songs

서버에 디렉토리 생성

   

lftp example.com:~> chmod 700 songs

원격 디렉토리 퍼미션 변경

lftp example.com:~> cd songs

새로운 디렉토리로 변경

lftp example.com:~> puts song.ogg tune.ogg

3039267 bytes transferred

서버에 파일 업로드

lftp example.com:~> mput /var/songs/*

일치하는 파일 업로드

 

 

 

 

파일 전송 SSH툴 사용

♧ scp를 사용하여 원격 파일 복사

SSH 유틸리티는 통신 명령어의 시스템 관리자 아스민(arsenal)에게 가장 중요한 툴이다.

특히, scp 명령어는 한 컴퓨터에서 다른 컴퓨터에서 파일을 가지고 올 때 필요하고

패스워드와 데이터 전송 암호화하여 통신에 안전하다. ssh 명령어는 호스트 대 호스트간의

파일을 복사하는데 가장 인기 있는 툴인 rcp 명령어로 대체되었다.

 

▶ scp 원격 파일 복사 기본 사용 예:

$ scp myfile devanix@server1:/tmp/

Password: ******

myfile을 → 원격서버로 복사

$ scp server1:/tmp/myfile .

원격서버에 myfile을 → 로컬로 복사

 

▶ 복사본 파일의 퍼미션과 타임스탬프 유지(-p)

$ scp -p myfile server1:/tmp/

 

▶ SSH 서비스 특정 포트에 연결(-P)

$ scp -P 12345 myfile server1:/tmp/

 

▶ 특정 지점으로 순환 복사(-r)

$ scr -r mydir devanix@server1:/tmp/

 

 

♧ sftp와 lftp 세션에서 원격 파일 복사.

sftp 명령어는 FTP같은 인터페이스를 찾기 위해 사용하고 SSH 프로토콜을 통해 파일을 복사할 수 있다.

 

▶ sftp 세션 시작

$ sftp devanix@server1

devanix@server1's password: ******

sftp>

 

▷ 일반 FTP클라이언트와 동일한 방식으로sftp 사용

cd

원격 디렉토리 변경

lcd

로컬 디렉토리 변경

pwd, lpwd

현재의 원격과 로컬 디렉토리 확인

ls, lls

원격과 로컬 내용 목록

chown, chgrp

퍼미션에 따라 파일과 디렉토리의 소유권/그룹

mkdir, rmdir

디렉토리 생성&제거

chmod

퍼미션 변경

 

▷ sftp 클라이언트로 lftp를 사용

$ lftp sftp://devanix@server1

Password: ********

lftp devanix@server1:~>

 

 

 

 

윈도우 파일 전송 툴 사용

♧ 많은 경우에, 윈도우 클라이언트를 사용하여 리눅스 서버에 파일을 받을 필요가 있다.

운영체제 클라이언트가 윈도우라면, 리눅스 서버에서 파일을 받기 위해 다음 중 하나의 오픈소스툴 사용.

 

WinSCP

SSH1과 SSH2 프로토콜을 사용하는

윈도우용 그래픽 scp, sftp와 FTP 클라이언트

FileZilla

윈도우에서 그래픽 클라이언트 FTP와 SFTP 서비스/서버기능

PSCP

TTY 제품군 일부의 커맨드라인 scp 클라이언트

PSFTP

TTY 제품군 일부의 커맨드라인 SFTP 클라이언트

 

 

Posted by devanix
2011. 8. 17. 11:45

wget을 사용하여 파일 다운로드

♧ 가끔 커맨드라인 명령어를 사용하여 원격 서버에서 파일 다운로드가 필요하다.

예를 들면, RPM 소프트웨어 패키지에 대한 링크를 찾을 수 있지만, 링크는 HTTP 바로 설치

RPM을 막기 위한 HTTP 리다이렉트를 몇 개 통과해야 한다.

혹은 매일 밤 로그 파일을 자동으로 다운로드하는 스크립트를 원할지 모른다.

 

wget 명령어는 웹 서버(HTTP 그리고 HTTPS)와 FTP 서버에서 파일을 다운받을 수 있다.

 

▶ wget 으로 이미지 파일 다운로드.

$ wget https://t1.daumcdn.net/cfile/tistory/133BD1594DFD44E33A

--2011-08-17 11:31:35-- https://t1.daumcdn.net/cfile/tistory/133BD1594DFD44E33A

Resolving cfile3.uf.tistory.com... 118.222.183.121

접속 cfile3.uf.tistory.com|118.222.183.121|:80... 접속됨.

HTTP request sent, awaiting response... 200 OK

Length: 21104 (21K) [image/png]

Saving to: `133BD1594DFD44E33AE5B6'

 

100%[==========================================>] 21,104 --.-K/s in 0.02s

 

2011-08-17 11:31:35 (1.31 MB/s) - `133BD1594DFD44E33AE5B6' saved [21104/21104]

 

▶ FTP 서버가 로그인과 패스워드가 필요할 때, wget 커맨드 사용 형식.

$ wget ftp://user:password@ftp.example.com/path/to/file

$ wget --user=user --password=password ftp://ftp.example.com/path/to/file

예를 들면 다음과 같다.

$ wget ftp://chris:mykuulpwd@ftp.linuxtoys.net/home/chris/image.jpg

$ wget --user=chris --password=mykuulpwd ftp.linuxtoys.net/home/chris/image.jpg

 

▶ wget으로 단일 웹페이지 다운.

$ wget http://www.wiley.com

웹페이지 다운로드

$ wget -p http://www.wiley.com

웹페이지와 요소들 다운

$ wget -pk http://www.wiley.com

페이지 다운로드와 로컬 파일 이름 사용

$ wget -pkK http://wiley.com

로컬 이름 변경, 원본 유지

$ wget -E http://www.aspexamples.com

다운로드 파일에 .html 추가

$ wget -m http://www.linuxtoys.net

타임스탬프를 추가하고 FTP 디렉토리 목록 유지

$ wget -mEkK http://www.linuxtoys.net

가장 쓸만한 복사본

$ wget -c http://example.com/DVD.iso

중단된 파일을 계속 이어서 다운로드

 
▶ 자주쓰는 예: wget -r -np -A.<확장자> -l <깊이지정> URL 

 

 

 

cURL을 사용하여 파일 전송

♧ URL의 애플리케이션(curl 명령어)을 위한 클라이언트는 웹 및 FTP 프로토콜을 사용하여 파일을

전송하기 위해 wget과 유사한 기능을 제공, 그러나 curl 명령어는 또한 SSH 프로토콜(SCP, SFTP),

LDAP, DICT, Telnet 그리고 File 등 다른 인기 있는 프로토콜을 사용하여 파일을 전송할 수 있다.

 

대용량 및 순환 다운로드(wget)를 지원하는 대신, curl은 싱글-샷 파일 전송을 위해 디자인되었다.

그러나 더 많은 프로토콜 및 일부 깔끔하고 고급스러운 기능을 지원.

 

▶대괄호'[]'를 사용하여 일치하는 문자 혹은 숫자 범위 지정하여 사용.

$ curl -O ftp://kernelorg.mirrors.tds.net/pub/linux/kernel/v1.0/patch[6-8].sign

▶중괄화'{}'를 사용하여 일치하는 문자 혹은 숫자를 지정하여 사용.

$ curl -OO ftp://kernelorg.mirrors.tds.net/pub/linux/kernel/v2.0/ChangeLog-2.6.{1,4}

▶서버의 유저이름과 패스워드, 파일다운로드(fileA)를 추가, 다운로드 완료시 파일 삭제

$ curl -O ftp://chris:MyPasswd@ftp.example.com/home/chris/fileA -Q '-DELE fileA'

▶FTP서버에 install.log 파일을 업로드(-T).

$ curl -T install.log ftp://chris:MyPasswd@ftp.example.com/tmp/ \

-Q "-RNFR install.log" -Q "-RNTO Xinstall.log

▶ftp.kernel.org/pub/ 디렉토리의 컨텐츠 목록을 curl로 알려줌.

$ curl ftp://ftp.kernel.org/pub// List /pub/ contents /pub/

 

 

Posted by devanix
2011. 8. 17. 11:01

♧ 텍스트 모드 웹 브라우저는 GUI를 사용할 수 없을 때 웹 서버가 동작중인지 혹은

웹 서버에서 정보를 얻어오는지를 체크하는데 빠른 방법을 제공한다.

한때 인기있었던 텍스트 기반 브라우저는 lynxlinks 브라우저로 대부분 리눅스 시스템에서

대체되었다가 나중에 elinks로 교체되었다.

 

elinks는 여러 색상을 지원하기 때문에, 테미널에서 사용하는 만큼 여러 색상을 지원하며,

텍스트를 링크와 머리글로 사용하기가 용이하다.

 

 

▶ elinks 명령어 실행

$ elinks

파일 이름 혹은 URL의 프롬프트

$ elinks devanix.tistory.com

요청한 파일 이름 혹은 URL 요청

 

elinks 사용을 위한 컨트롤 키

설명

Esc(or F9/F8)

토글 메뉴 켜고 닫음

아래쪽 화살표 (↓)

다음 페이지에 링크 또는 편집 필드로 이동

위쪽 화살표 (↑)

이전 페이지에 링크 또는 편집 필드로 이동

오른쪽 화살표 (→, or Enter)

강조된 링크 앞으로 이동. 강조 양식 필드에 텍스트 입력

왼쪽 화살표 (←)

다시 이전 페이지로 이동

/

검색 전달

?

반대로 검색

n

다음 찾기

N

이전 찾기

PageUp

한 페이지 스크롤

PageDown

한 페이지를 아래로 스크롤

g

URL로 이동

=

페이지 정보를 보여줌

Crtl+r

페이지 새로고침

a

현재 페이지를 즐겨찾기

t

새로운 브라우저 탭 열기

>

다음 탭으로 이동

<

이전 탭으로 이동

c

현재 탭을 닫음

d

현재 링크 다운로드

D

다운로드 보기

A

현재 링크 즐겨찾기에 추가

s

즐겨찾기 보기

v

현재 이미지 보기

h

전역 히스토리 매니저 보기

q (or Ctrl+c)

elinks 종료

 

/etc/elinks.conf에 elinks 전역 설정을 추가할 수 있다.

☞ 각 유저들의 설정은 각 유저의 $HOME/.elinks 디렉토리에 저장.

☞ 사용할 수 있는 설정을 보려면 man elinkskeys

 

Posted by devanix
2011. 8. 17. 04:04

♧ 네트워크 문제 해결은 일반적으로 하단 레이어에서 이루어진다.

 

호스트 연결 체크

♧ 링크와 듀플렉스가 불일치가 아니라는 것을 알 때, 다음 단계는 기본 게이트웨이로 ping을 한다.

/etc/network/interfaces 파일로 기본 게이트웨이(gw)를 구성하거나 시스템을 DHCP 같은 서비스로

기본 게이트웨이를 설정한다.

 

▶ 실제 라우팅 테이블의 기본 게이트웨이를 점검

$ ip route

192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.4 metric 1

169.254.0.0/16 dev eth0 scope link metric 1000

default via 192.168.0.1 dev eth0 proto static

☞ 위 예에서 기본 라우트를 위한 게이트웨이는 192.168.0.1 이다.

 

▶ ping 명령을 사용하여 게이트웨이의 IP접속을 확인

$ ping 192.168.0.1

PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.

64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=2.01 ms

64 bytes from 192.168.0.1: icmp_req=2 ttl=64 time=0.514 ms

64 bytes from 192.168.0.1: icmp_req=3 ttl=64 time=0.521 ms

64 bytes from 192.168.0.1: icmp_req=4 ttl=64 time=0.518 ms

 

--- 192.168.0.1 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3001ms

rtt min/avg/max/mdev = 0.514/0.890/2.010/0.647 ms

 

◎ ping 옵션

$ ping -a 192.168.0.1

ping 프로그레스에 audible ping 추가

$ ping -c 4 192.168.0.1

4번 ping 하고 종료

$ ping -q -c 5 192.168.0.1

ping 요약을 보여줌

$ sudo ping -f 192.168.0.1

ping의 흐름을 전송(root)

$ ping -i 3 192.168.0.1

3초 간격으로 패킷 전송

$ sudo ping -I eth0 192.168.0.1

eth0 설정(여러 가지 NICs를 사용하는 경우)

$ sudo ping -s 1500 192.168.0.1

1500 byte로 패킷 사이즈 설정

☞ 기본적으로 ping은 작은 패킷(56 byte)을 전송.

 

 

 

 

Address Resolution Protocol(ARP) 체크

♧ 게이트웨이에 ping을 할 수 없다면, 이더넷 MAC 레이어를 의심할 것이다.

Address Resolution Protocol(ARP)은 MAC 레이어 정보를 발견하는데 사용할 수 있다.

 

▶ 호스트 네임으로 ARP 캐시의 컴퓨터 목록 arp를 출력.

$ arp -v

이름 항목의 ARP 캐시 목록

$ arp -vn

IP 어드레스 항목의 ARP 캐시 목록

$ sudo arp -d 192.168.0.4

ARP 캐시에서 192.168.0.4 주소 삭제

$ sudo arp -s 192.168.0.4 00:0B:6A:02:EC:95

ARP에 IP와 MAC 어드레스 추가

 

arping명령을 사용하여 사용중인 IP를 보려고 서브넷 쿼리.

$ arping 192.168.0.50

사용중인 192.168.0.50을 보려고 서브넷 쿼리

$ arping -f 192.168.0.50

192.168.0.50 쿼리하고 첫 번째 응답에 멈춤

$ arping -c 2 192.168.0.50

해당주소를 쿼리하고 2회에 멈춤

 

 

 

 

호스트 경로 추적

♧ 게이트웨이 ping할 수 있고 심지어 네트워크 밖에 있는 컴퓨터에도 도달하는지 확인 후,

여전히 특정 호스트 혹은 네트워크에 도달하는데 문제를 가지고 있다면, 병목 혹은 실패지점을 발견하려고 traceroute를 사용할 수 있다.

 

$ traceroute boost.turbosphere.com

traceroute to boost.turbosphere.com (66.113.99.70), 30 hops max, 60 byte packets

6 203.248.238.37 (203.248.238.37) 4.497 ms 1.159 ms 3.815 ms

7 203.233.117.153 (203.233.117.153) 3.823 ms 3.841 ms 210.120.61.93 …

8 61.42.202.93 (61.42.202.93) 4.281 ms 4.353 ms 4.264 ms

9 210.120.105.145 (210.120.105.145) 3.770 ms 3.786 ms 3.804 ms

 

추적 끝에 애스터리스크(*) 라인은 그 대상의 트래픽을 차단하여 방화벽으로 인해 발생한다.

그러나 목적지 전에 몇 개의 애스터리스크(*)를 본다면, 무거운 혼잡, 장비 실패와 병목지점을 나타낼 수 있다.

 

기본적으로, traceroute는 ICMP보다 더 현실적인 성능 UDP패킷을 사용한다.

그 때문에 일부 인터넷 홉은 ICMP트래픽에 낮은 우선순위를 준다.

ICMP패킷을 사용하여 추적하는 경우가 여전히 같다면, 다음과 같이 명령어를 시도.

$ traceroute -I boost.turbosphere.com

ICMP 패킷을 사용하여 경로 추적

$ traceroute -p 25 boost.turbosphere.com

25번 포트 접속하여 추적

$ traceroute -n boost.turbosphere.com

name resolution을 해제하여 추적

☞ 대안으로 tracepath 명령으로 UDP를 추적하는데 사용 : $ tracepath boost.turbosphere.com

 

커널 라우팅 테이블을 보고 조작하려면, route 명령어를 사용.

 

▶ route 명령어를 사용하여 로컬 라우팅 테이블 표시

$ route

로컬 라우팅 테이블 정보 표시

Kernel IP routing table

Destination     Gateway         Genmask            Flags   Metric Ref    Use Iface

192.168.0.0     *                       255.255.255.0   U          1          0        0 eth0

link-local          *                       255.255.0.0        U          1000   0        0 eth0

default             192.168.0.1     0.0.0.0                UG        0          0        0 eth0

$ route -n

DNS 검색 없이 라우팅 테이블 표시

 

▷ gw 옵션을 사용하여 기본 게이트웨이를 추가

$ sudo route add default gw 192.168.0.1

기본 게이트웨이 192.168.0.1 추가

▷ 새로운 라우트 추가.

$ sudo route add -net 192.168.0.0 netmask 255.2855.255.0 eth0

$ sudo route add -net 192.168.0.0 netmask 255.2855.255.0 gw 10.0.0.100

▷ 라우트 삭제.

$ sudo route del -net 192.168.0.0 netmask 255.255.255.0

 

새로운 ip 명령어를 사용하면, route 명령어에서 보여줬던 것처럼 똑같이 할 수 있다.

▶ 같은 기본 라우팅 정보를 보여주는 세가지 다른 방법.

$ ip route show

기본 라우팅 정보 표시

192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.4 metric 1

169.254.0.0/16 dev eth0 scope link metric 1000

default via 192.168.0.1 dev eth0 proto static

$ ip route

기본 라우팅 표시 (예 #2)

$ ip r

기본 라우팅 표시 (예 #3)

▶ ip로 라우트를 삭제하고 추가

$ sudo ip r add 192.168.0.0/24 via 10.0.0.100 dev eth0

인터페이스 라우트 추가

$ sudo ip r add 192.168.0.0/24 via 10.0.0.100

인터페이스 없이 라우트 추가

$ sudo ip r del 192.168.0.0/24

라우트 삭제

 

영구적인 새로운 라우트를 만들려면, /etc/network/interfaces 파일을 편집하고 그 파일에 새로운

라우트 정보를 배치하라. 위의 ip 명령어는 라우트를 추가하고 add, /etc/network/interfaces

다음과 같은 라인을 추가.

iface eth0 inet static

address 192.168.0.0

netmask 255.255.255.0

gateway 10.0.0.100

 

 

 

 

netstat 연결 및 통계 표시

♧ 앞의 툴은 네트워크 레이어(레이어 3)에서 대부분 네트워크 문제가 커버되었다.

패킷에 관한 정보를 표시하기 위해 전송-레이어 프로토콜과 ICMP 사이로 전송하려면,

netstat 명령어 사용.

$ netstat -s | less

활성화된 TCP, ICMP, UDP 요약을 보여줌

$ sudo netstat -tanp

활성화된 TCP 연결을 보여줌

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 786/mysqld

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 374/sshd

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1097/cupsd

$ sudo netstat -uanp

활성화된 UDP 연결 보기

☞ netstat 데몬 범위에서 TCP 포트까지 출력을 좁히려면, listen 단어 검색

$ sudo netstat -tanp | grep -i listen

 

 

 

 

기타 네트워크 툴 (tcpdump, nmap)

♧ 시스템에서 송신, 수신 패킷의 헤더 정보를 보길 원한다면, tcpdump를 사용.

tcpdump 명령어는 haystack의 패킷 안에 needle을 찾고 필터링을 선회하는 고급 기능이 많이 있다.

원격시스템에서 tcpdump를 실행한다면, 화면 클라이언트와 원격시스템 사이의

모든 ssh 트래픽이 넘쳐날 것이다.

 

tcpdump 필터링이 어떻게 작동 되는지 많이 배울 필요없이 시작

$ sudo tcpdump | grep -v ssh

ssh와 연관된 것을 제외하고 패킷을 찾음

 

▶ nmap로 기본적인 호스트를 스캔

$ sudo nmap 10.0.0.1

컴퓨터의 10.0.0.1 포트 스캔

$ sudo nmap -vv 10.0.0.1

nmap 출력에서 최대 다변을 보여줌

$ sudo nmap -vv -sP 10.0.0.0/24

전체 너트워크의 호스트 스캔

$ sudo nmap -vv -P0 -O -p 100-200 10.0.0.1

ping 없이, OS fingerpint, 100-200포트 ping

 

 

Posted by devanix
2011. 8. 13. 19:37

◎ 컴퓨터의 네트워크 하드가 바로 올라오지 않고 인터넷에 접속이 되지 않았을 때 문제 해결 단계:

∙ 네트워크 인터페이스 카드(NIC)가 제대로 설치되었는지,

케이블이 네트워크(ISP's CPE, 스위치, 기타 등)에 연결 되었는지 확인.

∙ 케이블 연결 후, 스피드 혹은 듀플렉스 링크 확인.

∙ 다른 방법이 모두 실패하면, 잘 알려진 하드에ㅜ어 오류를 분리하여 NIC 교체.

 

♧ 리눅스 링크 체크, 스피드와 듀플렉스를 설정하려면, 두 가지 명령어를 사용한다.

새로운 ethtool(ethtool 패키지), 오래된 mii-tool(net-tools 패키지)

 

▶ ethtool 명령을 이용하여 NIC 설정 정보 표시.

$ ethtool -h | less

ethtool 명령어 옵션 출력

$ sudo ethtool eth0

eth0의 NIC 설정 보기

$ sudo ethtool -i eth0

특정 NIC 정보 드라이버 표시

$ sudo ethtool -S eth0

eth0의 NIC에 대한 상세한 통계 표시

 

▶ ethtool 명령을 이용하여 NIC 설정 변경.

/* 100 Mpbs의 NIC의 자동 negotiation과 hard-set을 해제하고 전이중(full duplext) */

$ sudo ethtool -s eth0 speed 100 duplext full autoneg off

/* 100 Mpbs의 NIC의 자동 negotiation과 hard-set을 해제하고 반이중(half duplext) */

$ sudo ethtool -s eth0 speed 100 duplext half autoneg off

 

재부팅 혹은 네트워크를 재시작할 때도 설정

♧ NIC를 설정하여 만든 변경은 현재 세션에만 적용되며 재부팅 하면 설정을 읽어버림.

 

eth_options 같은 새로운 스크립트 이름을 선택하고, /etc/init.d 디렉토리에 스크립트 작성.

$ sudo vi /etc/init.d/eth_options

② 새로운 스크립트에 다음 텍스트 입력.

#! /bin/sh

ETHTOOL="/usr/sbin/ethtool"

ETHTOOL_OPTS="speed 10 duplex half autoneg off"

DEV="eth0"

case "$1" in

start)

echo -n "Setting $DEV options to $ETHTOOL_OPTS…";

$ETHTOOL -s $DEV $ETHTOOL_OPTS;

echo "done.";;

stop)

;;

esac

exit 0

③ 원하는 특정 설정은 ETHTOOL_OPTS 변수에 배치 예:

ETHTOOL_OPTS="speed 10 duplex half autoneg off"

④ 실행 파일 스크립트 퍼미션 설정.

$ sudo chmod +x /etc/init.d/eth_options

⑤ 다른 런 레벨 아래에 새로운 스크립트 실행하여 심볼릭 링크(symbolc link)를 설정.

$ sudo update-rc.d eth_options defaults

⑥ 실행

$ sudo /etc/init.d/eth_options start

 

 

▶ mii-tool 명령을 이용하여 NIC 설정 정보 출력, 설정

$ mii-tool -v

오래된 NIC 설정의 정보 출력

$ sudo mii-tool -F 10baseT-FD eth0

10baseT-FD의 스피드/듀플렉스 강제로 설정

$ sudo mii-tool -r eth0

restarting autonegotiation…

오래된 NIC의 자동 negotiation을 재활성화

mii-toolethtool 같이 설정을 저장하는 기능을 제공하지 않는다.

그래서 재부팅 후에 실행해야 한다. /etc/rc.local 끝에 추가할 수 있다.

 

▶ netstat 명령으로 네트워크 인터페이스 통계

$ netstat -i

eth0의 네트워크 인터페이스 통계를 가지고옴

$ netstat -ic

매초마다 네트워크 통계 리프레시

$ watch netstat -i

네트워크 통계 리프레시(화면 중심)

 

 

Posted by devanix