iptables および firewalld ツールを使用して Linux ファイアウォール接続ルールを管理する

iptables および firewalld ツールを使用して Linux ファイアウォール接続ルールを管理する

ファイアウォール

ファイアウォールは一連のルールです。パケットが保護されたネットワーク空間に出入りするときに、パケットの内容 (具体的には、パケットの送信元、送信先、および使用する予定のプロトコルに関する情報) がファイアウォール ルールに対してテストされ、パケットの通過を許可するかどうかが決定されます。以下に簡単な例を示します。

ファイアウォールは、プロトコルまたは宛先ベースのルールに基づいてリクエストをフィルタリングできます。

一方、iptables は Linux マシン上のファイアウォール ルールを管理するためのツールです。

一方、firewalld は Linux マシン上のファイアウォール ルールを管理するためのツールでもあります。

これについて何か意見はありますか? nftable と呼ばれる別のツールがあると言ったらどう思いますか?

わかりました。全体的に少し変な匂いがするのは認めます。説明させてください。すべては、Linux カーネル モジュール レベルでネットワーク スタックへのアクセスを制御する Netfilter から始まります。数十年にわたり、Netfilter フックを管理するための主なコマンドライン ツールは iptables ルールセットでした。

これらのルールを呼び出すために必要な構文は少々難解なため、UFW や Firewalld などのさまざまなユーザーフレンドリーな実装が高レベルの Netfilter インタープリターとして導入されました。ただし、UFW と Firewalld は主にスタンドアロン コンピューターが直面する種類の問題を解決するために設計されました。本格的なネットワーク ソリューションを構築するには、通常、iptables の追加機能、または 2014 年以降は、その代替である nftables (nft コマンドライン ツール経由) が必要です。
iptables はなくなることはなく、今でも広く使用されています。実際、管理者としての業務では、今後何年もの間、iptables によって保護されたネットワークに遭遇することになるでしょう。しかし、nftables は、従来の Netfilter ツールセットに追加することで、いくつかの重要な新機能をもたらします。

これから、Firewalld と iptables が単純な接続の問題をどのように解決できるかを例を通して説明します。

Firewalld を使用した HTTP アクセスの設定

名前から推測できるように、Firewalld は systemd ファミリーのメンバーです。 Firewalld は Debian/Ubuntu マシンにインストールできますが、RedHat および CentOS ではデフォルトです。コンピュータ上で Apache などの Web サーバーが実行されている場合は、サーバーの Web ルート ディレクトリを参照して、ファイアウォールが正常に動作していることを確認できます。サイトにアクセスできない場合は、Firewalld が機能しています。

コマンドラインから Firewalld 設定を管理するには、firewall-cmd ツールを使用します。現在のファイアウォールのステータスを返すには、--state パラメータを追加します。

# ファイアウォールコマンド --state
ランニング

デフォルトでは、Firewalld はアクティブになり、SSH などのいくつかの例外を除いてすべての着信トラフィックを拒否します。つまり、Web サイトの訪問者数がそれほど多くならないため、データ転送コストを大幅に節約できます。ただし、これはおそらく Web サーバーに想定されているものではないため、慣例によりそれぞれ 80 と 443 に指定されている HTTP ポートと HTTPS ポートを開く必要があります。 Firewalld では、これを行うための 2 つの方法が用意されています。 1 つは、--add-port パラメータを使用して、使用するポート番号とネットワーク プロトコル (この場合は TCP) を直接参照する方法です。 --permanent パラメータは、サーバーが起動するたびにこのルールを読み込むように Firewalld に指示します。

# ファイアウォールコマンド --permanent --add-port=80/tcp
# ファイアウォールコマンド --permanent --add-port=443/tcp

--reload パラメータは、現在のセッションに次のルールを適用します。

# ファイアウォールコマンド --reload

ファイアウォールの現在の設定について知りたいですか? –list-services を実行します:

# ファイアウォールコマンド --list-services
dhcpv6クライアント http https ssh

前述のようにブラウザ アクセスを追加した場合、HTTP、HTTPS、および SSH ポートがすべて dhcpv6-client で開かれ、Linux がローカル DHCP サーバーから IPv6 IP アドレスを要求できるようになります。

iptables を使用してロックされた顧客キオスクを構成する

キオスクを見たことがあると思います。キオスクとは、タブレット、タッチスクリーン、ATM のような PC が箱の中に入ったもので、空港、図書館、ビジネス ルームなど、あらゆる場所に設置されており、顧客や通行人がコンテンツを閲覧できるようにしています。ほとんどのキオスクでは、通常、ユーザーが自分のデバイスを自宅にある自分のデバイスのように扱うことは望ましくありません。これらは通常、ブラウジング、YouTube ビデオの視聴、またはペンタゴンへのサービス拒否攻撃の実行に使用されるものではありません。したがって、悪用されないようにするには、ロックをかける必要があります。

1 つの方法は、Linux ディスプレイ マネージャーを巧みに使用するか、ブラウザー レベルで何らかのキオスク モードを適用することです。ただし、すべての穴を確実に塞ぐには、ファイアウォールを介してハードネットワーク制御を追加することも必要です。次のセクションでは、iptables を使用してこれを実現する方法について説明します。

