# iptables -t nat -N test # iptables -t nat -A test -p tcp -j REDIRECT --to-port 80 # iptables -t nat -A test -p tcp -j MASQUERADE # iptables -t nat -A POSTROUTING -j test iptables: Invalid argument. Run `dmesg' for more information. # dmesg | tail -n 1 ip_tables: REDIRECT target: used from hooks POSTROUTING, but only usable from PREROUTING/OUTPUT # iptables -t nat -A PREROUTING -j test iptables: Invalid argument. Run `dmesg' for more information. # dmesg | tail -n 1 ip_tables: MASQUERADE target: used from hooks PREROUTING, but only usable from POSTROUTING

この投稿は、iptablesプログラムとそのWebインターフェイスに関するものです。
Iptablesのようなすばらしいプログラムに慣れていない人は、この記事の最後の2つのセクションを参照してください。
プロット
http://iptadmin.confmgr.org/
Iptadmin-Linuxのファイアウォールでの作業を簡素化する試み。 現時点では、これは少数のiptablesオプションのみで機能するシンプルなWebインターフェースです。 BSD3。
Iptadminの利点:
- ルールのリストを表示することは、各チェーン内に番号が付けられたブラウザーで
きれいです。 また、一部の場所では、カラーバックライトを使用します。 iptables -L -vn -line-numbersを常に入力してルールを制御する代わりに。 - マウスカーソルとチェックボックスを使用してルールを作成および編集する機能。
- 可能な場合は、正しい入力オプションのみが提供されます。 投稿の冒頭で説明した状況は警告されています。
- モジュールオプションを自動的に追加します。
- ネットワークを介した管理インターフェイスへのアクセスを禁止するルールの作成に対する保護。
- Iptadminをインストールしても、何も変更されず、Iptablesルールが損なわれません。 Iptadminは、システムに中間データを保存しません。 いつでも、使い慣れたコンソールインターフェイスを使用したり、Iptadminを削除することもできます。
iptablesに関するプログラムの短所:
- 別の絶えず働く大食い悪魔。 動作するには約数メガバイトのメモリが必要です。 セットアップ中にのみ開始できます。 しかし、悪魔を開始してから停止するには、余分な体の動きです。
- ルート権限を持つプロセスは、ネットワーク経由でリッスンします。 プロセスはデバッグされ、テストされ、静的に型指定され、ポインターのない高レベル言語で、ガベージコレクションが行われます。 ただし、ルートの下で機能し、ネットワークポートでリッスンします。
- これまでのところ、最も一般的に使用されるiptablesオプションのいくつかのみがサポートされています。 重要なルールはすべてコンソールから設定する必要があります。
類似物はありますか?
同様のプログラムがあります。 しかし、詳細な比較分析は行われませんでした。 以下にいくつかのリンクと小さなコメントを示します。
- Webminのモジュール。 iptablesレベルで動作します。 すべてまたはほぼすべてのルールオプションをサポートします。 構成ファイルを壊します。 perlで書かれています。 http://doxfer.webmin.com/Webmin/LinuxFirewall
- Red HatのSystem-config-firewall 。 iptablesに最適なGUIの1つ。 ポートを開いたり閉じたり、ブロードキャストを設定したりできます。 しかし、すべてはユーザーから隠されています。 複数のルールが1つのチェックマークに追加されます(たとえば、「信頼済み」リストにインターフェイスを追加する場合)。 プログラムは、決して重要なルールを表示しません。 http://fedoraproject.org/wiki/SystemConfig/firewall
- Ubuntu用のシンプルなファイアウォール+ GUI 。 また、高レベルのインターフェイスですが、System-config-firewallよりもうまく機能しません。 作業を開始する前に、「手動による変更はすべて失われます」という警告が表示されます。 http://gufw.tuxfamily.org/
- ショアウォール 。 iptablesの抽象化。 すべてはテキストファイルで構成されます。 perlで書かれています。 http://www.shorewall.net/
- Firewall Builder -iptables、ipfw、iron firewallsなど、多くの形式に変換するファイアウォールルールを開発するためのIDE。 おそらく、多数のファイアウォールを備えた巨大なインフラストラクチャに最適なツールです。 http://www.fwbuilder.org/
iptablesが何であるかを知らない幸運な人々へのあとがき。
Linuxオペレーティングシステムのカーネルのコンポーネントの1つはファイアウォールです。 これにより、多くの種類のトラフィックフィルタリングを実行できます。 さらに、カーネルにはネットワークアドレスを変換する機能があります。 たとえば、Linuxベースのネットワークゲートウェイは、ローカルネットワークをインターネットに接続するために構築されています。
LinuxファイアウォールのユーザーインターフェイスはIptablesです。 これはコマンドラインプログラムで、テキストターミナルを介してユーザーと対話します。 ルールを作成するときは、ルールパラメータを覚えておくか、マニュアルページを常に開いたままにしておく必要があります。 また、iptablesも詳細な入力エラーメッセージと同じです。 一部のエラーは、カーネルロギングによってのみ報告されます。
Linuxサブシステムの場合によくあることですが、Iptablesには、構成するための独立した専門家がほとんど必要です(構成が難しいコンポーネントのその他の例:PAM、Selinux、Policy kit)。
iptablesを使用する際の典型的なワークフロー
たとえば、サブネット10.0.0.0/16からアクセスする場合、192.168.1.1:80から192.168.0.3:8000のDNATを作成します。
# iptables -A POSTROUTING -s 10.0.0.0/16 -d 192.168.1.1 --dport 80 -j DNAT --to-destination 192.168.0.3:8000 iptables v1.4.7: unknown option `--dport' Try `iptables -h' or 'iptables --help' for more information.
したがって、iptablesは--dportオプションについて何も認識しません。これを使用するには、-p tcpオプションを指定する必要があります。
そして、どうすれば忘れられますか?
# iptables -A POSTROUTING -s 10.0.0.0/16 -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:8000 iptables: No chain/target/match by that name.
IptablesはPOSTROUTINGチェーンについて何も知りません。 どうして? スペルを間違えずに名前を読み直します。
あ! テーブル「nat」を指定する必要があります。 デフォルトでは、iptablesはフィルターテーブルを使用します。
# iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:8000 iptables: Invalid argument. Run `dmesg' for more information
今度はdmesgを読んで、今回は何が悪いのかを調べる必要があります。
# dmesg | tail [ 44.855055] Bluetooth: BNEP filters: protocol multicast [ 44.891259] Bluetooth: SCO (Voice Link) ver 0.6 [ 44.891262] Bluetooth: SCO socket layer initialized [ 45.021718] Bluetooth: RFCOMM TTY layer initialized [ 45.021726] Bluetooth: RFCOMM socket layer initialized [ 45.021728] Bluetooth: RFCOMM ver 1.11 [ 93.795558] fuse init (API version 7.14) [ 93.823129] SELinux: initialized (dev fusectl, type fusectl), uses genfs_contexts [ 93.862287] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts [ 1912.405272] x_tables: ip_tables: DNAT target: used from hooks POSTROUTING, but only usable from PREROUTING/OUTPUT
もう一つの間違い。 DNATはPOSTROUTINGではなくPREROUTINGチェーンで機能します。 最後に、コマンドを実行します:
# iptables -t nat -A PREROUTING -s 10.0.0.0/16 -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:8000 #
やった! 完了しました。 DNATルールが追加されました。