精华内容
下载资源
问答
  • tproxy_Linux TPROXY

    2020-12-20 21:08:31
    利用iptables TPROXY target,可以在skb进入到协议栈之前,将skb关联到一个本地监听的socket,并且设置skb的fwmark。可以利用fwmark配置高级路由功能将非本地流量送到本地lo interface,从而能进入本地协议栈的处理。...

    利用iptables TPROXY target,可以在skb进入到协议栈之前,将skb关联到一个本地监听的socket,并且设置skb的fwmark。可以利用fwmark配置高级路由功能将非本地流量送到本地lo interface,从而能进入本地协议栈的处理。skb随后通过ip_rcv进入本地协议栈处理后,可以直接利用已关联的socket进行处理,而不需像普通的处理流程那样,使用skb中的tcp 4-tuples来查找listening socket或者established socket。这样可以把去往任意目的IP和目的端口的skb,关联到本地代理程序监听的socket上。本地代理程序通过accept返回的socket中包含的local address和local port仍然为原始连接的信息。关联到哪个本地监听的socket,可以通过on-port和on-ip option来指定,并且本地监听的socket需要设置IP_TRANSPARENT option,否则TPROXY target会当做找不到指定的本地socket,将skb丢弃。

    使用TPROXY的三个步骤:

    配置代理程序,确定程序监听的IP地址和端口,确保监听socket已打开IP_TRANSPARENT选项。这里程序监听的IP地址可以是

    A:0.0.0.0

    B: 127.0.0.1

    C: 任意本地接口的IP地址

    D: 其它IP地址

    选择使用哪种IP来监听,都是可以的,只要TPROXY target配置中的on-ip配置匹配就好了。

    配置iptables规则,将需要透明代理的流量使用TPROXY target。使用on-port,on-ip参数,指定透明代理监听的socket;使用--tproxy-mark设置使用透明代理流量的fwmark。

    配置高级路由,将使用透明代理的流量送到本地lo接口。

    FAQ

    Question1:已匹配iptables规则,使用TPROXY target的报文,还会继续匹配后续规则么?

    Answer1:不会。TPROXY target返回NF_DROP(报文不能匹配找到本地已设置IP_TRANSPARENT option的established或者listening socket)或者NF_ACCEPT(报文可以匹配找到本地已设置IP_TRANSPARENT option的established或者listening socket)

    Question2:TPROXY target对已建立连接的报文生效么?

    Answer2:生效。TPROXY target checks whether there is an established socket for the incoming skb (using the tcp 4-tuples in the skb to search the established sockets), if there is a such socket and the socket has set IP_TRANSPARENT, it sets the fwmark for the skb and associates the skb with the socket and return NF_ACCEPT.  If no established socket found, it looks for listening socket using laddr and lport. It checks the configured ip address with --on-ip option, the dev ip, and the destination ip of the skb one by one, and the first non-zero one will be used as the laddr. The port configured with --on-port option will be used as lport, if not configured, the destination port of the skb is used as lport. If a listening socket is matched, and the socket has enabled IP_TRANSPARENT, it sets the mark/mask for the skb and associates the skb with the socket and returns NF_ACCEPT. Otherwise it returns NF_DROP.

    Question3:既然TPROXY target对已经建立连接的报文也生效,那么Linux kernel文档https://www.kernel.org/doc/Documentation/networking/tproxy.txt中,下面这段配置是必须的么?

    # iptables -t mangle -N DIVERT

    # iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT

    # iptables -t mangle -A DIVERT -j MARK --set-mark 1

    # iptables -t mangle -A DIVERT -j ACCEPT

    Answer3:不是必须的,但加些配置性能稍微会提高些。对于可以匹配本地Established的报文,设置fwmark,配合高级路由配置确保这些报文在路由结束时可以送到本地的lo接口。这些报文不会再经过TPROXY target处理。(MARK target性能会略高于TPROXY target)

    另外这个配置在调试过程中也会更安全一些,对于报文属于某个已经建立的连接(包括到本地的连接,如ssh)将直接accept,不会走到TPROXY的规则。比如通过ssh登录到一台机器增加规则使用TPROXY target,但是配置时忘记exclude本地流量,这样包括ssh到这台机器的报文也将使用TPROXY target,而TPROXY target发现ssh的报文能匹配上本地established的socket,但是该socket未设置IP_TRANSPARENT,则会返回NF_DROP,导致ssh连接断开。

    展开全文
  • TPROXY support

    2020-12-31 20:26:52
    <div><p>To make this short, in IPv6 settings, Squid is capable of transparent proxying in a fashion which does not rely on NAT, by using this mechanism: ...<p>Currently, FireHOL does not appear to ...
  • tproxy_TPROXY使用介绍

    2020-12-30 10:45:36
    1、TPROXY是什么你可能听说过TPROXY,它通常配合负载均衡软件HAPrxoy或者缓存软件Squid使用。在所有"Proxy"类型的应用中都一个共同的问题,就是后端的目标服务器上看到的连接的Source IP都不再是用户原始的IP,而是...

    1、TPROXY是什么

    你可能听说过TPROXY,它通常配合负载均衡软件HAPrxoy或者缓存软件Squid使用。

    在所有"Proxy"类型的应用中都一个共同的问题,就是后端的目标服务器上看到的连接的Source IP都不再是用户原始的IP,而是前端的"Proxy"服务器的IP。

    拿HAProxy举例来说,假设你有3台后端Web服务器提供服务,前端使用HAProxy作为负载均衡设备。所有用户的HTTP访问会先到达HAProxy,HAProxy作为代理,将这些请求按照指定的负载均衡规则分发到后边的3台Web服务器上。这个操作本身没有任何问题,因为HAProxy就应该是这么工作的。但是对于某些对于用户的访问IP有限制的敏感应用,问题来了: 后端服务器上的ACL无法限制哪些IP可以访问,因为在它看来,所有连接的SOURCE IP都是HAProxy的IP。

    这就是为什么TPROXY产生的原因,最早TPROXY是作为Linux内核的一个patch,从2.6.28以后TPRXOY已经进入官方内核。TPRXOY允许你"模仿"用户的访问IP,就像负载均衡设备不存在一样,当HTTP请求到达后端的Web服务器时,在后端服务器上用netstat查看连接的时候,看到连接的SOURCE

    IP就是用户的真实IP,而不是haproxy的IP。TPROXY名字中的T表示的就是transparent(透明)。

    TPROXY主要功能如下:

    1.重定向一部分经过路由选择的流量到本地路由进程(类似NAT中的REDIRECT)

    2.使用非本地IP作为SOURCE

    IP初始化连接

    3.无需iptables参与,在非本地IP上起监听

    如果想要了解TPROXY的具体工作原理,请参考作者本人写的PPT,介绍的比较详细了:

    2、如何编译TPROXY

    在2.6.28以后的内核中,TPROXY已经是官方内核的一部分了。可以查看当前内核是否支持TPROXY

    # grep

    "TPROXY" config-`uname -r`

    CONFIG_NETFILTER_TPROXY=m

    CONFIG_NETFILTER_XT_TARGET_TPROXY=m

    如果没有支持,则需要自己重新编译内核,但不需要再对内核打patch,只需要在编译内核时选择TPROXY即可。

    Networking

    support (NET [=y])

    -> Networking

    options

    -> Network packet

    filtering framework (Netfilter) (NETFILTER [=y])

    -> Core Netfilter

    Configuration

    ->

    Transparent proxying support

    (EXPERIMENTAL)

    "TPROXY" target support

    (EXPERIMENTAL) (NEW)

    "socket" match support

    (EXPERIMENTAL) (NEW)

    然后在编译HAProxy时,选择TPROXY支持即可。

    make TARGET=linux26

    USE_LINUX_TPROXY=1

    make install target=linux26

    3、如何使用TPROXY(配合haproxy)

    首选,需要在HAProxy的GROUP配置中加入如下一行;

    source 0.0.0.0 usrsrc clientip

    这行配置告诉HAProxy使用用户的真实IP作为SOURCE

    IP访问这个GROUP。

    整个的配置看起来会像下边这样:

    listen VIP_Name

    192.168.2.87:80

    mode http

    option forwardfor

    source

    0.0.0.0 usesrc clientip

    cookie SERVERID

    insert nocache indirect

    server

    server1 10.0.0.60:80 weight 1 cookie server1 check

    server

    server2 10.0.0.61:80 weight 1 cookie server2 check

    server backup

    127.0.0.1:80 backup

    option

    redispatch

    接下来,使用netfilter

    mangle表中一个名为"socket"的match识别出发往本地socket的数据包(通过做一次socket检查)。

    然后我们需要配置iptables规则,给那些发往本地socket的数据包打上mark。

    然后新增一条路由规则,告诉内核将这些带有mark的数据包直接发送到本地回环地址进行路由处理。

    #!/bin/sh

    /sbin/iptables -t mangle -N DIVERT

    /sbin/iptables -t mangle -A PREROUTING -p tcp -m socket -j

    DIVERT

    /sbin/iptables -t mangle -A DIVERT -j MARK --set-mark 1

    /sbin/iptables -t mangle -A DIVERT -j ACCEPT

    /sbin/ip rule add fwmark 1 lookup 100

    /sbin/ip route add local 0.0.0.0/0 dev lo table 100

    4、部署TPROXY需要注意的点

    在部署TPROXY时,最常见的错误是遗忘将返回流量通过HAProxy。

    因为我们"伪装了"通过HAProxy的数据包的SOURCE

    IP,后端Web服务器看到的就是用户的IP,那么Web服务器使用自己的IP返回响应数据包,使用用户真实IP作为DESTINATION

    IP。当返回的数据包到达用户端的时候,用户看到返回的包的源IP不是自己请求的HAProxy的IP,则会认为这个包不是合法的回应而丢弃这个数据包。

    要解决这个问题,有两个办法:

    第一个办法是将HAProxy配置成网桥模式。

    第二个办法是将HAProxy和后端Web服务器放到同一子网中,后端服务器将自己的默认网关指向HAProxy,HAProxy同时需要承担NAT功能。

    在后端服务器上:

    ip route add default via haproxy's_lan_ip

    在haproxy上: /sbin/iptables -t nat -A POSTROUTING -s backend's_ip -o

    eht0 -j MASQUERADE

    5、haproxy上需要配合修改的一些内核参数

    # 允许ip转发

    echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

    # 设置松散逆向路径过滤

    echo 2 >

    /proc/sys/net/ipv4/conf/default/rp_filter

    echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter

    echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

    # 允许ICMP重定向

    echo 1 >

    /proc/sys/net/ipv4/conf/all/send_redirects

    echo 1 >

    /proc/sys/net/ipv4/conf/eth0/send_redirects

    将上边的配置持久化,写入/etc/sysctl.conf

    net.ipv4.ip_forward = 1

    net.ipv4.conf.default.rp_filter = 2

    net.ipv4.conf.all.rp_filter = 2

    net.ipv4.conf.eth0.rp_filter = 0

    net.ipv4.conf.all.send_redirects = 1net.ipv4.conf.default.send_redirects = 1

    参考文档:

    展开全文
  • tproxy-example, 如何使用TPROXY来代理tcp连接的示例 tproxy示例Linux的防火墙是其中最强大的网络工具之一。 我最喜欢的特性之一是tproxy目标,它的名称意味着你可以以代理不同类型的连接。在寻找如何使用TPROXY的...
  • Linux TPROXY

    2019-07-17 13:13:00
    利用iptables TPROXY target,可以在skb进入到协议栈之前,将skb关联到一个本地监听的socket,并且设置skb的fwmark。可以利用fwmark配置高级路由功能将非本地流量送到本地lo interface,从而能进入本地协议栈的处理。...

    利用iptables TPROXY target,可以在skb进入到协议栈之前,将skb关联到一个本地监听的socket,并且设置skb的fwmark。可以利用fwmark配置高级路由功能将非本地流量送到本地lo interface,从而能进入本地协议栈的处理。skb随后通过ip_rcv进入本地协议栈处理后,可以直接利用已关联的socket进行处理,而不需像普通的处理流程那样,使用skb中的tcp 4-tuples来查找listening socket或者established socket。这样可以把去往任意目的IP和目的端口的skb,关联到本地代理程序监听的socket上。本地代理程序通过accept返回的socket中包含的local address和local port仍然为原始连接的信息。关联到哪个本地监听的socket,可以通过on-port和on-ip option来指定,并且本地监听的socket需要设置IP_TRANSPARENT option,否则TPROXY target会当做找不到指定的本地socket,将skb丢弃。

    使用TPROXY的三个步骤:

    1. 配置代理程序,确定程序监听的IP地址和端口,确保监听socket已打开IP_TRANSPARENT选项。这里程序监听的IP地址可以是

    A:0.0.0.0

    B: 127.0.0.1

    C: 任意本地接口的IP地址

    D: 其它IP地址

           选择使用哪种IP来监听,都是可以的,只要TPROXY target配置中的on-ip配置匹配就好了。

    1. 配置iptables规则,将需要透明代理的流量使用TPROXY target。使用on-port,on-ip参数,指定透明代理监听的socket;使用--tproxy-mark设置使用透明代理流量的fwmark。
    2. 配置高级路由,将使用透明代理的流量送到本地lo接口。

     

    FAQ

    Question1:已匹配iptables规则,使用TPROXY target的报文,还会继续匹配后续规则么?

    Answer1:不会。TPROXY target返回NF_DROP(报文不能匹配找到本地已设置IP_TRANSPARENT option的established或者listening socket)或者NF_ACCEPT(报文可以匹配找到本地已设置IP_TRANSPARENT option的established或者listening socket)

     

    Question2:TPROXY target对已建立连接的报文生效么?

    Answer2:生效。TPROXY target checks whether there is an established socket for the incoming skb (using the tcp 4-tuples in the skb to search the established sockets), if there is a such socket and the socket has set IP_TRANSPARENT, it sets the fwmark for the skb and associates the skb with the socket and return NF_ACCEPT.  If no established socket found, it looks for listening socket using laddr and lport. It checks the configured ip address with --on-ip option, the dev ip, and the destination ip of the skb one by one, and the first non-zero one will be used as the laddr. The port configured with --on-port option will be used as lport, if not configured, the destination port of the skb is used as lport. If a listening socket is matched, and the socket has enabled IP_TRANSPARENT, it sets the mark/mask for the skb and associates the skb with the socket and returns NF_ACCEPT. Otherwise it returns NF_DROP.

     

    Question3:既然TPROXY target对已经建立连接的报文也生效,那么Linux kernel文档https://www.kernel.org/doc/Documentation/networking/tproxy.txt中,下面这段配置是必须的么?

    # iptables -t mangle -N DIVERT

    # iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT

    # iptables -t mangle -A DIVERT -j MARK --set-mark 1

    # iptables -t mangle -A DIVERT -j ACCEPT

    Answer3:不是必须的,但加些配置性能稍微会提高些。对于可以匹配本地Established的报文,设置fwmark,配合高级路由配置确保这些报文在路由结束时可以送到本地的lo接口。这些报文不会再经过TPROXY target处理。(MARK target性能会略高于TPROXY target)

    另外这个配置在调试过程中也会更安全一些,对于报文属于某个已经建立的连接(包括到本地的连接,如ssh)将直接accept,不会走到TPROXY的规则。比如通过ssh登录到一台机器增加规则使用TPROXY target,但是配置时忘记exclude本地流量,这样包括ssh到这台机器的报文也将使用TPROXY target,而TPROXY target发现ssh的报文能匹配上本地established的socket,但是该socket未设置IP_TRANSPARENT,则会返回NF_DROP,导致ssh连接断开。

     

    转载于:https://www.cnblogs.com/gailtang/p/11200388.html

    展开全文
  • tproxy_winkar

    2021-01-30 11:24:12
    tproxy-exampleThe Linux iptables-firewall is one ofthe most powerful networking tools out there. One of my favourite features isthe TPROXY-target, which, as the name implies, enables you to proxy diff...

    tproxy-example

    The Linux iptables-firewall is one of

    the most powerful networking tools out there. One of my favourite features is

    the TPROXY-target, which, as the name implies, enables you to proxy different

    types of connections.

    When looking for examples of how to use TPROXY, I came up short. The only

    examples I could find was the sources of large projects like Squid. I therefore

    decided to create a small example showing how TPROXY can be used to proxy TCP

    connections.

    The example transparent proxy application accepts TCP connections on the

    specified port (set to 9876 in tproxy_test.h) and attempts a TCP connection to

    the original host. If it is successful, the application starts forwarding data

    between the two connections (using splice()). The application supports multiple

    simultaneous connections and handles connections which fail (at least the

    scenarios I have tested).

    Please note that TPROXY only works in iptables PREROUTING-chain, which is only

    hit by forwarded packets. I.e., it can't be used on the same machine as the

    traffic originates from.

    For the transparent proxy example to work you need to configure routing and the

    firewall. The steps are found in the

    TPROXY-documentation.

    The only required steps are the routing and the TPROXY iptables-rule, the

    DIVERT-rule is an optimisation to prevent unnecessary processing of packets in

    the TPROXY target (-m socket checks for a socket matching the network packet

    header). Note that that the --tproxy-mark and fwmark must be the same, and that

    --on-port is the same port as used in the transparent proxy. If you experience

    any problems, the Squid website

    has some general tips on how to get TPROXY to work.

    One thing worth being aware of is that the proxy example, to avoid

    over-complicating it, uses blocking sockets. So the performance might suffer

    with a large number of connections.

    Ideas, suggestion and fixes are more than welcome. I hope you find this

    example useful!

    展开全文
  • tproxy透明代理帮助,里面详细介绍了Tproxy的规则及socket设置及相关的用法功能,希望对你有所帮助。
  • 最近尝试配置树莓派做透明代理,按说明配置完 TPROXY 后 UDP 协议的转发一直没有成功,调查后发现失败的原因是本地的 ss-redir 一直收不到内核 TPROXY 转发过来的数据包,iptables 是使用 ss-nat 进行配置的,尝试过...
  • 1.为什么使用TPROXY才能代理UDP在进行TCP的代理时,只要在NET表上无脑进行REDIRECT就好了。例如使用ss-redir,你只要把tcp的流量redirect到ss-redir监听的端口上就OK了。但是当你使用这种方法的时候,就会不正常,...
  • tproxy 用例

    千次阅读 2012-02-14 09:51:34
    TPROXY - Transparent proxy - TCP program - RHEL6 tcp_tproxy.c /*  * # iptables -t mangle -N DIVERT  * # iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT  * # iptables -t ...
  • <p>The IPtables configuration for proxying TCP traffic in Redsocks2 suggest using REDIRECT, and then to use TPROXY for UDP traffic. <p>Is it possible to use TPROXY also for TCP traffic and NOT ...
  • tproxy, 简单TCP路由代理 tproxytproxy是构建在 Gevent 上的简单TCP路由代理( 图层 7 ),它允许你在 python 中配置例程逻辑。 产品受到来自代理机器的启发,但有一些独特的特性,如 borrowed worker worker mo
  • <div><p>I wrote a tiny example for Linux tproxy usage at: ...And was wondering if we can somehow add tproxy support for redwood?</p><p>该提问来源于开源项目:andybalholm/redwood</p></div>
  • // iptables -t mangle -I PREROUTING -d 127.0.0.1 -p udp --dport 1235 -j TPROXY --on-port 1234 --on-ip 127.0.0.1 // ip6tables -t mangle -I PREROUTING -d ::1 -p udp --dport 1235 -j TPROXY --on-port ...
  • <div><p>I cannot find a UDP with TPROXY iptables example in redsocks's documents. "redudp" part In redsocks.conf imply redsocks is able to redirect UDP packets, but I don't know how to...
  • <p>If you have a dedicated IP address for singularity on the machine, it may be possible to use the tproxy module in linux along with SO_TRANSPARENT socket option to redirect incoming connections on ...
  • tproxy实现透明代理_sudo_新浪博客 tproxy实现透明代理_sudo_新浪博客 posted on 2015-09-05 17:58lexus 阅...
  • <div><p>The clientside_mark ACL was not working with TPROXY because a conntrack query could not find connmark without a true client port. <p>Ip::Intercept::Lookup() must return true client address, ...
  • 无独有偶,过了N多年,又到了这个时候,碰到了同样的事情...xx年的万圣节,由于服务器瘫痪我们被罚了500块钱,最终发现瘫痪的原因是TPROXY造成的,当时每个大服务区有一台LVS负载均衡设备,工作在NAT模式下,下联一...
  • 2020-09-24 15:33:34 ERR: [udp_socks5_recv_udpmessage_cb] bind tproxy reply address: Address in use <p>config ipt2socks option enable '1' option server_addr '127.0.0.1' option server...
  • udp_tproxy.c /*  * # iptables -t mangle -N DIVERT  * # iptables -t mangle -A PREROUTING -p udp -m socket -j DIVERT  * # iptables -t mangle -A DIVERT -j MARK --set-mark 1  * # iptables -t ...
  • Tproxy //tproxy实现透明代理 声明 本文为Gleasy原创文章,转载请指明引自Gleasy团队博客 一。需求场景 具体需求如下: 4台Server,2台为Proxy Server,2台为Web Server,均为双网卡; 1个公网IP(183...
  • d 224.0.0.0/4 -j RETURN sudo iptables -t mangle -A SSUDP -d 240.0.0.0/4 -j RETURN sudo iptables -t mangle -A SSUDP -p udp -j TPROXY –on-port 10053 –tproxy-mark 0x01/0x01 sudo iptables -t mangle -A ...
  • # Script for automatic setup of an SS-TPROXY server on CentOS 7.3 Minimal. # export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" exiterr() { echo "E...
  • TPROXY与ip_conntrack

    2017-11-12 16:40:00
    因为写到了这里,答案显然是有的,那就是TPROXY,这个TPROXY其实也是一个Netfilter模块,它就是平添了一次查找,那就是一个流是不是本地socket相关的,和ip_conntrack没有关系,不过依然要针对每一个数据包的五元组...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 318
精华内容 127
关键字:

tproxy