オラクる。

oracle専門ブログにしてみようかな~っと

カテゴリ: Linux

JVNVU#91176422: NTP daemon (ntpd) に複数の脆弱性
http://jvn.jp/vu/JVNVU91176422/

NTPに複数の脆弱性が存在することが公表されました。
影響のあるバージョンは4.2.8p7より前のバージョンです。
かなり影響は大きいかと思います。
既存システムNTPをソースを利用してアップデートする手順を確認してみます。

NTP Software Downloads
http://www.ntp.org/downloads.html

ソースは公式サイトよりダウンロードします。

[root@db01 ntp-4.2.8p7]# yum install libcap-devel

インストールに必要なパッケージをダウンロードします。

[root@db01 ~]# ntpd -!
ntpd 4.2.6p5
ntpd 4.2.6p5@1.2349-o Tue Apr 28 10:15:27 UTC 2015 (1)


既存のバージョンを確認します。
影響ありのバージョンですね。

[root@db01 ~]# service ntpd stop
ntpd を停止中:                                             [  OK  ]


ntpのサービスを停止します。

[root@db01 ~]# usermod -d /dev/null -s /bin/false ntp
[root@db01 ~]# mkdir -p /etc/ntp/crypto/
[root@db01 ~]# chown root:ntp /etc/ntp/crypto
[root@db01 ~]# chmod 750 /etc/ntp/crypto/
[root@db01 ~]# mkdir /var/lib/ntp/
[root@db01 ~]# chown ntp:ntp /var/lib/ntp


改めてNTP用のユーザーとディレクトリを作成します。

[root@db01 src]# wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.8p7.tar.gz

ソースを公式よりダウンロードします。

[root@db01 src]# tar zxvf ntp-4.2.8p7.tar.gz
[root@db01 src]# chown -R root:root ntp-4.2.8p7
[root@db01 src]# cd ntp-4.2.8p7


ダウンロードしてきたソースを解凍します。

[root@db01 ntp-4.2.8p7]# ./configure CFLAGS="-O2 -march=native -mtune=atom" --sysconfdir=/etc --localstatedir=/var --enable-all-clocks --enable-parse-clocks --enable-linuxcaps --with-crypto --enable-ntp-signd
[root@db01 ntp-4.2.8p7]# make && make install


ソースのコンパイル、インストールを行ないます。

[root@db01 sbin]# cp /usr/local/sbin/ntpd /usr/sbin/ntpd

ntpのバイナリを入れ替えておきます。

[root@db01 ntp]# service ntpd start
ntpd を起動中:
[root@db01 ntp]# ntpq  -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-b3.nict.go. .NICT.           1 u    1   64    1    5.009   -0.153   0.000

[root@db01 sbin]# ntpd -!
ntpd - NTP daemon program - Ver. 4.2.8p7





サービスを起動します。
起動後、ntpqコマンドで時刻同期していることを確認します。
ntpサーバーの先頭に*が表示されていれば同期OKです。
バージョン表記も問題有りませんでした。

Nginxのキャッシュ機能を検証します。
今回サーバーをリバースプロキシとし、バックエンドからの応答をキャッシュします。
まずは設定ファイルから
キャッシュに関係有るところは赤字にしています。

http {

#proxy cache settings
        proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=my-key:8m max_size=50m inactive=120m;
        proxy_temp_path /var/cache/nginx/temp;


#proxy header settings
        proxy_redirect   off;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-Host   $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;

        upstream test-stream {
                server 192.168.200.2:9200;
        }
server {
        listen       80;
        server_name  localhost;

        location / {
                proxy_pass http://test-stream;
                proxy_ignore_headers Cache-Control;
                proxy_cache my-key;
                proxy_cache_valid 200 302 60m;
                proxy_cache_valid 404 10m;

        }
  }
}


80番ポートへのアクセスをバックエンドtest-streamに転送する設定になります。
バックエンドからの応答は proxy_cache_pathで指定したパスに保管されます。

levels:キャッシュの保管するディレクトリの階層を指定します。
keys_zone:キャッシュ領域名、共有メモリのサイズを指定します。
max_size:キャッシュサイズの最大値を指定します。最大値を超えた場合は、古いデータから削除されます。
inactive:ここで指定した期間を過ぎるとキャッシュが削除されます。

proxy_temp_pathはキャッシュファイルの一時領域です。
キャッシュファイルが一時的に指定されたパスに書き込まれた後に、proxy_cache_pathに書き出されるようです。
さらにlocationディレクトリブで利用するキャッシュの領域を指定します。

