Node.js モジュールのインストール

Next-Gen WAF Node.js モジュールは Node 0.10 ~ 24.X と互換性があります。すべての依存関係は npm-shrinkwrap.json ファイルに指定されています。

インストール

npmjs.com から最新バージョンをインストールします。

$ npm install sigsci-module-nodejs

1.5.3, より前の特定のリリースについては、Fastly の Web サイトからインストールを実行できます。<VERSION> を特定のバージョン番号に置き換えます。

  1. dl.security.fastly.com
  2. dl.signalsciences.net
$ npm install https://dl.security.fastly.com/sigsci-module-nodejs/<VERSION>/sigsci-module-nodejs-<VERSION>.tgz

使用方法

Next-Gen WAF Node.js モジュールを組み込む方法は、アプリケーションによって異なります。

ネイティブアプリケーション

アプリケーションが直接 http.createServer を呼び出す場合は、ネイティブ APIを使用します。

  1. アプリケーションコードの上に次の行を追加して、Next-Gen WAF Node.js モジュールをインポートします。

    var Sigsci = require('sigsci-module-nodejs')
    // Your application code
  2. アプリケーションコードの下に、Sigsci オブジェクトを作成します。

    // Your application code
    var sigsci = new Sigsci({
    path: '/var/run/sigsci.sock'
    // Other parameters here
    })
  3. ディスパッチャーを sigsci.wrap でラップします。http.createServer(dispatcher).listen(8085, '127.0.0.1') の行を次のように置き換えます。

    http.createServer(sigsci.wrap(dispatcher)).listen(8085, '127.0.0.1')

var Sigsci = require('sigsci-module-nodejs')
// Your application code
var sigsci = new Sigsci({
path: '/var/run/sigsci.sock'
// Other parameters here
})
http.createServer(sigsci.wrap(dispatcher)).listen(8085, '127.0.0.1')

Node.js Express

Node.js Express モジュールは Express のミドルウェアとして公開され、通常は var app = express() ステートメントのすぐ下に最初のミドルウェアとして挿入されます。詳細については、「Express のミドルウェアを使用する」のドキュメントを参照してください。

  1. アプリケーションコードの上に次の行を追加して、Next-Gen WAF Node.js モジュールをインポートします。

    var Sigsci = require('sigsci-module-nodejs')
    // Your application code
  2. アプリケーションコードの下に、Sigsci オブジェクトを作成します。

    // Your application code
    var sigsci = new Sigsci({
    path: '/var/run/sigsci.sock'
    // other parameters here
    })
  3. var app = express() 行の下に、Node.js モジュールのミドルウェアを挿入します。

    var app = express()
    app.use(sigsci.express())
    // You can still call other middleware and routes
    app.use(...)
    app.get('/route', ...)

var Sigsci = require('sigsci-module-nodejs')
// Your application code
var sigsci = new Sigsci({
path: '/var/run/sigsci.sock'
// other parameters here
})
var app = express()
app.use(sigsci.express())
// You can still call other middleware and routes
app.use(...)
app.get('/route', ...)

Node.js Restify

Restify 用の Next-Gen WAF モジュールのインストールは Node.js の場合と似ていますが、Restify では 404 エラーは異なる方法で処理されます。最良の結果を得るには、Signal Sciences を NotFound イベントに接続する必要があります。詳細については、「Restify ノードサーバー API」を参照してください。

Node.js Hapi v17 および v18

アプリケーションの最上部に次を追加します。

var Sigsci = require('sigsci-module-nodejs')
const Hapi = require('@hapi/hapi')
var sigsci = new Sigsci({
path: '/var/run/sigsci.sock'
// see other options below
})
const init = async() => {
// Creating a server
const server = Hapi.Server({
port: 8085
});
server.ext('onRequest', sigsci.hapi17())
server.events.on('response', sigsci.hapiEnding())
// Add SigSci request lifecycle methods, e.g.
// server.route({
// method: ['POST', 'PUT', 'PATCH', 'DELETE'],
// config: {
// payload: {
// parse: false,
// maxBytes: 10 * 1024 * 1024,
// output: 'data'
// }
// },
// path: '/response',
// handler: responseHandler
// })
};
init();

Node.js Hapi v14

アプリケーションの最上部に次を追加します。

var Sigsci = require('sigsci-module-nodejs')
var sigsci = new Sigsci({
path: '/var/run/sigsci.sock'
// see other options below
})
// Creating a Server
const Hapi = require('hapi')
const server = Hapi.Server({
port: 8085
});
// Add SigSci request lifecycle methods, e.g.
// server.route({
// method: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
// path: '/dynamic/response',
// handler: responseHandler
// })
server.ext('onRequest', sigsci.hapi14())
server.on('response', sigsci.hapiEnding())
server.start((err) => {
if (err) {
throw err
}
console.log('Server running at:', server.info.uri)
})

Node.js KOA

アプリケーションの最上部に次を追加します。

const Koa = require('koa');
const Router = require('koa-router');
var Sigsci = require('sigsci-module-nodejs')
const server = new Koa();
const router = new Router();
var sigsci = new Sigsci({
path: '/var/run/sigsci.sock'
// see other options below
})
// add lifecycle methods here
// var dispatcher = async function (ctx) {
// let req = ctx.req
// let res = ctx.res
// add your code here
// }
// setup your endpoints here
// router.all('/response', dispatcher)
server.use(sigsci.koa())
server.use(router.routes())
server.listen(8085);

設定

モジュール設定オプションは Sigsci オブジェクトで直接設定できます。

var sigsci = new Sigsci({
path: '/var/run/sigsci.sock'
...
})
Name説明
portTCP 経由でエージェントに接続するポートを指定します。これが設定されている場合、path パラメータは無視されます。
hostTCP 経由でエージェントに接続するための IP アドレスを指定します (任意)。デフォルト : localhost
pathUDS 経由でエージェントに接続するための Unix ドメインソケットを指定します。
socketTimeoutエージェントからのレスポンスを待機するミリ秒数。この時間が過ぎると、モジュールは元のリクエストを通過させます (フェイルオープン)。
maxPostSizeエージェントに送信される POST ボディの最大サイズをバイト単位でコントロールします。この値よりもボディが大きい場合、POST ボディはエージェントに送信されません。これにより、パフォーマンスをコントロールし (POST ボディが大きくなると処理に時間がかかる)、サービス妨害攻撃を防ぐことができます。
logエラーメッセージをログに記録するための関数。デフォルトでは、次のようになります : function (msg) { console.log(util.format('SIGSCI %s', msg))
anomalySize計算されたコンテキストレスポンスサイズと報告されたコンテキストレスポンスサイズの間のしきい値。デフォルト : 524288
anomalyDurationMillis内部ポスト処理期間の制限。デフォルト : 1000
timeoutMillisエージェント決定エンジンのフェイルオープンタイムアウト。デフォルト : 200
expectedContentTypesサポートするカスタムコンテンツタイプのスペース区切りリスト。
extendContentTypes拡張コンテンツ検査を有効にするブール値。デフォルト : false

さらなる詳細とデフォルト値は、SigSci.js ファイルで確認できます。

次の手順

エージェントとモジュールのインストールを確認し、モジュールオプションを調査する