iptables の使用に関して覚えておくべき重要な点が 2 つあります。ルールを指定する順序が非常に重要であり、iptable ルールだけでは再起動すると無効になるということです。ここで一つずつ説明していきます。

キオスク エンジニアリング<br /> これを説明するために、BigMart という大規模な店舗チェーンで働いていると想像してみましょう。彼らは何十年も前から存在しており、実際、私たちの想像上の祖父母はそこで買い物をしながら育った可能性があります。しかし、最近では、BigMart 本社の人々は、Amazon がそれらを永久に廃止するまでの時間を数えているだけなのかもしれません。

それでも、BigMart の IT 部門は最善を尽くしており、店舗内の戦略的な場所に設置できる WiFi 対応のキオスク デバイスをいくつか送信しました。そのアイデアは、BigMart.com の製品ページにログインした Web ブラウザーを表示し、商品の特徴、通路の場所、在庫レベルを調べることができるようにするというものです。これらのキオスクでは、画像やビデオ メディアの多くが保存されている bigmart-data.com へのアクセスも必要です。

これに加えて、更新や、必要に応じてパッケージのダウンロードも許可する必要があります。最終的には、ローカル ワークステーションからの SSH アクセスのみを許可し、他のすべてのアクセスをブロックする必要があります。次の図は、これがどのように機能するかを示しています。

キオスクのトラフィック フローは iptables によって制御されます。

スクリプト

これらすべてを Bash スクリプトに組み込む方法は次のとおりです。

#!/bin/bash
iptables -A 出力 -p tcp -d bigmart.com -j 受け入れる
iptables -A 出力 -p tcp -d bigmart-data.com -j 受け入れる
iptables -A 出力 -p tcp -d ubuntu.com -j 受け入れる
iptables -A 出力 -p tcp -d ca.archive.ubuntu.com -j 受け入れる
iptables -A 出力 -p tcp --dport 80 -j ドロップ
iptables -A 出力 -p tcp --dport 443 -j ドロップ
iptables -A 入力 -p tcp -s 10.0.3.1 --dport 22 -j 受け入れ
iptables -A 入力 -p tcp -s 0.0.0.0/0 --dport 22 -j ドロップ

ルールの基本的な構造は、次のルールを追加したいことを iptables に伝える -A から始まります。出力 これは、このルールが出力チェーンの一部である必要があることを意味します。 -p は、このルールが tcp プロトコルを使用するパケットにのみ適用されることを示します。-d は、宛先が bigmart.com であることを示します。 -j フラグは、パケットがルールに一致したときに実行されるアクションとして ACCEPT を指定します。最初のルールでは、アクションは要求を許可または受け入れることです。ただし、より低いレベルでは、削除または拒否されるリクエストを確認できます。

順序が重要であることを忘れないでください。これは、iptables が各ルールに一致するまでリクエストを実行するためです。したがって、たとえば youtube.com への送信ブラウザ リクエストは最初の 4 つのルールを通過しますが、HTTP リクエストか HTTPS リクエストかに応じて --dport 80 または --dport 443 ルールに到達するとドロップされます。一致しているため、Iptables は再度チェックする必要はありません。

一方、システムが ubuntu.com にソフトウェアのアップグレードを要求した場合、適切なルールに該当するとアップグレードが実行されます。明らかに、ここで行っていることは、HTTP または HTTPS リクエストを BigMart または Ubuntu の宛先にのみ送信し、他の宛先には送信しないことを許可しています。

最後の 2 つのルールは、着信 SSH 要求を処理します。これらはポート 80 や 443 ではなくポート 22 を使用しているため、前の 2 つの DROP ルールによって拒否されません。この場合、自分のワークステーションからのログイン要求は受け入れられますが、他の場所からの要求は破棄されます。これは重要です: ポート 22 ルールに使用する IP アドレスが、ログインに使用するマシンのアドレスと一致していることを確認してください。一致していない場合は、すぐにロックアウトされます。もちろん、これは大した問題ではありません。現在の設定では、サーバーを再起動するだけで iptables ルールが削除されるからです。 LXC コンテナをサーバーとして使用し、LXC ホストからログインする場合は、パブリック アドレスではなく、ホストがコンテナに接続するために使用する IP アドレスを使用します。

私のマシンの IP が変更された場合は、このルールを忘れずに更新する必要があります。そうしないと、ロックアウトされてしまいます。

自宅でプレイ中(できれば廃棄された VM で)?独自のスクリプトを作成するのに最適です。これで、スクリプトを保存し、chmod で実行可能にして、sudo として実行できるようになりました。 bigmart-data.com が見つからないというエラーについては心配しないでください。もちろん見つからないのです。存在しないのです。

chmod +X スクリプト名.sh
sudo ./スクリプト名.sh

コマンドラインから cURL を使用できます。 ubuntu.com のリクエストは機能しますが、manning.com のリクエストは失敗します。

カールubuntu.com
カール・マニング

システムの起動時にロードするようにiptablesを構成する

