Konfigurera din socks5 proxyserver. Fjärråtkomst via proxy. Få en proxy från SOCKS Admin kontrollpanel

Anonymitet på Internet är inget nytt ämne. Och du har förmodligen installerat ett program som A4Proxy, SocksChain på din dator
och liknande. Personligen gillar jag inte när du behöver något slags separat program för att arbeta med proxyservrar. för det första
det är fult när det finns många fönster på aktivitetsfältet eller ikonerna i fältet, för det andra kräver dessa program sprickor, och de
Jag är för lat för att titta :) Det är därför jag skrev klasser för att stödja SOCKS5-servrar, som jag nu kan använda
i några av dina program. Och nu vill jag berätta för alla hur man gör.

Vilka servrar och vilka protokoll vi kan komma åt via en proxy beror på
typen av denna proxy, det vill säga protokollet med vilket vi får åtkomst till den. Det finns flera typer av proxyservrar:
HTTP-proxies, SOCKS4, SOCKS5, SSL CONNECT, etc. HTTP-proxyer är de vanligaste, de är lättast att hitta på Internet, men de fungerar bara med HTTP, dessutom
de kan infoga klientens adress i förfrågningshuvudena, dvs
inte anonym. SOCKS-protokollet är mest anmärkningsvärt genom att det inte kapslar in applikationsprotokoll, men
transportskikt, d.v.s. TCP/IP och UDP/IP. Eftersom endast dessa protokoll används för att fungera på Internet,
genom SOCKS kan du arbeta med alla servrar, inklusive samma SOCKS och,
organisera därför kedjor av SOCKS-servrar. Av samma anledning är ALLA SOCKS-servrar anonyma - omöjligt
sända på TCP/IP- och UDP/IP-nivå Ytterligare information utan att störa den överordnades arbete
protokoll.

Vi kommer att fokusera på SOCKS5-protokollet. Dess beskrivning finns i
. För SOCKS5 är standardporten 1080, men detta
Ingen lägger stor vikt vid standarden. Varje SOCKS-anslutning går igenom ett autentiseringssteg, om så krävs, sedan klienten
skickar ett kommando. Kommandot kan vara ett av tre:
CONNECT - utgående TCP-anslutning till angiven adress. Vi kommer att titta på att använda detta kommando
mer detaljerat, eftersom det behövs oftast. BIND - öppna en port (servern väljer en port och skickar adressen och porten till klienten) och acceptera en TCP-anslutning.
Servern kan behöva veta vem som ska ansluta. I det här fallet måste du förmedla denna information. UDP ASSOCIATE - öppna en UDP-port (servern väljer porten). Data avsedd för slutet
värd och data från den färdas också via UDP. Data i SOCKS5 överförs i binär form, och inte i textform, som i HTTP, SMTP, POP3, etc.

Protokollbeskrivning

Efter att ha anslutit till servern skickar klienten ett paket som anger protokollversionen och stöds
autentiseringsmetoder. Detta paket har följande format:

BYTE-version;
BYTE nMethods;
BYTE-metoder

Versionen måste vara 5. Varje metodelement definierar inte bara autentiseringsmetoden, utan också metoden för datakryptering,
om den används. Servern väljer en av dessa metoder. Du kan ange valfritt antal metoder, men om servern inte kräver autentisering, inga metoder
annat än 0x00 (använd varken autentisering eller kryptering) kommer inte att krävas. Som svar skickar servern ett paket med följande innehåll:

BYTE-version
BYTE-metoden

där metod är den metod som väljs av servern eller 0xFF (ingen av de föreslagna metoderna stöds). Om metoden är 0x00 kan du omedelbart skicka kommandot.

Kommandopaketet har följande format:

BYTE-version; // 5
BYTE Cmd ; // 1 — ANSLUTA
BYTE reserverat; // 0

BYTE-adr;
WORD-port; // Bytes i nätverksordning, dvs htons(Port);

