Linux:iptablesの設定を保持する方法

このQ&Aのポイント
  • Linux CentOS 6 の専用サーバーでwebサイトを立ち上げている場合、iptablesの設定を保持する方法について教えてください。
  • ポート開放の設定を行った後、数日経つと初期状態に戻ってしまいます。起動時の自動設定に適用されるファイルは /etc/sysconfig/iptables でしょうか?
  • サーバーは稼働しつづけており、設定が初期値に変更されるのが不思議です。自動起動時に読み込むファイルが間違っていたとしても、サーバーが再起動しなければ初期状態に戻らないはずです。設定ファイルを読み直す周期やメモリの開放に関する機能が元々存在するのでしょうか?ご存知の方がいれば教えてください。
回答を見る
  • ベストアンサー

Linux:iptablesの設定を保持する方法

Linux CentOS 6 の専用サーバーでwebサイトを立ち上げているのですが、 iptbelesの設定方法(設定を保持する)についてアドバイスいただけますでしょうか。 

必要なポートを開放し、一時的にはポート開放に成功するのですが、一日、二日経つと、設定が初期状態に戻ってしまいます。(開放したポートの記述が消えている。) 

実際にやってみたのは、
 /sbin/iptables-save > iptables_rule(現在の設定をファイルにファイルに保存)

 設定が初期状態に戻った場合に
 /sbin/iptables-restore < /etc/sysconfig/iptables_rule(オリジナルの設定を保存したファイルを適用) 
↓ 
/sbin/iptables-save -c > /etc/sysconfig/iptables(現在のiptablesの状態を/etc/sysconfig/iptablesに保存 ) 

これで一応動くのですが、数日で初期状態に戻ってしまいます。 

/etc/sysconfig/iptables をcat で確認しても設定したポートの記述がなくなっています。 
※設定後 /etc/sysconfig/iptables を確認するとちゃんと記述されてます。 

質問1
 起動時の自動設定に適用されるファイルは、 /etc/sysconfig/iptables で間違いないでしょうか?

 質問2
 そもそも、サーバーは稼働しつづけており、終了も再起動もしていない中で設定が初期値に変更されるのが不思議です。 
自動起動時に読み込むファイルが間違っていたとしても、サーバーが再起動しないかぎりは初期状態に戻らないような気がするのですが・・・ 

何時間毎に設定ファイルを読み直す、メモリを開放する、などの機能が元々あるのでしょうか。

 ご存知の方がいれば、お教えいただけませんでしょうか。 
宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