さて、自動販売機が起動するたびにこれらのルールを自動的に読み込むにはどうすればよいでしょうか?最初のステップは、iptables-save ツールを使用することです。これにより、ルート ディレクトリにルールのリストを含むファイルが作成されます。このパイプとそれに続く tee コマンドは、文字列の 2 番目の部分に sudo 権限を適用し、実際にはファイルを制限されているルート ディレクトリに保存します。

次に、起動するたびに iptables-restore というプログラムを実行するようにシステムに指示します。前のモジュールで見たような定期的な cron ジョブは、設定された時間に実行されるため役に立ちませんが、コンピューターがいつクラッシュして再起動するかはわかりません。

この問題に対処する方法はたくさんあります。以下がその例です:

私の Linux ボックスでは、anacron というプログラムをインストールします。このプログラムは、/etc/ ディレクトリに anacrontab というファイルを提供します。私はそのファイルを編集し、次の iptables-restore コマンドを追加して、起動後 1 分ごとに (必要な場合) その .Rule ファイルの現在の値を iptables にロードするように指示します。ジョブに識別子 (iptables-restore) を付けて、コマンド自体を追加します。自宅で私と一緒にプレイしているので、システムを再起動してすべてをテストする必要があります。

sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt をインストール anacron
sudo ナノ /etc/anacrontab
1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules

これらの実用的な例によって、iptables と firewalld を使用して Linux ベースのファイアウォールで接続の問題を管理する方法が説明できたと思います。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linuxカーネルの基本的なモジュール管理と時間管理操作を分析する
  • Linux でコマンドまたはプロセスの実行時間を調べる方法
  • Linux/CentOS システムでネットワーク時間を同期する 2 つの方法の詳細な説明
  • Linux で特定の時間にコマンドを実行する方法
  • 時間を節約できる Linux コマンド エイリアス 15 個
  • Linux 日付時刻設定同期コマンド共有
  • Linux NTPサーバーの時刻同期設定の詳細な説明
  • Linux のバッチファイル削除コマンド (N 日前のファイルを削除)
  • Linux での i3 ウィンドウ マネージャーの設定と使用に関するチュートリアル
  • Linux でプロセスを効果的に管理するための 8 つのコマンド
  • Linux カーネル デバイス ドライバー カーネル時間管理に関する注意事項

<<:  オンラインMySQLオプティマイザの誤判断によって発生した低速クエリイベントを記録する

>>:  Vueのv-onパラメータの問題についてお話しましょう

推薦する

JS変数ストレージのディープコピーとシャローコピーの詳しい説明

目次可変タイプとストレージスペーススタックメモリとヒープメモリ基本的なデータ型参照タイプグラフィック...

CentOS7で新しいデータディスクをマウントするための完全な手順

序文新しい VPS を購入しました。新しい VPS のデータ ディスクはデフォルトではシステムにマウ...

MySQLのストレージエンジンの詳細な説明

MySQL ストレージ エンジンの概要ストレージ エンジンとは何ですか? MySQL のデータは、さ...

HTML の順序付きリスト、順序なしリスト、定義リストに関する簡単な説明

順序付きリストXML/HTML コードコンテンツをクリップボードにコピー<オルタイプ= &qu...

Docker で php-nginx-alpine イメージをゼロから構築する方法

これまでにも Docker 環境でいくつかのプロジェクトを実行したことはありますが、まだイメージをよ...

Nginx の起動に失敗した場合のいくつかのエラー処理の詳細な説明

Nginx を Web サーバーとして使用する際に、次の問題が発生しました。 1. nginxの起動...

削除、切り捨て、ドロップの違いと選択方法

序文先週、同僚が私に尋ねました。「兄さん、MySQL にバグを見つけました。午後にディスクをクリーン...

HTML+CSSを使用してマウスの動きを追跡する

ユーザーがプライバシーを意識するようになり、オンライン トラッキングに対する予防策を強化するにつれて...

Mysql のフィールドのデータの一部をバッチ置換する (推奨)

MYSQL のフィールドのデータの一部をバッチで置き換えます。具体的な導入は次のとおりです。 1....

MySQL のタイムスタンプと日付時刻のタイムゾーンの問題によって生じる DTS の落とし穴の詳細な説明

目次MySQL で現在の時刻を表現するにはどうすればよいでしょうか?結論は確認するピットMySQL ...

DockerはElasticsearch7.6クラスタをインストールし、パスワードを設定します

Elasticsearch 6.8 以降、無料ユーザーは X-Pack のセキュリティ機能を使用でき...

MySQL での and or クエリの優先度分析

これは見落とされがちな問題かもしれません。まず、次の点を明確にする必要があります。 MySQL では...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、Vue の具体的なコードを共有して、簡単なショッピングカートを実装します。...

MySQL 8.0.13 zipパッケージのインストール方法について

MySQL 8.0.13 にはデフォルトでデータ フォルダがあります。このフォルダを削除する必要があ...

CentOS の Nginx 公式 Yum ソースの設定を詳しく解説

私はプロジェクトの展開にAlibaba Cloudから購入したCentOSを使用しています。最近、プ...