HTTP Proxy Server 구축하기

NAS에 HTTP 프록시 서버 구축하기입니다.

 

사용 모델: Synology DS209+II

 

1. 부트스트랩 설치

이부분은 나스 사용자에게만 해당되는 부분입니다. 일반적으로 나스의 경우 제조사에서 필요한 프로그램들만 설치되어 있기 때문에 사용자가 필요로 하는 추가 프로그램을 설치하기 위해서 부트 스트랩이 필요합니다.

부트스트랩은 사용하는 모델에 따라 방법이 달라집니다.

이 팁에서는 설치 과정은 생략합니다. 각자 알아서 설치하시기 바랍니다.

 

2.  tinyproxy 설치

텔넷 또는 SSH 클라이언트로 서버에 접속(root 사용자로 로그인, 암호는 admin과 동일하게)하여 아래 명령을 내립니다.

[dropshadowbox align=”none” effect=”lifted-both” width=”650px” height=”” background_color=”#000000″ border_width=”1″ border_color=”#dddddd” rounded_corners=”false” inside_shadow=”false” outside_shadow=”false” ]

fs> ipkg update       (생략 가능)

fs> ipkg upgrade    (생략 가능)

fs> ipkg tinyproxy

[/dropshadowbox]

 

3. tinyproxy 설정

  • tinyproxy가 사용할 포트, 로그 기록, 접속 허용 클라이언트 아이피 등 설정(/opt/etc/tinyproxy.conf)

[dropshadowbox align=”none” effect=”lifted-both” width=”650px” height=”” background_color=”#000000″ border_width=”1″ border_color=”#dddddd” rounded_corners=”false” inside_shadow=”false” outside_shadow=”false” ]

# 기본 포트는 8888입니다. 기본 설정으로 사용할 경우 수정하지 않아도 됩니다.

Port 8888

#로그 파일의 위치는 기본으로 주석처리되어 있습니다. 위치를 변경하고자할 경우 #을 삭제하여 활성화합니다. 활성화하기 않아도 기본 위치에 로그는 기록됩니다.

#LogFile “/opt/var/log/tinyproxy/tinyproxy.log”

# 로그 레벨을 설정합니다.  Critical, Error, Warning, Notice, Connect, Info 중 하나

LogLevel Info

# 접속을 허용할 클라이언트의 아이피 주소 설정, 기본으로 로컬에서만 접속 가능하게 127.0.0.1만 있으니, SSH 터널링이 아닌 원격지에서 직접 연결하고자할 경우 해당 아이피 또는 범위를 등록합니다.

Allow 127.0.0.1

Allow 123.456.789.11
Allow 58.151.123.1/24

[/dropshadowbox]

 

  • 로그 및 프로세스 아이디가 기록될 폴더 생성

[dropshadowbox align=”none” effect=”lifted-both” width=”650px” height=”” background_color=”#000000″ border_width=”1″ border_color=”#dddddd” rounded_corners=”false” inside_shadow=”false” outside_shadow=”false” ]

fs> mkdir /opt/var/log/tinyproxy
fs> chmod 777 /opt/var/log/tinyproxy/
fs> mkdir /opt/var/run/tinyproxy
fs> chmod 777 /opt/var/run/tinyproxy/

[/dropshadowbox]

 

4. tinyproxy 실행

  •   간단히 아래 명령만 내려주면 실행됩니다.

[dropshadowbox align=”none” effect=”lifted-both” width=”650px” height=”” background_color=”#000000″ border_width=”1″ border_color=”#dddddd” rounded_corners=”false” inside_shadow=”false” outside_shadow=”false” ]

fs> tinyproxy

[/dropshadowbox]

 

  • 나스 시작 시 자동 실행되게 하기

아래 명령을 그대로 내립니다.

[dropshadowbox align=”none” effect=”lifted-both” width=”650px” height=”” background_color=”#000000″ border_width=”1″ border_color=”#dddddd” rounded_corners=”false” inside_shadow=”false” outside_shadow=”false” ]

fs> cd /opt/etc/init.d

fs> wget -O S88tinyproxy http://nethard.fft.kr/bloc/common/tinyproxy/?download=S88tinyproxy

fs> chmod 755 S88tinyproxy

[/dropshadowbox]

 

5. 공유기 포트포워딩 설정

3번째 단계에서 설정한 tinyproxy의 포트(기본 8888)를 외부에서 접속할 수 있게 포워딩해줍니다.

특정 TCP 포트를 나스의 tinyproxy 포트로 포워딩하면 됩니다.

SSH 터널링 등으로 접속하고자할 경우에는 이 과정은 생략 가능합니다.

포트포워딩
포트포워딩

 

6. 클라이언트 프록시 설정

HTTP 프록시를 사용하는 PC 버전의 카카오톡으로 테스트 해보겠습니다.

아래와 같이 설정 후 로그아웃 후 재시작합니다. 그냥 종료하고 재시작하면 안되고, 반드시 로그아웃해야 적용됩니다.

카카오톡 프록시 설정

 

아래는 프록시 사용하기 전의 통신 패킷 정보입니다. 원격의 아이피 주소가 카카오톡 서버의 아이피 주소로 표시됩니다.

프록시 적용 전

 

아래는 프록시 서버 적용 후의 통신 패킷 정보입니다. 제 서버의 아이피로 나옵니다. 즉, 제대로 적용되었다는 것입니다.

프록시 적용 후

 

아래는 SSH 터널링을 이용한 프록시 서버 적용 후의 통신 패킷 정보입니다. 127.0.0.1로 표시됩니다.

프록시 적용 후(SSH 터널링)

 

MD5 CRC 체크섬

두 파일이 동일한지 비교할 때…

윈도우에서 Total Command를 사용한다면 파일 선택 후 메뉴에서 [파일 – CRC 체크섬 생성(.., MD5, …)]
리눅스에서는 아래와 같이 md5deep 이용

# ipkg install md5deep
# md5deep gcc343_glibc234_853x.tar.gz
fdad950b77a56fe4a846d444ce85e238  gcc343_glibc234_853x.tar.gz

Apache, Subversion 연동 시 에러 해결

아래와 같은 에러가 발생할 경우
Could not open the root of the repository  [500, #22]
Can’t set position pointer in file ‘/var/lib/svn/xxxx/db/revs/18’: Invalid argument  [500, #22]

아파치에서 사용하는 libapr와 mod_dav_svn.so에서 사용하는 libapr의 버전이 달라서 발생하는 문제였음

ldd로 확인하여 동일하면 문제 없음

# lldd ./bin/httpd
        libm.so.6 => /lib/i686/libm.so.6 (0x4001d000)
        libaprutil-1.so.0 => /usr/local/apache/lib/libaprutil-1.so.0 (0x4003f000)
        libexpat.so.0 => /lib/libexpat.so.0 (0x4005b000)
        libapr-1.so.0 => /usr/local/apache/lib/libapr-1.so.0 (0x40086000)
        libuuid.so.1 => /lib/libuuid.so.1 (0x400ab000)
        libpthread.so.0 => /lib/i686/libpthread.so.0 (0x400af000)
        librt.so.1 => /lib/i686/librt.so.1 (0x400df000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x400f0000)
        libdl.so.2 => /lib/libdl.so.2 (0x4011d000)
        libc.so.6 => /lib/i686/libc.so.6 (0x40120000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

# ldd mod_dav_svn.so
        libsvn_repos-1.so.0 => /usr/local/lib/libsvn_repos-1.so.0 (0x4001d000)
        libsvn_fs-1.so.0 => /usr/local/lib/libsvn_fs-1.so.0 (0x4003a000)
        libsvn_delta-1.so.0 => /usr/local/lib/libsvn_delta-1.so.0 (0x40040000)
        libsvn_subr-1.so.0 => /usr/local/lib/libsvn_subr-1.so.0 (0x40049000)
        libz.so.1 => /usr/lib/libz.so.1 (0x4007c000)
        libc.so.6 => /lib/i686/libc.so.6 (0x4008b000)
        libaprutil-1.so.0 => /usr/local/apache/lib/libaprutil-1.so.0 (0x401b4000)
        libexpat.so.0 => /lib/libexpat.so.0 (0x401d0000)
        libapr-1.so.0 => /usr/local/apache/lib/libapr-1.so.0 (0x401fb000)
        libuuid.so.1 => /lib/libuuid.so.1 (0x40220000)
        libpthread.so.0 => /lib/i686/libpthread.so.0 (0x40224000)
        librt.so.1 => /lib/i686/librt.so.1 (0x40253000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x40265000)
        libdl.so.2 => /lib/libdl.so.2 (0x40292000)
        libsvn_fs_fs-1.so.0 => /usr/local/lib/libsvn_fs_fs-1.so.0 (0x40295000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

Installing VMware server on openSUSE 11.3

Installing VMware server on openSUSE 11.3

아래와 같은 에러가 발생해서 설치가 안될 경우

None of the pre-built vmmon modules for VMware Server is suitable for your
running kernel.  Do you want this program to try to build the vmmon module for
your system (you need to have a C compiler installed on your system)? [yes]

Using compiler “/usr/bin/gcc”. Use environment variable CC to override.

Your kernel was built with “gcc” version “4.5.0”, while you are trying to use
“/usr/bin/gcc” version “4.5”. This configuration is not recommended and VMware
Server may crash if you’ll continue. Please try to use exactly same compiler as
one used for building your kernel. Do you want to go with compiler
“/usr/bin/gcc” version “4.5” anyway? [no] yes

What is the location of the directory of C header files that match your running
kernel? [/usr/src/linux/include]

The path “/usr/src/linux/include” is a kernel header file directory, but it
does not contain the file “linux/version.h” as expected.  This can happen if
the kernel has never been built, or if you have invoked the “make mrproper”
command in your kernel directory.  In any case, you may want to rebuild your
kernel.

아래 내용대로 하면 설치됨
http://en.opensuse.org/SDB:Installing_VMware_server_or_workstation

참고
http://software.opensuse.org/search?q=vmware-fix&baseproject=ALL&lang=en&exclude_debug=true

tomcat 재시작 쉘스크립트

tomcat pid를 찾아서 강제 종료시키고, 다시 시작시키는 쉘 스크립트입니다.

간혹 shutdown.sh로 종료가 안되는 경우가 있는데.. 이럴 경우에 사용하면 편리합니다.

아래 코드([출처] 톰켓 PID찾아서 킬하고 재시작 하는 쉘스크립트…|작성자 둘기)에서 색칠한 부분은 시스템에 따라 적절히 수정해서 사용해야 됩니다.

#!/bin/sh

if [ -z “ps -eaf | grep java|grep /usr/local/tomcat/bin” ]; then
       echo “Tomcat  was not started.”
else
       ps -eaf | grep java | grep /usr/local/tomcat/bin | awk ‘{print $2}’ |
       while read PID
               do
               echo “Killing $PID …”
               kill -9 $PID
               echo
               echo “Tomcat  is being shutdowned.”
               done
        /usr/local/tomcat/bin/startup.sh
fi

참고로 awk는.. 결과에서 원하는 내용을 뽑아내는 툴…

[root@Benz] /tmp #> ps -aef | grep java | grep tomcat
    root 13098     1  0 14:16:15 pts/3    0:32 /usr/jdk/jdk1.6.0_10/bin/java -Djava.endorsed.dirs=/usr/local/tomcat/common/end

[root@Benz] /tmp #> ps -aef | grep java | grep tomcat | awk ‘{print $2}’
13098

awk ‘{print $0}’-> root 13098     1  0 14:16:15 pts/3    0:32 /usr/jdk/jdk1.6.0_10/bin/java -Djava.endorsed.dirs=/usr/local/tomcat/common/end
awk ‘{print $1}’ ->root

setuid, setgid

/bin/passwd 파일 권한을 보면 지금까지 보지 못했던 권한이 명시 되어 있다.

– r – s r – s r – x

파일 소유주 자리에 명시된 s 기호를 setuid 라 부르고, 파일의 그룹 소유주 자리에 명시된 s 기호를 setgid 라 부른다.

s 기호는 setuid  권한과 실행 권한이 동시에 설정되어 있음을 의미하며, S 기호는
setuid 권한은 있지만  실행 권한이 없음을 의미한다. s 기호 대신에 S 기호가 명시된 경우는 실행 권한이 없으므로 실행이
불가능하나, 추후에 실행 권한을 추가하면 S 기호가 s 기호로 바뀌게 되면 실행도 가능하다.

seuid 추가 방법은 8진수로 4000을 더한 값

/chmod 555  /bin/cat

-r-xr-xr-x

/chmod 4555 /bin/cat

-r-sr-xr-x

setgid 추가 방법은 8진수로 2000을 더한 값

/chmod 555  /bin/cat

-r-xr-xr-x

/chmod 2555 /bin/cat

-r-xr-sr-x

 


스티키 비트 추가 방법은 디렉토리에 8진수로 1000을 더한 값

 

/chmod 1777 stickydir

drwxrwxrwt

 

* 디렉토리에 스티키 비트 권한이 명시된 경우에는 어떠한 사용자라도 파일 또는 하위 디렉토리를
생성할수 있으나, 파일 이나 디렉토리를 제거할 수 있는 사용자는 오로지 root 사용자, 파일 or 디렉토리의 소유주, 파일
or 디렉토리에 변경 권한이 있는 사용자만 가능함.

[출처] setuid, setgid |작성자 노력남

쉘스크립트 – 암호 자동 입력

쉘스크립트 – 암호 자동 입력하기

1.

출처: http://kldp.org/node/46806

 

2.

출처: http://kldp.org/node/31829

윈도우에서 rsync 간편하게 사용하기

몇 달 전에 올린 “윈도우에서 scp 간편하게 사용하기“와 비슷한 것입니다.
이 번에는 rsync를 이용하는 것입니다.
scp와 비교했을 때 장점은 한글 파일명이 그대로 유지된다는 것과 rsync의 기능을 이용한다는 것입니다.
전 한글 처리 문제 때문에 이 방법으로 사용합니다. scp에서 설명했던 서버로 전송 후 한글 파일명으로 변환하는 작업이 필요없습니다.

먼저 이 팁의 결과로 사용하게 될 방법은 아래와 같습니다.
사용자 삽입 이미지서버로 전송할 파일이나 디렉토리를 선택하고 마우스 오른쪽 버튼을 눌러 클릭만 해주시면 미리 지정된 서버의
특정 위치로 전송됩니다. 디렉토리 선택 시 그 안에 있는 모든 파일이 전송됩니다.
사용자 삽입 이미지
  다음은 이 팁에서 필요한 파일입니다.

1127416995.reg          – 쉘 컨텍스트 메뉴를 만드는 레지스트리 파일

CygwinPath.exe      – 탐색기에서 선택된 파일의 경로를 Cygwin 형식의 경로로 변환하고, rsync를 실행하는 프로그램

1255671199.dll        – 한글 파일명 지원 dll 파일(cwRsync 4.0.4부터는 필요없습니다. ermaker 님 제보. 2010-04-05)

1. rsync 설치

먼저 윈도우에서 rsync를 사용하기 위해 아래 링크에 있는 cwRsync를 설치합니다.
http://cdnetworks-kr-1.dl.sourceforge.net/project/sereds/cwRsync/4.0.4/cwRsync_4.0.4_Installer.zip

한글 파일명을 지원하기 위하여 첨부된 cygwin1.dll을 cwRsync가 설치된 bin 디렉토리(c:\Program Files\cwRsync\bin\)에 덮어쓰기합니다.(cwRsync 4.0.4부터는 필요없습니다.
2010-04-05)

파일 전송시 암호를 물어보는 것을 없애기 위해서는

ssh-keygen.exe -t rsa 를 실행한 후 아래와 같은 메시지가 보이면..

Enter file in which to save the key (/home/root/.ssh/id_rsa):

c:\Documents
and Settings\Administrator\.ssh\id_rsa

를 입력(접속한 윈도우 계정에 적절히 수정)하고, 엔터키를 칩니다.

그 이후 물어보는 passphrase는 그냥 엔터키를 두 번쳐서 넘어갑니다.

c:\Documents
and Settings\Administrator\.ssh\에(접속한 윈도우 계정에 따라 경로는 달라질 수 있습니다) 생성된
id_rsa.pub의 내용을 서버의 authorized_keys에 추가합니다.

위 과정까지 되면 cwRsync가 설치된 디렉토리에 가서 명령 프롬프트에서 ssh root@서버IP 명령으로 접속되는지 확인해보세요.. 접속되어야 됩니다.

2. CygwinPath 설치

첨부된 파일 중 CygwinPath.exe를 받아서 특정 위치에 복사합니다.

이 프로그램은 쉘컨텍스트 메뉴를 통해 클릭된 파일 또는 디렉토리의 경로를 Cygwin 형식의 경로로 변환하고, 넘겨받은 첫 번째 파라미터 정보를 이용하여 프로그램을 실행하는 역할을 합니다.

즉, c:\tmp\abc.zip과 같은 형식을 /c/tmp/abc.zip 형식으로 변환하고, rsync.exe를 실행하는 기능을 합니다.


3. 쉘 컨텍스트 메뉴 추가

첨부된 파일 중 rsync.reg를 받은 후 확장자가 .reg가 아니면 .reg로 수정한 후 텍스트 편집기에서 열어서 CygwinPath.exe의 위치, 설치한 rsync.exe의 위치, 전송할 서버의 정보, 컨텍스트 메뉴명을 수정하고 저장한 후 더블클릭하여 레지스트리에 추가하면 됩니다.

아래에 보이는 것처럼 경로 설정 시 주의바랍니다. \\ 두 개입니다.

쉘 컨텍스트 메뉴 레지스트리 (Language : text)
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\Shell\FFT.kr(/volume1/tmp/)에 올리기(rsync)\Command]
@=”X:\\Utility\\network\\CygwinPath.exe \”C:\\Progra~1\\cwRsync\\bin\\rsync.exe -avzP –chmod=ug=rwx –delete -e c:\\Progra~1\\cwRsync\\bin\\ssh.exe /cygdrive/[%1] root@fft.kr:/volume1/tmp\””

[HKEY_CLASSES_ROOT\Directory\shell\FFTkr_rsync]
@=”FFT.kr(/volume1/tmp/)에 올리기(rsync)

[HKEY_CLASSES_ROOT\Directory\shell\FFTkr_rsync\command]
@=”X:\\Utility\\network\\CygwinPath.exe \”C:\\Progra~1\\cwRsync\\bin\\rsync.exe -avzP –chmod=ug=rwx –delete -e c:\\Progra~1\\cwRsync\\bin\\ssh.exe /cygdrive/[%1] root@fft.kr:/volume1/tmp/\””

위 설정에서 rsync의 옵션을 적절히 수정하여 사용해도 됩니다.

4. 테스트

탐색기에서 파일 또는 디렉토리를 선택하고, 마우스 오른쪽 버튼을 클릭하여 파일을 전송합니다.
서버로 접속하여 파일이 전송되었는지 확인합니다.
파일의 그룹 소유자가 401처럼 숫자로 나올 경우 /etc/group에 해당 그룹ID(401)를 가진 그룹을 추가하면 됩니다.