์ค๋์ ๊ธฐ์
๋คํธ์ํฌ, ์ฌ์ดํธ, ์๋น์ค, SSH๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์ด์ค ์ธ์ฆ ์๋ฒ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค. ์๋ฒ๋ LinOTP + FreeRadius ์กฐํฉ์ ์คํํฉ๋๋ค.
์ ํ์ํ๊ฐ์?
์ด๋ ์ XNUMX์ ์ ๊ณต์
์ฒด์ ๊ด๊ณ์์ด ์์ฒด ๋คํธ์ํฌ ๋ด์์ ์์ ํ ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ ํธ๋ฆฌํ ์๋ฃจ์
์
๋๋ค.
์ด ์๋น์ค๋ ๋ค๋ฅธ ์คํ์์ค ์ ํ๊ณผ ๋ฌ๋ฆฌ ๋งค์ฐ ํธ๋ฆฌํ๊ณ ์๊ฐ์ ์ด๋ฉฐ, ์๋ง์ ๊ธฐ๋ฅ๊ณผ ์ ์ฑ
(์: ๋ก๊ทธ์ธ+๋น๋ฐ๋ฒํธ+(PIN+OTTPoken))๋ ์ง์ํฉ๋๋ค. API๋ฅผ ํตํด SMS ์ ์ก ์๋น์ค(LinOTP Config->Provider Config->SMS Provider)์ ํตํฉํ๊ณ Google Authentificator ๋ฑ๊ณผ ๊ฐ์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์ฉ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ์์์ ๋ง์๋๋ฆฐ ์๋น์ค๋ณด๋ค ๋ ํธ๋ฆฌํ ๊ฒ ๊ฐ์์
์ด ์๋ฒ๋ Cisco ASA, OpenVPN ์๋ฒ, Apache2 ๋ฐ ์ผ๋ฐ์ ์ผ๋ก RADIUS ์๋ฒ๋ฅผ ํตํ ์ธ์ฆ์ ์ง์ํ๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒ๊ณผ ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค(์: ๋ฐ์ดํฐ ์ผํฐ์ SSH์ฉ).
ํ์ :
1) ๋ฐ๋น์ 8(์ ์) - ํ์! (Debian 9์ ํ๊ฐํ ์ค์น๋ ๊ธฐ์ฌ ๋ง์ง๋ง ๋ถ๋ถ์ ์ค๋ช ๋์ด ์์ต๋๋ค)
ํ :
๋ฐ๋น์ 8์ ์ค์นํฉ๋๋ค.
LinOTP ์ ์ฅ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list
ํค ์ถ๊ฐ:
# gpg --search-keys 913DFF12F86258E5
๊ฐ๋ "์๋ก" ์ค์นํ๋ ๋์ ์ด ๋ช ๋ น์ ์คํํ๋ฉด ๋ฐ๋น์์ ๋ค์์ด ํ์๋ฉ๋๋ค:
gpg: ัะพะทะดะฐะฝ ะบะฐัะฐะปะพะณ `/root/.gnupg'
gpg: ัะพะทะดะฐะฝ ะฝะพะฒัะน ัะฐะนะป ะฝะฐัััะพะตะบ `/root/.gnupg/gpg.conf'
gpg: ะะะะะะะะ: ะฟะฐัะฐะผะตััั ะฒ `/root/.gnupg/gpg.conf' ะตัะต ะฝะต ะฐะบัะธะฒะฝั ะฟัะธ ััะพะผ ะทะฐะฟััะบะต
gpg: ัะพะทะดะฐะฝะฐ ัะฐะฑะปะธัะฐ ะบะปััะตะน `/root/.gnupg/secring.gpg'
gpg: ัะพะทะดะฐะฝะฐ ัะฐะฑะปะธัะฐ ะบะปััะตะน `/root/.gnupg/pubring.gpg'
gpg: ะฝะต ะทะฐะดะฐะฝั ัะตัะฒะตัั ะบะปััะตะน (ะธัะฟะพะปัะทัะนัะต --keyserver)
gpg: ัะฑะพะน ะฟัะธ ะฟะพะธัะบะต ะฝะฐ ัะตัะฒะตัะต ะบะปััะตะน: ะฟะปะพั
ะพะน URI
์ด๊ฒ์ด ์ด๊ธฐ gnupg ์ค์ ์
๋๋ค. ๊ด์ฐฎ์์. ๋ช
๋ น์ ๋ค์ ์คํํ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋น์์ ์ง๋ฌธ์:
gpg: ะฟะพะธัะบ "913DFF12F86258E5" ะฝะฐ hkp ัะตัะฒะตัะต keys.gnupg.net
(1) LSE LinOTP2 Packaging <[email protected]>
2048 bit RSA key F86258E5, ัะพะทะดะฐะฝ: 2010-05-10
Keys 1-1 of 1 for "913DFF12F86258E5". ะะฒะตะดะธัะต ัะธัะปะฐ, N) ะกะปะตะดัััะธะน ะธะปะธ Q) ะัั
ะพะด>
์ฐ๋ฆฌ๋ ๋๋ตํฉ๋๋ค: 1
๋ค์ :
# gpg --export 913DFF12F86258E5 | apt-key add -
# apt-get update
MySQL์ ์ค์นํฉ๋๋ค. ์ด๋ก ์ ์ผ๋ก๋ ๋ค๋ฅธ SQL Server๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง ๋จ์ํ๋ฅผ ์ํด LinOTP์ ๊ถ์ฅ๋๋ ๋๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
(LinOTP ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ๊ตฌ์ฑ์ ํฌํจํ ์ถ๊ฐ ์ ๋ณด๋ ๊ณต์ ๋ฌธ์์์ ์ฐพ์ ์ ์์ต๋๋ค.
# apt-get install mysql-server
# apt-get update
(์
๋ฐ์ดํธ๋ฅผ ๋ค์ ํ์ธํ๋ ๊ฒ๋ ๋์์ง ์์ ๊ฒ์
๋๋ค)
LinOTP ๋ฐ ์ถ๊ฐ ๋ชจ๋์ ์ค์นํฉ๋๋ค.
# apt-get install linotp
์ค์น ํ๋ก๊ทธ๋จ์ ์ง๋ฌธ์ ๋ต๋ณํฉ๋๋ค.
Apache2 ์ฌ์ฉ: ์
๊ด๋ฆฌ์ Linotp์ ๋น๋ฐ๋ฒํธ ์์ฑ: "๊ทํ์ ๋น๋ฐ๋ฒํธ"
์์ฒด ์๋ช
๋ ์ธ์ฆ์๋ฅผ ์์ฑํ์๊ฒ ์ต๋๊น?: ์
MySQL์ ์ฌ์ฉํ์๊ฒ ์ต๋๊น?: ์
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋์ ์์ต๋๊น: localhost
์๋ฒ์ LinOTP ๋ฐ์ดํฐ๋ฒ ์ด์ค(๊ธฐ๋ณธ ์ด๋ฆ) ๋ง๋ค๊ธฐ: LinOTP2
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋ณ๋์ ์ฌ์ฉ์ ์์ฑ: LinOTP2
์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ "Your Password"์
๋๋ค.
์ง๊ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๊น? (โ์ ๋ง๋ก...์ ์ํ์๋์?โ์ ๊ฐ์ ๊ฒ): ์
์ค์น ์ ์์ฑํ MySQL ๋ฃจํธ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ์ธ์: โYourPasswordโ
์๋ฃ.
(์ ํ์ฌํญ์ด๋ฏ๋ก ์ค์นํ์ง ์์๋ ๋ฉ๋๋ค)
# apt-get install linotp-adminclient-cli
(์ ํ์ฌํญ์ด๋ฏ๋ก ์ค์นํ์ง ์์๋ ๋ฉ๋๋ค)
# apt-get install libpam-linotp
์ด์ Linotp ์น ์ธํฐํ์ด์ค๋ฅผ ๋ค์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
"<b>https</b>: //IP_ัะตัะฒะตัะฐ/manage"
๋์ค์ ์น ์ธํฐํ์ด์ค์ ์ค์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
์ด์ ๊ฐ์ฅ ์ค์ํ ๊ฒ! FreeRadius๋ฅผ ์ฌ๋ฆฌ๊ณ Linotp์ ์ฐ๊ฒฐํฉ๋๋ค.
LinOTP ์์ ์ ์ํ FreeRadius ๋ฐ ๋ชจ๋ ์ค์น
# apt-get install freeradius linotp-freeradius-perl
ํด๋ผ์ด์ธํธ ๋ฐ ์ฌ์ฉ์ ๋ฐ๊ฒฝ ๊ตฌ์ฑ์ ๋ฐฑ์ ํฉ๋๋ค.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old
# mv /etc/freeradius/users /etc/freeradius/users.old
๋น ํด๋ผ์ด์ธํธ ํ์ผ์ ๋ง๋ญ๋๋ค.
# touch /etc/freeradius/clients.conf
์ ๊ตฌ์ฑ ํ์ผ ํธ์ง(๋ฐฑ์ ๋ ๊ตฌ์ฑ์ ์๋ก ์ฌ์ฉํ ์ ์์)
# nano /etc/freeradius/clients.conf
client 192.168.188.0/24 {
secret = passwd # ะฟะฐัะพะปั ะดะปั ะฟะพะดะบะปััะตะฝะธั ะบะปะธะตะฝัะพะฒ
}
๋ค์์ผ๋ก ์ฌ์ฉ์ ํ์ผ์ ๋ง๋ญ๋๋ค.
# touch /etc/freeradius/users
ํ์ผ์ ํธ์งํ์ฌ Radius์์ ์ธ์ฆ์ Perl์ ์ฌ์ฉํ ๊ฒ์์ ์๋ฆฝ๋๋ค.
# nano /etc/freeradius/users
DEFAULT Auth-type := perl
๋ค์์ผ๋ก /etc/freeradius/modules/perl ํ์ผ์ ํธ์งํฉ๋๋ค.
# nano /etc/freeradius/modules/perl
๋ชจ๋ ๋งค๊ฐ๋ณ์์ perl linotp ์คํฌ๋ฆฝํธ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค:
Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm
.....
๋ค์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ํ์ผ(๋๋ฉ์ธ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ํ์ผ)์ ์ง์ ํ๋ ํ์ผ์ ๋ง๋ญ๋๋ค.
# touch /etc/linotp2/rlm_perl.ini
# nano /etc/linotp2/rlm_perl.ini
URL=https://IP_ะฒะฐัะตะณะพ_LinOTP_ัะตัะฒะตัะฐ(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False
์ค์ํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์ข ๋ ์์ธํ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ฃผ์์ด ํฌํจ๋ ํ์ผ์ ๋ํ ์ ์ฒด ์ค๋ช
:
#linOTP ์๋ฒ์ IP(LinOTP ์๋ฒ์ IP ์ฃผ์)
URL=https://172.17.14.103/validate/simplecheck
#LinOTP ์น ์ธํฐํ์ด์ค์์ ์์ฑํ ์์ญ์
๋๋ค.)
REALM=์ฌ์ก์ฑ1
#LinOTP ์น ์ด๊ตฌ์ ์์ฑ๋ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ด๋ฆ์
๋๋ค.
RESCONF=ํ๋ซ_ํ์ผ
#์ ํ ์ฌํญ: ๋ชจ๋ ๊ฒ์ด ์ ์๋ํ๋ ๊ฒ ๊ฐ์ผ๋ฉด ์ฃผ์ ์ฒ๋ฆฌ
๋๋ฒ๊ทธ=์ฐธ
#์ ํ์ฌํญ: ์์ฒด ์๋ช
๋ ์ธ์ฆ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์ฉํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฃผ์ ์ฒ๋ฆฌํฉ๋๋ค(์์ฒด ์ธ์ฆ์๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ํ์ธํ๋ ค๋ ๊ฒฝ์ฐ SSL).
SSL_CHECK=๊ฑฐ์ง
๋ค์์ผ๋ก /etc/freeradius/sites-available/linotp ํ์ผ์ ์์ฑํฉ๋๋ค.
# touch /etc/freeradius/sites-available/linotp
# nano /etc/freeradius/sites-available/linotp
๊ทธ๋ฆฌ๊ณ ๊ตฌ์ฑ์ ์ฌ๊ธฐ์ ๋ณต์ฌํฉ๋๋ค(์๋ฌด ๊ฒ๋ ํธ์งํ ํ์ ์์).
authorize {
#normalizes maleformed client request before handed on to other modules (see '/etc/freeradius/modules/preprocess')
preprocess
# If you are using multiple kinds of realms, you probably
# want to set "ignore_null = yes" for all of them.
# Otherwise, when the first style of realm doesn't match,
# the other styles won't be checked.
#allows a list of realm (see '/etc/freeradius/modules/realm')
IPASS
#understands something like USER@REALM and can tell the components apart (see '/etc/freeradius/modules/realm')
suffix
#understands USERREALM and can tell the components apart (see '/etc/freeradius/modules/realm')
ntdomain
# Read the 'users' file to learn about special configuration which should be applied for
# certain users (see '/etc/freeradius/modules/files')
files
# allows to let authentification to expire (see '/etc/freeradius/modules/expiration')
expiration
# allows to define valid service-times (see '/etc/freeradius/modules/logintime')
logintime
# We got no radius_shortname_map!
pap
}
#here the linotp perl module is called for further processing
authenticate {
perl
}
๋ค์์ผ๋ก SIM ๋งํฌ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled
๊ฐ์ธ์ ์ผ๋ก ์ ๋ ๊ธฐ๋ณธ Radius ์ฌ์ดํธ๋ฅผ ์ข ๋ฃํ์ง๋ง, ํ์ํ ๊ฒฝ์ฐ ํด๋น ๊ตฌ์ฑ์ ํธ์งํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
# rm /etc/freeradius/sites-enabled/default
# rm /etc/freeradius/sites-enabled/inner-tunnel
# service freeradius reload
์ด์ ์น ํ์ด์ค๋ก ๋์๊ฐ์ ์ข ๋ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ค๋ฅธ์ชฝ ์๋จ์์ LinOTP Config -> UserIdResolvers -> New๋ฅผ ํด๋ฆญํฉ๋๋ค.
LDAP(AD win, LDAP samba), SQL ๋๋ Flatfile ์์คํ
์ ๋ก์ปฌ ์ฌ์ฉ์ ์ค์์ ์ํ๋ ๊ฒ์ ์ ํํฉ๋๋ค.
ํ์ ์ ๋ ฅ๋์ ์์ฑํ์ธ์.
๋ค์์ผ๋ก REALMS๋ฅผ ์์ฑํฉ๋๋ค.
์ค๋ฅธ์ชฝ ์๋จ์์ LinOTP Config -> Realms -> New๋ฅผ ํด๋ฆญํฉ๋๋ค.
REALMS์ ์ด๋ฆ์ ์ง์ ํ๊ณ ์ด์ ์ ์์ฑ๋ UserIdResolvers๋ฅผ ํด๋ฆญํฉ๋๋ค.
FreeRadius๋ ์์ ์ด ๊ฒ์ฒ๋ผ /etc/linotp2/rlm_perl.ini ํ์ผ์ ์ด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฏ๋ก ๋น์ ํธ์งํ์ง ์์๋ค๋ฉด ์ง๊ธ ํธ์งํ์ญ์์ค.
์๋ฒ๊ฐ ๋ชจ๋ ๊ตฌ์ฑ๋์์ต๋๋ค.
์ถ๊ฐ :
Debian 9์์ LinOTP ์ค์ ํ๊ธฐ:
ะฃััะฐะฝะพะฒะบะฐ :
# echo 'deb http://linotp.org/apt/debian stretch linotp' > /etc/apt/sources.list.d/linotp.list
# apt-get install dirmngr
# apt-key adv --recv-keys 913DFF12F86258E5
# apt-get update
# apt-get install mysql-server
(๊ธฐ๋ณธ์ ์ผ๋ก Debian 9์์ mysql(mariaDB)์ ๋ฃจํธ ๋น๋ฐ๋ฒํธ ์ค์ ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ฌผ๋ก ๋น์ ๋ ์ ์์ง๋ง ๋ด์ค๋ฅผ ์ฝ์ผ๋ฉด ์ด๋ ์ข ์ข "๋๋จํ ์คํจ"๋ก ์ด์ด์ง๋ฏ๋ก ์ค์ ํ๊ฒ ์ต๋๋ค. ๊ทธ๋๋)
# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('ััั_ะฟะฐัะพะปั') WHERE User = 'root';
exit
# apt-get install linotp
# apt-get install linotp-adminclient-cli
# apt-get install python-ldap
# apt install freeradius
# nano /etc/freeradius/3.0/sites-enabled/linotp
์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ผ์ธ์(JuriM์ด ๋ณด๋์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!):
์๋ฒ linotp {
๋ฃ๋ค {
ipaddr = *
ํฌํธ = 1812
์ ํ=์ธ์ฆ
}
๋ฃ๋ค {
ipaddr = *
ํฌํธ = 1813
์ ํ = ๊ณ์
}
์น์ธํ๋ค {
์ ์ฒ๋ฆฌ
์ ๋ฐ์ดํธ {
&control:Auth-Type := Perl
}
}
์ธ์ฆํ๋ค {
์ธ์ฆ ์ ํ Perl {
ํ
}
}
ํ๊ณ {
์ ๋์ค
}
}
/etc/freeradius/3.0/mods-enabled/perl ํธ์ง
ํ {
ํ์ผ ์ด๋ฆ = /usr/share/linotp/radius_linotp.pm
func_authenticate = ์ธ์ฆ
func_authorize = ์น์ธ
}
๋ถํํ๋ Debian 9์์๋ radius_linotp.pm ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ค์น๋์ง ์์ผ๋ฏ๋ก github์์ ๊ฐ์ ธ์ต๋๋ค.
# apt install git
# git clone https://github.com/LinOTP/linotp-auth-freeradius-perl
# cd linotp-auth-freeradius-perl/
# cp radius_linotp.pm /usr/share/linotp/radius_linotp.pm
์ด์ /etc/freeradius/3.0/clients.conf๋ฅผ ํธ์งํด ๋ณด๊ฒ ์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์๋ฒ {
ipaddr = 192.168.188.0/24
๋น๋ฐ = ๋น์ ์ ๋น๋ฐ๋ฒํธ
}
์ด์ nano /etc/linotp2/rlm_perl.ini๋ฅผ ์์ ํด ๋ณด๊ฒ ์ต๋๋ค.
Debian 8์ ์ค์นํ ๋์ ๋์ผํ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค(์์์ ์ค๋ช ).
๊ทธ๊ฒ์ ๋ชจ๋ ๊ทธ ์๊ฐ์ ๋ฐ๋ฅธ ๊ฒ์ ๋๋ค. (์์ง ํ ์คํธ๋์ง ์์)
์ด์ค ์ธ์ฆ์ผ๋ก ๊ฐ์ฅ ์์ฃผ ๋ณดํธํด์ผ ํ๋ ์์คํ
์ค์ ์ ๋ํ ๋ช ๊ฐ์ง ๋งํฌ๋ฅผ ์๋์ ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.
์ด์ค ์ธ์ฆ ์ค์
์กฐ์
๋ํ ๋ง์ ์ฌ์ดํธ์ cms๋ XNUMX๋จ๊ณ ์ธ์ฆ์ ์ง์ํฉ๋๋ค(WordPress์ ๊ฒฝ์ฐ LinOTP์๋
์ค์ํ ์ฌ์ค! Google OTP๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด "Google autenteficator" ์์๋ฅผ ์ ํํ์ง ๋ง์ญ์์ค! ๊ทธ๋ฌ๋ฉด QR์ฝ๋๋ฅผ ์ฝ์ ์ ์์ต๋๋ค... (์ด์ํ ์ฌ์ค)
์ด ๊ธฐ์ฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ค์ ๊ธฐ์ฌ์ ์ ๋ณด๊ฐ ์ฌ์ฉ๋์์ต๋๋ค.
์ ์์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ถ์ฒ : habr.com