Como forçar os clientes VPN a passarem apenas por um proxy SOCKS5 local?

1

Eu tenho um Raspberry Pi que estabelece uma conexão SSH com um servidor remoto (VPS) e abre uma porta no Pi para que eu possa usá-lo como um proxy SOCKS5. Este é o comando que eu uso para estabelecer o túnel:

ssh -D 1080 -f -C -q -N user@hostname

A razão para isso é que a rede bloqueia a VPN usando DPI, mas não o SSH. Então eu configurei uma VPN na LAN e configurei um proxy SOCKS5 (o mesmo Pi). O problema é que, se o proxy estiver inativo, o tráfego de saída da VPN (portanto, quando não for mais o tráfego da VPN, mas apenas o HTTP (S) regular) não o usará e tentará enviar essas solicitações pelo firewall da rede. Quero impedir que isso aconteça, de modo que, se o proxy estiver inativo, a VPN não permitirá a saída de nenhuma conexão.

Isso mostra como ele deve funcionar

                        ______________________________
                       |                              |
                       |            Client            |
                       |______________________________|
                                       |
                                       | L2TP over IPSEC
                       ________________|_______________ __ 
                      |                                |  |
                      |       VPN (192.168.1.XXX)      |  |
                      |________________________________|  |
                       ________________|_______________   |-RaspberryPi
                      |                                |  | 
                      |    SOCKS5 (127.0.0.1:1080)     |  |
                      |________________________________|__|
                                       |
                                       | SSH tunnel
                       ________________|________________
                      |                                 |
                      |         VPS (Amazon EC2)        |
                      |_________________________________|
                                       |
                                      / \
                                     /   \
                                  the internet 

Estes são meus iptables:

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.42.0/24 -o eth+ -j MASQUERADE
-A POSTROUTING -s 192.168.43.0/24 -o eth+ -m policy --dir out --pol none -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p udp -m udp --dport 1701 -m policy --dir in --pol none -j DROP
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m multiport --dports 500,4500 -j ACCEPT
-A INPUT -p udp -m udp --dport 1701 -m policy --dir in --pol ipsec -j ACCEPT
-A INPUT -p udp -m udp --dport 1701 -j DROP
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -i eth+ -o ppp+ -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ppp+ -o eth+ -j ACCEPT
-A FORWARD -s 192.168.42.0/24 -d 192.168.42.0/24 -i ppp+ -o ppp+ -j ACCEPT
-A FORWARD -d 192.168.43.0/24 -i eth+ -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.43.0/24 -o eth+ -j ACCEPT
-A FORWARD -j DROP
COMMIT

Este foi o script usado para fazer o link

da VPN

Então, minha pergunta é: Como posso alterar esses iptables para forçar os clientes VPN a usarem apenas um proxy SOCKS5 na LAN? (caso contrário, DROP seus pacotes destinados não-proxy)

    
por user3573987 04.04.2017 / 02:35

1 resposta

0

O que você procura é chamado de proxy transparente . Os proxies transparentes são destinados a serem colocados em gateways, mas não precisam ser; desde que os pacotes sejam roteados através de um nó (como estão em seu exemplo), você pode usar iptables nesse nó para REDIRECT seu tráfego para qualquer processo nesse nó que esteja manipulando proxies para você.

Uma busca rápida por "proxy de meias transparentes" no Google revela algo chamado redsocks . Você pode tentar isso; você executará sua sessão ssh SOCKS5 e redsocks instance no mesmo nó, com redsocks passando o tráfego para ssh . As instruções no site vinculado parecem razoavelmente completas para você seguir em frente.

    
por 13.04.2017 / 06:13