커널 컴파일 해서 tproxy target, table 등 추가 하였는데도 에러 나는 이유?

fivestar의 이미지

안녕하세요

커널을 새로 컴파일 하여 옵션에서 tproxy 관련된 target, table 등을 활성화 시켜서

컴파일해서 올렸는데도

/sbin/iptables -t tproxy -A PREROUTING -p tcp -m tcp --dport 80 -j TPROXY --on-port 81

위와 같은 룰을 추가하게 되면 ip_tables: TPROXY target: invalid size 8 != 16 식의 에러가 dmesg 에 남습니다.

tproxy관련된 작업하려고 합니다.

2.6.21.7-tproxy #2 SMP 커널 버전입니다.

이유를 아시는분은 도움 부탁드립니다~

fivestar의 이미지

iptable patch 는 한 상태입니다.

tproxy-iptables-1.4.0-20080521-113954-1211362794.patch

wariua의 이미지

"invalid size"로 netfilter 쪽 소스에서 검색해보시면 x_tables.c의 xt_check_target() 함수에서 찍는 메시지인 걸 확인하실 수 있을 겁니다. targetsize... 즉, sizeof(struct xt_tproxy_target_info)가 커널 모듈이 보기에는 8바이트고 iptables 모듈이 보기에는 16바이트라는 얘기입니다. 왜일까요?

커널에 적용한 tproxy 패치 버전과 iptables에 적용한 패치 버전이 맞지 않는 것 같습니다.

$PWD `date`

fivestar의 이미지

커널에 적용한 tproxy버전은 커널버전과 동일한 tproxy 패치 파일로 적용해야 되고

그대로 룰을 적용하였더니 에러가 발생하였고 에러검색을 해보니 iptable 에도 tproxy 를 사용하기 위해 패치를 진행해주어야

한다고 하여 iptable 패치 작업을 한것입니다.

tproxy 사이트에도 iptable 1.4.0 버전 패치밖에 있지 않아 iptable 버전도 다운그레이드 하여 버전 맞춰 준것인데..

어떤 버전이 맞지 않다는 걸까요??

wariua의 이미지

버전이 안 맞는다는 걸 구체적으로 확인해 보시려면 ~linux/include/linux/netfilter/xt_TPROXY.h 파일과 ~iptables/include/linux/netfilter/xt_TPROXY.h 파일을 비교해보시면 됩니다. 두 파일에 정의돼 있는 구조체가 아마 꽤 다를 겁니다.

만약 두 파일의 구조체 정의가 같다면(!) 여차저차한 이유로 iptables 빌드 과정에서 잘못된 헤더 파일을 사용했을 가능성 등이 있습니다.

$PWD `date`

fivestar의 이미지

답변 감사합니다.

번외로 질문이 하나 있습니다만

/sbin/iptables -t tproxy -A PREROUTING -p tcp -m tcp --dport 80 -j TPROXY --on-port 3128

위와 같은 iptables 룰에서 on-port 옵션의 의미가 무엇인가요??

-L 로 확인해보면 tcp dpt:www TPROXY redirect 0.0.0.0:3128 mark 0x0/0x0와 같이 되어 있던데

mark 0x0/0x0 의 의미도 아신다면 알려주시면 감사하겠습니다 다른 룰들보니 mark 0x1/0x1로 설정하더라구요

또한 redirect 0.0.0.0:3128 이 있는데 로컬 3128포트로 redirect가 되지 않더라구요

이유가 무엇일까요? 0.0.0.0 의 의미가 로컬을 의미하는게 아닌가요? 저 부분에 ip를 지정하는 방법도 알려주시면 감사하겠습니다.

wariua의 이미지

match/target의 옵션 설명은 다음과 같은 명령으로 보실 수 있습니다.

# iptables -m tcp --help
# iptables -j TPROXY --help

IP를 지정하는 방법 역시 도움말을 보면 아실 수 있을 겁니다. mark 옵션과 관련해선 "packet mark"로 검색하시면 자료가 많이 나올 겁니다.

$PWD `date`

fivestar의 이미지

정말 감사합니다.

많은 도움이 되었습니다.

마지막으로 -t 는 커널 옵션에 있는 table 같은데...

tproxy.txt 등을 보면 mangle 테이블을 사용하던데 tproxy 구성할때 아래와 같이 룰을 추가하였습니다

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-ip 192.168.100.118 --on-port 3128

그런데 192.168.100.118 의 3128포트로 redirect가 안되는데 이유가 무엇인지... 혹시 아시나요?

익명 사용자의 이미지

tproxy 테이블을 쓰는 커널 패치라면 정말 구식인데..

요즘은 메인라인에 ipv6가 포함된지도 꽤 오래 전이에요

백포팅 할 자신있으면 패치 추적해서 넣으시는것도 추천이요

익명 사용자의 이미지

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-ip 192.168.100.118 --on-port 3128

위 룰과 같이 mangle 테이블 사용하였구요.. 위룰 적용시에 118번 3128로 redirect가 안되는 이유가 무엇인지
아시나요?

#iptables -t mangle -L 의 결과는 아래와 같습니다.

target prot opt source destination
TPROXY tcp -- anywhere anywhere tcp dpt:www TPROXY redirect 192.168.100.118:3128 mark 0x1/0x1
DIVERT tcp -- anywhere anywhere socket

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination

Chain DIVERT (1 references)
target prot opt source destination
MARK all -- anywhere anywhere MARK set 0x1
ACCEPT all -- anywhere anywhere

fivestar의 이미지

음.. 구성이 브릿지라

ebtables -t broute -A BROUTING -p ipv4 --ip-protocol tcp --ip-destination-port 80 -j redirect --redirect-target ACCEPT

룰을 추가하였습니다.

http://pak2536.springnote.com/pages/6217113/attachments/3784217

위 링크 그림에서 보듯 iptable 이전의 처리가 ebtable 인듯한데.. 위룰까지 추가할경우 tcpdump 에서 80패킷이 보이지 않네요

또 위룰을 추가하지 않고 확인시에는 80패킷이 들어오나 redirect가 안되네요..ㅠ.ㅠ

이유좀 아시는분 안계시나요~~?

익명 사용자의 이미지

ebtables 를 쓰시려면 해당 이더넷 카드 rp_filter 를 참조하시고

단순 iptables 말고 iproute2 룰도 넣어주십시오..

squid TPROXT4 문서 보면 자세히 나와있음

댓글 달기

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