fermでiptablesを構成する

Fermはiptablesの低レベルのアドオンで、iptablesパラメーターリストで一種のループを整理できます。 これは、複雑なファイアウォールルールを設定するときに特に役立ちます。iptablesのみを使用して-t filter -A INPUT -p tcp --state NEW ...を繰り返し、-p udp、一般的にはwho泳いだ-知っている。



Fermは、iptablesの完全な柔軟性を維持しながら、少ない労力で同じ効果を達成できるという点で素晴らしいです。 したがって、たとえば、ftp、ssh、およびhttpポートへの新しい接続を許可し、他のすべて(接続されているものを除く)を禁止するには、次のような構成を記述できます。

chain INPUT {

policy DROP;

mod state state (RELATED ESTABLISHED) ACCEPT;

proto tcp dport (http ftp ssh) ACCEPT;

}








驚くべきことに、検索ではfermについて1つの記事のみが提供されますが、これはferm自体とは何の関係もありません。 誰もがすでにすべてを知っていて、それは誰にとっても明白であるか、またはその逆です。 後者に基づいて、私はこのトピックを書くことにしました。







なぜこれが必要なのですか?



単純な場合-それはまったく必要ありません。 しかし、ここには、たとえば、2つのアップリンクを備えたソフトウェアルーターがあります。 ファイアウォール構成は102個のルールで構成されています。 それらの多くは、1つのパラメーターの違いで繰り返されます。 神が禁じている場合、その中の何かを変えたいと思うと、目が痛くなり、少なくとも20分間、何を、どこで、どのように思い出そうとします。 同意し、不快です。



この場合のFermは、読みやすいだけでなく、多少コンパクトな構文も節約します。 たとえば、同じferm.confサーバー(コメントと空の行を除く)で84行になり、ip6tablesも構成します。 個々のステッチはそれぞれ短くなります。 8960個のiptables文字と2998個のferm文字。



fermを使用する場合、iptablesの機能に実質的に制限がないことを考えると、明らかな利点があります。



特に、fermはスクリプトルールを記述するための非常に高度な機能を提供します。 外部プログラムと条件ステートメントを呼び出します。 しかし、これはすでにトピックの範囲を少し超えています。



どのように機能しますか?



Fermは、ルートを見ると、ferm config形式をiptables呼び出し(またはiptables-save / restore形式)に変換するperlスクリプトです。 したがって、非常に簡単に機能します。定義済みの規則で構成を読み取り、適切なパラメーターでiptablesを呼び出します。 一般的に、特別な魔法は存在しません。



構成形式(簡単に)


一般に、構成はCに少し似た形式のリストの列挙です。命令の区切り文字はセミコロンです。 ネストされたリストは、中括弧を使用して編成されます。 単純なリスト-ラウンド。 まだ明確ではありませんか? 例を考えてみましょう。



iptablesルールがあるとしましょう

iptables --protocol tcp -j ACCEPT

フェルムでは、として放送されます

プロトコルtcp ACCEPT;

ここでは改行は重要ではなく、セミコロンのみが重要です。



この場合のテーブルとチェーンはデフォルトです(-t filter -A INPUT)。



テーブルとチェーンは、テーブルとチェーンのキーワードを使用して定義されます。 例えば

テーブルNATチェーンPREROUTINGプロトコルtcp dport 12345 DNATから1.2.3.4。



一般に、ルールは場所(テーブル、チェーン)、ルール自体(プロトコルtcp、dport 12345)、およびアクション(1.2.3.4へのDNAT)で構成されます。 ルール自体には、純粋なiptablesを使用する場合と同じ制限が適用されます。 ここでは、テーブル、チェーン、プロトコル、dport、およびDNATがキーワードです。 それらの後に来るのはパラメータです。



次に、魔法を追加します。 キーワードのパラメーターとして、実際の値だけでなく、値のリスト(関数または変数のいずれかですが、これもトピックの範囲を超えています)を指定できます。

テーブルNATチェーンPREROUTINGプロトコル(tcp udp)dport(12345 54321)DNAT 1.2.3.4;



そして今、さらに魔法があります-パラメーターのリストでこれらのすべてを達成することはできないので、キーワードのリストを定義できます:

テーブルNATチェーンPREROUTING {protocol tcp dport 12345 DNAT to 1.2.3.4; プロトコルudp dport 54321 DNATから1.2.3.4へ。 }



どこから始めますか?



私があなたに興味を持ったなら、トピックの目標は完了しています。 プロジェクトのWebサイトから開始できます: ferm.foo-projects.org

Debian、Gentoo、およびFedoraでは、fermはリポジトリからインストールされます。



それは人間のフェルムを読む価値があります、それは非常に詳細です、それは明確なプラスです。



例を見ることは価値があります(私にとっては/ usr / share / doc / fermに行きました-* /例、別の方法があるかもしれません)



とりわけ、知っておく価値のあるものが2つあります。既存の構成のインポートとコマンドラインオプションです。



インポート


fermには、iptables-save出力を受け取り、その出力をferm形式で書き込むimport-fermユーティリティが付属しています。 このユーティリティが標準入力に何かを提供する場合、iptables-saveの出力のように解釈し、何も呼び出しません。 送信しない場合、それ自体がiptables-saveを呼び出します。



標準出力では、ferm-configを取得します。これは後でダウンロードできます。 一般的に、すべてがとてもフレンドリーです。



コマンドラインオプション


これは非常に便利です。

--noexec

iptablesを呼び出しません。 --linesで理にかなっています

-行

生成されたiptablesの構成を表示します(実行します!単に見たい場合は、-noexecを使用してください)

-インタラクティブ

構成を適用し、ユーザー入力を要求します。 30秒間入力がない場合、古い設定を返します。 午前3時にリモートマシンでルールを編集するときに非常に便利です:)

--fast / --slow

最初のものにはiptables-restoreによる動作モードが含まれ、2番目にはiptables呼び出しによる動作モードが含まれます。 バージョン2.0からは、デフォルトで高速が-低速にそれぞれ使用されます。 iptables-restoreのエスケープされた文字に関していくつかの注意事項があるため、まれに--slowがより安定する可能性があります。 --slow --linesは、呼び出しの直前に行を出力します。これは、デバッグに非常に便利です。



さて、構成ファイルへのパスは必須パラメーターです。



残りはマニュアルに記載されています。



PS





トピックが興味深い場合は、ferm config形式にさらに進むことができます。 ただし、これは主に人間のフェルムと例の自由な翻訳/改作であることに留意する必要があります。



All Articles