Snort NIDSを使用したLinuxサーバの保護とUbuntu 16.04でのSnort NIDSの設定

このチュートリアルでは、**Alibaba Cloud ECS Ubuntu 16.04インスタンス**に**Snort NIDS**をインストールして設定する方法を学びます。

[Alibaba Cloud Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.241b19aecwjEeG) 執筆、Hitesh Jethva。[Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.241b19aecwjEeG)は、クラウドコミュニティ内で技術的な知識やベストプラクティスを共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

Snortは、特定のネットワークインターフェースを介して送受信されるパッケージデータを監視する、フリーでオープンソースの、最も一般的に使用されている署名ベースのネットワーク侵入検知システム（NIDS）の1つです。Snortは、インターネットプロトコル(IP)ネットワーク上でプロトコル分析、コンテンツの検索とマッチング、リアルタイムのトラフィック分析、パケットロギングを実行します。Snortを使用して、最新の攻撃、マルウェア感染、感染したシステム、コミュニティ・ポリシー違反を判断することができます。Snortには、バッファオーバーフローの検出、ステルスポートスキャン、CGI攻撃、その他数千ものワームや脆弱性の攻撃などの強力な機能が搭載されています。Snortは軽量なので、最小のクラウドサーバーインスタンスに簡単にインストールできます。


#前提条件
1、Ubuntu 16.04サーバをインストールしたばかりのAlibabaクラウドインスタンス。
2、インスタンスに静的IPアドレス192.168.0.103が構成されています。
3、サーバーにルートパスワードが設定されています。

