transparent proxy 만들기

spacelee의 이미지

linux에서 transparent proxy를 만들어 보려고 합니다.
구글에서는 squid 세팅하는 정도밖에 못찾겠네요.

어찌 시작해야 할지 도와주세요.~^^;;

happyjun의 이미지

설치인지 프로그래밍인지 적어주시고, 어떤 프로토콜에 대한 proxy인지를 알려주셔야 합니다.

----------------------------------------
http://moim.at
http://mkhq.co.kr

spacelee의 이미지

아 프로그래밍 하려고 하구요.

tcp 커넥션 상에서 양쪽에 각각 커넥션은 따로 맺지만
ip는 spoofing 하는 것처럼 각각의 ip를 가지고 ,
양 client 에게는 transparent하게 보이려고 합니다.
squid는 http를 그런 식으로 처리하는지 모르겠네요

권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -

ssehoony의 이미지

squid 가 http 프로토콜에 대해 transparent proxy 기능을 제공하므로 해당 소스를 분석하는 것도 하나의 방법이 될 듯 하군요.

방화벽을 만드는 것과 비슷한 수준의 문제일 듯 하군요.
커널에서 ip 통신을 어떻게 제어, 관리하는 방법과 http 프로토콜을 깊게 공부해야 할 듯 하네요.

squid 의 transparent proxy 는 spacelee님께서 말씀하신 것 처럼 처리 됩니다. (모든 transparent proxy가 그렇지요.)

그런 프로그램을 만드는게 중요한건지 구현원리를 익히는게 중요한것이 아니라면 pcap 라이브러리를 이용하면 좀 더 쉽게 구현 할 수 있을 듯 하네요.
음. squid 를 분석하기 전에 pcap 을 분석하는 것이 먼저 일 듯 하군요.

wfellow의 이미지

transparent(투명)하다는 것은 일반적으로 gateway라고 합니다.

Quote:
tcp 커넥션 상에서 양쪽에 각각 커넥션은 따로 맺지만
ip는 spoofing 하는 것처럼 각각의 ip를 가지고 ,
양 client 에게는 transparent하게 보이려고 합니다.

spacelee님이 말씀하신 내용은 transparent가 아닌 일반 proxy에 가깝습니다. 대체로 게이트웨이는 양쪽의 클라이언트에게 투명하기 위해 클라이언트와 서버 사이에 아무것도 존재하지 않는 것 처럼(직접 연결된 것처럼 착각을 일으키도록,...) 작동이 되는 것을 말합니다. 양 client 에게는 transparent하게 보이려고 한다는 말은 게이트웨이와 프락시를 혼동하신 것 같습니다.

게이트웨이는 별도로 양쪽에 연결을 하지 않습니다. 커널에서 목적지 주소와 프로토콜을 확인하고서(L3,L4) 그 내용을 USERSPACE쪽으로 전달 후, 적절한 처리를 거쳐서 다시 커널로 보냅니다. 즉 내용의 변조를 하든 안하든 라우팅만 한다는 거져.

프락시가 님이 생각하신 내용과 많이 비슷하며, 게이트웨이처럼 구현하는 경우도 있지만 간단하게 양쪽의 연결을 직접 중계하기도 합니다.(transparent는 아닙니다. 또한 spoofing으로 구현하지도 않구요.)

먼저 어떤 방식(GW or Proxy)으로 사용을 할 지 결정하고 구현을 하심 될것 같습니다.

구글신께 도움을 구하실 때는 GW 검색어 ==> ipqueue -error
PROXY에 대한 내용은 구글신이 꽉 잡고 있습니다. 더 찾아 보시길,...

참고) pcap은 패킷 분석을 위한 라이브러리입니다. 패킷 변조를 하진 않습니다.

-----[꼬릿말 절취선 시작]-----
삽질전에 먼저 구글신께 기도하자.
-----[꼬릿말 절취선 끝]-----

익명 사용자의 이미지

1-3) iptables명령을 알아야 한다는...
4-5) 응용

0) 시스템 구축
c-s 형태의 구조라면, c-g-s형태가 되도록 논리적이건 물리적이건 세팅합니다.
- c : client, s:server, g: gateway

1) 일단 사용자 유틸리티인 /sbin/iptables이 무엇에 쓰는 물건인지 알아봅니다.

2) squid에서 iptables 명령을 도대체 몇개를 실행해서 80포트에 대해 transparent proxy를 구축하는지 봅니다. 아~ 쉽다.

3) 원하는 트래픽유형에 대해 squid의 iptables 명령을 응용해 봅니다. 아~ 쉽다.

4) 원하는 iptables스크립트가 나왔으면, 이를 이용해서 중간에 필터링서버(물리적이건 논리적이건)에게 필터링을 시킨후 전송토록 합니다.(squid가 이렇게 하지요?)

5) iptables 명령은 스크립트 형태로 존재하는데, 이조차 프로그램 내부에서 등록(처리)하고자 한다면, 위에서 사용한 명령들을 libiptc라이브러리를 이용해서 코딩해봅니다.

* ip_queue 모듈을 이용하는 것도 좋습니다.

spacelee의 이미지

여러 답변 감사드립니다.^^
중요한 단초를 많이 알려주셔서
열심히 찾아서 공부해보면 될것 같네요.

권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.