it-swarm.com.de

Wie überprüfe ich, ob ein Dämon auf welcher Schnittstelle lauscht?

Beispiel: Ein sshd ist so konfiguriert, dass er nur wlan0 abhört. Damit. Wie kann ich neben der Überprüfung von sshd_config überprüfen, ob ein Daemon auf welcher Oberfläche lauscht? netstat kann das? Wie? (Betriebssystem: openwrt oder wissenschaftliches Linux oder openbsd)

AKTUALISIEREN:

Ich dachte, sshd könnte auf eine Schnittstelle beschränkt sein ... aber nein ... (192.168.1.5 ist auf wlan0 ...)

# grep ^ListenAddress /etc/ssh/sshd_config 
ListenAddress 192.168.1.5:22
# 
# lsof -i -n -P
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd      23952 root    3u  IPv4 1718551      0t0  TCP 192.168.1.5:22 (LISTEN)
#
# ss -lp | grep -i ssh
0      128              192.168.1.5:ssh                           *:*        users:(("sshd",23952,3))
# 
# netstat -lp | grep -i ssh
tcp        0      0 a.lan:ssh                   *:*                         LISTEN      23952/sshd          
#
33
gasko peter

(Möglicherweise müssen Sie das Paket ip auf openwrt installieren (v12/Einstellungseinstellung).

ifconfig/netstat usw. werden als veraltet betrachtet, daher sollten Sie (als root) verwenden.

ss -nlput | grep sshd

um die TCP/UDP-Sockets anzuzeigen, auf denen ein laufendes Programm mit der Zeichenfolge sshd abhört

  • -n
    Kein Port zur Namensauflösung
  • -l
    nur Hörbuchsen
  • -p
    zeigen Prozesse, die zuhören
  • -u
    udp-Buchsen anzeigen
  • -t
    TCP-Sockets anzeigen

Dann geht eine Liste wie diese:

tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",3907,4))
tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",3907,3))
tcp    LISTEN     0      128            127.0.0.1:6010                  *:*      users:(("sshd",4818,9))
tcp    LISTEN     0      128                  ::1:6010                 :::*      users:(("sshd",4818,8))

das Interessante ist die 5. Spalte, die eine Kombination aus IP-Adresse und Port zeigt:

  1. *:22
    Lauschen Sie an Port 22 jeder verfügbaren IPv4-Adresse
  2. :::22
    lauschen Sie bei jeder verfügbaren IP-Adresse auf Port 22 (ich schreibe kein IPv6, da IP IPv6 per RFC 654 ist).
  3. 127.0.0.1:6010
    Lauschen Sie der IPv4-Adresse 127.0.0.1 (localhost/loopback) und Port 6010
  4. ::1:6010
    IP-Adresse :: 1 (0: 0: 0: 0: 0: 0: 0: 1 in vollständiger Notation, auch localhost/loopback) und Port 6010 abhören

Sie möchten dann wissen, welche Schnittstellen eine IPv4-Adresse haben (um 1 abzudecken).

ip -4 a
# or "ip -4 address"
# or "ip -4 address show"

oder eine IP-Adresse (um 2 abzudecken)

ip -6 a
# or "ip -6 address
# or "ip -6 address show

(Wenn Sie die Option für IP (-6) oder IPv4 (-4) nicht hinzufügen, werden beide angezeigt.)

Sie können auch einen Blick darauf werfen, wie z. 127.0.0.1 Oder eine andere IP/IPv4-Adresse

# here a demo where i show all addresses of the device "lo" (loopback)
ip a show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
    inet6 ::1/128 scope Host
       valid_lft forever preferred_lft forever

Die Zeilen, die mit inet und inet6 Beginnen, zeigen, dass diese IPs an diese Schnittstelle gebunden sind. Möglicherweise haben Sie viele dieser Zeilen pro Schnittstelle:

he-ipv6: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN
    link/sit 192.0.2.1 peer 192.0.2.3
    inet6 2001:db8:12::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 2001:db8::2/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::1111:1111/128 scope link
       valid_lft forever preferred_lft forever

und in einem Skript:

address="127.0.0.1"
for i in $(grep ':' /proc/net/dev | cut -d ':' -f 1 | tr -d ' ') ; do
        if $(ip address show dev $i | grep -q "${address}") ; then
                echo "${address} found on interface ${i}"
        fi
done

(ersetzen Sie "127.0.0.1")

42
Oluf Lorenzen

Verwenden von lsof (als root):

# lsof -i -n -P
COMMAND    PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      3028        root    3u  IPv4   7072      0t0  TCP *:22 (LISTEN)
sshd      3028        root    4u  IPv6   7074      0t0  TCP *:22 (LISTEN)

iproute2 's ss kann dies auch (als root):

# ss -lp
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port   
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",3028,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",3028,3))

... und schließlich netstat (als root):

# netstat -lp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      3028/sshd  
21
sr_

Soweit ich weiß, können Sie nicht (außer auf BSD-Systemen, wo Finkreghs Lösung gut funktioniert). Es ist möglich, aber es ist Ihnen egal, da die meisten Anwendungen jede Schnittstelle abhören, selbst wenn sie an eine IP-Adresse gebunden sind.

Unter Linux (und openwrt) kann eine Anwendung nur die Socket-Option SO_BINDTODEVICE Abhören. Nur wenige Anwendungen unterstützen dies tatsächlich, da es betriebssystemspezifisch ist. Das, oder sie verwenden Packet Socket, aber das ist für Low-Level-Protokolle (wie DHCP-Server).

Unter Linux, das ein schwaches Host-Modell verwendet, überwacht jede Anwendung standardmäßig alle Schnittstellen, selbst wenn ein Socket an eine IP-Adresse gebunden wird. Die einzige Ausnahme ist die Bindung an 127.0.0.1, wodurch sichergestellt wird, dass die Anwendung nur die Schnittstelle lo überwacht.

Sie haben es richtig gehört: Wenn Sie zwei Schnittstellen (z. B. eth0 Und eth1) Mit zwei unterschiedlichen IP-Adressen haben (z. B. 192.0.2.1 für eth0 Und 198.51.100.1 für eth1) Und Sie weisen eine Anwendung an, an 192.0.2.1 zu binden. Die Anwendung überwacht weiterhin beide Schnittstellen, antwortet jedoch nur, wenn die Ziel-IP 192.0.2.1 lautet. Wenn also die Routing-Tabelle in der Schnittstelle eth1 Entsprechend definiert ist, kann jemand auf Ihre Anwendung zugreifen, indem er über die Adresse 192.0.2.1 (jedoch nicht über 198.51.100.1) auf der Schnittstelle eth1 Auf sie zugreift .

Die Annahme, dass die Bindung an eine IP-Adresse mit der Bindung an eine Netzwerkschnittstelle identisch ist, ist unter Linux völlig falsch. Wenn Sie das stört, verwenden Sie das Richtlinienrouting und/oder iptables.

10
BatchyX

Auch mit netstat sind aber die spezifischen Argumente:

netstat -lp -i wlan0
0
frogstarr78