このスレッドは解決済です(未解決に戻す場合はこちら)
<<戻る

iptables.shのcron実行 このメッセージに返信する
日時: 2012/04/21 09:47
名前: TACO
URL:
ここのサイトを見て、iptablesの設定スクリプトを作成しました。
iptables.shを実行したところ、以下のようになりました。

# sh iptables.sh
ファイアウォールルールを適用中: [ OK ]
チェインポリシーを ACCEPT に設定中filter [ OK ]
iptables モジュールを取り外し中 [ OK ]
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[ OK ]
ファイアウォールルールを適用中: [ OK ]
チェインポリシーを ACCEPT に設定中filter [ OK ]
iptables モジュールを取り外し中 [ OK ]
iptables ファイアウォールルールを適用中: [ OK ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns [ OK ]

正常にiptablesの設定が出来ているか、iptables -Lで確認すると、
うまく設定できているようでした。

そこで、crontabでiptables.shを実行してみたのですが、cronのメールを見ると、

/root/iptables.sh: line 15: ifconfig: command not found
 :  :  :
/root/iptables.sh: line 55: iptables: command not found
/root/iptables.sh: line 59: sysctl: command not found
 :  :  :

のように、command not foundのエラーが出て、
スクリプトによる設定ができませんでした。

crontabからiptables.shが実行できるようにするにはどうしたら良いでしょうか?

よろしく、お願いします。
記事編集 編集
Re: iptables.shのcron実行 このメッセージに返信する
日時: 2012/04/21 10:08
名前: stranger
URL: http://ja.528p.com/
ここのサイトの設定例で
cronで実行するスクリプト
iplist_check.sh
を実行されたのですか
単に
iptables.sh
を実行されたのですか

/etc/cron.daily/iplist_check.sh
を参考にして
スクリプトの最初に 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
を追加してみる

他のサイトで質問されていましたが(クローズされたようですけど)
絶対パスでコマンドを指定する方法は確認されてのでしょうか

絶対パスでコマンドを指定する方がエラーはでにくい

蛇足
コマンドの探し方
whereis ifconfig
記事編集 編集
Re: iptables.shのcron実行 このメッセージに返信する
日時: 2012/04/21 22:42
名前: TACO
URL:
strangerさん、回答ありがとうございます。


# whereis iptables
iptables: /sbin/iptables /usr/share/man/man8/iptables.8.gz
# whereis sysctl
sysctl: /sbin/sysctl /etc/sysctl.conf /usr/share/man/man2/sysctl.2.gz /usr/share/man/man8/sysctl.8.gz
# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

iptables.shの最初に、
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binと書いて、
すべてのコマンドのパスを通すとcronでファイアウォール設定スクリプトが実行できました。

cronのメール
ファイアウォールルールを適用中: [ OK ]
チェインポリシーを ACCEPT に設定中filter [ OK ]
iptables モジュールを取り外し中[ OK ]
ファイアウォールのルールを /etc/sysconfig/iptables に保存中: [ OK ]
ファイアウォールルールを適用中: [ OK ]
チェインポリシーを ACCEPT に設定中filter [ OK ]
iptables モジュールを取り外し中[ OK ]
iptables ファイアウォールルールを適用中: [ OK ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns [ OK ]


# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/tripwire/sbin:/root/bin
# ls -l /root/iptables.sh
-rwx------ 1 root root 13449 4月 21 20:47 /root/iptables.sh

端末からrootで実行するときはパスは通っているのに、
crontabからでは、この場合、PATHをきちんと通す必要がありました。
記事編集 編集
Re: iptables.shのcron実行 このメッセージに返信する
日時: 2012/04/22 11:01
名前: みさき
URL:
>cronで実行するスクリプト
>iplist_check.sh
>を実行されたのですか
>単に
>iptables.sh
>を実行されたのですか

この質問はスルーしているようですが、関連して書くと、ここのサイトの設定だと
cron.daily → iplist_check.sh → iptables.sh
になっていて、iptables.shの実行が必要かどうかをiplist_check.sh内で判断してます。
iptables.shは必ずしも毎日実行するようなものじゃないです。
実行中(数分〜十分ぐらい?)は外部からアクセスできなくなると思います。
記事編集 編集
Re: iptables.shのcron実行 このメッセージに返信する
日時: 2012/04/23 13:14
名前: TACO
URL:
みさきさん、回答ありがとうございます。

iptables.shを修正すると、iptables.shを実行する必要があると勘違いしてました。
ファイアウォール設定スクリプトの編集をした後は、
それと同じ内容のiptablesコマンドを実行して置けばいいようです。
-Lオプションで正しく設定できたことを確認した後で、
/etc/rc.d/init.d/iptables saveで、ルールを保存しておくという方法もあるのですね。

私のPCでは、iptable.shの実行完了に、20分ほど掛かるので不便だと思っていました。

ただ、大幅にルールを変更したときは、スクリプトを実行した方が誤りが無いと思います。
記事編集 編集
件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -