FreeRADIUSまとめ

# FreeRADIUSまとめ

## FreeRADIUSとは
FreeRADIUSとは、RADIUSプロトコルを実装したオープンソースソフトウェアである。
FreeRADIUSには、RADIUSサーバ、RADIUSクライアントライブラリなどが含まれている。
EAP-TLS、EAP-TTLSなどにも対応しており、RADIUSサービスを提供するために十分な機能が実装されている。

以下のサイトで詳しく説明してくれています。
[FreeRADIUS ~OSSのRADIUSサーバ~](https://www.designet.co.jp/ossinfo/radius/freeradius.html)

## まとめを作成した経緯

仕事で調べてある程度は覚えたものの、どれが何の設定ファイルなのか、時間が経つと公式ドキュメントのどこに記載があったかも忘れて再度同じ作業を繰り返しそうだと思ったため、備忘録としてまとめることにした。
あくまで調査したものに関するもののまとめなので、触れていない設定ファイルもある。
間違い等あればご指摘いただきたい。

## 環境
Red Hat Enterprise Linux Server release 7.6 (Maipo)
FreeRADIUS Version 3.0.13
(freeradius-mysql,freeradius-utilsインストール済み)

## ディレクトリ構成
treeコマンドでディレクトリ構成を取得
それぞれの環境で異なると思うので、一例として表示

```
# tree --charset=C /etc/raddb
/etc/raddb
|-- README.rst
|-- certs
|   |-- 01.pem
|   |-- 02.pem
|   |-- Makefile
|   |-- README
|   |-- bootstrap
|   |-- ca.cnf
|   |-- ca.der
|   |-- ca.key
|   |-- ca.pem
|   |-- client.cnf
|   |-- client.crt
|   |-- client.csr
|   |-- client.key
|   |-- client.p12
|   |-- client.pem
|   |-- dh
|   |-- index.txt
|   |-- index.txt.attr
|   |-- index.txt.attr.old
|   |-- index.txt.old
|   |-- passwords.mk
|   |-- serial
|   |-- serial.old
|   |-- server.cnf
|   |-- server.crt
|   |-- server.csr
|   |-- server.key
|   |-- server.p12
|   |-- server.pem
|   |-- user@example.org.pem
|   `-- xpextensions
|-- clients.conf
|-- dictionary
|-- hints -> ./mods-config/preprocess/hints
|-- huntgroups -> ./mods-config/preprocess/huntgroups
|-- mods-available
|   |-- README.rst
|   |-- always
|   |-- attr_filter
|   |-- cache
|   |-- cache_eap
|   |-- chap
|   |-- counter
|   |-- cui
|   |-- date
|   |-- detail
|   |-- detail.example.com
|   |-- detail.log
|   |-- dhcp
|   |-- dhcp_sqlippool
|   |-- digest
|   |-- dynamic_clients
|   |-- eap
|   |-- echo
|   |-- etc_group
|   |-- exec
|   |-- expiration
|   |-- expr
|   |-- files
|   |-- idn
|   |-- inner-eap
|   |-- ippool
|   |-- linelog
|   |-- logintime
|   |-- mac2ip
|   |-- mac2vlan
|   |-- mschap
|   |-- ntlm_auth
|   |-- opendirectory
|   |-- otp
|   |-- pam
|   |-- pap
|   |-- passwd
|   |-- preprocess
|   |-- python
|   |-- radutmp
|   |-- realm
|   |-- redis
|   |-- rediswho
|   |-- replicate
|   |-- rest
|   |-- smbpasswd
|   |-- smsotp
|   |-- soh
|   |-- sometimes
|   |-- sql
|   |-- sqlcounter
|   |-- sqlippool
|   |-- sradutmp
|   |-- unix
|   |-- unpack
|   |-- utf8
|   |-- wimax
|   `-- yubikey
|-- mods-config
|   |-- README.rst
|   |-- attr_filter
|   |   |-- access_challenge
|   |   |-- access_reject
|   |   |-- accounting_response
|   |   |-- post-proxy
|   |   `-- pre-proxy
|   |-- files
|   |   |-- accounting
|   |   |-- authorize
|   |   `-- pre-proxy
|   |-- preprocess
|   |   |-- hints
|   |   `-- huntgroups
|   `-- sql
|       |-- counter
|       |   `-- mysql
|       |       |-- dailycounter.conf
|       |       |-- expire_on_login.conf
|       |       |-- monthlycounter.conf
|       |       `-- noresetcounter.conf
|       |-- cui
|       |   `-- mysql
|       |       |-- queries.conf
|       |       `-- schema.sql
|       |-- ippool
|       |   `-- mysql
|       |       |-- queries.conf
|       |       `-- schema.sql
|       |-- ippool-dhcp
|       |   `-- mysql
|       |       |-- queries.conf
|       |       `-- schema.sql
|       `-- main
|           |-- mysql
|           |   |-- extras
|           |   |   `-- wimax
|           |   |       |-- queries.conf
|           |   |       `-- schema.sql
|           |   |-- queries.conf
|           |   |-- schema.sql
|           |   `-- setup.sql
|           `-- ndb
|               |-- README
|               |-- schema.sql
|               `-- setup.sql
|-- mods-enabled
|   |-- always -> ../mods-available/always
|   |-- attr_filter -> ../mods-available/attr_filter
|   |-- cache_eap -> ../mods-available/cache_eap
|   |-- chap -> ../mods-available/chap
|   |-- date -> ../mods-available/date
|   |-- detail -> ../mods-available/detail
|   |-- detail.log -> ../mods-available/detail.log
|   |-- dhcp -> ../mods-available/dhcp
|   |-- digest -> ../mods-available/digest
|   |-- dynamic_clients -> ../mods-available/dynamic_clients
|   |-- eap -> ../mods-available/eap
|   |-- echo -> ../mods-available/echo
|   |-- exec -> ../mods-available/exec
|   |-- expiration -> ../mods-available/expiration
|   |-- expr -> ../mods-available/expr
|   |-- files -> ../mods-available/files
|   |-- linelog -> ../mods-available/linelog
|   |-- logintime -> ../mods-available/logintime
|   |-- mschap -> ../mods-available/mschap
|   |-- ntlm_auth -> ../mods-available/ntlm_auth
|   |-- pap -> ../mods-available/pap
|   |-- passwd -> ../mods-available/passwd
|   |-- preprocess -> ../mods-available/preprocess
|   |-- radutmp -> ../mods-available/radutmp
|   |-- realm -> ../mods-available/realm
|   |-- replicate -> ../mods-available/replicate
|   |-- soh -> ../mods-available/soh
|   |-- sradutmp -> ../mods-available/sradutmp
|   |-- unix -> ../mods-available/unix
|   |-- unpack -> ../mods-available/unpack
|   `-- utf8 -> ../mods-available/utf8
|-- panic.gdb
|-- policy.d
|   |-- accounting
|   |-- canonicalization
|   |-- control
|   |-- cui
|   |-- debug
|   |-- dhcp
|   |-- eap
|   |-- filter
|   `-- operator-name
|-- proxy.conf
|-- radiusd.conf
|-- sites-available
|   |-- README
|   |-- buffered-sql
|   |-- challenge
|   |-- channel_bindings
|   |-- check-eap-tls
|   |-- coa
|   |-- control-socket
|   |-- copy-acct-to-home-server
|   |-- decoupled-accounting
|   |-- default
|   |-- dhcp
|   |-- dhcp.relay
|   |-- dynamic-clients
|   |-- example
|   |-- inner-tunnel
|   |-- originate-coa
|   |-- proxy-inner-tunnel
|   |-- robust-proxy-accounting
|   |-- soh
|   |-- status
|   |-- tls
|   |-- virtual.example.com
|   `-- vmps
|-- sites-enabled
|   |-- default -> ../sites-available/default
|   `-- inner-tunnel -> ../sites-available/inner-tunnel
|-- templates.conf
|-- trigger.conf
`-- users -> ./mods-config/files/authorize
```

## ファイル・ディレクトリ概要
### README.rst
version3.0へ上がったことによるversion2との差異や変更があったモジュールについて記載されている。
エディタ等で見づらい場合は、github上で公開されているものを閲覧するとよい。
[Upgrading to Version 3.0](https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x/raddb/README.rst)

### certs
サーバー証明書を作成するスクリプトが含まれるディレクトリ。
今回の調査では対象としていなかったので、デフォルトのままである。
変更等作業を行う場合は本ディレクトリ内の`README`を見るのがよいだろう。

### clients.conf
RADIUSサーバーへアクセスを行うクライアントを定義する設定ファイル。
フォーマットや使用する項目名については本ファイル内に記載されている。

version2とversion3ではフォーマットが異なっているので注意したい。
version2のフォーマットでも動作はするが、プロセスを立ち上げたときに以下のような警告がでてくるので、可能であれば修正するのがよいだろう。


```
No 'ipaddr' or 'ipv4addr' or 'ipv6addr' field found in client XXX.XXX.XXX.XXX. Please fix your configuration
Support for old-style clients will be removed in a future release
```

下記にフォーマットの例を示す。

```:version2
client 192.168.0.0/24 {
	secret		= testing123
	shortname	= private-network-1
}
```

```:version3
client private_range {
	ipaddr		= 192.168.0.0/24
	secret		= testing123
	shortname	= private-network-1
}
```

### mods-available / mods-enabled
FreeRADIUSで使用するモジュールの設定を行うディレクトリ。
SQLを使用する場合もここで設定する。

モジュールを使用する場合は、`mods-enabled`ディレクトリに対象モジュールのリンクを張らないと適用されないので注意が必要。

```:例：sqlのリンクを張る場合
# ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/
```

詳細はREADME参照 → [Modules in Version 3](https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x/raddb/mods-available/README.rst)

### mods-available/sql
SQLの設定ファイル
SQLを使用する場合は、driver変数とdialect変数の種類が一致しており、DB情報を記載すればよい。
デフォルトではdriver変数にはrlm_sql_nullが、dialect変数にはsqliteが指定されている。
コメントで`Connection info`と記載されている箇所にDB情報を記載する箇所があるので、
サーバーIP、ログインID、パスワード、DB名を記載する。


### mods-config
各モジュール固有の構成ファイルが格納される。
詳細はREADME参照 → [The mods-config Directory](https://github.com/FreeRADIUS/freeradius-server/tree/v3.0.x/raddb/mods-config)

### mods-config/attr_filter/pre-proxy
プロキシを行う際の転送するアトリビュートのフィルターを設定する。
記載順序で設定が読み込まれるため、設定を追加する際はDEFAULTよりも前に記載する必要がある。

記載方法等は次のリンクを参照のこと → [rlm_attr_filter](https://networkradius.com/doc/3.0.7/raddb/mods-available/attr_filter.html)

### policy.d
version2でのpolicy.confが該当する。
属性の正規化や書き換え等のポリシーが格納される。

参照先のページに一部記載あり
→ [How to use radiusd -X (debug mode) - Reading the configuration files](https://wiki.freeradius.org/guide/radiusd-X)

### proxy.conf
転送先のHomeRADIUSや、転送を行いたいレルムの設定を行う。

詳細はproxy.conf内の説明を参照

### radius.conf
FreeRADIUSの基本設定ファイル
本設定ファイルにコメントでディレクトリの説明もおおまかにされている。
冒頭のコメントを一部翻訳したものを記載する。(Bing翻訳)

>この (およびその他の) 構成ファイルの形式は、"man unlang" に記載されています。
>多くのサブディレクトリにも README があります。
>
>構成ファイルを編集する前に、"man radiusd" をお読みください。 
>「デバッグ」というタイトルのセクションを参照してください。
>最小限の労力で必要な構成をすばやく作成する方法の概要を示します。

### sites-available / sites-enabled
仮想サーバーとしての設定ファイル格納ディレクトリ
詳細は`README`参照

仮想サーバーとしての設定をアクティブにする場合は、mods-available / mods-enabledと同じように
sites-enabledにリンクを張る。

## おわりに
まぁ基本的に公式ドキュメント読めってなっちゃうのよね。
ただ目的の公式ドキュメントへすんなり辿り着けないことが多くて疲れることが多い。
英語がすんなり読めればそんなことはぜんぜんないのかもしれないけど。。。

時間があって気力が湧けば、FreeRADIUSを使ってなにかやって記事を充実させたいな。