Fortinet VPN新增Google Auth身分證驗(第二篇)

1k 詞

前言

上一篇跟各位講到把主機加入AD,那這次來把Freeradius安裝並設定完成吧!

上一篇的連結在這邊,再次提醒本次是結合LDAP來使用的。

行くぞ!! (ゝ∀・)

設備安裝與設定

※本範例為CentOS7

  • 安裝epel

    1
    yum install -y epel-release
  • 安裝 Freeradis與相關套件

    1
    yum install -y freeradius freeradius-utils samba winbind freeradius-ldap
  • 設置為開機啟動

    1
    systemctl enable radiusd.service
  • 設定 Freeradius ldap module

vim /etc/reddb/mods-available/ldap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ldap {
server = 'ldap://serverip'
port =
identity = 'cn=username,ou=部門2,ou=部門1,dc=company,dc=com'
password = password
base_dn = 'ou=部門,dc=公司,dc=com'
sasl {
}
update {
control:Password-With-Header += 'userPassword'
control:NT-Password := 'ntPassword'
control: += 'radiusControlAttribute'
request: += 'radiusRequestAttribute'
reply: += 'radiusReplyAttribute'
}
edir = no
edir_autz = yes
user {
sasl {
}
scope = 'sub'
}
group {
base_dn = "ou=部門,dc=公司,dc=com"
filter = '(objectClass=Group)'
scope = 'sub'
name_attribute = cn
membership_filter = "(|(member=%{control:Ldap-UserDn})(memberUid=%{%{Stripped-User-Name}:-%{User-Name}}))"
membership_attribute = 'memberOf'
cacheable_name = 'yes'
cacheable_dn = 'yes'
}
  • 設定連結

    ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/

會長這樣

1
2
ll /etc/raddb/mods-enabled/ldap 
lrwxrwxrwx 1 root root 30 Jul 17 18:19 /etc/raddb/mods-enabled/ldap -> /etc/raddb/mods-available/ldap
  • 修改client.conf

vim /etc/raddb/client.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
client firewall {
ipaddr =
secret =
require_message_authenticator = no
nas_type = other
shortname = fortinet
}

client windows-AD {
ipaddr =
secret =
require_message_authenticator = no
nas_type = other
}
  • 設定成之PAM驗證 與 測試帳號

vim /etc/raddb/users

1
2
3
4
5
DEFAULT Auth-Type := PAM

將下列的# 刪除
#bob Cleartext-Password := "hello"
# Reply-Message := "Hello, %{User-Name}"
  • 修改freeredius啟動的使用者與群組

vim /etc/raddb/radiusd.conf

1
2
user = root
group = root

我自己有碰到修改失敗,所以還得去改

vim /etc/systemd/system/multi-user.target.wants/radiusd.service

  • 為了可以在Fortigate上設置群組判別,需要傳遞Vendor Specific Attribute,因此在 raddb /policy.d資料夾中,建立以下內容作判斷

vim /etc/raddb/policy.d/company-group

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
group_authorization { 
if (&LDAP-Group[*] == "CN=team,OU=部門,OU=類別,DC=公司,DC=tw") {
update reply {
&Fortinet-Group-Name := "SE_group"
}
}
elsif (&LDAP-Group[*] == "CN=team,OU=部門,OU=類別,DC=公司,DC=tw") {
update reply {
&Fortinet-Group-Name = "SD_group"
}
}
elsif (&LDAP-Group[*] == "CN=team,OU=部門,OU=類別,DC=公司,DC=tw") {
update reply {
&Fortinet-Group-Name = "CP_group"
}
}
elsif (&LDAP-Group[*] == ""CN=team,OU=部門,OU=類別,DC=公司,DC=tw") {
update reply {
&Fortinet-Group-Name = "BP_group"
}
}
else {
update reply {
Reply-Message := "Not Authorized to access this system, if you need any help, please call SE team"
}
reject
}
}
  • 重啟Freeredius

    1
    systemctl restart rediusd.service
  • 測試指令

    1
    radtest bob hello localhost 0 testing123
  • 如果成功會有以下資訊

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sent Access-Request Id 1 from 0.0.0.0:54855 to 127.0.0.1:1812 length 73
    User-Name = "bob"
    User-Password = "hello"
    NAS-IP-Address = 127.0.0.1
    NAS-Port = 0
    Message-Authenticator = 0x00
    Cleartext-Password = "hello"
    Received Access-Accept Id 1 from 127.0.0.1:1812 to 0.0.0.0:0 length 32
    Reply-Message = "Hello, bob"
    (0) -: Expected Access-Accept got Access-Reject

    最後一行出現 Access-Reject 正常,因為測試帳號並沒有存在AD上,所以會失敗,但有從本地收到 Reply-message

  • 開啟windows NPS

此時要在去AD上開啟NPS (本次以Windows AD 作範例 )

伺服器管理員 > 工具 > 網路原則伺服器
Imgur
RADIUS 用戶端及伺服器 > RADIUS用戶端 > 右鍵 > 新增

Imgur

按照上列設定 ,謹記 密碼要與 /raddb/clients.conf 中的密碼一致
Imgur

  • 完成後可以測試 RADIUS與Windows AD的LDAP驗證是否正式完成

    1
    radtest 使用者帳號 '使用者密碼' 'AD的IP' 0 '共用密碼'
  • 顯示下列資訊代表連結成功並且成功驗證帳號

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sent Access-Request Id 181 from 0.0.0.0:59654 to 192.168.1.1:1812 length 77
    User-Name = "XXXXXX"
    User-Password = "XXXXXXXXX"
    NAS-IP-Address = 127.0.0.1
    NAS-Port = 0
    Message-Authenticator = 0x00
    Cleartext-Password = "XXXXXXXXXXXXXX"
    Received Access-Accept Id 181 from 192.168.xxx.xxx:1812 to 0.0.0.0:0 length 142
    Fortinet-Group-Name = "SE_group"
    Framed-Protocol = PPP
    Service-Type = Framed-User
    Class = 0x798605f40000013700010200c0a81fe800000000000000000000000001d957216ba33593000000000000031e
    MS-Link-Utilization-Threshold = 50
    MS-Link-Drop-Time-Limit = 120

Bounes

想知道ldap有沒有正常運行或是ldap-group會搜尋到甚麼,可以透過ldapsearch檢查

1
2
3
yum install openldap-clients

ldapsearch -x -LLL -h "LDAP主機IP" -b "ou=company,dc=company,dc=com" -D "CN=username,OU=SYS,OU=company,DC=company,DC=com" -s sub "(&(objectClass=USER)(sAMAccountName=username))" -W

如果有查到使用者代表正常。

結尾

到這邊Freeradius的LDAP設定與介接就完成了~ ヾ(´∀ ˋ)ノ

原則上跟著做應該不太會出錯,真正難的點我個人碰到的事,怎麼確定Freeradius有正確連到AD,必且取得帳號、部門的驗證,這個部份我卡了快一周,基本上這邊過了,後面就雨過天晴了。

下一篇我們來設定 Google auth套用和自動註冊的網頁設定與實際操作吧!

では、お疲れ様でした~