web-dev-qa-db-ja.com

宛先に到達できません(ホストが管理上禁止されています)

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はどちらも関連がないため、ここにはリストされていません。

1
miáo

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ゾーンで実行されますが、dmzwork、...や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になる可能性があります)。

1
A.B