パケットフィルタリング、ネットワークアドレス変換、およびカーネルランタイムパラメータの設定方法-パート2


パート1(「静的ネットワークルーティングのセットアップ」)で約束したように、この記事(RHCEシリーズのパート2)では、ダイビングの前に、Red Hat Enterprise Linux 7でのパケットフィルタリングとネットワークアドレス変換(NAT)の原則を紹介することから始めます。特定の条件が変更されたり、必要が生じた場合に、実行中のカーネルの動作を変更するためのランタイムカーネルパラメータの設定に。

RHEL7でのネットワークパケットフィルタリング

パケットフィルタリングについて説明するときは、ファイアウォールが通過しようとする各データパケットのヘッダーを読み取るプロセスを指します。次に、システム管理者によって以前に定義されたルールに基づいて必要なアクションを実行することにより、パケットをフィルタリングします。

ご存知かもしれませんが、RHEL 7以降、ファイアウォールルールを管理するデフォルトのサービスはfirewalldです。 iptablesと同様に、ネットワークパケットを調べて操作するために、Linuxカーネルのnetfilterモジュールと通信します。 iptablesとは異なり、更新はアクティブな接続を中断することなくすぐに有効になります。サービスを再起動する必要もありません。

Firewalldのもう1つの利点は、事前に構成されたサービス名に基づいてルールを定義できることです(これについては後ほど詳しく説明します)。

パート1では、次のシナリオを使用しました。

ただし、パケットフィルタリングについてはまだ説明していないため、例を簡略化するためにルーター#2のファイアウォールを無効にしたことを思い出してください。ここで、宛先の特定のサービスまたはポート宛ての着信パケットを有効にする方法を見てみましょう。

まず、enp0s3(192.168.0.19)からenp0s8(10.0.0.18)へのインバウンドトラフィックを許可する永続的なルールを追加しましょう。

# firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

上記のコマンドは、ルールを/etc/firewalld/direct.xmlに保存します。

# cat /etc/firewalld/direct.xml

次に、ルールを有効にして、すぐに有効にします。

# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

これで、RHEL 7ボックスからWebサーバーにtelnetし、tcpdumpを再度実行して、2台のマシン間のTCPトラフィックを監視できます。今回は、ルーター#2のファイアウォールを有効にします。

# telnet 10.0.0.20 80
# tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

192.168.0.18からWebサーバー(ポート80)への着信接続のみを許可し、192.168.0.0/24ネットワーク内の他のソースからの接続をブロックしたい場合はどうなりますか?

Webサーバーのファイアウォールで、次のルールを追加します。

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept'
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept' --permanent
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop'
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop' --permanent

これで、192.168.0.18および192.168.0.0/24の他のマシンからWebサーバーにHTTPリクエストを送信できます。前者の場合、接続は正常に完了するはずですが、後者の場合、最終的にタイムアウトになります。

これを行うには、次のコマンドのいずれかでトリックを実行します。

# telnet 10.0.0.20 80
# wget 10.0.0.20

リッチルールの詳細については、Fedora ProjectWikiのFirewalldRichLanguageのドキュメントを確認することを強くお勧めします。

RHEL7でのネットワークアドレス変換

ネットワークアドレス変換(NAT)は、プライベートネットワーク内のコンピューターのグループ(コンピューターの1つでもかまいません)に一意のパブリックIPアドレスが割り当てられるプロセスです。その結果、ネットワーク内では独自のプライベートIPアドレスによって一意に識別されますが、外部ではすべて同じように見えます。