Om ett domännamn används kommer längdbyten först och sedan strängen utan den avslutande null.

Servern skickar ett svar:

BYTE-version; // 5
BYTE Rep; // 0 — Okej
BYTE reserverat; // 0
BYTE AType; // 1 - IPv4; 3 - domännamn; 4 - IPv6
BYTE-adr;
WORD-port;

Här är adress och port adressen och porten som är synlig för värden. Som regel returneras IP-adressen, inte domänen
Namn. Denna adress kan skilja sig från den där vi kommer åt servern, speciellt om servern
används för sitt avsedda syfte, det vill säga att gå ut från det lokala området till Internet. Om Rep inte är noll, det vill säga ett fel, stäng sedan anslutningen, in
annars samarbetar vi med värden. Vi använder inte kryptering, så vi skickar och tar bara emot data som med en vanlig anslutning. Om en av parterna stänger anslutningen till socksservern kommer den omedelbart att stänga anslutningen till den andra
sida. En sockanslutning kapslar in en TCP-anslutning eller försök att upprätta en,
så om du använder strumpor för anonym portskanning, då detta
proceduren kan ta en halv dag.

Kodning

Eftersom strumpor kapslar in TCP, är det vettigt att få sockanslutningsklassen att härledas från
socket klass, men MFC:s CSocket är inte lämplig, eftersom han har alla metoder
inte virtuellt. Låt oss skriva vår egen socketklass och kalla den, säg, CTSocket

#omfatta

klass CTSocket
{
offentlig:





virtual void Close();
virtuell osignerad lång GetHost(); // Ta reda på din adress. Detta kan också behövas.

privat:
SOCKET strumpa;
};

Alla kan skriva implementeringen av den här klassen själva (vem vet inte hur, RTFM MSDN), så jag kommer inte att skriva det
överväga. Låt oss nu skriva en sockanslutningsklass. Det kommer endast att stödja den mest nödvändiga uppsättningen
funktioner: endast CONNECT-kommandot stöds, autentisering och SOCKS-server stöds inte
specificeras endast av IP-adress, inte av domännamn. Fler får inte plats i en artikel.

Klass CSocksSocket: offentlig CTSocket
{
offentlig:
virtuell BOOL CreateSocket();
virtuell BOOL Connect(osignerad lång ip, osignerad kort port);
virtual BOOL Connect(LPCSTR-namn, osignerad kort port);
virtuell int Skicka(const char* str, int len);
virtuell int Recv(char* buf, int max);
virtuell BOOL Close();
virtuell osignerad lång GetHost();

CTSocket* pSocket;
osignerade långa strumpor_ip;
osignerad short socks_port;

privat:
kolbuffert; // Denna storlek räcker definitivt
osignerad lång l_ip; // Adress som returneras av funktionen
GetHost()

};

// Genomförande
BOOL CSocksSocket::CreateSocket()
{
if (!pSocket->CreateSocket()) returnerar FALSE;
if (!pSocket->Connect(socks_ip, socks_port)) returnerar FALSE;
buffert = 5; //Ver
buffert = 1; // 1 metod
buffert = 0; // ingen autentisering
pSocket->Send(buffert, 3);
int n = pSocket->Recv(buffert, 2);
om (n != 2) returnera FALSK;
metod 0 stöds inte
returnera TRUE;
}

BOOL CSocksSocket::Connect(osignerad lång ip, osignerad kort port)
{
buffert = 5; //Ver
buffert = 1; //ANSLUTA
buffert = 0; //Reserverad
buffert = 1; //IPv4
*((osignerad lång*)(buffert + 4)) = ip;
*((osignerad kort*)(buffert + 8)) = port;
pSocket->Send(buffert, 10);
int n = pSocket->Recv(buffert, 10);
om (n != 10) returnera FALSK;
if (buffert != 0) returnera FALSK; //
Kan inte ansluta

returnera TRUE;
}

