In Linuxベースのオペレーティングシステム、 ファイアウォール 使用する卓越性はiptablesですが、iptablesの進化形であるnftablesを使用することも可能です。これは、はるかに効率的で、はるかに「人間的な」構文を備えています。ただし、世界中でnftablesが使用されているわけではありません。 今日は、Ferm(For Easy Rule Making)を使用してLinuxサーバーでファイアウォールを構成する方法を説明します。これにより、次の構文を学習しなくても、ファイアウォールにルールを非常に簡単、迅速、簡単に追加できます。 iptables。
Fermファイアウォールとは何ですか?それは何のためですか?
Ferm(For Easy Rule Making)はiptablesのフロントエンドです。つまり、実際にはiptablesを使用してトラフィックを許可または拒否していますが、の構文を学習しなくても、非常に高度な方法でファイアウォールを構成できます。 iptablesを使用するか、iptablesを使用して別のスクリプトを作成しますが、Fermを使用して直接実行します。 このツールは、定義する構成ファイルからルールを読み取ることができ、後でiptablesを「呼び出し」て、さまざまなルールをXNUMXつずつ追加し、カーネルにリアルタイムで挿入します。
Fermの目標は、システム管理者とネットワーク管理者にすべてのファイアウォールルールを簡単に読み書きできる方法を提供し、ルールを次々に作成する必要がないようにすることです。これにより、ルールの開発と最適化により多くの時間を費やして、ルールを次のように作成できます。可能な限り効率的です。 Fermは非常にシンプルですが非常に高度な構成言語を使用しており、変数、関数、配列、さらにはブロックを使用できます。 Fermの他の非常に興味深いオプションは、ディレクトリに他の構成ファイルを含めることができ、これらすべてのルールのインポートと適用を自動的に処理することです。
Fermはまだiptablesフロントエンドであるため、このツールを使用すると、iptablesコマンドを使用してファイアウォールをいつでも直接編集および構成できます。 実際、Fermは現在のiptablesルールをインポートし、それらを構成ファイルに自動的に配置して、後で編集または展開することができます。
最も人気のあるiptablesフロントエンドのXNUMXつはufwであり、システムおよびネットワーク管理者がファイアウォールを簡単かつ迅速に構成するために広く使用しています。
Fermの設置と試運転
Fermのインストールは非常に簡単で、現在、さまざまなLinuxベースのディストリビューションのほとんどのリポジトリにあります。この場合、Debianの最新バージョンを使用して、これから説明するすべてのテストを実行しました。 iptablesフロントエンドであるこのプログラムをインストールするには、次のコマンドを実行する必要があります。
sudo apt install ferm
このコマンドを実行すると、次のようなものが表示されます。ここには、インストールする必要のある追加のパッケージが表示されます。基本的に、このプログラムを正しく実行するには、Perlをインストールする必要があります。
Fermインストーラーは、起動時に/etc/ferm/ferm.confパスからファイアウォールルールをロードすることを通知します。つまり、このファイル内のすべてが自動的にiptablesに渡され、トラフィックネットワークを許可または拒否します。 このファイアウォールのデフォルト設定では、ポート22を介してSSHでリモートアクセスできます。このポートにSSHが設定されていない場合は、デフォルト値を編集して「いいえ」をクリックし、起動しないようにする必要があります。そうしないと、接続が失われます。
はいまたはいいえを選択すると、aptはこのプログラムを機能させるために必要なすべての追加パッケージのインストールを完了します。
インストールしたら、/ etc / ferm / pathに移動すると、ferm.confという構成ファイルと、ferm構成ファイルを組み込んでインポートできるferm.dというディレクトリの両方が表示されます。これにより、次のことが可能になります。私たちはより大きなモジュール性を持っています。
Fermには、いつでも削除できるルールのリストがデフォルトですでに付属していますが、これは、このiptablesフロントエンドの構文を処理するのに役立つため、非常に役立ちます。 構文を見ると、nftablesに似ていますが、iptablesに基づいていることがわかります。
次のスクリーンショットでは、構成されるドメイン(iptablesまたはip6tables)、テーブルとチェーン、およびさまざまなチェーン内にあるルールがどのように宣言されているかを確認できます。
デフォルトでいくつかのルールがあることもわかります。
- INPUTチェーンでは、ポリシーはDROPであり、ローカルホストトラフィックが許可され、ICMPトラフィックが許可され、IPsec経由およびデフォルトポートのSSH経由で接続が許可されます。 接続のステータスに関しては、無効な接続が削除され、確立された接続と関連する接続は許可されますが、特別に定義されたものを除いて、新しい接続は許可されません。
OUTPUTチェーンでは、ポリシーはすべてを受け入れることであると定義されており、接続の状態により、確立および関連するものが許可されます。 FORWARDチェーンでは、トラフィックはポリシーによって拒否され、無効な接続は明確にブロックされますが、確立され、関連する接続は許可されます。
次に、この構成ファイルをテキスト形式で表示できます。
# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;
#接続追跡
mod状態状態INVALIDDROP;
mod state state(ESTABLISHED RELATED)ACCEPT;
#ローカルパケットを許可する
何を受け入れるかをインターフェースします。
#pingに応答する
プロトicmp ACCEPT;
#IPsecを許可する
プロト udp dport 500 を受け入れます。
@if @eq($ DOMAIN、ip){
proto(esp ah)ACCEPT;
} @そうしないと {
proto(esp)ACCEPT;
}
#SSH接続を許可する
proto tcp dport ssh ACCEPT;
}
チェーン出力{
ポリシーACCEPT;
#接続追跡
#mod state state INVALID DROP;
mod state state(ESTABLISHED RELATED)ACCEPT;
}
チェーンフォワード{
ポリシーDROP;
#接続追跡
mod状態状態INVALIDDROP;
mod state state(ESTABLISHED RELATED)ACCEPT;
}
}
}
@include ferm.d /;
最も興味深い部分は、最後の部分にある「@include ferm.d /」です。これは、問題のディレクトリにあるすべての構成ファイルをインポートすることを意味します。
以下のこのFermファイアウォールはiptablesを使用するため、次のコマンドを実行すると次のようになります。
iptables -L
ファイアウォールに組み込まれているすべてのルールを使用して、iptablesの現在の状態を確認できます。
デフォルトのFerm構成を確認したら、実行できるさまざまな構成例を確認します。
Fermの基本構成
Fermの構文は非常に単純で柔軟性がありますが、正しい構成を行うにはそれを学ぶ必要があります。 私たちはあなたをお勧めします Fermの公式マニュアルにアクセスする 使用する構文と、構成ファイルでさまざまなルールを宣言する方法に関するすべての詳細が記載されています。この公式マニュアルのおかげで、このファイアウォールを多くの問題なく構成できます。
最初に覚えておくべきことは、すべてのFermルールは中括弧で始まり、中括弧で終わり、ルールはセミコロンで終わるということです。したがって、これはプログラミングでよく知られている構文です。 その他の興味深い機能は、改行が無視されることです。行末に「#」を付けることで、どこにでもコメントを付けることができます。
iptablesとfermの構文に関しては、いくつかの違いがあります。
- 入力インターフェースを定義するには:インターフェース(if)
- 出口インターフェースを定義するには:outerface(of)
- 原点を定義するには:saddr
- 宛先を定義するには:daddr
- プロトコルを定義するには:proto
- 原産地:スポーツ
- 宛先ポート:dport
- モジュールをロードします:mod
- カスタムルールにジャンプ:ジャンプ
Fermには、-A、-I、-C、-R、-Dなどのコマンドはありません。すべてが構成ファイルに書き込まれるため、新しい文字列を追加、名前変更、または削除するコマンドでも同じことが起こります。今ここは完全に消えます。 他の機能は、fermを使用すると、他のルール内で使用されるさまざまなルールを継承して、構成ファイルにネストできることです。
構文がどのようなものかが大まかにわかったら、それをiptablesと比較するいくつかの例を見ていきます。それらすべてで、«INPUT»チェーンの«filter»テーブルで作業します。
iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT
fermでは、これは次のように記述されます(フィルターテーブルからOUTPUTチェーンとFORWARDチェーンのポリシーを追加します)。
domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}
Fermを使用すると、ルールを何度も繰り返すことなく、INPUTとOUTPUTで同じルールを簡単かつ迅速に定義できます。 たとえば、INPUTチェーンとOUTPUTチェーンの両方でTCPプロトコルを受け入れたいとすると、iptablesでは次のようになります。
iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT
Fermを使用すると、次のようにするのと同じくらい簡単です。
domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}
ご覧のとおり、この同じルールをINPUTとOUTPUTの両方に適用する方がはるかに高速で簡単です。
このファイアウォールには、非常に興味深い関数も組み込まれています。たとえば、変数または関数が定義されているかどうかを確認したり、XNUMXつの値が同じか異なるかを確認したり、ブール値を拒否したり、Fermから直接ドメインを解決したり、パラメーターを連結したり、長い関数のリスト。
Fermでは、iptablesモジュールを「ロード」してそれらを使用したり、高度な方法でファイアウォールを構成したりすることもできます。たとえば、次のようなものがあります。
mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;
構成ファイル全体に配置できること。
Fermで導入されたルールを適用するには、次のコマンドを実行する必要があります。
ferm -i -t 10 /etc/ferm/ferm.conf
iptablesルールをFermにインポートする
Fermを使用すると、現在実行中のiptablesルールをFermファイルに簡単かつ迅速にインポートして後で変更できます。 これを実行するには、iptablesルールをメモリ(現在使用中)にロードして、次のコマンドを実行する必要があります。
import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf
それを実行すると、Fermの構文で直接iptablesルールを確認できます。
テキストファイルにあるiptablesルールをFermに変換する場合は、次のコマンドを実行できます。
import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf
ご覧のとおり、fermは優れたiptablesフロントエンドであり、iptablesの構文を学習したり、構成ファイルでルールを正しく整理したりしなくても、高度な方法で構成できます。 ただし、私たちの意見では、すべてのiptablesルールを使用してbashスクリプトを正しく構成するために、フロントエンドや追加のソフトウェアは必要ありませんが、一部の人にとっては便利かもしれません。 Nftablesは、コンソールコマンドを介して対話的にだけでなく、構成ファイルに直接ルールを構成する可能性をすでに組み込んでいることを覚えておく必要があります。