EC2上にRADIUSサーバを構築する手順



## はじめに
RADIUS認証を実装する必要が出たので、テスト用にRADIUSサーバを構築した際の手順を記載します。
[こちらの記事](http://www.unix-power.net/linux/freeradius.html)を参考に構築をしていきます。
Amazonリポジトリからyumインストールするので、記事執筆時点では **Version 2.2.6** を、クライアントマシンとしてMacを使用します。

インスタンスの作成の仕方やセキュリティグループの設定などは省略します。

## RADIUSとは
> 
RADIUS（ラディウス、ラディアス、Remote Authentication Dial In User Service）は、ネットワーク資源の利用の可否の判断（認証）と、利用の事実の記録（アカウンティング）を、ネットワーク上のサーバコンピュータに一元化することを目的とした、IP上のプロトコルである。
[Wikipedia - RADIUS](https://ja.wikipedia.org/wiki/RADIUS)

Wikipediaの引用から分かる通り、RADIUSは認証方法の１つです。
認証を一元化したり、パケットなど通信の情報を記録できたりするようなので課金管理などでも使われているようです。
身近なものとしてはWifiの接続などでRADIUSが使われています。

## RADIUSのセットアップ

サーバにログインをしたら、rootユーザへ切り替えて下記のコマンドでRADIUSで必要なものをインストールします。

```/bin/bash:cmd
yum install -y freeradius freeradius-utils
```

インストールが正常に完了したら次はlogの設定を行います。
下記を参考に該当ファイルの内容を変更します。

```/etc/raddb/radiusd.conf
log {
        #  Log authentication requests to the log file.
        #
        #  allowed values: {no, yes}
        #
        auth = yes # 認証の可否をログに出す
        #  Log passwords with the authentication requests.
        #  auth_badpass  - logs password if it's rejected
        #  auth_goodpass - logs password if it's correct
        #
        #  allowed values: {no, yes}
        #
        auth_badpass = yes # 認証失敗のログを出す
        auth_goodpass = no # 認証成功のログを出す
}
```

変更が完了したら続いてユーザを作成します。
下記の内容を該当のファイルに追記します。


```text:/etc/raddb/users
testuser Auth-Type:=Local, Cleartext-Password:="password"
```

これで「password」がパスワードの「testuser」が作成されました。
ここまででいったんRADIUSを起動します。

```/bin/bash:cmd
/etc/rc.d/init.d/radiusd start
```

無事起動が完了したらlocalhostで接続の確認をします。

```/bin/bash:cmd
# radtest -4 testuser password localhost 1812 testing123
Sending Access-Request of id 240 to 127.0.0.1 port 1812
	User-Name = "testuser"
	User-Password = "password"
	NAS-IP-Address = 172.31.18.245
	NAS-Port = 1812
	Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=240, length=20
```

**Access-Accept**と表示されたら認証が成功したのでOKです。
ログにも下記の内容が出力されていると思います。

``` /var/log/radius/radius.log
Fri Oct 14 07:46:26 2016 : Auth: Login OK: [testuser] (from client localhost port 1812)
```

ここまででローカルからのアクセスのセットアップは完了しました。
続いてクライアントからの認証を作成していきます。

## RADIUSへクライアントから接続

外部からのアクセスを許可するために下記の内容を該当ファイルに追加します。

```/etc/raddb/clients.conf
client [接続元のIPアドレス] {
        secret = test
        shortname = [任意の名前]
}
```

上記の内容が追加できたら、radiusの再起動をします。

```/bin/bash:cmd
# /etc/init.d/radiusd restart
```

再起動が無事完了したら手元のマシンから繋いでみます。
接続するためにfreeradius-serverをインストールする必要があるので、インストールしていない方はHomebrewを使ってインストールしてください。
インストールは下記のコマンドです。

```/bin/bash:cmd
$ brew install freeradius-server
```

インストールが完了したらRADIUSサーバに繋いでみます。

```/bin/bash:cmd
$ radtest -4 testuser password [RADIUSサーバのIP] 1812 test
Sent Access-Request Id 117 from 0.0.0.0:50502 to [RADIUSサーバのIP]:1812 length 78
	User-Name = "testuser"
	User-Password = "password"
	NAS-IP-Address = 192.168.1.167
	NAS-Port = 1812
	Message-Authenticator = 0x00
	Cleartext-Password = "password"
Received Access-Accept Id 117 from [RADIUSサーバのIP]:1812 to 0.0.0.0:0 length 20
```

RADIUSサーバ内に接続した時と同様にAccess-Acceptが表示されればOKです。
Access-Requestが複数回表示される場合は、セキュリティグループで自分のグローバルIPが許可されているか、プロトコルがUDPになっているかを確認してください。

以上でRADIUSサーバの構築は完了です。

## おわりに

今回は単純に構築をしてコマンドで接続確認をしただけなので、実際にプログラムなどからアクセスをしたりするとまた別の問題が出て来るかもしれません。
その場合は追記、または別の記事で手順を作成します。