BOOL CSocksSocket::Connect(LPCSTR-namn, osignerad kort port)
{
buffert = 5;
buffert = 1;
buffert = 0;
buffert = 3; // Domän namn
int m = strlen(namn);
buffert = m; //
Längd byte
memcpy(buffert+5, namn, m); //
Kopiera en sträng utan en avslutande null
*((osignerad kort*)(buffert + 5 + m)) = port;
pSocket->Send(buffert, m + 7);
int n = pSocket->Recv(buffert, 10);
om (n != 10) returnera FALSK;
if (buffert != 0) returnera FALSK;
om (buffert != 1) returnera FALSK; //
Vi kommer att kräva att de berättar IP:n och inte något annat.
l_ip = *((osignerad lång*)(buffert + 4));
returnera TRUE;
}

int CSocksSocket::Send(const char* str, int len)
{
return pSocket->Send(str, len);
}

int CSocksSocket::Recv(char* buf, int max)
{
return pScoket->Recv(buf, max);
}

void CSocksSocket::Close()
{
pSocket->Stäng();
}

osignerad lång CSocksSocket::GetHost()
{
returnera l_ip;
}

//Nåväl, nu testprogrammet
void main()
{
WSADATA wsadata;
CTSocket tsock;
CSocksSocket ssock(&tsock);

WSAStartup(MAKEWORD(2,2), &wsadata);

ssock.socks_ip = inet_addr("10.10.10.10"); // Ange önskad adress här
ssock.socks_port = 1080; //
Ange hamnen här

if (!ssock.CreateSocket()) returnerar; // Kan inte ansluta till strumpor
// eller autentisering krävs
if (!ssock.Connect("www.mail.ru", htons(80))) returnerar; //
www.mail.ru
// är otillgänglig
LPSTR q = "HEAD / HTTP/1.1\xD\xAHost: www.mail.ru:80\xD\xAUser-Agent: xakep\xD\xA\xD\xA";
ssock.Send(q, strlen(q));

röding buff;
int n = ssock.Recv(buf, 1000);
buff[n] = 0;
printf("%s", buf);

Idag finns det flera huvudteknologier vars syfte är att dölja IP-adressen. I den här artikeln får du möjlighet att bekanta dig med en av dem, nämligen VPN.

Först och främst, för att slutföra denna process, måste du ta reda på inte bara din personliga IP-adress, utan även servern DNS-adress. I princip finns det inga svårigheter att få tag på denna information, det räcker till exempel att besöka webbplatsen www.whoer.net.


Även om du vill ändra din IP-adressdata räcker det inte att använda en VPN eller Socks, eftersom det idag finns en mängd tekniker som du enkelt kan identifiera dem med. Så låt oss återvända till vårt ämne och studera VPN-metoden mer i detalj.

VPN (Virtual Private Network, Virtual Private Network)


Först och främst är det värt att notera att VPN-anslutningen extern typ praktiskt taget ingen skillnad från normal anslutning till det eller det lokalt nätverk. I det här fallet kommer applikationer inte att känna någon skillnad på något sätt och kommer därför att använda det som en "ingång" till Internet.

Huvudsaken är att de inte behöver några inställningar. Om någon av dem kommer åt en fjärrstyrd direkttjänst skapas ett speciellt så kallat GRE-paket på datorn. Den kommer i sin tur att skickas i krypterad form till VPN-servern.


VPN-serverns åtgärd är att när den tar emot paketet kommer den att dekryptera det, demontera det och utföra nödvändig handling för din egen räkning. Efter att ha mottagit ett svar från en resurs av fjärrtypen, kommer den att placera den direkt i GRE-paketet. Efter detta kommer den att kryptera och skicka den till klienten.

Man måste komma ihåg att för att öka graden av säkerhet är systematisk kryptering av data som överförs nödvändig. Det är viktigt att PPTP-trafik kan krypteras genom att använda MPPE (Microsoft Point-to-Point Encryption).

Det representerar ett Microsoft-protokoll. Det är viktigt att de första versionerna inte bara var opraktiska utan också systematiskt utsatta för hackning, men än idag är de inte kända för sin speciella effektivitet. Saken är den att moderna versioner av Microsoft helt enkelt inte analyserar några påföljder.

OpenVPN är en gratis teknisk implementering av VPN, som är organiserad med hänsyn till den allmänt accepterade Internetprotokollstacken TCP/IP. Således kan du vara helt säker på att anslutningen kommer att göras med de leverantörer som faktiskt inte stöder den nödvändiga PPTP.

I synnerhet fungerar OpenVPN om du inte har en personlig IP-adress. Denna funktion skiljer sig till exempel från PPTP, som nödvändigtvis kräver två nätverkssessioner samtidigt.

För att påskynda arbetet med vissa program och parsers som jag använder, krävs proxyservrar, först hyrde jag dem, men sedan bestämde jag mig för att installera mina SOKS5 proxyservrar på befintliga servrar med webbplatser.

Alla servrar kör Ubuntu Server 14.04, kanske 12.04 någonstans, men beskrivningen bör även passa för alla andra Debian-baserade system.

Det finns två sätt som jag känner till för att organisera driften av en SOKS5-server:

  1. STRUMPAR över SSH. Denna metod är bekväm i sin enkelhet men obekväm om den används ofta, eller används från olika maskiner;
  2. Installera en SOCKS-server. Att använda denna metod kommer att ta lite mer tid första installationen, men då blir det snabbare och bekvämare att använda en proxy.

STRUMPAR över SSH

För att installera SOCKS5 via SSH behöver du bara ha tillgång till SSH-servern.

Gå in i terminalen eller SSH-klienten (PuTTY för Windows)

Ssh -D 1080 användare@server

Om den frågar efter ett lösenord måste du ange lösenordet från SSH-servern.

-D- indikerar porten på vilken SOKS5-servern kommer att vara tillgänglig

Det är det, efter det kan du ansluta till SOKS5-servern på localhost:1080 eller 127.0.0.1:1080

Denna metod är bekväm eftersom du inte behöver installera eller konfigurera något extra. Men före varje anslutning eller efter att ssh-anslutningen har brutits, till exempel på grund av Internetproblem, måste du ange det här kommandot igen.

Installera en SOCKS-server

Installera en äldre version av Dante Server

sudo apt-get uppdatering sudo apt-get installera dante-server

Sudo nano /etc/danted.conf

Föra honom till denna form

Utloggning: syslog /var/log/danted.log intern: eth0 port = 1085 extern: eth0 metod: användarnamn user.privileged: root user.notprivileged: ingen klientpass (från: 0.0.0.0/0 till: 0.0.0.0/0 log: error ) pass (från: 0.0.0.0/0 till: 0.0.0.0/0 kommando: connect log: error method: username )

Medan en vanlig HTTP-proxy är bra för webbsurfning, SOCKS proxy annat inriktat programvara, Till exempel E-post, snabbmeddelanden och till och med internettelefoni, vilket ger dem ytterligare en säkerhetsnivå. David Koblas uppfann SOCKS proxy medan han arbetade på MIPS Computer Systems, föregångaren till Silicon Graphics. Koblas presenterade arkitekturen STRUMPOR 1992 och användningen av en ny typ av proxy spred sig mycket snabbt.

Instruktioner för att använda SOKCS proxy

1. Öppna listan över SOCKS proxyservrar. Det finns två sökmetoder. Den första är att söka på webbplatser som Public Proxy Servers för information om gratis proxyservrar. Ett annat alternativ är att registrera dig för en privat proxytjänst, som Unique Internet Services, som ger tillgång till tusentals privata SOCKS-proxyer.

2. Ladda ner och installera en gratis kopia av Proxy Firewall. Gå till proxyfirewall.org, längst ner på sidan klicka på länken "Ladda ner". Välj kommandot "Kör" i fönstret som öppnas. När installationsprogrammet är klart kommer du att uppmanas att starta om datorn. Spara allt öppna filer och starta om datorn.

3. Öppna Proxy Firewall och lägg till dina proxyservrar i listan. Gå till fliken "Privata fullmakter" om du är medlem i Unique Internet Services, ange sedan ditt användarnamn och lösenord för att automatiskt importera tusentals fullmakter. Om du inte är medlem i Unique Internet Services kan du använda applikationen genom att klicka på "Lägg till proxyer" i det nedre vänstra hörnet och sedan manuellt ange IP-adressen och portnumret för varje SOCKS proxyserver.

4. Ställ in upplösningen för dina program. Första gången du öppnar varje program efter att ha installerat Proxy Firewall kommer programmet att upptäcka Proxy Firewall och fråga dig hur du ska gå vidare. Du kan välja att ansluta till Internet direkt eller välja att ansluta via SOCKS proxy. Proxy Firewall kommer ihåg inställningarna för varje program på din dator, men du kan ändra dem när som helst genom att klicka på fliken "Regler" i Proxy Firewall.

Strumpor kan vara extremt användbara. Nu kommer vi att berätta hur du korrekt konfigurerar dem på en MikroTik-router. Så låt oss prata om STRUMPOR?

Förord

SOCKS (SOCKet Secure) är nätverksprotokoll, med vilken du kan säkerställa att TCP-paket passerar förbi brandväggens blockeringsregler. Detta implementeras genom en proxyserver (även kallad SOCKS-server), som kontrollerar anslutningen av interna klienter och deras rättigheter att få åtkomst till externa resurser eller, omvänt, externa klienter, till resurser inom nätverket. SOCKS fungerar på sessionsnivå, så den kan användas för att proxyservera FTP, HTTP, Telnet och andra högnivåprotokoll. Medan en HTTP-proxy, som regel, endast tillåter dig att proxy GET och POST-förfrågningar.

Att upprätta en koppling

När en klient vill komma åt en extern resurs som blockeras av brandväggen sker anslutningen enligt följande:

  1. Klienten ansluter till proxyservern (vanligtvis används TCP-port 1080);
  2. Servern kontrollerar åtkomstlistan och avgör om klienten har rättigheter att komma åt externa resurser;
  3. Om klienten har sådana rättigheter vidarebefordrar proxyservern paketet till den externa resurs som klienten vill komma åt;
  4. Servern skapar en session mellan klienten och den externa resursen och utbytet av protokollpaket på toppnivå börjar mellan dem. När anslutningen väl har upprättats kan UDP-paket också överföras.

För närvarande stöder MikroTik SOCKS version 4, när man anger en extern resurs förstår den bara IP-adressen. SOCKS4a version – kan lösa domännamn externa resurser. En senare version av protokollet, SOCKS5, inkluderar utökat stöd för autentisering, UDP och IPv6-anslutningar.

Från och med idag stöds SOCKS5-protokollet ännu inte på MikroTik-enheter. Även om användare har bett utvecklare att inkludera SOCKS5-stöd i nya RouterOS-versioner i 8 år nu. Därför måste klienten även ha version 4 när man arbetar med SOCKS tillsammans med MikroTik.

Det är nödvändigt att mycket noggrant konfigurera brandväggsregler och SOCKS-åtkomstlistan för att utesluta oönskad åtkomst utifrån. Som regel används enheter som äventyrats genom SOCKS-sårbarheter för att skicka spam och nätfiske-e-post.

Låt oss gå vidare till inställningarna för SOCKS-servern på MikroTik:

Inställningar via WinBox

SOCKS serverinställningar i WinBox finns i IPStrumpor:

När du har markerat rutan Aktiverad servern blir aktiv. Därefter måste du konfigurera åtkomstlistor; för att göra detta, klicka på knappen Tillgång:


Aktiva SOCKS-sessioner som passerar genom servern kan spåras på fliken Anslutningar

Inställningar via terminal

För att konfigurera SOCKS via terminalen måste du också först konfigurera serverinställningarna. Konfigurationen utförs genom kommandot ip socks set, följande parametrar är tillgängliga:

  • aktiverad- inkluderar SOCKS proxyserverfunktion ( ja- ingår, Nej- avstängd);
  • hamn- Portnummer på vilket servern lyssnar efter SOCKS-förfrågningar. Standard - 1080
  • anslutning-idle-timeout- tid efter vilken inaktiva sessioner kommer att återställas (standard – 2 minuter ( 2m));
  • max-anslutningar- maximalt antal samtidiga anslutningar (standard - 200 )

Du kan se aktuella eller konfigurerade parametrar med kommandot:

  • handling- de åtgärder som kommer att vidtas om kriterierna i denna regel är uppfyllda:
    • tillåta- tillåta trafik att passera enligt denna regel;
    • förneka- förbjuda passage av trafik enligt denna regel.
  • dst-adress- destinationsserveradress;
  • dst-port- TCP-destinationsport på vilken fjärrservern lyssnar efter SOCKS
  • src-adress- paketets källadress (klient);
  • src-port- TCP källport
Praktisk användning

Låt oss säga att en ond systemadministratör blockerade vår favoritsida, fick reda på adressen och förbjöd oss.


Men en av våra anställda måste ha tillgång till denna resurs. Därför öppnar systemadministratören, aktiverar SOCKS-servern och konfigurerar åtkomstlistan.


IP-adressen till den anställdes dator som du behöver ge åtkomst till anges som klientadress (i vårt fall 192.168.11.48 ), som källport – valfri TCP-port från 1024 till 65535..

Samma inställning via terminal ser ut så här:

Ip-sockor> set enabled=ja ip-sockor-åtkomst> lägg till src-address=192.168.11.48 src-port=1024-65535 dst-address=212.193.249.136 dst-port=80 \ \... action=allow

Klart, nu är det upp till klienten att konfigureras av en anställd. Låt oss visa inställningen med hjälp av ett webbläsarexempel Google Chrome . Öppning inställningarAvanceradSekretess och säkerhet, bläddra till botten till punkten Systemet och välj Proxyinställningar. Välj i fönstret som visas LAN-inställningar→ sätt en bock mittemot Använd en proxyserver för ditt LAN och gå till Avancerad. I fönstret som visas anger du parametrarna för vår SOCKS-server i raden Strumpor(i vårat fall 192.168.11.1 och hamn 1080 ) och tillämpa inställningarna:


Nu uppdaterar vi hemsidan och woo-a-la, allt fungerar! I fönstret Anslutningar anslutningar från vår dator till webbplatsens IP-adress är synliga.



Efterord

Den här artikeln är endast avsedd för utbildningsändamål och är inte avsedd att lära någon hur man kringgår brandväggsregler. SOCKS 4-protokollet är föråldrat, stöder inte autentisering och kan inte lösa domänadresser. Av säkerhetsskäl rekommenderar vi inte alls att använda detta protokoll, inklusive att ställa in det på MikroTik.

Som standard är SOCKS-servern på MikroTik-routrar inaktiverad. Om du upptäcker att den är aktiverad kan detta vara ett tecken på att din router har äventyrats av angripare. Vi kommer att prata om detta mer i detalj i följande artiklar.

Var den här artikeln användbar för dig?

Snälla, berätta varför?

Vi beklagar att artikeln inte var användbar för dig: (Snälla, om det inte är svårt, ange varför? Vi kommer att vara mycket tacksamma för ett detaljerat svar. Tack för att du hjälper oss att bli bättre!




Topp