例:sshdはwlan0でのみリッスンするように構成されています。そう。 sshd_configをチェックする以外に、デーモンがどのインターフェースをリッスンしていることをどのようにチェックできますか? netstatはそれを行うことができますか?どうやって? (OS:openwrtまたはscience linuxまたはopenbsd)
更新:
Sshdはインターフェースに制限される可能性があると思いました...しかし、そうではありません...(192.168.1.5は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
#
(openwrtにパッケージip
をインストールする必要がある場合があります(v12 /姿勢調整)
ifconfig/netstatなどが考慮されます 非推奨 なので、(rootとして)使用する必要があります
ss -nlput | grep sshd
文字列sshd
を含む実行中のプログラムがリッスンしているTCP/UDPソケットを表示するには
-n
-l
-p
-u
-t
次に、次のようなリストを取得します。
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))
興味深いのは、IPアドレスとポートの組み合わせを示す5列目です。
*:22
:::22
127.0.0.1:6010
::1:6010
次に、(1をカバーするために)どのインターフェースにIPv4アドレスがあるかを知りたいと思います。
ip -4 a
# or "ip -4 address"
# or "ip -4 address show"
またはIPアドレス(2をカバーするため)
ip -6 a
# or "ip -6 address
# or "ip -6 address show
(IP(-6
)またはIPv4(-4
)の両方のオプションが表示されていない場合)
また、出力を表示して検索することもできます。 127.0.0.1
またはその他のIP/IPv4-address
# 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
inet
およびinet6
で始まる行は、これらのIPがこのインターフェイスにバインドされていることを示しています。インターフェイスごとにこれらの行の多くがある場合があります。
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
そしてスクリプトで:
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
(「127.0.0.1」を置き換えます)
lsof
(ルートとして)を使用:
# 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
のss
もこれを行うことができます(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))
...そして最後に、netstat
(ルートとして):
# 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
私の知る限りではできません(Finkreghのソリューションが正常に機能するBSDシステムを除く)。ほとんどのアプリケーションはIPアドレスにバインドされている場合でも、すべてのインターフェイスでリッスンするため、それは可能かもしれませんが、気にしないでください。
Linux(およびopenwrt)では、アプリケーションが特定のインターフェイスでのみリッスンする唯一の方法は、SO_BINDTODEVICE
ソケットオプションです。 OS固有であるため、実際にこれをサポートするアプリケーションはほとんどありません。それ、またはそれらはパケットソケットを使用しますが、それは低レベルのプロトコル(dhcpサーバーなど)用です。
弱いホストモデルを使用するLinuxでは、ソケットをIPアドレスにバインドする場合でも、すべてのアプリケーションがデフォルトですべてのインターフェースをリッスンします。唯一の例外は、127.0.0.1にバインドする場合です。これにより、アプリケーションがlo
インターフェースのみをリッスンすることが保証されます。
2つの異なるIPアドレス(eth0
には192.0.2.1、eth1
には198.51.100.1など)の2つのインターフェース(eth0
とeth1
など)があり、アプリケーションに192.0.2.1にバインドするようにアプリケーションに指示した場合、アプリケーションは引き続き両方のインターフェースで待機しますが、宛先IPが192.0.2.1の場合にのみ応答します。したがって、eth1
インターフェース上の誰かが、そのルーティングテーブルが適切に定義されている場合、eth1
インターフェース上の192.0.2.1アドレス(ただし198.51.100.1ではない)を介してアプリケーションにアクセスできます。
Linuxでは、IPアドレスへのバインドがネットワークインターフェイスへのバインドと同じであると仮定すると、まったく誤りになります。それが気になる場合は、ポリシールーティングやiptables
を使用してください。
また、netstatを使用しますが、特定の引数は次のとおりです。
netstat -lp -i wlan0