GNU/Linux >> Linux の 問題 >  >> Linux

Linuxファイアウォール:iptablesとfirewalldについて知っておくべきこと

この記事は、私の著書であるLinux in Actionと、まだリリースされていない2番目のManningプロジェクトからの抜粋です。

ファイアウォール

ファイアウォールは一連のルールです。データパケットが保護されたネットワークスペースに出入りするとき、その内容(特に、その発信元、ターゲット、および使用する予定のプロトコルに関する情報)がファイアウォールルールに対してテストされ、通過が許可されるかどうかが確認されます。簡単な例を次に示します。

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

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

問題がありますか?そして、nftablesと呼ばれる別のツールがあると言ったら、それはあなたの一日を台無しにするでしょうか?

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

Linuxターミナル

  • Linux用の上位7つのターミナルエミュレータ
  • Linuxでのデータ分析のための10個のコマンドラインツール
  • 今すぐダウンロード:SSHチートシート
  • 高度なLinuxコマンドのチートシート
  • Linuxコマンドラインチュートリアル

これらのルールを呼び出すために必要な構文は少し難解なものとして出くわす可能性があるため、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がその役割を果たしています。

firewall-cmdを使用します コマンドラインからfirewalld設定を管理するためのツール。 –stateを追加する 引数は現在のファイアウォールステータスを返します:

#firewall-cmd --state 
running

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

#firewall-cmd --permanent --add-port =80 / tcp 
#firewall-cmd --permanent --add-port =443 / tcp

–reload 引数はそれらのルールを現在のセッションに適用します:

 # firewall-cmd --reload 

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

#firewall-cmd --list-services 
dhcpv6-client http https ssh

前に説明したようにブラウザアクセスを追加したとすると、HTTP、HTTPS、SSHポートは、dhcpv6-clientとともにすべて開いているはずです。 、これにより、LinuxはローカルDHCPサーバーからIPv6IPアドレスを要求できます。

iptablesを使用してロックダウンされたカスタマーキオスクを構成する

キオスクは、空港、図書館、企業が横になって、顧客や通行人をコンテンツの閲覧に招待するボックスに入ったタブレット、タッチスクリーン、ATMのようなPCです。ほとんどのキオスクについてのことは、通常、ユーザーが自宅で自分自身を作り、自分のデバイスのように扱うことを望まないということです。これらは通常、国防総省に対する閲覧、YouTube動画の視聴、またはサービス拒否攻撃の開始を目的としたものではありません。したがって、誤用されないようにするには、ロックする必要があります。

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

iptablesの使用について覚えておくべき重要なことが2つあります。ルールを指定する順序が重要であり、それ自体では、iptablesルールは再起動後も存続しません。ここで一度に1つずつ説明します。

キオスクプロジェクト

このすべてを説明するために、BigMartと呼ばれるより大きなチェーンの一部である店で働いていると想像してみましょう。彼らは何十年も前から存在しています。実際、私たちの想像上の祖父母はおそらくそこで買い物をして育ちました。しかし、最近では、BigMartの本社の人たちは、Amazonが彼らを永久に追いやるまでの時間を数えているだけでしょう。

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

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

スクリプト

これがすべてBashスクリプトにどのように適合するかを示します。

#!/ bin / bash 
iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT- p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

ルールの基本的な構造は、-Aで始まります。 、次のルールを追加することをiptablesに通知します。 OUTPUT これは、このルールがOUTPUTチェーンの一部になる必要があることを意味します。 -p このルールがTCPプロトコルを使用するパケットにのみ適用されることを示します。ここで、-d 宛先はbigmart.comです。 -j フラグはACCEPTを指します パケットがルールに一致したときに実行するアクションとして。この最初のルールでは、そのアクションは要求を許可または受け入れることです。しかし、さらに下には、ドロップまたは拒否されるリクエストが表示されます。

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

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

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

マシンのIPが変更された場合は、このルールを更新することを忘れないでください。そうしないと、ロックアウトされます。

家で一緒に遊んでいますか(うまくいけば、ある種の使い捨てVMで)?素晴らしい。独自のスクリプトを作成します。これでスクリプトを保存できます。chmodを使用します 実行可能にし、sudoとして実行します 。 bigmart-data.com not foundことを心配する必要はありません。 エラー-もちろん見つかりません。存在しません。

 chmod + X scriptname.sh 
sudo ./scriptname.sh

cURLを使用して、コマンドラインからファイアウォールをテストできます。 。 ubuntu.comのリクエストは機能しますが、manning.comは失敗します。

 curl ubuntu.com 
curl manning.com

システムブート時にロードするiptablesの構成

Linuxターミナル

  • Linux用の上位7つのターミナルエミュレータ
  • Linuxでのデータ分析のための10個のコマンドラインツール
  • 今すぐダウンロード:SSHチートシート
  • 高度なLinuxコマンドのチートシート
  • Linuxコマンドラインチュートリアル

では、キオスクが起動するたびにこれらのルールを自動的にロードするにはどうすればよいですか?最初のステップは、iptables-saveを使用して、現在のルールを.rulesファイルに保存することです。 道具。これにより、ルールのリストを含むファイルがルートディレクトリに作成されます。 sudoを適用するには、パイプとそれに続くteeコマンドが必要です。 文字列の2番目の部分に対する権限:他の方法で制限されたルートディレクトリへのファイルの実際の保存。

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

この問題を処理する方法はたくさんあります。これが1つです:

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

 sudo iptables-save | sudo tee /root/my.active.firewall.rules 
sudo apt install anacron
sudo nano / etc / anacrontab
1 1 iptables-restore iptables-restore

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


Linux
  1. LinuxユーザーとパッケージャーがFedora上のPodman4.0について知っておくべきこと

  2. Linuxのアクセス制御リストと外付けドライブ:知っておくべきこと

  3. VPNとは何ですか? VPNについて知っておくべきことすべて

  1. Linuxディレクトリ構造について知っておくべき15のこと

  2. IPv6について知っておくべきこと

  3. Linuxファイルシステムについて知っておくべきことすべて

  1. LinuxChmodコマンドについて知っておくべきことすべて

  2. Linuxコンテナー(LXC)について知っておくべきことすべて

  3. LinuxUbuntuサーバーについて知っておくべきことすべて