아파치의 Transparent Proxy 구현에 대해..

vlzkcbcb의 이미지

아파치의 http-2.2.11 를 프록시서버로 사용하고있습니다.

웹서버의 OS는 윈도우,리눅스 딱히 정해지진 않았습니다.

[접속자]<=========>[아파치 프록시서버]<========>[웹서버]

이와 같은 구성이 됩니다.

실질적으로는

[접속자]<====================================>[웹서버]

이런 통신을 하게되구요.

문제는 웹서버에서 로그를 볼때

접속자 IP가 보이는게 아니라 아파치프록시서버 IP가 보인다는 것입니다.

X-Forwarded-For 이것은 웹서버가 아파치를 사용할 경우는 괜찮지만 다른 기반의 웹서버면 안되는것 같구요..

아파치 자체에서 IP 헤더를 자기것이 아닌 실제 접속자의 IP로 넘겨주도록..

Transparent Proxy 모드로 구현하는 방법에대해 아시면 알려주시면 감사드리겠습니다

glay의 이미지

저도 squid 를 쓰다가 그거 땜시렁 살짝쿵 고민을 해서 ;;

내부적으로는 프로그램단에서 수정하여 사용하고 있었습니다.

그러다 다콘형이 알려준 mod_rpaf 덕분에 그럴 필요가 없어졌지요.

mod_rpaf 를 한번 사용해보십시오. apache 모듈입니다.

--------------- 절취선 ------------------------
하늘은 스스로 삽질하는 자를 삽으로 팬다.

http://glay.pe.kr


--------------- 절취선 ------------------------
하늘은 스스로 삽질하는 자를 삽으로 팬다.

http://glay.pe.kr

vlzkcbcb의 이미지

해결이 안되는군요.

구글링하여 찾은대로 옵션을 적용해보았습니다.

현재 아파치 프록시는 브릿지 모드로 랜카드 2개가 동작중입니다. 또한 커널컴파일에서 tproxy 관련 모듈 전부 올렸구요.

br0 : 10.10.10.2
eth0, eth1 브릿지모드로 묶여있음.

아래와같은 옵션을 httpd.conf 에 주고했을때

LoadModule rpaf_module libexec/apache2/mod_rpaf-2.0.so

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 10.10.10.2 10.10.10.3 (10.10.10.2 는 아파치 프록시구요 10.10.10.3 은 웹서버입니다.)
RPAFheader X-Forwarded-For

실제 접속한 PC의 IP가 10.10.10.1 이라고 가정시에..

웹서버에서 접속 로그나 트래픽 모니터링 툴로 확인시..

10.10.10.2 IP가 웹서버로 접속한것처럼 보입니다..

10.10.10.1 이 나오게끔 프록시서버에서 헤더쪽을 재수정하여 보내주거나 해야하는데요..ㅠㅠ

preisner의 이미지

Transparent Cache 용으로 나온 Vanish 의 경우
정확하게는 기억이 지금 나지는 않습니다만,
X-Forwarded-For 등과 같이 해더를 추가 해서 실제 접속한 IP 를 전달해 주는 기능이 있습니다.
실 웹서버에서는 로깅 항목을 수정해서 위의 실제 접속 pc 의 ip 를 구분 해 주도록 했구요.
Apache야 당연히 되고 IIS 같은 경우에도 로깅 항목을 수정 해서 PC 의 IP 를 로깅 할 수 있습니다.

상용 Cache 서버 사용 할때도 이 문제가 해결 되지 않아 고생 했던 기억이 있습니다.
(이름은 지금 기억이 나지 않네요.)

이 방법 말고는 별로 다른 방안도 있겠지만, 별로 맘에 안들었습니다. 저의 경우에는.
아니면 Cache 에 남은 로그로 분석 하는 방법도 있겠지요.

도움이 됬는지 모르겠네요.
그냥 참고만.

linuxpark의 이미지

vlzkcbcb 님 어떻게 해결하셨나요?
저도 지금 같은 문제로 고민 중인데... 음 tproxy 적용하여 아파치를 수정할까 생각 중입니다만
vlzkcbcb님은 어떻게 문제 처리를 했는지 궁급하네요

monovision의 이미지

varnish 에서는 헤더를 추가 및 삭제 하는 기능이 있으며 nginx 역시 해당 기능이 있습니다.

X-Forwarded-For 헤더에 대한 로그는 거의 대부분의 웹서버(apache, nginx, lighttpd, iis 등) 에서 모두 로깅을 지원을 합니다.
만약 진짜 안되는 웹서버가 있다면 웹서버 앞단에 nginx 등과 같은 성능 좋은 웹서버를 하나 더 두는 방법도 있습니다. ^^;;

굳이 프록시 서버에서 패킷 변조를 할 필요까지는 없을 것 같구요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.