iptablesルールを保存する標準的な方法は何ですか


8

標準のLinuxファイアウォールであるiptablesは、再起動間のルールを保存しません。これは自分で処理する必要があります。これを行うには多くの方法があります。これを行うための標準的な方法は何ですか?ベストプラクティスとは何ですか?

私は自分のソリューションで答えますが、他の/より良いソリューションに興味があります。


回答:


6

ルールの例をいくつか示します。それらを/etc/iptables.rulesに保存します

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

この行を/ etc / network / interfacesの最後に追加します

pre-up iptables-restore < /etc/iptables.rules

1
これはUbuntu固有のものであることを指摘しておきます。Red HatおよびFedoraのバリアントの場合は、代わりに/ etc / sysconfig / iptablesが表示されます。
-esm

/etc/iptables.rulesの代わりにですか?それはUbuntuによって決定されていません、私はそれを自分で選びました。
2009年

4
/ etc / network / interfacesへの追加について言及していました。申し訳ありませんが、もっと明確にする必要がありました。FedoraとRHELにはinitscript(巧妙に「iptables」という名前が付けられています)があり、有効にすると、基本的に/ etc / sysconfig / iptablesのiptables-restoreを実行します。
-esm

3

多くのiptablesルールを使用しているため、管理を容易にするために次のことを行います。

  • ルールはすべてスクリプトから呼び出されます-スクリプトは/etc/init.d/firewallから呼び出されます(カスタムスクリプト)
  • サーバー名/ネットワーク名(IPアドレス変数)のファイルが保持され、一貫性を保つためにすべてのiptablesスクリプトに含まれています。
  • 物事を見つけやすくするために、サブネットごとに個別のスクリプトが保持されます(つまり、プライベート/ DMZ / VPNなど)。2つのスクリプトに属するルール(プライベートな通信とプライベートDMZを制限するものなど)は、より「安全な」ネットワークのスクリプトに入れられます。
  • 可能な限り、ループとネストされたループを使用して、スクリプトをできるだけ短くします。
  • 新しいルールまたは変更はすべて、スクリプトの適切なセクションの前にコメントを付けて文書化されます。

これがこれを行うための最良の方法であるかどうかはわかりませんが、私たちにとってはうまくいきました。


3

これは環境とプラットフォームに依存していることは事実ですが、プラットフォームに応じて、次の2つの良いアプローチを見てきました。

  • RHEL / CentOS:iptables起動スクリプトによって読み込まれる単一の/ etc / sysconfig / iptablesファイルにすべてのルールを保存します。

  • Debian / Ubuntu:/etc/iptables.d/ディレクトリの個別のサービス固有のファイルにすべてのルールを保存します。たとえば、/ etc / iptables.d / port_http、/ etc / iptables.d / port_dns、port_serviceは/ etc / servicesのサービス名にマップされます。

どちらの場合も、ファイルはChefやPuppetなどの構成ツールによって管理され、ブート時に実行されるiptablesの「マスター」起動スクリプトによって読み込まれます。


2
私はあなたのDebian / Ubuntuの例でのあなたの命名に本当に注意を払います。これは、ルール名の先頭に00、04、22などを付ける場所のような場所です。順序に依存するiptablesルールが多数あり、それらを間違った順序でロードすると、次のようになります。壊れたもの。何をしているのか本当にわかっているのでなければ、それらを1つのファイルに保存することをお勧めします。
クリストファーキャシェル09年

1

iptables-save(およびiptables-restore)に加えて、複雑なファイアウォールスキームは専用プログラムでより適切に処理されます。たとえば、shorewalliptablesの構成には(「iptablesを簡単に」)使用しました。

firestarterkmyfirewallなどのシンプルなツールも利用できます。


6
同意しません。単純なケースは専用プログラムで簡単に処理できますが、複雑なルールの場合、iptablesよりも明確なものは何も考えられません(明確な意味は明確で、初心者にとって必要ではありません)
Mikeage

2
ルールを単純化する理由によって異なります。iptables.rulesファイルは完全に読み取り可能だと思います。すべてを理解するには、コメント引数を利用することが重要です。
スポールソン2009年

私はあなたの意見の相違に同意しません。iptablesコマンドを読みやすくすることに焦点を当てている場合は、それらを順序付けしたりチェーンを使用したりしないため、ルールは可能な限り効率的になります。
Zoredache

1
Zoredache-Mikeageはここで間違っているよりも正しいと思います。iptablesのルールは、(私などのあまり熟練していない人にとって)読むのは難しいかもしれませんが、かなり明確である可能性があります。Mikeageが読みやすかったのではないでしょうか。
マイケルコーン、

1

これは、使用するディストリビューションによって異なります。一部のディストリビューション、特にRed Hatディストリビューションに基づくディストリビューションでは、iptablesルールは自動的に保持されますが、独自の特別なディレクトリにあります。私はRHELに最も精通しており、iptablesルールは/ etc / sysconfig / iptablesにあります。iptablesルールの構文に慣れることは、最初は難しいかもしれませんが、慣れるととても簡単です。

netfilter Webサイトには、いくつかの紹介を含むiptablesに関する多くのドキュメントがあります。あなたが少し読んでいるなら、ここで多くの良い情報を見つけることができます:http//www.netfilter.org/documentation/


redhatでは、/ etc / sysconfig / system-config-securitylevelを最新に保つこともできます。これは、system-config-securitylevel-tuiが起動時にルールを取得する場所です./etc/sysconfig/system-config-securitylevelを最新に維持しない場合、誰かがsystem-config-securitylevel-tuiを実行すると、失う可能性があります/ etc / sysconfig / iptablesに保存されているルール。
Jason Tan、

1

この質問は4934の dupであることに非常に近く、397に関連しています。

私は、設定ファイルを管理するために開発したWebインターフェースと組み合わせたファイアホールを使用します。

私はファイアホールが本当に好きです、それは単純な構文を提供し、次に直接iptablesを使用します。

  • firehol debugコマンドを使用して、生成されるiptablesコマンドを正確に確認できます
  • 構成にエラーがあり、ファイアウォールを開始すると、fireholがエラーを検出し、以前の状態に戻ります。
  • Fireholには、ファイアウォールをリモートで起動するために使用できる「try」コマンドがあります。変更によって接続が切断された場合、fireholは以前の状態に戻ります。接続を切断しなかった場合は、変更の確認を求めます。
  • Fireholには多数のサービスが事前に定義されているため、不明瞭なプロトコル用に開くポートを用意する必要があるポートを正確に覚えておく必要はありません。

1

もちろん、カスタムのinitスクリプトを使用します。forループを使用して、ポートのリストを反復処理したり、vpn-usersなどの他の構成ファイルを解析したりできます。

そして、iptables-restoreは確かにそれを保存する最も「標準的な」方法です。

追加したいもの:

iptablesの現在のバージョンは、呼び出しごとにカーネルにチェーンの完全なリストを返すように要求することに注意してください。次に、実行するように要求された1つの変更を行います。次に、リストを再度アップロードします。

これは遅いです(O(n ^ 2))、私たちには5秒必要ですが長すぎます;-)

iptables-restoreを使用すると、1回の操作ですべてが完了します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.