TL; DR quel proxy non consente il tunneling. E tu hai un firewall che analizza le richieste HTTP, probabilmente non permettendo il tunneling HTTP del tutto. Sei praticamente limitato a GET e POST.
Poiché è possibile risolvere DNS e VPN IPsec sulla porta 53 potrebbe essere una buona alternativa.
Il proxy php non è un proxy generale standard. In altre parole, non segue gli standard proxy (generali) (HTTP CONNECT o SOCKS), è semplicemente un proxy HTTP per le richieste GET e POST. Non è un proxy HTTP completo che implementa HTTP CONNECT che consentirebbe connessioni di tunneling e bypass di un firewall.
Nel il codice proxy php utilizza CURL, più esattamente curl_exec
, come segue:
$result = @curl_exec($ch);
// there must have been an error if at this point
if(!$result){
$error = sprintf('(%d) %s', curl_errno($ch), curl_error($ch));
throw new \Exception($error);
}
// we have output waiting in the buffer?
$this->response->setContent($this->output_buffer);
// saves memory I would assume?
$this->output_buffer = null;
Anche se invii un CONNECT HTTP, il proxy ti restituirà la risposta e chiuderà la connessione, che non è il modo in cui funziona HTTP CONNECT.
Questo non vuol dire che CURL non possa funzionare con HTTP CONNECT, ma non tramite PHP curl_exec
.
Tutto ciò che ha detto. Hai un firewall stateful che analizza le intestazioni HTTP (dato che consente solo /admin/
). Dubito strongmente che il firewall ti consenta di inviare un CONNECT HTTP in primo luogo. In altre parole, se il firewall lo rifiuta (notare l'errore):
GET /typo-in-amdin/somehting HTTP/1.1
Quindi non credo che consentirà:
CONNECT /admin/somewhere HTTP/1.1
Dal momento che fallirebbe sulla stessa corrispondenza regolare. E dal momento che il firewall consente solo HTTP (e lo analizza) non è possibile utilizzare altri protocolli, ad es. VPN su posrt 80.
Nota aggiuntiva (più ottimistica)
Una cosa che mi colpisce è che puoi risolvere il DNS. Pertanto il firewall deve consentire i pacchetti UDP sulla porta 53.
E, a meno che non si utilizzi un server DNS interno (e quindi la risoluzione DNS non passa attraverso il firewall), è possibile aggirare la limitazione dell'intestazione HTTP eseguendo una VPN in modalità udp (IPsec) e "connetti" a porta 53. Questo tunnel il tuo traffico e guarderà al firewall come richieste e risposte DNS.