
Ubuntu日本語フォーラム

ログインしていません。
Linux(Ubuntu)を始めたものです。
動作環境は以下の通りです。
OSバージョン:8.10 Desktop 日本語 Remix
カーネルバージョン:2.6.27-11
iptablesパッケージ:1.4.6-4ubuntu2
【事象】
Desktop版でiptablesを利用して、ファイアウォールを設定したいと思っています。そのために、以下のディレクトリにiptablesのポリシーを保存・反映させるシェルを配置して、PCを再起動したのですが、保存も起動時に反映をされません。この方法はインターネットで調べて参考にこの方法でやってみました。
・iptableのポリシーを起動時にiptableに反映するシェル
配置ファイル:/etc/network/if-pre-up.d/iptables
シェルの内容:
#!/bin/sh
iptables-restore < /etc/iptables_rule.save
・iptableのポリシーを停止時に保存するシェル
配置ファイル:/etc/network/if-post-down.d/iptables
シェルの内容:
#!/bin/sh
iptables-save > /etc/iptables_rule.save
・シェル配置の状況
if-post-down.d:
-rwxr-xr-x 1 root root 51 2009-02-14 12:47 iptables ←ポリシー保存シェル
if-pre-up.d:
-rwxr-xr-x 1 root root 54 2009-02-14 12:47 iptables ←ポリシー反映シェル
・シェル自身は、手動では正常に動作することは確認できています。
【やりたいこと】
1.PCシャットダウン時に、iptablesのポリシーを保存(iptables-save実行)する。
2.PC起動時に、保存したポリシー保存ファイルをiptablesに反映(iptables-restore実行)する。
※「ufw」というファイアウォール機能もあるようですが、できればiptablesで実現させてみたいのですが?
一番良い実現する方法があれば、ご教示をお願い致します。
最後の編集者: chacha (2009-03-06 21:57:08)
オフライン
私の8.10の環境で実験してみたところ、
network-managerパッケージ を削除し、往年の方法でネットワーク設定を行うと、chachaさんのやり方で動きました。
※往年の方法とは、/etc/network/interfaces、/etc/resolv.conf を設定するやり方です。(やり方は調べてみてください)
逆に、network-managerパッケージが導入されているとセーブも反映もできませんでした。
理由はよく分かりません。
最後の編集者: STGSAGWAN (2009-02-16 03:25:22)
STGSAGWAN による投稿:
私の8.10の環境で実験してみたところ、
network-managerパッケージ を削除し、往年の方法でネットワーク設定を行うと、chachaさんのやり方で動きました。
※往年の方法とは、/etc/network/interfaces、/etc/resolv.conf を設定するやり方です。(やり方は調べてみてください)
逆に、network-managerパッケージが導入されているとセーブも反映もできませんでした。
理由はよく分かりません。
network-managerは、まさしく/etc/network/interfaces、/etc/resolv.confを直接編集せずにネットワークを使うために作られたため、
/etc/network/interfaces、/etc/resolv.conf等を監視し続け、また(見方によっては勝手に)書き換えます。
そのため、network-managerが導入されていると"往年の方法"は使えません。
network-managerを残しておくならば、Ubuntu(Debian)ではおそらくinitスクリプトを使うのが良いのですが
http://www.jp.debian.org/doc/manuals/reference/ch-system#s-boot
iptables単体で のinitスクリプトは用意されていないようなので、自身で作成する事になるのかと思います。
※サンプル等のありかをご存知の方いらっしゃいましたらお力添え頂ければ・・・
ちなみに、 ufw は python で書かれているiptablesの簡易設定ツールです。例えば
sudo ufw default DENY sudo ufw enable
と実行するだけで
例:/etc/ufw/before.rules抜粋 (略) # allow all on loopback -A ufw-before-input -i lo -j ACCEPT -A ufw-before-output -i lo -j ACCEPT # connection tracking rules -A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # drop INVALID packets # uncomment to log INVALID packets #-A ufw-before-input -m conntrack --ctstate INVALID -j LOG --log-prefix "[UFW BLOCK INVALID]: " -A ufw-before-input -m conntrack --ctstate INVALID -j DROP # connection tracking for outbound -A ufw-before-output -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT -A ufw-before-output -p udp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT (略)
など、所定のディレクトリにルール一式を自動生成し、initスクリプトを用意し、その生成されたルールを起動時に自動的に適用するようになります。
オフライン
下記の記事にあるスクリプトで実現できます。
CentOSから移行する際にお世話になりました。
iptables firewall script [example] [Archive] - Ubuntu Forums
http://ubuntuforums.org/archive/index.php/t-19106.html
オフライン
STGSAGWAN様、ack様、pasela様
ご連絡が遅れてすみませんでしたが、アドバイスありがとうございます。
【現状】
ack様からのアドバイスを参考に若干違うとは思いますが、保存しておいたポリシーを反映してiptablesが起動できるようになりました。
・/etc/rc0.dと/etc/rc6.d → S00iptables-save(ポリシーを保存するシェル)
・/etc/rc2.d → S99ziptables-restore(ポリシーを反映するシェル)
ひとまずは、ポリシーを反映させてiptablesを動かしたいので、見た目は悪いのですが動いています。:)
【今後の展開としては】
1.pasela様から提供して頂いたスクリプトを勉強して、もう少ししっかりした起動スクリプトを考えてみます。
2.STGSAGWAN様からのアドバイスにある、network-managerパッケージ を削除する方法もチャレンジしてみたいと思いますが、
まだLinuxを始めたばかりなので、network-managerパッケージを削除した場合の影響度が想像つきません。
【よろしければ教えてください】
1.network-managerパッケージ 削除は単体のみの削除で完了しますか?それとも依存するパッケージの削除も必要でしょうか?
2.network-managerパッケージ を削除した場合、手動でネットワーク設定するのは、/etc/network/interfaces、/etc/resolv.confだけでしょうか?
→2つのファイルの設定方法はネットなどで調べてみます。
オフライン
chacha による投稿:
2.STGSAGWAN様からのアドバイスにある、network-managerパッケージ を削除する方法もチャレンジしてみたいと思いますが、
まだLinuxを始めたばかりなので、network-managerパッケージを削除した場合の影響度が想像つきません。
パッケージレベルで言うと、影響範囲は、
apt-cache rdepends network-manager
network-manager
Reverse Depends:
evolution
evolution
sugar
kwlan
education-standalone
network-manager-kde
network-manager-gnome
evolution
なので、これらの非依存パッケージはnetwork-manager削除時に一緒に削除されるでしょう。
以前の私の書き込みは「network-managerパッケージを削除したら動きましたよ」という報告としてとらえていただきたいです。
言葉たらずでしたが、決して「network-managerパッケージを削除すべき」というアドバイスではないです。
network-managerが、/etc/network/if-post-down.d/、etc/network/if-pre-up.d/ などの仕組みと親和性がないのでは?という切り口のつもりで書きました。
私は常時Ubuntu 8.04を使っていますが、最初からnetwork-managerを削除した状態で使っています。
テキストファイルで設定をしたい!という古い気質なので、こればかりは好みの問題です。
何ヶ月も使っていますが、今のところ全く問題はないです。
Ubuntu 8.10については常時使っていないので、私の口からは経験では何も語ることができないです。
自作initスクリプトによる解決方法を他の方が紹介されているので、そちらの方法の方がより良いと思います。
# 私はinitスクリプトで解決するだろうとは思いもよらなかったです。
chacha による投稿:
1.network-managerパッケージ 削除は単体のみの削除で完了しますか?それとも依存するパッケージの削除も必要でしょうか?
そのあたりはSynapticがやってくれます。
前述のとおり、非依存パッケージは同時に削除されます。
chacha による投稿:
2.network-managerパッケージ を削除した場合、手動でネットワーク設定するのは、/etc/network/interfaces、/etc/resolv.confだけでしょうか?
Linuxを何年もやってきたわけではないのではっきりは分からないですが、私は通常その2つのファイルだけで設定しています。
STGSAGWAN様、ack様、pasela様
最初に、3名の方にはご迷惑をお掛け致しました。すみませんでした!
【結果】
当初配置したiptablesシェルのファイルタイプが間違っていました。以下の通り"ASCII text"形式のため、service networking restartを実行した時に
シェルの起動が失敗していることが本日判明しました。(※本日、DHCPから固定IPアドレスに/etc/network/interfacesを変更したときに、netwokingを
restartして気づきました)
root@chachamaru-only:/etc/network/if-pre-up.d# file *
iptables: ASCII text ←本来正しく作成すれば、下のようなシェルスクリプト形式ですね
wireless-tools: POSIX shell script text executable
このシェルをどうやって作成したか、もう記憶に残っていませんが、viで再度作成し直しました。
今後シェルを作成するときは、ファイルタイプがどうなっているか注意します。(反省)
【現状】
本来通り、/etc/network/if-pre-up.dと/etc/network/if-post-down.dにシェルを配置して正しく動作しています。
ちょっと、時間がかかりましたが解決しました。ありがとうございます。(固定IPアドレスも一緒に済みました)
最後の編集者: chacha (2009-03-06 21:58:42)
オフライン