Benötige `sudo` für `wget localhost`

Benötige `sudo` für `wget localhost`

Ich habe Probleme, eine Verbindung zu einem lokalen Webservice herzustellen (Standardwebseite von Apache2). Wenn ich eine einfache HTTP:GET-Anfrage mache, wgetgibt der Server zurück 503 Service unavailable. Wenn ich jedoch sudo wget, bekomme ich 200 OK.

$ wget localhost
--2023-03-02 04:58:46--  http://localhost/
Connecting to 10.10.1.30:3128... connected.
Proxy request sent, awaiting response... 503 Service Unavailable
2023-03-02 04:58:46 ERROR 503: Service Unavailable.

$ wget 127.0.0.1
--2023-03-02 04:59:13--  http://127.0.0.1/
Connecting to 10.10.1.30:3128... connected.
Proxy request sent, awaiting response... 403 Forbidden
2023-03-02 04:59:13 ERROR 403: Forbidden.

$ sudo wget localhost
--2023-03-02 04:59:32--  http://localhost/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10701 (10K) [text/html]
Saving to: ‘index.html’

index.html          100%[=================>]  10.45K  --.-KB/s    in 0s      

2023-03-02 04:59:32 (365 MB/s) - ‘index.html’ saved [10701/10701]

Wie ist das möglich?

Vergleich einiger Details:

$ wget localhost --debug                   | $ sudo wget localhost --debug
...                                        | ...
---request begin---                        | ---request begin---
GET http://localhost/ HTTP/1.1             | GET / HTTP/1.1
User-Agent: Wget/1.21                      | User-Agent: Wget/1.21
Accept: */*                                | Accept: */*
Accept-Encoding: identity                  | Accept-Encoding: identity
Host: localhost                            | Host: localhost
Connection: Keep-Alive                     | Connection: Keep-Alive
Proxy-Connection: Keep-Alive               |
---request end---                          | ---request end---
Proxy request sent, awaiting response...   | HTTP request sent, awaiting response... 
---response begin---                       | ---response begin---
HTTP/1.1 503 Service Unavailable           | HTTP/1.1 200 OK
Server: squid/3.5.28                       | Server: Apache/2.4.54 (Debian)
Mime-Version: 1.0                          | Last-Modified: Tue, 09 Aug 2022 17:13:01 GMT
Date: Thu, 02 Mar 2023 10:08:29 GMT        | Date: Thu, 02 Mar 2023 10:11:58 GMT
Content-Type: text/html;charset=utf-8      | Content-Type: text/html
Content-Length: 3718                       | Content-Length: 10701
X-Squid-Error: ERR_DNS_FAIL 0              | ETag: "29cd-5e5d20b6c3ce8"
Vary: Accept-Language                      | Vary: Accept-Encoding
Content-Language: en                       | Accept-Ranges: bytes
X-Cache: MISS from mgmt-11102              | Keep-Alive: timeout=5, max=100
Via: 1.1 mgmt-11102 (squid/3.5.28)         | 
Connection: keep-alive                     | Connection: Keep-Alive
---response end---                         | ---response end---
...

Warum geht meine Anfrage an einen Proxy?

Der Proxy ist ein Gateway/eine Firewall, aber ich bin überrascht, dass diese Anfrage diesen Rechner überhaupt verlässt. Vergleichbares Verhalten ist bei curlund zu beobachten python3.urllib.

Hier sind einige Details des Systems

$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   host
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

$ cat /etc/apt/apt.conf.d/99HttpProxy 
Acquire::http::Proxy "http://10.10.1.30:3128";
Acquire::http::No-Cache true;
Acquire::http::Pipeline-Depth 0;

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
6: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 78:ac:44:56:dc:b8 brd ff:ff:ff:ff:ff:ff
    altname enp24s0f0
    inet 10.10.1.1/24 brd 10.10.1.255 scope global eno1
       valid_lft forever preferred_lft forever

$ ip route
10.10.1.0/24 dev eno1 proto kernel scope link src 10.10.1.1

$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet static
address 10.10.1.1
netmask 255.255.255.0

Antwort1

Nach einigen Recherchen habe ich Folgendes versucht:

$ env | grep proxy
http_proxy=http://10.10.1.30:3128
https_proxy=https://10.10.1.30:3128

Dies ist der Grund wget, warum curl, , urllibdie Anforderung an den Proxy sendet.

Dies löst das Problem vorübergehend:

$ unset http_proxy
$ wget localhost

Ich habe Folgendes getan, um herauszufinden, wo es eingestellt wurde:

$ cd /etc
$ grep -rw http_proxy
profile.d/proxy.sh:export http_proxy=http://10.10.1.30:3128

Wenn ich jetzt ein Tool verwende, das eine Verbindung zu einem lokalen Server herstellen muss, muss ich nur unsetdie Variable angeben. Anschließend muss ich sie wiederherstellen, wenn ich ein Tool verwende, das eine Verbindung zum Internet herstellt.

verwandte Informationen