web-dev-qa-db-ja.com

Centos 7ルーターとファイアウォール

CentOS 7をセットアップしようとしていますVM Firewalldを使用して、2つの異なるサブネット間でトラフィックをルーティングします。

2つのネットワークインターフェイスがあります。外部ネットワーク用のens192と内部ネットワーク用のens224です。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
    inet6 ::1/128 scope Host
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:62:88:ba brd ff:ff:ff:ff:ff:ff
    inet 10.212.21.26/16 brd 10.212.255.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe62:88ba/64 scope link
       valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:62:88:c4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.99.1/16 brd 192.168.255.255 scope global ens224
       valid_lft forever preferred_lft forever
    inet6 fe80::d301:8174:1d11:d550/64 scope link
       valid_lft forever preferred_lft forever

内部インターフェースは内部ゾーンにあります。

$ Sudo firewall-cmd --list-all --zone=internal
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens224
  sources:
  services: dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

外部インターフェースは、マスカレードが有効になっている外部ゾーンにあります。

$ Sudo firewall-cmd --list-all --zone=external
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

内部インターフェイスのデフォルトゲートウェイは、外部インターフェイスのIPアドレスに設定されます。

$ ip ro
default via 10.212.0.10 dev ens192  proto static  metric 100
default via 10.212.21.26 dev ens224  proto static  metric 101
10.212.0.0/16 dev ens192  proto kernel  scope link  src 10.212.21.26  metric 100
10.212.21.26 dev ens224  proto static  scope link  metric 100
192.168.0.0/16 dev ens224  proto kernel  scope link  src 192.168.99.1  metric 100

パケット転送がオンになっています:

$ Sudo sysctl -a | grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1

内部ネットワークから外部ネットワークにアクセスできます。また、外部ネットワークから、内部ネットワークのIPアドレスにpingを実行できます。ただし、両方のゾーンでsshサービスが有効になっているにもかかわらず、外部ネットワークから同じ内部IPアドレスにsshすることができません。

私は運のない多くの異なる豊富なルール/パススルーを試しました。誰かが私に正しい方向に舵を取るように親切にしてくれませんか?

ありがとう。

編集:

10.212.21.26ルートを削除し、SELinuxモードをpermissiveに設定しました:

Sudo ip ro del 10.212.21.26
Sudo setenforce permissive

私はpingできます:

$ ping 192.168.99.100

Pinging 192.168.99.100 with 32 bytes of data:
Reply from 192.168.99.100: bytes=32 time<1ms TTL=63`

しかし、私はsshできません:

$ ssh -vvv 192.168.99.100
OpenSSH_6.8p1, OpenSSL 1.0.2a 19 Mar 2015
debug1: Reading configuration data /home/clay.rowland/.ssh/config
debug2: ssh_connect: needpriv 0
debug1: Connecting to 192.168.99.100 [192.168.99.100] port 22.
debug1: connect to address 192.168.99.100 port 22: Connection timed out
ssh: connect to Host 192.168.99.100 port 22: Connection timed out
5
clay rowland

多くの掘り起こしとキーボードスマッシュの後、次のFORWARDチェーンの直接の豊富なルールにより、ssh接続が成功することがわかりました。賢明な誰かがよりエレガントなソリューションを提供できるかもしれません。

Sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens224 -o ens192 -p tcp --sport 22 -j ACCEPT
Sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -p tcp --dport 22 -j ACCEPT
2
clay rowland

この投稿/質問の重要性を過大評価することはできません。実際、この状況は一般的に、Linuxルーターの背後にプライベート(NAT付き)ネットワークがあり、プライベートネットワークの一部のマシンにパブリックIPアドレスが割り当てられているセットアップで発生します。

つまり、次のようになります。

[pc's with local 10.0.0.0/24, and some public 20.0.0.0/24] > --- [router with 10... and 20... address on internal side]---WAN

したがって、(OPの)ルーターの「内部」インターフェースens224には、10.0.0.120.0.0.1の2つのIPがあります。 masquerade: yesの出口にens192があると、インターフェースのパブリックIPから20.0.0.0/24アドレスを持つパケットの本当の発信元をマスクし、直接の規則:

firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.0.0.0/24 -j MASQUERADE

しかし、問題の中心はポイントです。つまり、firewalldを有効にすると、ファイアウォールとして機能し始めます。つまり、すべてのens192- inbound andすべてのens224- inboundパケットを検査します。受け入れられた回答で示されているように、直接のルールがない場合、パケットは詳細な説明(CentOS 7)で拒否されます。

  • ルーター(tcpdumpICMP Host 20.0.0.2 unreachable - admin prohibited
  • 外部ピア(telnet 20.0.0.2 22Unable to connect to remote Host: No route to Host

誰かがより良いルールを考え出さない限り、OPによって提供されるソリューションは最もエレガントなもののようですが、非常に詳細です。

  • 内部ネットワーク内の選択されたポートへのすべてのトラフィックは、次のような直接ルールによって明示的に許可する必要があります:firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -p tcp --dport 22 -j ACCEPTfirewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -p tcp --dport 80 -j ACCEPT(etc)
  • 内部ネットワーク(私の場合、20.0.0.0/24ネットワークから)からのすべてのトラフィックは、明示的に許可する必要があります。ここではfirewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens224 -j ACCEPTを使用しています

ここで欠けているのは(少なくとも私は)、選択されたポートのみを宛先とする下りトラフィックを通過させる機会をもつIP範囲ベースの「ゾーン」を定義する可能性です。これがfirewalldで可能かどうかはわかりません。

1
P Marecki