proxy_ignore_headers:バックエンドからの応答ヘッダにCache-Controlが付与されていると、キャッシュされないので、ヘッダーごと無視する設定です。
proxy_cache:利用するキャッシュの領域を指定します。keys_zoneで設定した名前に紐付きます。
proxy_cache_valid:応答コードごとのキャッシュ保管期間を指定します。

長くなったので動作確認は明日にします。

nginxではある条件のrequest urlを、一定のurlに書き換えるというrewriteの機能を利用することが出来ます。

[root@nginx01 ~]# curl http://localhost/rewrite-test.html
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.9.12</center>
</body>
</html>


例えばrewrite-test.htmlというファイルはないので、アクセスしても404で返ります。

server {
  listen       80;
  server_name  localhost;

  location / {
    root html;
    index index.html index.htm;
    rewrite /rewrite-test.html index.html permanent;
  }

  error_page   500 502 503 504  /50x.html;

  location = /50x.html {
    root html;
  }
}


しかし、上記のような設定ファイルを作成したとします。
「rewrite /rewrite-test.html index.html permanent;」のところで、rewrite-test.htmlはindex.htmlに書き換えるように設定しています。

[root@nginx01 ~]# curl http://localhost/rewrite-test.html
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.9.12</center>
</body>
</html>


同じようにcurlコマンドでアクセスすると301が返ってきます。

1

ブラウザからはredirectされました。

time:2016-04-12T00:38:39+09:00  remote_addr:172.17.9.91 request:GET /rewrite-test.html HTTP/1.1 request_method:GET      request_length:312      request_uri:/rewrite-test.html  uri:/rewrite-test.html  query_string:-  status:301      bytes_sent:370  body_bytes_sent:185     referer:-       useragent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0      forwardedfor:-  request_time:0.000      upstream_response_time:-
time:2016-04-12T00:38:39+09:00  remote_addr:172.17.9.91 request:GET /index.html HTTP/1.1        request_method:GET      request_length:305      request_uri:/index.html uri:/index.html query_string:-  status:200      bytes_sent:850  body_bytes_sent:612     referer:-       useragent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0      forwardedfor:-  request_time:0.000      upstream_response_time:-


アクセスログ(ltsv形式)にもrewrite-test.htmlのアクセスが301で返ってくること
その後にindex.htmlにリダイレクトされることがわかります。

No-Cost RHEL


Redhat Enterprise Linuxの開発者向け無料サブスクリプションが今月に入ってから提供され始めたようです。
この無料サブスクリプションを利用することによって、今まで有償のサブスクリプションを購入しなければ出来なかったパッケージの更新などを行なうことが出来るようになるようです。
また、無料のサブスクリプションで最新の7.2や、それ以前のバージョンのインストールISOをダウンロード出来るようになっていました。

開発者向けなので、もちろん本番では利用できません。
しかし、今までCentOSを利用しなければならなかったのが、より本番に近い環境、OSで検証を行えるようになったのだと思います。

RHEL - Downloads

サブスクリプション - Red Hat Customer Portal

No-Cost RHEL Developer Subscription now available – Red Hat Developer Blog
http://developers.redhat.com/blog/2016/03/31/no-cost-rhel-developer-subscription-now-available/

前回に引き続きfluentdの連携です。
今回はログを受ける側の設定です。

まずは受ける側も同様にfluentdをインストールします。
詳細な手順は前回を参考にしてください。

fluentdのインストール後、設定ファイルを編集します。

[root@nginx02 ~]# cat /etc/td-agent/td-agent.conf
<source>
  type forward
  port 24224
  bind 0.0.0.0
</source>

<match nginx.access>
  type file
  path /tmp/access.log
  append true
  flush_interval 1s
</match>


まず最初の<source>~</source>はログは24224番ポートで待ち受ける設定です。
そして、<match nginx.access>~</match>で転送されてきたログを/tmp/access.logに書き込む設定を記載しています。
さらに、append trueは同名のファイルが存在していた場合は上書きする設定です。
デフォルトは上書きされずに、新しいファイルが作成されます。
まだ、flush_intervalは最初バッファーのファイルを1秒毎に書き出す設定です。

[root@nginx02 ~]# service td-agent restart
Shutting down td-agent:                                    [  OK  ]
Starting td-agent:                                         [  OK  ]


以上の設定を行った後にサービスを再起動します。

[root@nginx02 ~]# ls -al /tmp/access*
-rw-r--r-- 1 root td-agent 2211  4月  8 00:59 2016 /tmp/access.log.20160408.log


ファイルが転送されてきたことを確認できました。

このページのトップヘ