CentOS4で、こういうスクリプトを走らせて
====
#!/bin/sh
IPTABLES='/sbin/iptables'
$IPTABLES -F
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
# icmp(ping)と自端末からの入力を許可
$IPTABLES -A INPUT -p icmp -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT
#ssh
$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT
# TCPの接続開始と応答、FTPデータなどを許可
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 他の接続はすべて破棄(ポリシーの再設定)
$IPTABLES -P INPUT DROP
====
その後、
$ /etc/init.d/iptables save
$ /etc/init.d/iptables restart
すると、
====
$ sudo /etc/init.d/iptables restart
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: nat mangle filter [ OK ]
Unloading iptables modules:
====
ここでssh接続が応答しなくなってしまうのです。つなぎ直しても応答しません。
手元にある他のサーバで同じスクリプトを走らせたあと、restartしても普通にssh接続が続行できています。
どういう条件の時つながらなくなるとか、上の手順でおかしいポイントが分る方、おられないですか?
$ sudo /etc/init.d/iptables restart
これは実際には stop 実行後に start が実行される。
stop の直後には全パケット拒否状態になるので普通はネットワークが切断される。
そして SSH が切断されるとそのコネクションで実行していたプログラムも中断するので
その後の start が実行されずに接続不能になる。
手元にある他のサーバで同じスクリプトを走らせたあと、restartしても普通にssh接続が続行できています。
stop から start までの間が極端に短い場合、SSH のコネクションがタイムアウトにならずぎりぎりで
間に合うケースがある。
負荷が低いとかネットワーク的に近いとか。
そういう場合はコネクションが切断されず、start まできっちり実行されるので問題ない。
対策としてはコネクションが切断されることを全ていに restart が中断されないようにする。
nohup コマンドをつかうか、screen で再接続できるようにしておくとよいだろう。
パケット フィルタ リング ルールの適用 (GUI ツール)
CentOS(というか、元になる Redhat Enterprise Linux)では、GUI からの Firewall の設定ができるようになっていて、そのための RH-Firewall-1-INPUT というチェーンが設定されています。それとの兼ね合いでは無いかと思われます。
具体的に、どうなってしまうかは確認していませんが、一度、iptables -L で適用後の状態を確認するとはっきりとした原因が分かると思います。
遠隔にあるサーバなので、sshが切られた状態でコマンドを走らせることは出来ないのです。
$ sudo /etc/init.d/iptables restart
これは実際には stop 実行後に start が実行される。
stop の直後には全パケット拒否状態になるので普通はネットワークが切断される。
そして SSH が切断されるとそのコネクションで実行していたプログラムも中断するので
その後の start が実行されずに接続不能になる。
手元にある他のサーバで同じスクリプトを走らせたあと、restartしても普通にssh接続が続行できています。
stop から start までの間が極端に短い場合、SSH のコネクションがタイムアウトにならずぎりぎりで
間に合うケースがある。
負荷が低いとかネットワーク的に近いとか。
そういう場合はコネクションが切断されず、start まできっちり実行されるので問題ない。
対策としてはコネクションが切断されることを全ていに restart が中断されないようにする。
nohup コマンドをつかうか、screen で再接続できるようにしておくとよいだろう。
screen使ってみたのですけど、やっぱり切られてしまいました。
screen使ってみたのですけど、やっぱり切られてしまいました。