#Alibaba Cloud ECSインスタンスを起動する
まず、[Alibaba Cloud ECS Console](https://ecs.console.aliyun.com/?spm=a2c65.11461447.0.0.241b19aecwjEeG)にログインします。オペレーティングシステムとしてUbuntu 16.04を使用し、2GB以上のRAMを搭載した新しい[ECSインスタンス](https://www.alibabacloud.com/help/doc-detail/25424.htm?spm=a2c65.11461447.0.0.241b19aecwjEeG)を作成します。[ECSインスタンス](https://www.alibabacloud.com/help/doc-detail/25424.htm?spm=a2c65.11461447.0.0.241b19aecwjEeG)に接続し、rootユーザーとしてログインします。

Ubuntu 16.04インスタンスにログインしたら、以下のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。

```
apt-get update -y
```

#必要なパッケージのインストール
次に、以下のコマンドでSnortのインストールに必要な依存関係をすべてインストールします。

```
apt-get install openssh-server ethtool build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev -y
```

次に、DAQ（データ収集パッケージ）をシステムにインストールする必要もあります。まず、以下のコマンドで最新版のDAQをダウンロードします。

```
wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz
```

DAQ がダウンロードできたら、以下のコマンドでダウンロードしたファイルを解凍します。

```
tar -xvzf daq-2.0.6.6.tar.gz
```

次に、ディレクトリをdaq-2.0.6に変更し、以下のコマンドを実行してDAQをコンパイルしてインストールします。

```
cd daq-2.0.6
./configure
make
make install
```

DAQをインストールしたら、Snortのインストールに進みます。

#Snortのインストール
デフォルトでは、最新版のSnortはUbuntu 16.04のリポジトリにはありません。そのため、Snortのソースをダウンロードしてコンパイルする必要があります。

まず、以下のコマンドでSnortのソースコードをダウンロードします。



```
wget https://www.snort.org/downloads/snort/snort-2.9.11.1.tar.gz
```

次に、以下のコマンドでダウンロードしたファイルを解凍します。

```
tar -xvzf snort-2.9.11.1.tar.gz
```

次に、ディレクトリをsnort-2.9.11.1に変更し、以下のコマンドでコンパイルします。

```
cd snort-2.9.11.1
./configure --enable-sourcefire
make
make install
```

次に、以下のコマンドで共有ライブラリを更新します。

```
ldconfig
```
次に、以下のコマンドでSnortバイナリのシンボリックリンクを作成します。


```
ln -s /usr/local/bin/snort /usr/sbin/snort
```

最後に、以下のコマンドでSnortを確認します。

```
snort -V
```

問題がなければ、以下のような出力が表示されるはずです。

```
,,_     -*> Snort! <*-
  o"  )~   Version 2.9.11.1 GRE (Build 268) 
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2017 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.7.4
           Using PCRE version: 8.38 2015-11-23
           Using ZLIB version: 1.2.8
```


#Snortの設定
Snortは3つのモードで設定できます。

Snifferモード：このモードでは、出力はターミナルにダンプされます。ライブモードでは連続した流れのパケットを見ることができます。

Packet Loggerモード：このモードでは、出力はディスクに保存されます。後から監視することができます。

Network IDSモード：このモードでは、ネットワークをスキャンしている間にsnortが定義されたパラメータにマッチするようにいくつかのパラメータを設定します。

このチュートリアルでは、ネットワークIDS（NIDS）モード用にSnortを設定します。

まず、Snort用のディレクトリ構造を作成する必要があります。これは、以下のコマンドを実行することで行うことができます。

```
mkdir /etc/snort /etc/snort/preproc_rules /etc/snort/rules /var/log/snort /usr/local/lib/snort_dynamicrules
touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules /etc/snort/rules/local.rules
```

次に、すべてのディレクトリに適切な権限を与えます。

```
chmod -R 5775 /etc/snort/ /var/log/snort/ /usr/local/lib/snort /usr/local/lib/snort_dynamicrules/ /usr/local/bin/snort
```

次に、Snortのソースからすべての設定ファイルをコピーします。

```
cd /root/snort-2.9.11.1/etc
cp -avr .conf .map .dtd .config /etc/snort/
cp -avr /root/snort-2.9.11.1/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/* /usr/local/lib/snort_dynamicpreprocessor/
```

次に、以下のコマンドですべてのルールセットをコメントアウトします。

```
sed -i "s/include &dollar;RULE_PATH/#include \$RULE_PATH/" /etc/snort/snort.conf
```

次に、Snortの設定ファイルを設定する必要があります。これは以下のコマンドを使用して行うことができます。

```
nano /etc/snort/snort.conf
```

以下の変更を行います。

完了したら、ファイルを保存して閉じます。次に、次のコマンドで設定ファイルを検証します。

```
snort -T -i eth0 -c /etc/snort/snort.conf
```

以下のような出力が表示されるはずです。

```
Snort successfully validated the configuration!
Snort exiting
```

#Snortのテスト
Snortのインストールと設定が完了したので、Snortをテストしてみましょう。

まず、(FTP, ICMP, Web, SSH) Snort用のルールを作成します。このルールは、誰かがPing, SSH, FTP, Web接続を試みようとしたときにアラートを発生させます。これは以下のファイルを編集することで行うことができます。

```
nano /etc/snort/rules/local.rules
```

以下の行を追加します。

```
alert tcp any any -> $HOME_NET 21 (msg:"FTP connection attempt"; sid:1000001; rev:1;)
 alert icmp any any -> $HOME_NET any (msg:"ICMP connection attempt"; sid:1000002; rev:1;)
 alert tcp any any -> $HOME_NET 80 (msg:"Web connection attempt"; sid:1000003; rev:1;)
 alert tcp any any -> $HOME_NET 22 (msg:"SSH connection attempt"; sid:1000004; rev:1;) 
```

保存して、終了したらファイルを閉じます。

ターミナルからネットワークIDSモードでSnortデーモンを起動し、任意のアラートをコンソールに出力するように指示します。

```
snort -A console -q -c /etc/snort/snort.conf -i eth0
Snort is now up and listening on interface eth0.
```

次に、リモートマシンから 以下のコマンドでSSH、FTP、ICMP、Web接続を試みます。

```
ssh 192.168.0.103
ping 192.168.0.103
telnet 192.168.0.103 21
```

注: 192.168.0.103はSnortサーバーのIPアドレスです。

Snort サーバでは、以下のような出力が表示されるはずです。

```
05/15-21:26:43.359463  [] [1:1000004:1] SSH connection attempt [] [Priority: 0] {TCP} 192.168.0.105:59099 -> 192.168.0.103:22
05/15-21:30:07.863475  [] [1:1000001:1] FTP connection attempt [] [Priority: 0] {TCP} 192.168.0.105:35850 -> 192.168.0.103:21
05/15-21:27:59.090364  [] [1:1000002:1] ICMP connection attempt [] [Priority: 0] {ICMP} 192.168.0.105 -> 192.168.0.103
```

キーボードからCtrl+Cを押すことで、いつでもSnortを停止することができます。

#Snort Upstartスクリプトの作成
また、起動時にSnortを起動するために、Snort用のUpstartスクリプトを作成する必要があります。以下のファイルを作成します。

```
nano /lib/systemd/system/snort.service
```

以下の行を追加します。

```
[Unit]
   Description=Snort NIDS Daemon
   After=syslog.target network.target
 [Service]
   Type=simple
   ExecStart=/usr/local/bin/snort -q -c /etc/snort/snort.conf -i eth0
 [Install]
  WantedBy=multi-user.target
```

ファイルを保存し、終了したらSnortサービスを起動し、以下のコマンドで起動時に起動できるようにします。

```
systemctl start snort
systemctl enable snort
```

以下のコマンドでSnortの状態を確認することができます。

```
systemctl status snort
```

以下のような出力が表示されるはずです。



```
snort.service - Snort NIDS Daemon
   Loaded: loaded (/lib/systemd/system/snort.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-05-15 21:31:31 IST; 8s ago
 Main PID: 29884 (snort)
   CGroup: /system.slice/snort.service
           └─29884 /usr/local/bin/snort -q -c /etc/snort/snort.conf -i eth0

May 15 21:31:31 Node1 systemd[1]: Started Snort NIDS Daemon. 
```

また、Snortサーバ上での接続試行は、以下のコマンドで後で確認することができます。

```
tcpdump -r /var/log/snort/snort.log*
```

出力：

```
21:42:56.618502 IP 192.168.0.105.58491 > 192.168.0.103.ssh: Flags [P.], seq 5800:5856, ack 221657, win 1444, options [nop,nop,TS val 1074792 ecr 968798], length 56
21:42:56.621801 IP 192.168.0.105.58491 > 192.168.0.103.ssh: Flags [.], ack 221745, win 1444, options [nop,nop,TS val 1074792 ecr 969065], length 0
21:47:11.333431 IP 192.168.0.105.35886 > 192.168.0.103.ftp: Flags [.], ack 35, win 229, options [nop,nop,TS val 1138471 ecr 1032743], length 0
21:47:11.335842 IP 192.168.0.105.35886 > 192.168.0.103.ftp: Flags [F.], seq 0, ack 36, win 229, options [nop,nop,TS val 1138471 ecr 1032744], length 0
```

おめでとうございます。これで、Ubuntu 16.04サーバにSnort NIDSが正常にインストールされ、設定されました。これで、サーバーへの接続を監視できるようになりました。

#関連するアリババクラウド製品
[Alibaba Cloud Anti-DDoS Basic](https://www.alibabacloud.com/product/anti-ddos?spm=a2c65.11461447.0.0.241b19aecwjEeG)は、Alibaba Cloud ECSインスタンスと統合してDDoS攻撃からデータやアプリケーションを保護するクラウドベースのセキュリティサービスで、セキュリティ対策の可視性と制御性を向上させます。

アリババクラウドのグローバルサービスとして、Anti-DDoS Basicを利用することで、投資をすることなくクラウドホスティングアーキテクチャの厳しいセキュリティ要件を満たすことができます。本サービスは、すべてのAlibaba Cloudユーザーが無料でご利用いただけます。

[Alibaba Cloud Server Guard](https://www.alibabacloud.com/product/server-guard?spm=a2c65.11461447.0.0.241b19aecwjEeG)は、クラウド脅威情報連携機能を提供する軽量エージェントをサーバーにインストールすることで、様々な悪意ある攻撃からサーバーを保護します。また、不審なログインがあった場合にはリアルタイムでアラートを提供し、Webサイトのバックドア攻撃からサーバーを保護します。

本製品は使い方や設定が簡単で、Webサイトやシステムの全体像を把握・分析することができます。これにより、ミッションクリティカルなアプリケーションの効率を高めることができます。


[CloudMonitor](https://www.alibabacloud.com/product/cloud-monitor?spm=a2c65.11461447.0.0.241b19aecwjEeG)は柔軟なモニタリングサービスで、クラウドの展開を詳細に把握することができます。CloudMonitorは、CPU利用率やレイテンシーなどの重要な指標について高度な分析を提供するだけでなく、ビジネス要件に合わせて指標をカスタマイズすることもできます。

ECS (Elastic Compute Service)、RDS (Relational Database Service)、[サーバー・ロードバランサー](https://www.alibabacloud.com/product/server-load-balancer?spm=a2c65.11461447.0.0.241b19aecwjEeG)、ブロック・ストレージ・ボリュームなどのリソースをリアルタイムで詳細に監視し、デプロイメントを微調整してパフォーマンスを最適化し、運用コストを削減することができます。

また、CloudMonitorは、定義したメトリクスに応じて侵入やセキュリティ侵害を検出することができるため、クラウドのデプロイメントにセキュリティの別のレイヤーを追加するソリューションを提供しています。ソーシャルネットワーキングサービス（SNS）、ソーシャルメッセージングサービス（SMS）、インスタントメッセンジャー（Ali Trade Managerのみ）、電子メールを介して設定したアラームを発生させることができます。


*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/how-secure-your-linux-server-using-snort-nids_593775)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*