/etc/sysconfig/iptables で間違いはありません。 念のため、/etc/init.d/iptables の中を見て確認しておいてください。 何らかのプロセスが、/etc/sysconfig/iptables を書き換えてしまっていると言うことだと思うので、 /etc/crontab /etc/cron.*/* /var/spool/cron/root などを調べてみましょう。 あるいは、インターネットに公開しているサーバーの場合は、攻撃されてシステムが書き換えられているのかもしれません。

else7777
質問者

お礼

アドバイスありがとうございます。 cron関係を色々調べて原因がわかりました。 中国と韓国からアクセスさせない ckfilter を入れていて、それが毎日最新版をダウンロードし反映する際に /root/iptables/iptables_setup.sh を実行していました。 要は、毎日 /etc/rc.d/init.d/iptables を書き換え、リスタートしていたようです。 上記バッチファイルに開放したいポートを追記することで解決しました。 アドバイスありがとうございました!

関連するQ&A

  • LINUXのiptablesについて

    通常LINUXのコマンドライン上で新たにiptablesルールを作り直すとき # iptablse -F # iptables -P INPUT DROP # iptables -P OUTPUT ACCEPT # iptables -P FORWARD DROP # service iptables save と上記のようにコマンドを叩いて、あたらしいデフォルトのチェインポリシーを 事前に定義するもののようです。 この後【/etc/sysconfig/iptablse】というファイルを覗いてみると、 # Generated by iptables-save v1.4.7 on Wed Sep 5 06:20:56 2012 *filter :INPUT DROP [1:151] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] COMMIT # Completed on Wed Sep 5 06:20:56 2012 上記のような内容がiptablesに記述されていると思います。 おそらくこれに特定の条件のみ パケットを受信するportを開放したりする記述を追記していくものと存じます。 たとえば -A INPUT -p tcp --dport 22 -J ACCEPT などと記述して他ホストからのssdポートへのアクセスを 許可するといったかんじですね。 ただ冒頭のデフォルトのポリシーの設定に関しては、やはりコマンドライン上で # iptablse -F # iptables -P INPUT DROP # iptables -P OUTPUT ACCEPT # iptables -P FORWARD DROP # service iptables save このようなコマンドを叩いて設定するのが普通なのでしょうか? 例えば、デフォルトポリシーを直接 ファイルに記述するといったことはしないのでしょうか? ================================================================= *filter #以下で、デフォルトのフィルタポリシーを設定する -P INPUT DROP -P OUTPUT ACCEPT -P FORWARD DROP COMMIT ================================================================= 上記のように、直接iptablesの書式で書き込むように・・。 気になった理由としてはコマンドラインでデフォルトポリシーを指定した場合と コマンド -Aをつかって任意のportを開放する指定をした時の記述が異なることがきになっているのです。 デフォルトポリシーの記述は :INPUT DROP [1:151] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] 上記のような 行頭にコロンがついたような記述になっているのに -A INPUT -p tcp --dport 22 -J ACCEPT 上記のような -Aコマンドを叩いたときは、そのままコマンドがiptablseファイルに記述されているように思います。 :INPUT DROP [1:151] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -P INPUT DROP -P OUTPUT ACCEPT -P FORWARD DROP 上記の二種類の書き方を直接iptablesに記述してもキチンと動作します。 なぜ、上記のようにデフォルトポリシーに関しては二種類の書き方が存在するのでしょうか?

  • iptables

    iptablesの機能を利用するアクセス制限のシェルスクリプトを作りました。 それはだいたい以下のサイトの一番下の方のスクリプトのようなものです。 http://apollon.cc.u-tokyo.ac.jp/~watanabe/tips/nat.html これをLinux起動時に毎回実行したいので、このスクリプトのシンボリックリンクをrc5.dに作ればよいのですが、rc5.dにiptablesのシンボリックリンクがあるのでそれを利用しようと思いました。 そのリンク先はinit.d/iptablesで、init.d/iptablesを開くと/etc/sysconfig/iptablesという値が設定されていました。 自分が作成したシェルスクリプトを実行してからinit.d/iptables saveを実行すると/etc/sysconfig/iptablesが作成されました。 これで、次回Linuxを起動した時、init.d/iptablesが実行されて/etc/sysconfig/iptablesの内容も実行されると思いましたが、そうはなっていませんでした。 当たり前ですか? iptablesの自作のルールを記述したシェルスクリプトはinit.d/iptablesの処理が終わってから実行しなくてはならないものですか?

  • iptablesについて

    redhat7.3でiptableの反映をさせようとしましたが service iptables save でUsageでsaveパラメータはありませんでした。 service iptables resetとし、 iptable -Lとすると、設定していたものがなくなっていました。 もう一度、ルールを設定し、念のため iptables-save > set.cfg としてファイルに保存しておりますので、いつでも iptables-restore < set.cfgで戻せますが、この状態ではiptablesは反映されていないのでしょうか?

  • リモートからiptables設定について

    こんばんわ。 サーバーが違う場所にあり、 触れない状態です。 なので、sshにてiptablesの設定をしたいです。 OS:Fedora7 iptablesのパス /sbin/iptables リモートからiptablesの設定についてですが、 http://fedorasrv.com/iptables.shtml を参考にしてしましたが、 /sbin/iptables -P INPUT DROP したら、接続が切れますので。。。 グーグルで調べても、 リモートから上記のサイトのような設定をして行くのが見つかりませんでした・・・ どうしたら上手くリモートからiptablesを設定出来ますでしょうか? P.S iptablesについて初心者です。 宜しくお願いします。

  • iptablesの[カッコ]の意味を教えて下さい

    CentOS5でiptablesの設定をしています。 /etc/sysconfig/iptablesというファイルを編集して設定していますが 冒頭に *filter :INPUT DROP [12:584] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] などという記述があります。 デフォルトのチェインターゲットの指定をする記述と思うのですが この右にある[ ]カッコの意味がわかりません。 ([12:584]や[0:0]のことです。) 御存知の方おりましたら何卒御教授の程宜しくお願いいたします。

  • iptablesのオプションについて

    /etc/sysconfig/iptablesの記述に -A INPUT -p tcp -m tcp --dport・・・ というようなものがあったのですが、 manで調べても-mオプションの説明が ありませんでしたので、教えてください。

  • iptablesの設定について

    Centos6.3の64ビットを使ってるのですが、iptablesの設定で -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT とまったく同じ記述なのに110ポートは開放できて25ポートは開放できないのですが何が原因なのでしょうか? サービスはカゴヤクラウドのタイプAを使用しています

  • iptablesを設定するとメールが送受信できません

    iptablesを設定すると外部からのメールの送受信ができません。 iptablesを止めると送受信ができます。 メールサーバー(OpenSSL+Postfix+Dovecot) OS:CentOS5 iptables内容: #!/bin/bash # set LOCALNET=(IPアドレス) #IPTABLES STOP /etc/rc.d/init.d/iptables stop #Default Rule iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #LOCAL ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -s $LOCALNET -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH iptables -A INPUT -p tcp --dport 22 -j ACCEPT #HTTP iptables -A INPUT -p tcp --dport 80 -j ACCEPT # SSL iptables -A INPUT -p tcp --dport 443 -j ACCEPT #SMTPS iptables -A INPUT -p tcp --dport 465 -j ACCEPT #POP3S iptables -A INPUT -p tcp --dport 995 -j ACCEPT /etc/rc.d/init.d/iptables save /etc/rc.d/init.d/iptables start DNSは外部のを使っています。 サーバーには外部からSSHでアクセスしています。 iptablesを設定しても当たり前ですがSSHでアクセスができます。 メールはエラーというよりメーラーから出ていきません。 サイトにはアクセスができます。 ポートは空いています。 ただiptablesを設定すると465と995は到達ができません。 http://www.cman.jp/network/support/port.html こちらでチェック iptablesを止めるとすべてがうまくいくのでiptablesが原因だと思っていますが 素人すぎて情けないですがご教授のほど宜しくお願いします。,<(_ _)>

  • iptables ポートフォワーディングについて

    ポートフォワーディングの設定を行いたくて試しにやっているのですが、 うまくいかないので教えていただけないでしょうか。 WinXPクライアント(192.168.1.22) | Linuxルーター(eth0=192.168.1.40, eth1=192.168.2.41)起動しているサーバーはssh,telnet,ftp,http,postgresです。 | LinuxWebサーバー(eth0=192.168.2.81 port=80)起動しているサーバーはssh,telnet,ftp,http,postgres,cvspserverです。 WinXPクライアントからLinuxWebサーバーにアクセスしたいのですが、以下のように設定しても WinXPクライアントのブラウザには「サーバーが見つかりません」と表示されてしまいます。 他に追記すべき設定、お気づき等ございましたら教えてください。よろしくお願いします。 Linuxルーターのiptables設定内容(service iptables stopを行った後、以下を設定しております) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.2.81:80 iptables -A FORWARD -d 192.168.2.81 -p tcp --dport 80 -j ACCEPT ------------------------------------------------------------- 上記設定後iptables -Lとしてみたら以下のように表示されました。 Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere 192.168.2.81 tcp dpt:http Chain OUTPUT (policy ACCEPT) target prot opt source destination さらにservice iptables saveをして cat /etc/sysconfig/iptablesとしてみたところ以下のように表示されました。 # Generated by iptables-save v1.3.5 on Sat Jan 30 11:46:10 2010 *nat :PREROUTING ACCEPT [2:280] :POSTROUTING ACCEPT [2:115] :OUTPUT ACCEPT [2:115] -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.81:80 COMMIT # Completed on Sat Jan 30 11:46:10 2010 # Generated by iptables-save v1.3.5 on Sat Jan 30 11:46:10 2010 *filter :INPUT ACCEPT [148:9894] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [169:16447] -A FORWARD -d 192.168.2.81 -p tcp -m tcp --dport 80 -j ACCEPT COMMIT # Completed on Sat Jan 30 11:46:10 2010 ------------------------------------------------------------- ちなみに以下のように設定してWinXPクライアントからsshで192.168.1.40の10000ポートに接続すると接続できました。 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10000 -j DNAT --to 192.168.2.41:22 ------------------------------------------------------------- 以下のように設定してWinXPクライアントから「telnet 192.168.1.40 10000」コマンドを発行してみるとしていない 時と比べて「接続中: 192.168.1.40...」となっている時間が長いので何かしら影響しているのかなと思います。 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10000 -j DNAT --to 192.168.2.81:23

  • ポート110が開かない

    rootでログイン後 以下の通りコマンドをうちました /sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT /sbin/iptables -A INPUT -p tcp --sport 110 -j ACCEPT /etc/init.d/iptables save /etc/init.d/iptables restart しかし、 http://www.cman.jp/network/support/port.html で確認するとポート110でアクセスできないといわれます。 なにか設定が足りてないでしょうか?