Debianでのiptables設定

Debian(stretch)でのiptables設定について、調べたことをまとめてみます。

以前は、以下のようなスクリプトを /etc/network/if-pre-up.d/ に置いて、iptables設定を行っておりました。
(外部からは、IPアドレスが「192.168.1.2」の管理用PCからと、httpとhttpsの通信のみを許可する例です。)

しかし、インターフェースが複数ある場合に、同じ設定が2重に設定されるという状況になってしまいました。
Debian 管理者ハンドブックの「14.2.4. 起動時にルールを適用する」 を見てみたところ、 /etc/network/interfaces に設定する方法が推奨されていたので、その方法で設定することにしました。

まず、上のスクリプトを /usr/local/etc/iptables.sh に置きます。このとき、置くディレクトリは任意の場所、ファイル名は任意のもので構いません。

次に、以下のように、 /etc/network/interfaces の中の最後のインターフェースのところに「up /usr/local/etc/iptables.sh」と書きます。

以上で設定は終わりです。
この設定に変えてからは、同じ設定が2重に設定されることはなくなりました。

NetworkManagerなどを利用している場合は、設定方法が変わりますので、NetworkManagerのマニュアルなどを調べる必要がありそうです。

expectコマンドを使用してscpの実行をCronで実装するには

パスワード認証のsshサーバからscpでファイルをコピーする作業は、手動の場合は非常に単純なものです。しかしこれをCronで実装するには、対話型でパスワードの入力を求められるため、作成するシェルスクリプトに少し工夫が必要です。

このような場合、expectコマンド(対話型アプリケーションの自動化)を使用して、シェルスクリプト中で「パスワードの入力を行う」処理を行います。
expectコマンド
まず前提として、転送元ファイルが置いてあるサーバ名をcrestとします。アカウント名をcrest-user、転送元ファイルが置いてあるディレクトリを/home/crestとし、コピーするファイル名をexm.txtとします。また、転送先のPC名をbozとします。転送先のディレクトリを/home/bozとします。boz上でファイルをコピーしてくるシェルスクリプトをCronで動作させます。

シェルスクリプトは以下のようになります。

このシェルスクリプトは、コマンドラインでは問題なく実行できます。そのため、このままCronで動作させようとしたのですが、うまく動作しませんでした。ログインとCronでは動作環境が異なるため起こる現象のようです。そのような場合は、20行目の「interact」を「expect eof exit」に変更します。

シェルスクリプトにはパスワードを記述するため、アクセス制限されたネットワークでの使用に限るなど、セキュリティ上、十分に注意する必要があります。

bashの脆弱性への対応(Ubuntu)

先週よりbashの脆弱性がニュースになっています。
GNU bash の脆弱性に関する注意喚起

弊社でも以下の通り対応を行ないました。

  • アップデートを実行
  • パッチのバージョンを確認

パッチのバージョン情報は以下のページにあります。
USN-2364-1: Bash vulnerabilities