ファイアウォールはネットワークセキュリティの重要な部分であるため、システム管理者がファイアウォールの動作に精通していることが重要です。ファイアウォールを理解している場合は、許可するトラフィックをインテリジェントに選択することで、ネットワークを安全に保つことができます。
「ファイアウォール」は非常にエキサイティングな名前であるため、ネットワークの郊外で複雑なトロンスタイルのネオンバトルが発生し、ユーザーのテクノ要塞を保護するために不正なデータのパケットが送信されることを想像することがよくあります。実際には、ファイアウォールは、着信および発信ネットワークトラフィックを制御するソフトウェアの一部にすぎません。
ファイアウォールは、ネットワークポートを監視することにより、このトラフィックを管理できます。ファイアウォールの世界では、ポートという用語 USB、VGA、HDMIポートなどの物理的な接続を指すものではありません。ファイアウォールの目的で、ポート は、特定のタイプのデータの経路を表すためにオペレーティングシステムによって作成された人工的な構造です。このシステムは、「連絡先」、「接続」、「ペンギン」など、何とでも呼ばれる可能性がありますが、作成者は「ポート」を使用していました。これは、現在でも使用されている名前です。重要なのは、どのポートにも特別なことは何もないということです。これらは、データ転送が発生するアドレスを指定するための単なる方法です。
よく知られているポートはたくさんありますが、これらも慣例にすぎません。たとえば、HTTPトラフィックはポート80で発生し、HTTPSトラフィックはポート443を使用し、FTPはポート21を使用し、SSHはポート22を使用します。コンピューターが別のコンピューターにデータを送信すると、データにプレフィックスが追加され、アクセスしたいポート。受信側のポートが、送信しているデータと同じプロトコルのデータを受け入れている場合、データは正常に交換されます。
このプロセスの動作は、任意のWebサイトにアクセスして確認できます。ウェブブラウザを開き、example.com:80
に移動します 、これにより、コンピューターはexample.comWebサイトにサービスを提供しているコンピューターのポート80にHTTP要求を送信します。見返りにウェブページを受け取ります。ただし、HTTPトラフィックはポート80または443にアクセスすることが想定されているため、WebブラウザではURLに移動するたびにアクセスするポートを入力する必要はありません。
このプロセスは、ターミナルベースのWebブラウザを使用してテストできます。
$ curl --connect-timeout 3 "http://example.com:80" | head -n4
<!doctype html>
<html>
<head>
<title>Example Domain</title>
同じ表記法を使用して、非標準のポートを使用してWebサイトに移動することにより、強制的に拒否することができます。任意のポートexample.com:79
に移動します 例えば。ウェブページのリクエストは拒否されました:
$ curl --connect-timeout 3 "http://example.com:79"
curl: (7) Failed to connect: Network is unreachable
ポートとプロトコルの相関関係は、標準グループとユーザーベースによって相互に合意された規則にすぎません。これらの設定は、個々のコンピューターで変更できます。実際、コンピューティングのパイオニア時代には、人気のあるサービスのポート番号を変更するだけで攻撃が軽減されると多くの人が感じていました。今日、攻撃ははるかに洗練されています。サービスがリッスンするポートを変更することで自動ポートスキャナーを驚かせても、ほとんど価値がありません。
代わりに、ファイアウォールが特定のポートで許可されるアクティビティを管理します。
[無料ダウンロード:高度なLinuxコマンドのチートシート。 ]
インフラストラクチャには、ファイアウォールを実行することのみを目的としたサーバーがラックにある場合や、インターネットへのプライマリゲートウェイとして機能するファイアウォールがルーター(またはモデム)に組み込まれている場合があります。おそらく、個人のワークステーションまたはラップトップでファイアウォールが実行されていることもあります。これらのファイアウォールにはすべて、独自の構成インターフェースがあります。この記事では、firewall-cmd
について説明します。 ほとんどのLinuxディストリビューションにあるterminalコマンド。
Firewall-cmdは、firewalld
を管理するためのフロントエンドツールです。 Linuxカーネルのnetfilterフレームワークとインターフェースするデーモン。このスタックは、中小規模の企業で一般的な組み込みモデムにはおそらく存在しませんが、systemd
を使用するすべてのLinuxディストリビューションで使用可能です。 。
アクティブなファイアウォールがない場合、firewall-cmd
制御するものがないため、最初のステップはfirewalld
を確認することです。 実行中:
$ sudo systemctl enable --now firewalld
このコマンドはファイアウォールデーモンを起動し、再起動時に自動ロードするように設定します。
(ほぼ)すべてをブロックする
ファイアウォールを構成する際の一般的なアドバイスは、最初にすべてをブロックしてから、実際に必要であることがわかっているポートを開くことです。つまり、必要なものを知っている必要があり、それを理解することが午後の仕事である場合もあります。
たとえば、組織が独自のDNSまたはDNSキャッシングサービスを実行している場合は、DNS通信を処理するポート(通常は53)のブロックを解除することを忘れないでください。 SSHを使用してサーバーをリモートで構成する場合は、そのポートをブロックしないでください。インフラストラクチャで実行されているすべてのサービスを考慮する必要があり、そのサービスが内部のみであるのか、それとも外部と対話する必要があるのかを理解する必要があります。
プロプライエタリソフトウェアの場合、知らないうちに外の世界に電話がかかることがあります。一部のアプリケーションが最近導入された厳格なファイアウォールにうまく反応しない場合は、リバースエンジニアリング(またはアプリケーションのサポートラインに相談)して、作成しようとしているトラフィックの種類とその理由を見つける必要があります。オープンソースの世界では、この問題はあまり一般的ではありませんが、特に複雑なソフトウェアスタックの場合は、可能性の範囲外ではありません(たとえば、今日、メディアプレーヤーでさえ、アルバムアートを取得するためだけに、インターネットに電話をかけます。またはトラックリスト)。
Firewall-cmdはゾーンを使用します プリセットとして、適切なデフォルトから選択できます。これを行うことで、ファイアウォールを最初から構築する必要がなくなります。ゾーンはネットワークインターフェイスに適用されるため、2つのイーサネットインターフェイスを備えたサーバーでは、1つのゾーンが1つのイーサネットインターフェイスを管理し、別のゾーンがもう1つのイーサネットインターフェイスを管理する場合があります。
システムで提供されるゾーンについて理解するために時間をかける価値があります。利用可能なすべてのゾーンを表示するには、次を使用します:
$ sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
特定のゾーンでブロックが解除されているものを確認するには:
$ sudo firewall-cmd --zone work --list-all
work
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
既存のゾーンの1つを独自のファイアウォールルールの開始点として使用するか、独自のゾーンを作成します。
新しいゾーンを作成するには、--new-zone
を使用します オプション。
すべてのfirewall-cmd
アクションは、ファイアウォールまたはファイアウォールを実行しているコンピューターが再起動するまでのみ持続します。永続的にしたいものには、--permanent
を付ける必要があります フラグ。
たとえば、corp
という新しいパーマネントゾーンを作成します 、次にファイアウォールルールをリロードして、新しいゾーンがアクティブになるようにします。
$ sudo firewall-cmd --new-zone corp --permanent
success
$ sudo firewall-cmd --reload
この新しいゾーンにネットワークインターフェースを割り当てる前に、ssh
を追加してください リモートでアクセスできるようにするサービス。 --permanent
を使用します この追加を再起動後も維持するオプション:
$ sudo firewall-cmd --zone corp --add-service ssh --permanent
corp
と呼ばれる新しいゾーン は現在アクティブであり、SSHトラフィックを除くすべてを拒否し、特定のネットワークインターフェイスに割り当てられていません。 corp
を作成するには 保護するネットワークインターフェイスのアクティブゾーンとデフォルトゾーン(ens3
この例では)、--change-interface
を使用します オプション:
$ firewall-cmd --change-interface ens3 \
--zone corp --permanent
The interface is under control of NetworkManager, setting zone to 'corp'.
success
corp
を作成する デフォルトゾーン。今後のすべてのコマンドはcorp
に適用されます。 --zone
でない限り オプションは別のゾーンを指定します。 corp
を設定するかどうか デフォルトは、このゾーンを新しいプライマリゾーンとして計画するかどうかによって異なります。もしそうなら、以下がその仕事をします:
$ sudo firewall-cmd --set-default corp
各インターフェースに現在割り当てられているゾーンを表示するには、--get-active-zones
を使用します オプション:
$ sudo firewall-cmd --get-active-zones``
corp
interfaces: ens3
work
interfaces: ens4
SSH以外のすべてをブロックしたので、ネットワークが依存しているポートを開くことができます。ファイアウォールを通過するトラフィックをすばやく簡単に許可する方法は、事前定義されたサービスを追加することです。
利用可能な事前定義されたサービスのリストは広範囲にわたっています。表示するには、次を使用します:
$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amqp
amqps apcupsd audit bacula bacula-client
bgp bitcoin bitcoin-rpc bitcoin-testnet ceph
cockpit dhcp dhcpv6 dhcpv6-client distcc dns
[...]
Webサーバーを実行する必要があると仮定します。まず、使用するWebサーバー(httpd
)をインストールします。 RHELまたはFedoraのパッケージ、apache2
UbuntuとDebianで)。この例では、httpd
を使用します :
$ sudo dnf install httpd
$ sudo systemctl --enable --now httpd
次に、ウェブサーバーをローカルでテストします:
$ curl --silent localhost:80 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
次に、外部ブラウザからWebサーバーに接続してみます。接続が失敗し、ファイアウォールが有効であることを示しています:
$ curl --connect-timeout 3 192.168.122.206
curl: (28) Connection timed out after 3001 milliseconds
ファイアウォールを通過するHTTPトラフィックを許可するには、http
を追加します サービス:
$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload
次に、外部ソースからテストします:
$ curl --silent 192.168.122.206 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
サービスを追加する方法がわかったので、サービスを削除するのはかなり直感的です。
$ sudo firewall-cmd --remove-service http --permanent
$ sudo firewall-cmd --reload
事前定義されたサービスが存在しない場合や、ネットワークと一致しないデフォルトを想定している場合があります。サービスを追加する代わりに、--add-port
を使用してポート番号とプロトコルタイプを直接追加できます。 。
たとえば、SSH用の非標準ポート1622をカスタムゾーンに追加する必要がある場合(カスタムゾーンがコマンドのデフォルトゾーンでない場合は、--zone
を追加します オプション):
$ sudo firewall-cmd --add-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload
そのポートを削除するには、--remove-port
を使用します :
$ sudo firewall-cmd --remove-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload
firewall-cmd
でできることは他にもたくさんあります 、独自のサービスの定義、ICMPブロッキング、許容される着信トラフィックのソースの定義など。学ぶための最良の方法は実験することです。そのため、Red Hat Enterprise LinuxまたはFedoraをGNOMEBoxにインストールし、すべてのオプションfirewall-cmd
を使用してトラフィックを整形して実験してください。 提供します。