Virtualboxでホストオンリーネットワークを使用しています。
ホスト(Windows):192.168.56.1/24
ゲスト(CentOS):192.168.56.101/24
ゲストで実行されている0.0.0.0:8080をリッスンする単純なhttpサーバーがあります。ゲストマシンの "curl http://192.168.56.101:8080/ "は問題ありません。しかし、それはホストでは機能しません(curlが私のWindowsにインストールされていないため、ブラウザーでアクセスします)。
ホストから192.168.56.101にpingを送信しても問題ありません。私は、wiresharkを使用してVirualBox-Host-Only-Networkアダプターでパケットをキャプチャすることにより、いくつかのヒントを得ようとしています。また、192.168.56.101から192.168.56.1に送信された「宛先に到達できない(ホストが管理上禁止されている)」というICMPパケットがいくつか表示されます。
ゲストのファイアウォールをシャットダウンした場合にのみ http://192.168.56.101:8080/ にアクセスできます(systemctl stop firewalld
)。しかし、私はそれをしたくありません。 ゲストのファイアウォールがオンになっている間に、ホストから http://192.168.56.101:8080/ にアクセスしたいと思います。
私はしばらくこれを検索しましたが、まだ正確な方法がわかりません。多分iptablesで何かがそれに慣れておらず、少し理解しにくいと思います。誰かが私の訪問を拒否するために次のルールがどのように機能するか、そしてそれを適切に変更する方法を説明できますか(上記の状況など)?
ありがとうございました。
iptables -nvL --line-numbers (when the firewall is off)
Chain INPUT (policy ACCEPT 72 packets, 6371 bytes)
num pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 51 packets, 9866 bytes)
num pkts bytes target prot opt in out source destination
iptables -nvL --line-numbers (when the firewall is on)
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
2 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
3 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
4 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
5 1 76 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
6 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
7 11 1096 INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
8 11 1096 INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
9 11 1096 INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
10 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
11 11 1096 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-Host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
2 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
4 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
5 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
6 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
7 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
8 0 0 FORWARD_direct all -- * * 0.0.0.0/0 0.0.0.0/0
9 0 0 FORWARD_IN_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
10 0 0 FORWARD_IN_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
11 0 0 FORWARD_OUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
12 0 0 FORWARD_OUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
13 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
14 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-Host-prohibited
Chain OUTPUT (policy ACCEPT 12 packets, 1204 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68
2 12 1204 OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD_IN_ZONES (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 FWDI_public all -- enp0s8 * 0.0.0.0/0 0.0.0.0/0 [goto]
2 0 0 FWDI_public all -- enp0s3 * 0.0.0.0/0 0.0.0.0/0 [goto]
3 0 0 FWDI_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_IN_ZONES_SOURCE (1 references)
num pkts bytes target prot opt in out source destination
Chain FORWARD_OUT_ZONES (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 FWDO_public all -- * enp0s8 0.0.0.0/0 0.0.0.0/0 [goto]
2 0 0 FWDO_public all -- * enp0s3 0.0.0.0/0 0.0.0.0/0 [goto]
3 0 0 FWDO_public all -- * + 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_OUT_ZONES_SOURCE (1 references)
num pkts bytes target prot opt in out source destination
Chain FORWARD_direct (1 references)
num pkts bytes target prot opt in out source destination
Chain FWDI_public (3 references)
num pkts bytes target prot opt in out source destination
1 0 0 FWDI_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
2 0 0 FWDI_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 FWDI_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDI_public_allow (1 references)
num pkts bytes target prot opt in out source destination
Chain FWDI_public_deny (1 references)
num pkts bytes target prot opt in out source destination
Chain FWDI_public_log (1 references)
num pkts bytes target prot opt in out source destination
Chain FWDO_public (3 references)
num pkts bytes target prot opt in out source destination
1 0 0 FWDO_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
2 0 0 FWDO_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 FWDO_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDO_public_allow (1 references)
num pkts bytes target prot opt in out source destination
Chain FWDO_public_deny (1 references)
num pkts bytes target prot opt in out source destination
Chain FWDO_public_log (1 references)
num pkts bytes target prot opt in out source destination
Chain INPUT_ZONES (1 references)
num pkts bytes target prot opt in out source destination
1 11 1096 IN_public all -- enp0s8 * 0.0.0.0/0 0.0.0.0/0 [goto]
2 0 0 IN_public all -- enp0s3 * 0.0.0.0/0 0.0.0.0/0 [goto]
3 0 0 IN_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain INPUT_ZONES_SOURCE (1 references)
num pkts bytes target prot opt in out source destination
Chain INPUT_direct (1 references)
num pkts bytes target prot opt in out source destination
Chain IN_public (3 references)
num pkts bytes target prot opt in out source destination
1 11 1096 IN_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
2 11 1096 IN_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
3 11 1096 IN_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain IN_public_allow (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
Chain IN_public_deny (1 references)
num pkts bytes target prot opt in out source destination
Chain IN_public_log (1 references)
num pkts bytes target prot opt in out source destination
Chain OUTPUT_direct (1 references)
num pkts bytes target prot opt in out source destination
ip addr
:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.101 netmask 255.255.255.0 broadcast 192.168.56.255
インターフェースenp0s3はNATを使用し、enp0s8はホストオンリーネットワークに接続します。loとvirbr0はどちらも関連がないため、ここにはリストされていません。
firewall-cmd
、 ポートを開く8080/tcp
を使用して、アクティブルールで1回(変更によりiptables
ルールの再構築のみをトリガー)、保存された構成(/etc/firewalld/
の構成の変更のみを保存)。
# firewall-cmd --add-port=8080/tcp
success
# firewall-cmd --permanent --add-port=8080/tcp
success
更新:コメントで尋ねられたように、インターフェイス全体を許可します。
firewalld
にはゾーンの概念があります。デフォルトでは、アクションはpublic
ゾーンで実行されますが、dmz
、work
、...やtrusted
ゾーンなど、多くの定義済みゾーンがあります。暗黙的にすべてを信頼します。インターフェースを許可する最も簡単な方法は、このインターフェースをtrusted
ゾーンに追加することです。いつものように、2つのコマンドは、構成用に1回(--permanent
を使用)、アクティブセット用に1回(--permanent
を使用しないでください。--reload
も機能します)。
# firewall-cmd --zone=trusted --add-interface=enp0s8
# firewall-cmd --permanent --zone=trusted --add-interface=enp0s8
iptablesルールでは、それらの主要なルールに応じてルールが変更され、iptables-save
の出力に表示されます(ここでは、いくつか記述していますが、さらに多くあります)。
-A FORWARD_IN_ZONES -i enp0s8 -j FWDI_trusted
-A FWDI_trusted -j ACCEPT
-A INPUT_ZONES -i enp0s8 -j IN_trusted
-A IN_trusted -j ACCEPT
たとえば、このインターフェイスのランダムなポート(アドレス上の)へのリモート着信TCP接続は、実際にプロセスがリッスンしている場合を除き、「ホストへのルートなし」またはその他の「宛先到達不能」エラーから「接続拒否」エラーに切り替わる可能性があります。その上に。
起動時に問題がないように見えても、再起動後を含め、常に正しく機能するためにディストリビューションに依存する可能性があるいくつかの問題があります。例:
実際、いくつかのポートを開くタスクを超えると、firewalld
を使用して自分のルールを直接作成する代わりにiptables
を使用すると、複雑になる可能性があり、その構文の知識に投資する必要があります。代わりに下位層の知識に費やされており(今日iptables
、明日nft
...)、今日anywayで結果を確認する必要がありますiptables-save
(明日はnft list ruleset -a
になる可能性があります)。