はじめに
ここに記載された設定はとりあえずすぐにfreeradiusでRADIUSサーバを動かしてEAP-TLS認証が出来ることを検証したいぜ!という方向けの手順です。
RADIUSサーバと同一のCAから発行されたクライアント証明書であれば、期限切れでなければ無条件に受け入れる設定です。本番運用向け設定ではないのでご注意下さい。
少なくともEJBCA(Community Edition)で発行した証明書とOpenWrtを組み合わせて認証できることを確認済みです。
Docker Compose
services:
freeradius:
image: freeradius/freeradius-server:latest
container_name: freeradius
ports:
- "1812:1812/udp"
# - "1813:1813/udp" アカウンティングが要らないなら公開不要
volumes:
- ./mods-enabled:/etc/freeradius/mods-enabled
- ./sites-enabled:/etc/freeradius/sites-enabled
- ./clients.conf:/etc/freeradius/clients.conf
- ./certs:/etc/freeradius/certs
command: >
sh -lc '
mkdir -p /tmp/radiusd &&
chown freerad:freerad /tmp/radiusd &&
chown -R freerad:freerad /etc/freeradius/certs &&
chmod +x /etc/freeradius/certs &&
chmod 600 /etc/freeradius/certs/radius.key &&
chmod 700 /tmp/radiusd &&
exec freeradius -X
'
mods-enabled/eap
freeradiusが信頼するEAP-TLS認証についての設定
eap {
default_eap_type = tls
timer_expire = 60
ignore_unknown_eap_types = no
tls-config tls-common {
private_key_file = /etc/freeradius/certs/radius.key
certificate_file = /etc/freeradius/certs/radius.pem
ca_file = /etc/freeradius/certs/ca.pem
random_file = /dev/urandom
verify {
tmpdir = /tmp/radiusd
}
require_client_cert = yes
}
tls {
tls = tls-common
}
}
sites-enabled/default
freeradius自体の大まかな設定
server default {
listen {
type = auth
ipaddr = *
port = 1812
}
authorize {
eap
}
authenticate {
eap
}
post-auth {
}
}
clients.conf
RADIUSアクセスを許可するAPなど機器の設定
client openwrt-osaka-ap {
ipaddr = 192.168.1.2
secret = ultrasuperstrongsecret!!!
}
certs
- radius.pem
- RADIUSサーバの公開証明書
- radius.key
- RADIUSサーバの秘密鍵
- ca.pem
- CAの公開証明書
エラーで立ち上がらない場合
多分権限の問題です。
コンテナ自体はroot実行ですが、freeradius自体はfreeradユーザーで動くため、鍵ファイルやコンフィグファイル、一部ディレクトリへのアクセスで問題が発生することがあります。
certsフォルダにchmod +xしたり、radius.keyをchown freerad:freeradしたり、chmod 600したりすると解決します。
おわり
今度はOpenWrtと連携して802.1x Dynamic VLANでも試してみようと思います。