ProHoster > وبلاگ > اداره > سازماندهی کار از راه دور یک سازمان SMB در OpenVPN
سازماندهی کار از راه دور یک سازمان SMB در OpenVPN
بیانیه مشکل
این مقاله سازماندهی دسترسی از راه دور را برای کارکنان در محصولات منبع باز توصیف می کند و می تواند هم برای ساخت یک سیستم کاملاً مستقل مورد استفاده قرار گیرد و هم برای توسعه زمانی که کمبود مجوز در سیستم تجاری موجود وجود دارد یا عملکرد آن کافی نیست مفید خواهد بود.
هدف این مقاله پیاده سازی یک سیستم کامل برای ارائه دسترسی از راه دور به یک سازمان است که کمی بیشتر از "نصب OpenVPN در 10 دقیقه" است.
در نتیجه، سیستمی دریافت خواهیم کرد که در آن از گواهینامه ها و (به صورت اختیاری) اکتیو دایرکتوری شرکتی برای احراز هویت کاربران استفاده می شود. که ما یک سیستم با دو فاکتور تأیید دریافت خواهیم کرد - آنچه من دارم (گواهینامه) و آنچه می دانم (رمز عبور).
نشانه ای که یک کاربر مجاز به اتصال است، عضویت او در گروه myVPNUsr است. مرجع گواهی آفلاین استفاده خواهد شد.
هزینه اجرای راه حل فقط منابع سخت افزاری کم و 1 ساعت کار مدیر سیستم است.
ما از یک ماشین مجازی با OpenVPN و Easy-RSA نسخه 3 در CetntOS 7 استفاده خواهیم کرد که به ازای هر 100 اتصال، 4 vCPU و 4 گیگابایت رم اختصاص داده شده است.
در مثال، شبکه سازمان ما 172.16.0.0/16 است که در آن سرور VPN با آدرس 172.16.19.123 در بخش 172.16.19.0/24، سرورهای DNS 172.16.16.16 و 172.16.17.17، 172.16.20.0 و 23 فرعی قرار دارد. .XNUMX/XNUMX برای مشتریان VPN اختصاص داده شده است.
برای اتصال از خارج، از اتصال از طریق پورت 1194/udp استفاده می شود و یک A-record gw.abc.ru در DNS برای سرور ما ایجاد شده است.
اکیداً توصیه نمی شود SELinux را غیرفعال کنید! OpenVPN بدون غیرفعال کردن سیاست های امنیتی کار می کند.
ما از توزیع CentOS 7.8.2003 استفاده می کنیم. ما باید سیستم عامل را با حداقل تنظیمات نصب کنیم. با استفاده از این کار راحت است شروع ضربه، شبیه سازی یک تصویر سیستم عامل از قبل نصب شده و سایر ابزارها.
پس از نصب، با اختصاص یک آدرس به رابط شبکه (طبق شرایط وظیفه 172.16.19.123)، سیستم عامل را به روز می کنیم:
$ sudo yum update -y && reboot
ما همچنین باید مطمئن شویم که همگام سازی زمان در دستگاه ما انجام می شود.
برای نصب نرم افزار کاربردی، به بسته های openvpn، openvpn-auth-ldap، easy-rsa و vim به عنوان ویرایشگر اصلی نیاز دارید (به مخزن EPEL نیاز دارید).
پارامترهای سازمان مشروط ABC LLC در اینجا توضیح داده شده است؛ می توانید آنها را به پارامترهای واقعی اصلاح کنید یا آنها را از مثال رها کنید. مهمترین چیز در پارامترها آخرین خط است که مدت اعتبار گواهی را بر حسب روز تعیین می کند. مثال از مقدار 10 سال (365*10+2 سال کبیسه) استفاده می کند. این مقدار باید قبل از صدور گواهی های کاربر تنظیم شود.
در مرحله بعد، یک مرجع صدور گواهینامه مستقل را پیکربندی می کنیم.
راهاندازی شامل صادر کردن متغیرها، مقداردهی اولیه CA، صدور کلید و گواهی ریشه CA، کلید Diffie-Hellman، کلید TLS، و کلید سرور و گواهی است. کلید CA باید به دقت محافظت شود و مخفی بماند! تمام پارامترهای پرس و جو را می توان به عنوان پیش فرض باقی گذاشت.
این قسمت اصلی راه اندازی مکانیزم رمزنگاری را تکمیل می کند.
راه اندازی OpenVPN
به دایرکتوری OpenVPN بروید، دایرکتوری های سرویس ایجاد کنید و پیوندی به easy-rsa اضافه کنید:
cd /etc/openvpn/
mkdir /var/log/openvpn/ /etc/openvpn/ccd /usr/share/easy-rsa/3/client
ln -s /usr/share/easy-rsa/3/pki/ /etc/openvpn/
فایل اصلی پیکربندی OpenVPN را ایجاد کنید:
$ sudo vim server.conf
مطالب زیر
port 1194
proto udp
dev tun
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/myvpngw.crt
key /etc/openvpn/pki/private/myvpngw.key
crl-verify /etc/openvpn/pki/crl.pem
dh /etc/openvpn/pki/dh.pem
server 172.16.20.0 255.255.254.0
ifconfig-pool-persist ipp.txt
push "route 172.16.0.0 255.255.255.0"
push "route 172.17.0.0 255.255.255.0"
client-config-dir ccd
push "dhcp-option DNS 172.16.16.16"
push "dhcp-option DNS 172.16.17.17"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
username-as-common-name
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/ldap.conf
چند نکته در مورد پارامترها:
اگر در هنگام صدور گواهی نام دیگری مشخص شده بود، آن را مشخص کنید.
مجموعه ای از آدرس ها را متناسب با وظایف خود مشخص کنید*؛
ممکن است یک یا چند مسیر و سرور DNS وجود داشته باشد.
2 خط آخر برای اجرای احراز هویت در AD** مورد نیاز است.
*محدوده آدرس های انتخاب شده در مثال به 127 کلاینت امکان اتصال همزمان را می دهد، زیرا شبکه 23/ انتخاب می شود و OpenVPN با استفاده از ماسک 30/ برای هر مشتری یک زیرشبکه ایجاد می کند.
در صورت لزوم، پورت و پروتکل را می توان تغییر داد، با این حال، باید در نظر داشت که تغییر شماره پورت مستلزم پیکربندی SELinux است و استفاده از پروتکل tcp باعث افزایش سربار می شود، زیرا کنترل تحویل بسته TCP در حال حاضر در سطح بسته های محصور شده در تونل انجام می شود.
**اگر احراز هویت در AD مورد نیاز نیست، آنها را نظر دهید، بخش بعدی و در قالب را نادیده بگیرید خط auth-user-pass را حذف کنید.
احراز هویت AD
برای حمایت از عامل دوم، از تأیید حساب در AD استفاده می کنیم.
به یک حساب کاربری در دامنه با حقوق یک کاربر معمولی و یک گروه نیاز داریم که عضویت در آن تعیین کننده توانایی اتصال باشد.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
صدور گواهی و ابطال
زیرا علاوه بر خود گواهی ها، به کلیدها و تنظیمات دیگر نیاز دارید؛ بسیار راحت است که همه اینها را در یک فایل نمایه قرار دهید. سپس این فایل به کاربر منتقل می شود و نمایه بر روی کلاینت OpenVPN وارد می شود. برای انجام این کار، ما یک قالب تنظیمات و یک اسکریپت ایجاد می کنیم که نمایه را تولید می کند.
شما باید محتویات فایل های گواهی ریشه (ca.crt) و کلید TLS (ta.key) را به نمایه اضافه کنید.
قبل از صدور گواهینامه های کاربر فراموش نکنید که مدت اعتبار مورد نیاز برای گواهی ها را تنظیم کنید در فایل پارامترها شما نباید آن را خیلی طولانی کنید؛ من توصیه می کنم خود را به حداکثر 180 روز محدود کنید.
vim /usr/share/easy-rsa/3/vars
...
export EASYRSA_CERT_EXPIRE=180
vim /usr/share/easy-rsa/3/client/template.ovpn
client
dev tun
proto udp
remote gw.abc.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----
</ca>
key-direction 1
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----
</tls-auth>
یادداشت ها:
رشته های خودت را بگذار... تغییر به محتوا خودشان گواهینامه ها؛
در دستورالعمل راه دور، نام/آدرس دروازه خود را مشخص کنید.
دستورالعمل auth-user-pass برای احراز هویت خارجی اضافی استفاده می شود.
در فهرست اصلی (یا مکان مناسب دیگر) ما یک اسکریپت برای درخواست گواهی و ایجاد نمایه ایجاد می کنیم:
vim ~/make.profile.sh
#!/bin/bash
if [ -z "$1" ] ; then
echo Missing mandatory client name. Usage: $0 vpn-username
exit 1
fi
#Set variables
basepath=/usr/share/easy-rsa/3
clntpath=$basepath/client
privpath=$basepath/pki/private
certpath=$basepath/pki/issued
profile=$clntpath/$1.ovpn
#Get current year and lowercase client name
year=`date +%F`
client=${1,,}
echo Processing $year year cert for user/device $client
cd $basepath
if [ -f client/$client* ]; then
echo "*** ERROR! ***"
echo "Certificate $client already issued!"
echo "*** ERROR! ***"
exit 1
fi
. ./vars
./easyrsa --batch --req-cn=$client gen-req $client nopass
./easyrsa --batch sign-req client $client
#Make profile
cp $clntpath/template.ovpn $profile
echo "<key>" >> $profile
cat $privpath/$1.key >> $profile
echo "</key>" >> $profile
echo -e "n" >> $profile
openssl x509 -in $certpath/$1.crt -out $basepath/$1.crt
echo "<cert>" >> $profile
cat $basepath/$1.crt >> $profile
echo "</cert>" >> $profile
echo -e "n" >> $profile
#remove tmp file
rm -f $basepath/$1.crt
echo Complete. See $profile file.
cd ~
قابل اجرا کردن فایل:
chmod a+x ~/make.profile.sh
و ما می توانیم اولین گواهینامه خود را صادر کنیم.
~/make.profile.sh my-first-user
فایل را نقد کنید
در صورت به خطر افتادن گواهی (مفقود شدن، سرقت)، ابطال این گواهی الزامی است:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
گواهی های صادر شده و باطل شده را مشاهده کنید
برای مشاهده گواهی های صادر شده و ابطال شده، کافی است فایل فهرست را مشاهده کنید:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
شرح:
خط اول گواهی سرور است.
شخصیت اول
V (معتبر) - معتبر؛
R (لغو) - به یاد آورد.
تنظیمات شبکه
آخرین مراحل پیکربندی شبکه انتقال - مسیریابی و فایروال ها است.
در یک محیط شرکتی، احتمالاً زیرشبکه وجود دارد و ما باید به روتر(های) بگوییم که چگونه بسته های مقصد برای مشتریان VPN ما را ارسال کنند. در خط فرمان فرمان را به روشی (بسته به تجهیزات مورد استفاده) اجرا می کنیم:
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
و پیکربندی را ذخیره کنید.
علاوه بر این، در رابط روتر مرزی که آدرس خارجی gw.abc.ru ارائه می شود، لازم است اجازه عبور بسته های udp/1194 داده شود.
در صورتی که سازمان قوانین امنیتی سختگیرانه ای داشته باشد، یک فایروال نیز باید روی سرور VPN ما پیکربندی شود. به نظر من، بیشترین انعطافپذیری با راهاندازی زنجیرههای iptables FORWARD فراهم میشود، اگرچه راهاندازی آنها راحتتر است. کمی بیشتر در مورد راه اندازی آنها. برای انجام این کار، استفاده از "قوانین مستقیم" - قوانین مستقیم، ذخیره شده در یک فایل، راحت تر است /etc/firewalld/direct.xml. پیکربندی فعلی قوانین را می توان به صورت زیر یافت:
$ sudo firewall-cmd --direct --get-all-rule
قبل از تغییر یک فایل، یک نسخه پشتیبان از آن تهیه کنید:
اینها اساساً قوانین منظم iptables هستند، در غیر این صورت پس از ظهور فایروال بسته بندی می شوند.
رابط مقصد با تنظیمات پیشفرض tun0 است و رابط خارجی تونل ممکن است متفاوت باشد، برای مثال، ens192، بسته به پلت فرم مورد استفاده.
خط آخر مربوط به ثبت بسته های رها شده است. برای اینکه ورود به سیستم کار کند، باید سطح اشکال زدایی را در پیکربندی فایروال تغییر دهید:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
اعمال تنظیمات، فرمان معمول فایروال برای خواندن مجدد تنظیمات است:
$ sudo firewall-cmd --reload
شما می توانید بسته های رها شده را به صورت زیر مشاهده کنید:
grep forward_fw /var/log/messages
بعدی چیست؟
این راه اندازی را کامل می کند!
تنها چیزی که باقی می ماند این است که نرم افزار مشتری را در سمت مشتری نصب کنید، پروفایل را وارد کنید و متصل شوید. برای سیستم عامل های ویندوز، کیت توزیع بر روی آن قرار دارد سایت توسعه دهنده.
در نهایت، ما سرور جدید خود را به سیستم های نظارت و بایگانی متصل می کنیم و فراموش نمی کنیم که به طور منظم به روز رسانی ها را نصب کنیم.