月Linuxをサーバとして使う場合、iptablesにルールを追加したり、削除したりして再設定する必要が出てくる場面が多いと思います。このような場面にiptablesのルールを自由に編集し、さらに編集したルールを自動設定させてiptablesを運用管理する方法として、iptables-saveとiptables-restoreを使う方法と、シェルスクリプトを使う方法の2つを良く使います。ここでは、この2つの運用管理方法についてメモします。以降のコマンドは全てroot権限で行います。実行環境はubuntu12.04になります。iptables-save、iptables-restoreを使った運用管理方法iptablesには、現状のルール設定をファイルに書き出す「iptables-save」と、ファイルに書き込まれたルールを読み込んでiptablesにルールを設定する「iptables-restore」というコマンドが用意されています。よって、まず「iptables-save」で現状のルール設定をファイルに書き出し(以降では、書き出したファイルをルールファイルと呼ぶことにします。)、そのルールファイルにルールを書き加えたり、削除したりして編集したルールファイルを「iptables-restore」で読み込むことで、iptablesのルールを編集することができます。シェルスクリプトを使うことで編集したルールをPC起動と同時に自動設定させることができます。まとめると以下のような手順になります。iptables-saveで現状のルールをルールファイルとして書き出すルールファイルを編集する編集したルールファイルをiptables-restoreで読み込むiptablesのルールをPC起動と同時に自動設定させる以降で各手順についてメモします。iptables-saveで現状のルールをルールファイルとして書き出す下記のようにiptables-saveとLinuxのリダイレクト「>」を組み合わせて出力先のファイルを指定し、ルール設定を書き出し保存することができます。以下の場合は、現在のディレクトリに「iptables_rule」というルールファイルが作成されます。Linuxのリダイレクトについては下に参考サイトを載せておきます。iptables_rule書き出しルールファイルの中身については後述します。書き出したルールファイルを編集する前に、ルールファイルのコピーを取っておくことをお勧めします。コピーがあれば、間違って編集してしまった場合などに焦らずに済みます。よって私は以下のように、元ファイルに「.org」を付けてコピーを保存するようにしています。iptables_rule.org次はルールファイルを編集します。ルールファイルを編集するiptables-saveでルール設定を書き出したルールファイル(iptables_rule)の中身は例えば以下のような内容になります。(以下のルールファイルの内容は、あくまで例として挙げるために用意したものであり、実際に運用して使える内容ではないのでそのまま使わないで下さい。2013このファイルを見ると、「*nat」、「*mangle」、「*filter」とiptablesの3つのテーブル名が記述された行があり、この行以降に各フィルターのルールが記述されています。filterに関するルールを抽出すると、以下のようになっています。2013各行について順番に説明すると、以下のようになります。これはコメント部分になります。「#」から始まる部分は全てコメントになります。「*」にフィルター名が続き、ここから各フィルターに関するルールが記述されることを意味しています。ここでは、filterに関するルールの記述がここから始まることを意味しています。[バイトカウンタ:パケットカウンタ]」という形式で記述されています。バイトカウンタ、パケットカウンタはそれぞれ各チェインのルールに合致したバイト数、パケット数を表しています。[5:220]」は、INPUTチェインのポリシーはDROP(破棄)であり、そのバイトカウンタの値は5、パケットカウンタの値は220になります。iptablesのルールが記述されています。INPUT、FORWARD、OUTPUTの各チェインに関するルールが複数記述されていることが分かります。1行目と同様に実行日時です以上がfilterに関するルールの記述部分に関する説明になります。これはnat、mangleの各フィルターについても全く同じ形式で記述されています。よって、iptables-saveで作成したルールファイル編集する場合は、各フィルター毎に記述されたルール部分(上記のfilter部分に関しては6行目ー10行目が該当)に新しいルールを追加、削除、編集することになります。新しいルールを追加する場合、そのルールを記述する場所、すなわちルールの順番が意味を持つので気をつけて下さい。ルールの順番が持つ意味については、iptablesの設定内容確認と設定例が参考になるかもしれませんので参照下さい。ルールファイルの編集が完了したら、後はルールファイルをiptables-restoreで読み込めばiptablesのルール編集および設定は完了です。編集したルールファイルをiptables-restoreで読み込むルールファイルの編集が終わったら、後はiptables-restoreを使ってルールファイルをiptablesに読み込ませてルールを設定します。iptables-restoreは、以下のようにiptables-saveと同様、Linuxのリダイレクトを使用して、指定したルールファイルからルールを読み込んで設定します。iptables-saveの場合とはリダイレクトの向きが異なるので注意して下さい。iptables_ruleなお、iptables-restoreによってルールを設定しても、ubuntuを再起動すると、設定する前の状態に戻ってしまします。したがって、自分が作成したルールファイル通りのルールをubuntu起動時に自動設定させる必要があります。そのためにはシェルスクリプトを利用します。そこで自動設定させる方法を次にメモします。iptablesのルールをPC起動と同時に自動設定させる以上でiptablesのルール編集と設定は完了ですが、自分が作成したルールファイル通りのルールをiptablesにubuntu起動時に自動設定させる必要があります。そのためにはシェルスクリプトを利用します。具体的には、以下を記述したシェルスクリプト(ファイル名を「set_iptables.sh」とします)を作成して、そのシェルスクリプトを「/etc/network/if-pre-up.d/」に置きます。「if-pre-up.d」ディレクトリは、ubuntuが起動と同時に実行するシェルスクリプトを置く場所です。0そしてset_iptables.shに実行権限を与えるために以下のコマンドを実行します。set_iptables.shあとはubuntuの起動と同時に自動設定されます。firestarterなどのファイアウォールソフトウェアが動作している場合は注意が必要です。この場合は、上記の処理によってiptablesへルールが自動設定されても、iptablesのルールが上書きされてしまい、結局firestarterのルールが設定されることになります。よって、上記の作業によってiptablesnの自動起動を行う場合は、firestarterが自動起動しないようにするか、アンインストールする必要があります。以上がiptables-saveとiptables-restoreを使ってiptablesのルールを自由に編集し、さらに編集したルールをubuntuの起動と同時に自動設定させて運用する方法になります。シェルスクリプトを使った運用管理方法シェルスクリプトは、ターミナル上で実行するコマンドを複数まとめて記述したものであり、シェルスクリプトを実行することで記述された複数のコマンドを一度に実行できます。よって、iptablesのコマンドをシェルスクリプトとして記述して実行することで、iptablesのルールを設定することができます。シェルスクリプトの中身は、基本的にはiptablesのコマンドと同じものが記述されているだけになります。(ファイル名を「iptables_script.sh」とします。中身は以下のようになります。(以下のシェルスクリプトはあくまで例として挙げるために用意したものであり、実際に運用して使える内容ではないのでそのまま使わないで下さい。実際に運用できるシェルスクリプトとして参考にしたサイトを後に載せていますので、そちらを参考にしてみると良いと思います。ローカルループバックのことで自分自身を意味します。ACCEPT一部だけですが、シェルスクリプトとしては以上のようにiptablesのコマンドがひたすら羅列するだけになります。スクリプトを使うと、ポート番号やネットワークの定義ができるため管理が楽になります。上のシェルスクリプトにはありませんが、if文を使用して条件分岐して処理させることもできます。このように、シェルスクリプトを使うとかなり自由度の高いルール設定を行うことができます。注意点としては、上でも述べたように、iptablesのルールの順番が意味を持つので注意して下さい。上記のiptablesのコマンドについて不明な点が多い場合は、iptablesの概要メモが参考になるかもしれませんので参照してみて下さい。シェルスクリプトを作成したら、次にこのシェルスクリプトに以下のコマンドによって実行権限を与えます。iptables_rule.shそして実行権限を付与した後で以下のコマンドによってシェルスクリプトを実行すれば、シェルスクリプト内に記述されたルールがiptablesに設定されます。./iptables_rule.shまた、iptablesへのルールをPC起動と同時に設定するために、すでに説明したiptabes-save、iptables-restoreを使った方法と同様に、作成したシェルスクリプトを/etc/network/if-pre-up.dに置きます。これで作成したシェルスクリプトが自動実行されてiptablesにルールが設定されます。上でも説明したように他のファイアウォールソフトウェアが動作している場合は注意が必要です。実際に運用するシェルスクリプトを作成する際に参考になったサイトを以下に載せておきます。ありがとうございます。参考サイトQiita-俺史上最強のiptablesをさらすまとめiptablesのルールを編集して自動設定させて運用管理する方法2つをメモしました。個人的には、基本的にはシェルスクリプトを使った方法でiptablesを運用し、試したいルールがある場合などは、iptables-save、iptables-restoreを使って少しルールを編集してみるといったように使い分けるのが良いのかなと思っています。iptablesはLinuxをサーバ用途で使う場合には必須であり、まだまだ勉強不足な点が多いので少しづつ勉強してまたメモしていきたいと思います。後で読むサービスのPocketにかなり近く、機能豊富なオープンソースのWallabagをUbuntuにインストールしたのでその手順をまとめます。クラウドストレージは便利な反面、見知らぬ人が自分のファイルを閲覧できてしまったり公開状態になってしまっていたりというバグが発生し得ます。WireGuardはOpenVPNよりもシンプルで高速、より安全なVPNとして開発が進められており、OpenVPNに代わるVPNとして期待されています。コメントをキャンセルメールアドレスが公開されることはありません。virtualiment。