{"id":336086,"date":"2022-07-24T03:00:14","date_gmt":"2022-07-24T03:00:14","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=336086"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=336086","title":{"rendered":"<span>\u041a\u0430\u043a \u044f Anyconnect \u043d\u0430 GitLab \u043d\u0430\u0442\u044f\u0433\u0438\u0432\u0430\u043b<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0430\u0441\u0438\u043b\u0438\u0439 \u0438 \u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a \u043c\u044b \u0438\u0434\u0435\u043c \u043a \u0443\u0434\u043e\u0431\u043d\u043e\u043c\u0443 \u0438 \u0433\u0438\u0431\u043a\u043e\u043c\u0443 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f VPN \u0441\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u0444\u0438\u0447\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u044b\u0445 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442.<\/p>\n<p>\u0425\u043e\u0447\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043b\u043e\u0432 \u0447\u0435\u043c \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u0435\u0436\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0435\u0445\u0430\u043b\u0438.<\/p>\n<hr\/>\n<h2>\u0427\u0430\u0441\u0442\u044c 0, \u0441 \u0447\u0435\u0433\u043e \u0432\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c<\/h2>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u043e\u0449\u0430\u0434\u043e\u043a, \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u043e\u044f\u043b\u0430 \u043f\u0430\u0440\u0430 Cisco ASA 5512 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0440\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0438 \u0445\u043e\u0434\u0438\u043b\u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0430\u043c. \u0412\u0441\u0451 \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e, \u043f\u043e\u043a\u0430 \u0431\u041e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0438\u0437 \u043e\u0444\u0438\u0441\u0430. \u041f\u043e\u0442\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u0430\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043a\u0430 \u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e VPN \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437 \u0440\u0443\u043a \u0432\u043e\u043d \u043f\u043b\u043e\u0445\u043e: \u0441 \u0432\u043e\u0437\u0440\u043e\u0441\u0448\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 5512 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0434\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0443 \u0438 \u043a\u0430\u043d\u0430\u043b\u044b \u043d\u0435 \u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442.<\/p>\n<p>\u0412 \u0442\u0435\u043c\u043f\u0435 \u0432\u0430\u043b\u044c\u0441\u0430 \u043c\u044b \u0437\u0430\u043a\u0443\u043f\u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e ASA 5515, \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438\u0445 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439, \u0432 \u043f\u043b\u0430\u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439, \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0435, \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/cisco\/blog\/493098\/\" rel=\"noopener noreferrer nofollow\">vpn load-balancing<\/a> \u0438<strong> <\/strong>\u0436\u0438\u0442\u044c \u0441\u0442\u0430\u043b\u043e \u0432\u0435\u0441\u0435\u043b\u0435\u0435.<\/p>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0448\u043b\u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0418\u0411 \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u043a-\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0435\u0442\u0438. \u041c\u044b \u0441\u0440\u0430\u0437\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435 dynamic-access-policy, \u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 N \u0436\u0435\u043b\u0435\u0437\u043e\u043a (\u0434\u0430 \u0435\u0449\u0435 \u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u0445) \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 1, \u0433\u0434\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Active Directory. \u0410 \u0435\u0449\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0441\u0430\u043c\u0438 ACL\u044b \u043f\u0438\u0448\u0435\u0442 \u043d\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440, \u0430 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430. \u041d\u0430 \u0442\u043e\u043c \u0438 \u043f\u043e\u0440\u0435\u0448\u0438\u043b\u0438 &#8212; \u0434\u0435\u043b\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0431\u0449\u0438\u0439 \u0444\u0430\u0439\u043b, \u0434\u0430\u0435\u043c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u043e\u0442\u0434\u0435\u043b\u0443 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u043c\u0430\u0437\u043a\u0430\u043c\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043d\u0443\u0436\u043d\u044b\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c.<\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e Git \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439, \u0432\u0438\u0434\u043d\u043e \u043a\u0442\u043e \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u0438 \u043f\u0440\u043e\u0447\u0438\u0439 *Ops \u043f\u043e\u0434\u0445\u043e\u0434. \u041e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0441\u0430\u043c\u0430\u044f \u043c\u0430\u043b\u043e\u0441\u0442\u044c &#8212; \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043d\u0430\u0448\u0435\u0433\u043e vpn-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439, \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439, Hello World \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u0443 \u043f\u043e\u0447\u0442\u0438): \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c \u0438 \u0440\u0430\u0437\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c, \u0434\u0430\u043b\u0435\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c dap.xml, \u0442\u0430\u043a \u0436\u0435 \u043a\u043b\u0430\u0434\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e \u0447\u0435\u043c \u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044e?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u0442\u044c Cisco Anyconnect. \u042d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 VPN-\u043a\u043b\u0438\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e. \u041e\u0434\u043d\u043e \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0443\u043c\u0435\u043d\u0438\u0439 &#8212; \u044d\u0442\u043e Dynamic Access Policy. \u0421\u043c\u044b\u0441\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\/\u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u043d\u0430 \u043d\u0435\u0433\u043e \u0442\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0430\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u042d\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438 &#8212; \u043e\u0442 \u0433\u0440\u0443\u043f\u043f\u044b \u0432 AD, \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u0430.<\/p>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u043e\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438, \u043d\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e ACL. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 ACL, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0434 \u043d\u0435\u0435 \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442, \u043d\u0430 \u0435\u0433\u043e vpn-\u0442\u0443\u043d\u043d\u0435\u043b\u044c \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043b\u0438\u0447\u043d\u044b\u0439 ACL. \u0415\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u0434\u043f\u0430\u043b \u043f\u043e\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a, \u0442\u043e \u0438\u0445 ACL\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d, \u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u0435\u0449\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u0449\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437 <a href=\"https:\/\/www.cisco.com\/c\/en\/us\/support\/docs\/security\/asa-5500-x-series-next-generation-firewalls\/108000-dap-deploy-guide.html\" rel=\"noopener noreferrer nofollow\">\u0430\u0434\u043c\u0438\u043d \u0433\u0430\u0439\u0434\u0430<\/a>.<\/p>\n<p>\u0415\u0449\u0435, \u043a \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e LUA \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 true, \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0434 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442 (\u0430 \u0435\u0449\u0435 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0433\u0430\u043b\u043a\u0438 \u0442\u0438\u043f\u0430 AND \u0438 OR, \u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e \u043d\u0438\u0445 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c).<\/p>\n<p>\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u0440\u0451\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439:<\/p>\n<p>1) \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dynamic-access-policy, \u0432 \u043d\u0435\u0439 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 ACL \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c (\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435)<\/p>\n<p>2) ACL, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430.<\/p>\n<p>3) \u0424\u0430\u0439\u043b dap.xml, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u0430 ASA \u043a \u0433\u0440\u0443\u043f\u043f\u0435 \u0432 AD, \u0430 \u0442\u0430\u043a\u0436\u0435 LUA \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0447\u0442\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u044b(\u0440\u0430\u0434\u0438\u0443\u0441 \u0438\u043b\u0438 saml), \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 AD, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0435\u0433\u043e LDAP \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b.<\/p>\n<\/div>\n<\/details>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043f\u043e \u0444\u0435\u043d-\u0448\u0443\u0439, \u0434\u0435\u043b\u0430\u0435\u043c YAML \u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 DAP-\u0433\u0440\u0443\u043f\u043f\u044b, \u043a\u0430\u043a \u043a\u043b\u044e\u0447, \u0438 \u0441\u043f\u0438\u0441\u043e\u043a ACE, \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"yaml\">Group_1: - permit ip any 192.168.1.0 255.255.255.0 - permit tcp any 192.169.2.0 255.255.255.0 eq 5432  Group_2: - permit tcp any 192.169.2.0 255.255.255.0 eq 5432 - permit tcp any 10.1.1.1 255.255.255.255 eq 22<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u0438\u0448\u043b\u0430 \u0438\u0434\u0435\u044f, \u0447\u0442\u043e \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ASA \u0443 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0438 \u0432 ACE \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u043e\u0441\u044f\u043a\u0438.<\/p>\n<p>\u0411\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0434\u0435\u043b\u0430\u0435\u043c import re, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0433\u0435\u043a\u0441\u043e\u0432 \u043f\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<\/p>\n<pre><code class=\"python\">regexs = [\"(permit)\\s(tcp|icmp|udp|ip)\\s(any)\\s(any)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(any)\\s(eq)\\s(\\d+)$\", \"(permit)\\s(tcp|icmp|udp|ip)\\s(any)\\s(host)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp|ip)\\s(any)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(host)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (eq) (\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(host)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (range) (\\d+) (\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (\\d+\\.\\d+\\.\\d+\\.\\d+) (eq) (\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any) (eq) (\\d+)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any) (eq) (\\d+)\\s(host)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (\\d+\\.\\d+\\.\\d+\\.\\d+) (range) (\\d+) (\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(range) (\\d+) (\\d+)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(range) (\\d+) (\\d+)\\s(host) (\\d+\\.\\d+\\.\\d+\\.\\d+)$\", ]<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u043c\u0430\u0442\u0447\u0438\u043b\u043e\u0441\u044c &#8212; \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 &#8212; \u043f\u043b\u043e\u0445\u043e \u0438 \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c IP\/\u041c\u0430\u0441\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 ipaddress.<\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u043e\u043c \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 AD-\u0433\u0440\u0443\u043f\u043f\u0430 (\u043e\u043d\u0430 \u0436\u0435 DAP-\u0433\u0440\u0443\u043f\u043f\u0430), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0431\u043e\u0440 ACE. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 ACL, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 ASA, \u0441\u0434\u0435\u043b\u0430\u0442\u044c diff, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0439\u043c\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0430 \u0447\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u0441\u0430\u043c\u0438 DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438: \u0431\u0435\u0440\u0435\u043c \u043a\u043b\u044e\u0447\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0438 \u0440\u0435\u043f\u043b\u0435\u0439\u0441\u043e\u043c \u043f\u043e\u0434\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442<\/p>\n<pre><code>dynamic-access-policy-record _FOR_REPLACE_ \u00a0network-acl _FOR_REPLACE_<\/code><\/pre>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433 &#8212; \u0441\u043e\u0431\u0440\u0430\u0442\u044c dap.xml, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 AD-\u0433\u0440\u0443\u043f\u043f \u043a DAP-\u0433\u0440\u0443\u043f\u043f\u0430\u043c. \u0414\u0435\u043b\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0435\u0440\u043d\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0432 XML, \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0443\u0434\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u0435\u043b\u044b:<\/p>\n<pre><code class=\"python\">from lxml import etree  def createPolicy(policies): \u00a0\u00a0\u00a0\u00a0root = etree.Element('dapRecordList') \u00a0\u00a0\u00a0\u00a0for policy in policies: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0tree = etree.ElementTree(root) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapRecord = etree.SubElement(root, 'dapRecord') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapName = etree.SubElement(dapRecord, 'dapName') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapNameValue =\u00a0 etree.SubElement(dapName, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapNameValue.text = policy \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapViewsRelation = etree.SubElement(dapRecord, 'dapViewsRelation') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapViewsRelationValue =\u00a0 etree.SubElement(dapViewsRelation, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapViewsRelationValue.text = 'and' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapBasicView = etree.SubElement(dapRecord, 'dapBasicView') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapSelection = etree.SubElement(dapBasicView, 'dapSelection') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapPolicy = etree.SubElement(dapSelection, 'dapPolicy') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapPolicyValue =\u00a0 etree.SubElement(dapPolicy, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapPolicyValue.text = 'match-all' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attr = etree.SubElement(dapSelection, 'attr') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrName = etree.SubElement(attr, 'name') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrName.text = 'aaa.ldap.memberOf' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrValue = etree.SubElement(attr, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrValue.text = policy \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrOperation = etree.SubElement(attr, 'operation') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrOperation.text = 'EQ' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrType = etree.SubElement(attr, 'type') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrType.text = 'caseless' \u00a0\u00a0\u00a0\u00a0return root    xmlText = etree.tostring(xml, xml_declaration=True, encoding='UTF-8', standalone=True, pretty_print=True).decode('utf-8') xmlText = xmlText.replace(' ','') xmlText = xmlText.replace('&lt;?xmlversion=\\'1.0\\'encoding=\\'UTF-8\\'standalone=\\'yes\\'?>', '&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>')<\/code><\/pre>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c:<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 1<\/strong>: \u041c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430, \u0433\u0434\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0432 YAML \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0435 \u0432 AD, \u043d\u0438\u043a\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 pipeline \u0434\u0435\u043b\u0430\u0442\u044c ldapsearch, \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 AD \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0432\u0441\u0435 \u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0432 \u044f\u043c\u043b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 AD.<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 2:<\/strong> ASA \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0432 ACL \u0441 \u0446\u0438\u0444\u0440 \u043d\u0430 \u0431\u0443\u043a\u0432\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: tcp\/80 > www, tcp\/22 > ssh, udp\/53 > domain \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\/\u0446\u0438\u0444\u0440\u0430\/\u0438\u043c\u044f, \u0432\u044b\u0434\u0435\u0440\u0433\u0438\u0432\u0430\u0435\u043c \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e ACE \u043f\u043e\u0440\u0442 \u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">{ 'tcp': {'5190' : 'aol', '179' : 'bgp', '3020' : 'cifs',         '1494' : 'citrix-ica', '514' : 'cmd', '2748' : 'ctiqbe',         '13' : 'daytime', '9' : 'discard', '53' : 'domain',         '7' : 'echo', '512' : 'exec', '79' : 'finger',         '21' : 'ftp', '20' : 'ftp-data', '70' : 'gopher',         '1720' : 'h323', '101' : 'hostname', '80' : 'http',         '443' : 'https', '113' : 'ident', '143' : 'imap4',         '194' : 'irc', '543' : 'klogin', '544' : 'kshell',         '389' : 'ldap', '636' : 'ldaps', '513' : 'login',         '1352' : 'lotusnotes', '515' : 'lpd', '139' : 'netbios-ssn',         '2049' : 'nfs', '119' : 'nntp', '5631' : 'pcanywhere-data',         '496' : 'pim-auto-rp', '109' : 'pop2', '110' : 'pop3',         '1723' : 'pptp', '514' : 'rsh', '554' : 'rtsp', '5060' : 'sip',         '25' : 'smtp', '1522' : 'sqlnet', '22' : 'ssh',         '111' : 'sunrpc', '49' : 'tacacs', '517' : 'talk',         '23' : 'telnet', '540' : 'uucp', '43' : 'whois', '80' : 'www'} 'udp': {'53' : 'domain', '514' : 'rsh', '554' : 'rtsp',          '80' : 'www', '137' : 'netbios-ns', '5060' : 'sip', '123' : 'ntp'} }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u042d\u044d\u044d, GitLab?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0437\u043d\u0430\u0435\u0442 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 GitLab \u0438 CI.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445, GitLab &#8212; \u044d\u0442\u043e git \u0441\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u0448\u0442\u0443\u043a\u0430\u043c\u0438. \u0421\u0440\u0435\u0434\u0438 \u044d\u0442\u0438\u0445 \u0448\u0442\u0443\u043a \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 (pipelines). \u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d &#8212; \u044d\u0442\u043e \u043d\u0435\u043a\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447, \u0433\u0434\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043b\u0438\u0431\u043e \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u043b\u0438\u0431\u043e \u0433\u0434\u0435 \u0433\u0434\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0437\u0430 \u043e\u0434\u043d\u043e\u0439. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432 \u0440\u0443\u0447\u043d\u0443\u044e \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0410 \u0435\u0449\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u043e\u043c \u0444\u0430\u0439\u043b\u044b \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0438\u0441\u0442\u0430, \u0432\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>1) \u041e\u0442\u043a\u0440\u044b\u043b\u0438 IDE\/\u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<p>2) \u041d\u0430\u0436\u0430\u043b\u0438 2-3 \u043a\u043d\u043e\u043f\u043a\u0438.<\/p>\n<p>3) \u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 yaml-\u0444\u0430\u0439\u043b \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438, \u043d\u0430\u0436\u0430\u043b\u0438 \u0435\u0449\u0435 \u043a\u043d\u043e\u043f\u043e\u043a.<\/p>\n<p>4) \u041f\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438, \u043d\u0430\u0436\u0430\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443.<\/p>\n<p>5) \u041f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0430\u043f\u043f\u0440\u0443\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u0430\u0440\u0443 \u043a\u043d\u043e\u043f\u043e\u043a, \u043d\u0430\u0436\u0430\u043b\u0438 \u0438\u0445.<\/p>\n<p>\u0412\u0441\u0451.<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u043e \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430, \u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u043c \u043a \u0430\u0434\u043c\u0438\u043d\u0430\u043c, \u043f\u0440\u043e\u0441\u0438\u043c gitlab-runner \u0438 \u043f\u0443\u0441\u0442\u0443\u044e \u0440\u0435\u043f\u0443, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043b\u0430\u0434\u0435\u043c \u0432 registry, \u0438 \u043f\u0438\u0448\u0435\u043c CI \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0448\u0430\u0433\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>Build, \u0433\u0434\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u044f\u043c\u043b\u0430, \u0433\u0440\u0443\u043f\u043f\u044b \u0432 AD \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0440\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u0430: ACL, \u0431\u043b\u043e\u043a\u0438 DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0438 \u0444\u0430\u0439\u043b dap.xml, \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0438\u0445 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0436\u043e\u0431\u044b.<\/p>\n<\/li>\n<li>\n<p>Check, \u0433\u0434\u0435 \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0438\u0437 Build, \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u043b\u0430\u043c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0431\u043e\u0435\u0432\u044b\u0435 ACL\u044b \u0441\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438. \u0412\u044b\u0432\u043e\u0434\u0438\u043c diff \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0438\u043b\u0438 \u043f\u0440\u043e\u043f\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e ACL \u0446\u0435\u043b\u0438\u043a\u043e\u043c &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 \u0432 \u043d\u0430\u0448 diff \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0435\u0449\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>Deploy &#8212; \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0423\u0434\u0430\u043b\u044f\u0435\u043c\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c ACE, \u0443\u0434\u0430\u043b\u044f\u0435\u043c\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c ACL, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u044f\u043d\u0443\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u043e\u0432 dynamic-access-policy, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u044f\u043d\u0443\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0437\u0430\u043b\u0438\u0432\u043a\u0443 dap.xml \u0447\u0435\u0440\u0435\u0437 SCP.<\/p>\n<\/li>\n<\/ul>\n<p>CI \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d, \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0440\u043e\u0437\u0434\u0430\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u0430 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0438\u0434\u0442\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0448\u0438\u0448\u043a\u0438.<\/p>\n<h4>\u0428\u0438\u0448\u043a\u0430 \u0441 DNS<\/h4>\n<p>ASA \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c ACL \u0441 FQDN\u0430\u043c\u0438 \u0434\u043b\u044f DAP \u0438 \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u0435\u0442. \u041e\u0434\u0438\u043d \u043e\u0442\u0434\u0435\u043b \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 nginx, \u043d\u0438\u043a\u0442\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u0443\u0437\u043d\u0430\u0435\u0442 \u0438 \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442 ip-\u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0433\u0438\u0442\u0435, \u0432 \u0438\u0442\u043e\u0433\u0435 \u043a\u0443\u0447\u0430 \u043b\u044e\u0434\u0435\u0439 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0439\u0442\u0438 \u043f\u043e \u043d\u043e\u0432\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u0430 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043d\u0430 \u0443\u0442\u0440\u043e \u043a\u0443\u0447\u0443 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0437\u0430\u044f\u0432\u043e\u043a.<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0446 ACE \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441 FQDN \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e IP \u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442:<\/p>\n<p>\u0430) \u041e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u044f\u043c\u043b, \u0432\u044b\u0434\u0435\u0440\u0433\u0438\u0432\u0430\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 regex`\u043e\u043c, \u0438 \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u044c \u0438\u0445 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435 (\u0443 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e \u0443\u0434\u0430\u0447\u043d\u043e\u043c\u0443 \u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432, \u043d\u0430\u0448\u0435\u043b\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 DNS\u044b \u0438 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0435\u0431\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, \u044d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u0435\u043b\u0438\u043a\u043e\u0434\u0443\u0448\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0430 api-\u0440\u0443\u0447\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u043d\u0433\u0430, \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0438\u043c).<\/p>\n<p>\u0431) \u041f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u044f\u043c\u043b \u0435\u0449\u0435 \u0440\u0430\u0437 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 IP \u0430\u0434\u0440\u0435\u0441 \u0432 ACE \u0430\u0434\u0440\u0435\u0441\u0443 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 &#8212; \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c IP \u0438 \u0440\u0435\u043f\u043b\u0435\u0439\u0441\u043e\u043c \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u043d\u0435\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e.<\/p>\n<p>\u0432) \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0431\u0440\u0430\u043d\u0447 \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0440\u0434\u0436 \u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u0438 \u0440\u0430\u043f\u043e\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043b\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0436\u0430\u043b \u043a\u043d\u043e\u043f\u043a\u0443 Deploy.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u043a\u0440\u043e\u043d \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0437\u043d\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u0443 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e FQDN \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f IP \u0430\u0434\u0440\u0435\u0441.<\/p>\n<h4>\u0428\u0438\u0448\u043a\u0430 \u0441 \u0430\u043f\u043f\u0440\u0443\u0432\u0430\u043c\u0438<\/h4>\n<p>\u0423 \u043d\u0430\u0441 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 GitLab \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0430\u043f\u043f\u0440\u0443\u0432\u044b \u0442\u0430\u043c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c.<\/p>\n<p>\u041f\u0438\u0448\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0441\u043f\u0438\u0441\u043a\u0438 \u0441 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c\u0438 \u0418\u0411, \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c\u0438 \u0422\u041f \u0438 \u0445\u043e\u0434\u0438\u0442 \u0432 API \u0433\u0438\u0442\u043b\u0430\u0431\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u0442\u043e merge request \u0441\u043e\u0437\u0434\u0430\u043b \u0438 \u043a\u0442\u043e \u0435\u0433\u043e \u0437\u0430\u0430\u043f\u0440\u0443\u0432\u0438\u043b.<\/p>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u0434\u0436\u043e\u0431\u0443, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430:<\/p>\n<p>\u0427\u0435\u043b\u043e\u0432\u0435\u043a \u0441\u043e\u0437\u0434\u0430\u0435\u0442 MR, \u043d\u0430 \u0448\u0430\u0433\u0435 \u0441 Check \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u0436\u043c\u0435\u0442 \u0434\u0435\u043f\u043b\u043e\u0439 \u0438 \u043e\u043d \u043f\u0430\u0434\u0430\u0435\u0442. \u0412 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u0430\u043a-\u043a\u0430\u043d\u0430\u043b \u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0430 \u201c\u041f\u0440\u0438\u0432\u0435\u0442 &lt;\u0441\u043f\u0438\u0441\u043e\u043a \u0418\u0411>, \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 &lt;\u0441\u043e\u0437\u0434\u0430\u0432\u0448\u0438\u0439 MR \u0438\u043d\u0436\u0435\u043d\u0435\u0440> \u0432 &lt;\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u0438\u0444\u0444 \u0433\u0438\u0442\u043b\u0430\u0431\u0430>\u201d.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043a\u0442\u043e-\u0442\u043e \u0438\u0437 \u0418\u0411 \u0436\u043c\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438 \u0436\u043c\u0435\u0442 \u0430\u043f\u043f\u0440\u0443\u0432 \u0432 \u0433\u0438\u0442\u043b\u0430\u0431\u0435, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437 \u0436\u043c\u0435\u0442 \u0434\u0435\u043f\u043b\u043e\u0439, \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u0430\u043f\u043f\u0440\u0443\u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0443\u0436\u043d\u044b\u0445 \u043b\u044e\u0434\u0435\u0439 \u0438 \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442.<\/p>\n<h4>\u0428\u0438\u0448\u043a\u0430 \u0441 HostScan<\/h4>\n<p>\u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0430\u043f\u043f\u0435\u0442\u0438\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0435\u0434\u044b, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u201c\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u041f\u041a \u0438 \u0440\u0430\u043f\u043e\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0443\u0436\u043d\u044b\u0445 \u043f\u0430\u0442\u0447\u0435\u0439\u201d.<\/p>\n<p>\u042d\u0434\u0430\u043a\u0438\u0439 Posturing \u0431\u0435\u0437 ISE, \u0434\u0430\u0432\u0430\u0439\u0442\u0435. \u0421\u043e\u0437\u0434\u0430\u0435\u043c LUA \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c HostScan \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438, \u0435\u0441\u043b\u0438 \u041f\u041a \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c true.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"lua\">assert(function() \u00a0\u00a0\u00a0\u00a0function windows() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0 ( EVAL(endpoint.anyconnect.platform, \"EQ\", \"win\", \"string\")) then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0end      \u00a0\u00a0\u00a0\u00a0function hotfix() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ( \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EVAL(endpoint.os.hotfix[\"KB_1\"],\"EQ\",\"true\", \"string\") or \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EVAL(endpoint.os.hotfix[\"KB_2\"],\"EQ\",\"true\", \"string\") or \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EVAL(endpoint.os.hotfix[\"KB_3\"],\"EQ\",\"true\", \"string\") \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0) then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0end      \u00a0\u00a0\u00a0\u00a0if (windows())then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ( \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0hotfix() == true \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0end      end)()<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u041e\u0421 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e Windows, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 KB \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 &#8212; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 true, \u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u043e\u0441\u043e\u0431\u0430\u044f DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0438 \u0435\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u041f\u041a \u0431\u0435\u0437 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430 ASA. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0449\u0443\u044e dap.xml \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u043b\u043e\u043a \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code class=\"python\">\u00a0\u00a0\u00a0\u00a0if policy == \"&lt;\u043e\u0441\u043e\u0431\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438>\": \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0advancedView = etree.SubElement(dapRecord, 'advancedView') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0advancedViewValue =\u00a0 etree.SubElement(advancedView, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0advancedViewValue.text = '_REPLACE_HERE_'<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0440\u0435\u043f\u043b\u0435\u0439\u0441\u0438\u043c &#8216;_REPLACE_HERE_&#8217; \u043d\u0430 lua-\u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>\u0413\u0434\u0435 KB &#8212; \u0442\u0430\u043c \u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435: \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u044b, \u0441\u043e\u0444\u0442, \u043a\u043b\u044e\u0447\u0438 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0441\u043f\u0443\u0445\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043b\u043e\u0433\u043e\u0432 \u043d\u0430 syslog-\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0431\u044b\u043b\u043e \u0442\u044f\u0436\u0435\u043b\u043e. \u0412\u0441\u0435 \u0441\u043c\u0438\u0440\u0438\u043b\u0438\u0441\u044c.<\/p>\n<h4>\u0428\u0438\u0448\u043a\u0430 \u0441 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u044e\u0449\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438<\/h4>\n<p>\u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u201c\u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0451, \u043a\u0440\u043e\u043c\u0435\u201d. \u0420\u0443\u043a\u0430\u043c\u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code>access-list myACL line 1 extended permit tcp any host 10.0.0.1 eq 22 access-list myACL line 2 extended deny ip any 10.0.0.0 255.255.255.0<\/code><\/pre>\n<p>\u041d\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0440\u044f\u0434\u043e\u043a ACE \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0435 \u0431\u044c\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c ACE \u043d\u0430 ASA. \u041e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u0435 \u041c\u0421\u042d \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u044b\u0435, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0440\u0443\u0447\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u043b\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u044d\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441 deny`\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043d\u0435 \u0437\u0430\u0442\u0435\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043f\u043b\u043e\u0439. \u0421 \u044d\u0442\u0438\u043c \u0441\u043c\u0438\u0440\u0438\u043b\u0438\u0441\u044c \u0442\u043e\u0436\u0435.<\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 2, \u0433\u0434\u0435 \u0432\u0441\u0451 \u0441\u043e\u0436\u0433\u043b\u0438 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0437\u0430\u043d\u043e\u0432\u043e<\/h2>\n<p>\u0422\u0430\u043a \u043c\u044b \u0436\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430, \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c dap.yaml \u0440\u0430\u0441\u043f\u0443\u0445 \u0434\u043e, \u043f\u043e\u0447\u0442\u0438, 2 \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a. \u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0431\u044b\u043b\u043e \u043e\u043a\u043e\u043b\u043e \u0441\u043e\u0442\u043d\u0438 \u0438 \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0432 \u043d\u0438\u0445 \u0442\u043e\u043d\u0443\u0442\u044c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u0430 \u0433\u043e\u0434 \u0441\u043e\u0431\u0440\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u0447\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<ol>\n<li>\n<p>Object-group`\u044b. \u0415\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 10 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0434\u043e\u043c\u0435\u043d\u0430. \u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10 \u043f\u043e\u0440\u0442\u043e\u0432. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u0435\u043c 10*10 \u0441\u0442\u0440\u043e\u043a ACE &#8212; \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435. \u041d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0448\u0442\u0443\u043a 5 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0438 \u0435\u0449\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445. \u0411\u044b\u043b\u043e \u0431\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u0441\u0440\u0430\u0437\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u0430 \u0410 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0411 \u0438 \u0412. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a memberOf \u0433\u0440\u0443\u043f\u043f ASA \u043d\u0435 \u0443\u043c\u0435\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0447\u043a\u0438 \u043f\u043e\u0440\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u043e\u0440\u0442\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435, \u0431\u0443\u0434\u0435\u0442 \u043b\u0443\u0447\u0448\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u043c\u0435\u0441\u0442\u043e<\/p>\n<\/li>\n<\/ol>\n<pre><code>permit tcp any host A eq 22 permit tcp any host A eq 23<\/code><\/pre>\n<p>\u0432\u0435\u0441\u0435\u043b\u0435\u0435 \u043f\u0438\u0441\u0430\u0442\u044c<\/p>\n<pre><code>permit tcp any host A eq [22,23]<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u0438 ACE &#8212; \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c deny \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u043f\u043e \u0444\u043b\u043e\u0443, \u0430 \u043d\u0435 \u0440\u0443\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0417\u043d\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0443\u0447\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u0432\u0441\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043b\u043e\u0433 \u0438\u0437 LUA (debug-trace, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0439\u0442\u0435), \u0442\u043e \u0431\u0435\u0437 \u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 syslog \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0442\u043e\u0447\u043d\u0443\u044e \u043f\u0440\u0438\u0447\u0438\u043d\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0437\u0430\u0444\u0435\u0439\u043b\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u0437 \u0448\u0430\u0433\u0430 \u0441 diff`\u043e\u043c \u0432 \u0434\u0435\u043f\u043b\u043e\u0435. \u0411\u044b\u0432\u0430\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0438, \u0447\u0442\u043e \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0422\u041f \u0441\u0434\u0435\u043b\u0430\u043b MR \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435. Diff \u0435\u043c\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0439, \u043d\u043e \u043f\u043e\u043a\u0430 \u043e\u043d \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0430\u043f\u043f\u0440\u0443\u0432\u044b \u0432 \u0441\u043b\u0430\u043a\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0432\u044b\u043a\u0430\u0442\u0438\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0431\u0440\u0430\u043d\u0447\u0430 \u0438 \u0437\u0430\u043c\u0435\u0440\u0436\u0438\u043b \u0432 \u043c\u0430\u0441\u0442\u0435\u0440. \u0414\u0435\u043f\u043b\u043e\u0439 \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0438 \u043f\u0435\u0440\u0435\u0442\u0438\u0440\u0430\u0435\u0442. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u043e\u0442\u043a\u0440\u044b\u043b, \u043d\u043e \u043e\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u043b\u043e \u0431\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0433\u0440\u0443\u043f\u043f \u043d\u0435 \u0445\u0430\u0440\u0434\u043a\u043e\u0434\u043e\u043c, \u0430 \u0438\u0437 \u044f\u043c\u043b\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c python, \u043a\u0430\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0449\u0435 \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0439 \u044d\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0438 \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u0441 \u043d\u0443\u043b\u044f, \u043d\u0430\u0431\u0435\u043b\u043e, \u0434\u0430 \u0435\u0449\u0435 \u0438 \u043d\u0430 Nornir.<\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 dap.yaml \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442:<\/p>\n<pre><code class=\"yaml\">DAP_Group_1: \u00a0\u00a0rules: \u00a0\u00a0\u00a0\u00a0- {line: 1, action: permit, proto: tcp, net: 10.0.0.1\/32,     ports: ['10\u2019,\u201920\u2019,\u201930\u2019,\u201940-60\u2019], fqdn: 'our_server.domain.local.'}<\/code><\/pre>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 object-groups.yaml:<\/p>\n<pre><code class=\"yaml\">Server_pack_1: \u00a0\u00a0- {net: '10.0.1.1\/32', fqdn: 'server_1.domain.local.'}<\/code><\/pre>\n<h4>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h4>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0451-\u0432\u0441\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u044f\u043c\u043b\u044b \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0438, \u0434\u043e\u043a\u0438\u043d\u0443\u0432 \u0442\u0443\u0434\u0430 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0432 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u044b).<\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u044f\u043c\u043b \u0441 \u043d\u0435\u043a\u0438\u043c \u201c\u0441\u043a\u0435\u043b\u0435\u0442\u043e\u043c\u201d \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u044f\u043c\u043b, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u043f\u043e\u043b\u044f \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 \u043d\u0435\u043c regex \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0439<\/p>\n<pre><code class=\"yaml\"> # \u042d\u0442\u043e \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.  # dap.yaml acl_regex:   line: (^\\d+$)   action: (^permit$|^deny$)   proto: (^tcp$|^udp$|^icmp$|^ip$)   source: ((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\/([1-9]|[12][0-9]|3[0-2])$)|any)   source_ports: (^\\d+$|^\\d+-\\d+$) # List   net: ((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\/([1-9]|[12][0-9]|3[0-2])$)|any)   object: (^\\S+$)   ports: (^\\d+$|^\\d+-\\d+$) # List   fqdn: (^\\S+\\.$)  acl_defaults:   line: 9999999   action: ''   proto: ''   source: 'any'   source_ports: []   net: ''   object: ''   ports: []   fqdn: ''  dap_policies_defaults:   priority: 50   action: ''   childrens: []   ad_group: ''   lua_script: ''   lua_script_content: ''  regex_objects:   net: ((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\/([1-9]|[12][0-9]|3[0-2])$))   fqdn: (^\\S+\\.$)<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043a\u0443\u0447\u0438 <a href=\"https:\/\/pythonru.com\/uroki\/35-instrukcija-assert-dlja-nachinajushhih\" rel=\"noopener noreferrer nofollow\">assert<\/a>`\u043e\u0432. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0451: \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0439, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043b\u044e\u0447\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043b\u044f <strong>object <\/strong>\u0438 <strong>net <\/strong>\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043b\u0438\u0431\u043e ACE \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0443, \u043b\u0438\u0431\u043e \u043d\u0430 ip), \u0433\u0440\u0443\u043f\u043f\u044b \u0432 AD, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u0438\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c LUA-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u043e\u0432, \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043c\u0430\u0441\u043a\u0438, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 &#8212; \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 &#8212; \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0430 \u044f\u043c\u043b\u043e\u0432 \u0432 cli-\u043a\u043e\u043d\u0444\u0438\u0433\u0438. \u0416\u043e\u043d\u0433\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u0438\u0442\u043e\u043d\u043e\u043c \u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u0435\u043c \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430: \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0434\u043b\u044f ACL \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0434\u043b\u044f DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a<\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0444\u0430\u0439\u043b \u0441 ACL:<\/p>\n<pre><code class=\"yaml\">DAP_Group_1: \u00a0\u00a0access-list nr_ACL_DAP_Group_1 extended permit icmp any any: '1' \u00a0\u00a0access-list nr_ACL_DAP_Group_1 extended deny ip any 192.168.0 255.255.255.0: '2'   access-list nr_ACL_DAP_Group_1 extended permit tcp any host 192.168.1.1 eq 22: null \u00a0\u00a0access-list nr_ACL_DAP_Group_1 extended permit ip any any: null DAP_Group_2:  ....<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043b\u044e\u0447\u043e\u043c \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 ACE, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043b\u0438\u0431\u043e \u0446\u0438\u0444\u0440\u0430, \u043b\u0438\u0431\u043e null. \u0426\u0438\u0444\u0440\u0430 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u043e\u043b\u044f line. \u0415\u0441\u043b\u0438 \u043e\u043d\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 &#8212; \u043a\u043b\u0430\u0434\u0435\u043c \u0432 \u043d\u0435\u0433\u043e 9999999 \u0438\u0437 \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432, \u0434\u0430\u043b\u0435\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0442 \u043c\u0430\u043b\u043e\u0433\u043e \u043a \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c 9999999 \u043d\u0430 null. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0415\u0449\u0435 \u044f \u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0432\u0430\u0442\u044c \u043a ACL \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 ACL, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c.<\/p>\n<p>\u0422\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0444\u0430\u0439\u043b \u0441 DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"yaml\">DAP_Group_1: \u00a0\u00a0rules: [] \u00a0\u00a0priority: 50 \u00a0\u00a0action: '' \u00a0\u00a0childrens: \u00a0\u00a0- nr_ACL_DAP_Group_1 \u00a0\u00a0ad_group: DAP_Group_1 \u00a0\u00a0lua_script: '' \u00a0\u00a0lua_script_content: '' DAP_Group_2: ...<\/code><\/pre>\n<ul>\n<li>\n<p>action \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 action DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c continue\\quarantine\\terminate. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d continue \u0438 \u0432 show run \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f (\u0442\u043e\u043b\u044c\u043a\u043e \u0432 show run all) , \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043f\u0443\u0441\u0442\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>childrens &#8212; \u044d\u0442\u043e ACL\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a \u0433\u0440\u0443\u043f\u043f\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0443\u0434\u0430 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ACL + \u0438\u043c\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u0430 \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0435 childrens \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0432 \u044f\u043c\u043b\u0435 &#8212; \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 + \u0438\u043c\u0435\u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f: \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 \u0441 childrens, \u043d\u0430 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0442\u044c ACL \u044d\u0442\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043b\u044e\u0441 \u0432\u0441\u0435\u0445 \u0433\u0440\u0443\u043f\u043f, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0435.<\/p>\n<\/li>\n<li>\n<p>ad_group &#8212; \u043d\u0430 \u043a\u0430\u043a\u0443\u044e AD \u0433\u0440\u0443\u043f\u043f\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u043e \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f\u044b, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435.<\/p>\n<\/li>\n<li>\n<p>lua_script &#8212; \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 LUA-\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>lua_script_content &#8212; \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 (\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0432 lua_script).<\/p>\n<\/li>\n<li>\n<p>rules \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0430 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0438 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0434\u0435\u0441\u044c \u043e\u043d \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u043e\u0439 \u043f\u043e\u043a\u043e\u043d\u0447\u0435\u043d\u043e, \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0438 \u0434\u0435\u043f\u043b\u043e\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Nornir.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0441 \u043d\u0438\u043c \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043e \u043d\u0435\u043c \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u0442\u043e \u0432\u043e\u0442 <a href=\"https:\/\/www.cbtnuggets.com\/it-training\/networking\/network-automation-cisco-python\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0442 <\/a>\u043a\u0443\u0440\u0441 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0436\u0438\u0432\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438\u0437 inventory \u0438 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0437 \u0432\u0441\u0435\u0445 \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u043e \u043d\u0430\u043c \u043f\u043e ssh. \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435, \u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043f\u043e ssh &#8212; \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u043e\u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043a \u043d\u0435\u043c\u0443 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u0430 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e.<\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"python\">def is_alive(nr): \u00a0\u00a0\u00a0\u00a0def show_version(task): \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0r = task.run(task=netmiko_send_command, command_string='show version') \u00a0\u00a0\u00a0\u00a0result = nr.run(task=show_version) \u00a0\u00a0\u00a0\u00a0for host in result.keys(): \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if result[host].failed: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0colors.print(f'{host} [red]FAILED[\/red]') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0colors.print(f'{host} [green]OK[\/green]')<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0441\u0442 \u043d\u0435 \u043e\u0442\u0434\u0430\u0441\u0442 show version, \u043e\u043d \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u0441\u044f \u043a\u0430\u043a failed, \u0434\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0437\u0430\u0444\u0435\u0439\u043b\u0435\u043d\u043d\u044b\u0435 \u0445\u043e\u0441\u0442\u044b (if len(nr.data.failed_hosts) > 0) \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 object-group. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0449\u0443\u044e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435, \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 \u043f\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0438: \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u0438 \u0433\u0440\u0443\u043f\u043f\u044b, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f. \u0412\u043e\u0442 \u043f\u0435\u0440\u0432\u0430\u044f:<\/p>\n<pre><code class=\"python\">def main(task): \u00a0\u00a0\u00a0\u00a0download_object_groups(task) \u00a0\u00a0\u00a0\u00a0compare_object_groups(task) \u00a0\u00a0\u00a0\u00a0compare_object_groups_nets(task)  def download_object_groups(task): \u00a0\u00a0\u00a0\u00a0r = task.run(task=netmiko_send_command, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0command_string=f\"show run object-group network\", \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name='Downloading object-groups from devices', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0use_textfsm = True, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0severity_level=logging.DEBUG) \u00a0\u00a0\u00a0\u00a0text.host[\u201ctextfsm_objects\u201d] = r.result ...<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0410 \u044d\u0442\u043e \u0442\u043e \u0447\u0442\u043e?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0437\u043d\u0430\u0435\u0442 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 TextFSM, genie \u0438 \u043a\u0430\u043a \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/pyneng.readthedocs.io\/ru\/latest\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041f\u0440\u043e \u0432\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u0432 \u043a\u0443\u0440\u0441\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 &#8212; \u044d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u0448\u0442\u0443\u043a\u0430.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e netmiko \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435: &#8230;send_command(&#171;&#8230;&#187;, use_genie=True)<\/p>\n<\/div>\n<\/details>\n<p>TextFSM:<\/p>\n<pre><code>Value Filldown,Required NAME (\\S+) Value List NETWORK (\\d+\\.\\d+\\.\\d+\\.\\d+\\s+\\d+\\.\\d+\\.\\d+\\.\\d+) Value List HOST (\\d+\\.\\d+\\.\\d+\\.\\d+)  Start \u00a0\u00a0^object-group -> Continue.Record \u00a0\u00a0^object-group\\s+network\\s+${NAME}\\s* \u00a0\u00a0^\\s+network-object\\s+${NETWORK} \u00a0\u00a0^\\s+network-object\\s+host\\s+${HOST} End<\/code><\/pre>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 (download_object_groups) \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 (\u0441\u043f\u0430\u0441\u0438\u0431\u043e TextFSM) \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 object-group`\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0441 object-groups.yaml. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u043a\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u043b\u043e\u0441\u044c \u0438 \u0447\u0442\u043e \u043d\u0430 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c, \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"python\">task.host['objects_to_add'] - \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 (\u0438\u043c\u0435\u043d\u0430) task.host['objects_to_del'] - \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 (\u0438\u043c\u0435\u043d\u0430) task.host['nets_to_add'] - \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 task.host['nets_to_del'] - \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u043c\u043e\u0436\u0435\u043c \u0438\u0434\u0442\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442 \u043d\u0430 Jinja2:<\/p>\n<pre><code class=\"python\">{######### Object-Groups #########} {# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Object-group #} {% if host.objects_to_add is defined and host.objects_to_add|length>0 %} ! !!! Adding object-groups ! {% for object_group in host.objects_to_add %} object-group network {{object_group}} {% for net in host.configured_object_groups[object_group] %}  network-object {{ net }} {% endfor %} {% endfor %} ! {% endif %} {# \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 Object-group #} {% if host.nets_to_add is defined and host.nets_to_add|length>0 %} ! !!! Adding new object-groups entries ! {% for object_group in host.nets_to_add %} object-group network {{ object_group }} {% for net in host.nets_to_add[object_group]%}  network-object {{ net }} {% endfor %} {% endfor %} ! {% endif %} {# \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 Object-group #} {% if host.nets_to_del is defined and host.nets_to_del|length>0 %} ! !!! Deleting not discribed object entries ! {% for object_group in host.nets_to_del %} object-group network {{ object_group }} {% for net in host.nets_to_del[object_group]%}  no network-object {{ net }} {% endfor %} {% endfor %} ! {% endif %} {##}<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a, \u043f\u0440\u043e\u0449\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 cli-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u043e\u0434\u0438\u043d \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442, \u0430 \u043d\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u043e\u0432.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433 \u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442\u0430 \u0438 \u0434\u0435\u043f\u043b\u043e\u0439:<\/p>\n<pre><code class=\"python\">def build_from_template(task): \u00a0\u00a0\u00a0\u00a0task.host['commands'] = list() \u00a0\u00a0\u00a0\u00a0r = task.run(task=template_file, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0path=f'.\/j2_templates\/', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0template='object-groups.j2', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name='Building Object Groups configuration from template...', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0severity_level=logging.INFO) \u00a0\u00a0\u00a0\u00a0output = r.result.splitlines() \u00a0\u00a0\u00a0\u00a0task.host['commands'] = output  def deploy_config(task): \u00a0\u00a0\u00a0\u00a0if len(task.host['commands']) > 0: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0task.run(task=netmiko_send_config, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0config_commands=task.host['commands'], \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name='Applying Object Groups configuration....', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0severity_level=logging.INFO)<\/code><\/pre>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 object-group \u043a \u044f\u043c\u043b\u0443.<\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f ACL. \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0448\u0430\u0433\u0435 \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0438 TextFSM, \u043d\u0438 <a href=\"https:\/\/pubhub.devnetcloud.com\/media\/genie-feature-browser\/docs\/#\/parsers\" rel=\"noopener noreferrer nofollow\">genie<\/a>, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0435\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u0437 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438, \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0433\u0440\u0443\u043f\u043f \u0438 \u0441\u0430\u043c\u0438\u043c\u0438 ACL, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0440\u0435\u043c \u043d\u0435\u0445\u0438\u0442\u0440\u044b\u0439 regex \u0438 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 ACL \u0441 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c (\u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c ACL\u044b \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447). \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u044d\u0442\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 \u043b\u0438\u043d\u0438\u0439:<\/p>\n<pre><code class=\"python\">regex_acl = re.compile('access-list (\\S+) line (\\d+) extended (.+)\\s(\\(hitcnt.+)')  def download_acls(task): \u00a0\u00a0\u00a0\u00a0r = task.run(task=netmiko_send_command, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0command_string=f\"show access-list | i ^access-list {acl_prefix}\", \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name='Collecting access-list....', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0use_timing = True, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0severity_level=logging.DEBUG) \u00a0\u00a0\u00a0\u00a0task.host['current_raw_acls'] = r.result.splitlines() \u00a0\u00a0\u00a0\u00a0task.host['acl_map'] = dict() \u00a0\u00a0\u00a0\u00a0for ace in task.host['current_raw_acls']: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if len(regex_acl.findall(ace)) > 0: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0acl_name, ace_line, ace_rule, _ = regex_acl.findall(ace)[0] \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0policy_name = acl_name.replace(acl_prefix, '') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0rule_from_config = f'access-list {acl_name} extended {ace_rule}' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0task.host['acl_map'].setdefault(policy_name, dict()) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0task.host['acl_map'][policy_name][rule_from_config] = ace_line<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448 acl_map c \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c, \u0436\u043e\u043d\u0433\u043b\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c\/\u0441\u043e\u0437\u0434\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 line:<\/p>\n<pre><code class=\"python\">ipdb> print(nr.inventory.hosts['my_host']['ace_to_add'])  { \u00a0\u00a0\u00a0\u00a0'Group_1': [ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access-list nr_ACL_Group_1 line 1 extended permit tcp any any eq domain', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access-list nr_ACL_Group_1 line 2 extended permit tcp any any eq 5353', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access-list nr_ACL_Group_1 extended permit udp any any eq 5353', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access-list nr_ACL_Group_1 extended permit udp any any eq ntp' \u00a0\u00a0\u00a0\u00a0] }<\/code><\/pre>\n<p><strong>\u0421\u043e\u0432\u0435\u0442 1: <\/strong>\u041d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c ipdb, \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0431\u0430\u0433 \u0438 \u201c\u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0443\u044e\u201d \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0445\u043e\u0441\u0442\u043e\u0432, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<p><strong>\u0421\u043e\u0432\u0435\u0442 2: <\/strong>\u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ACL c \u043b\u0438\u043d\u0438\u044f\u043c\u0438, \u043b\u0443\u0447\u0448\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u0430, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u0441\u0430\u043c\u043e\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0446\u0438\u0444\u0440\u044b. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0442\u0430\u043d\u0443\u0442 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0430\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441 ACL \u043f\u043e\u043a\u043e\u043d\u0447\u0435\u043d\u043e, \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c &#8212; DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438.<\/p>\n<p>\u041f\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0435, \u0447\u0442\u043e \u0438 \u0441 object-group`\u0430\u043c\u0438, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0431\u043b\u043e\u043a\u0438 dynamic-access-policy. TextFSM:<\/p>\n<pre><code>Value Filldown,Required NAME (\\S+) Value List CHILDRENS (\\S+) Value ACTION (\\S+) Value PRIORITY (\\d+)  Start \u00a0\u00a0^dynamic-access-policy-record\u00a0 -> Continue.Record \u00a0\u00a0^dynamic-access-policy-record\\s${NAME} \u00a0\u00a0^\\s+network-acl\\s+${CHILDRENS} \u00a0\u00a0^\\s+action\\s+${ACTION} \u00a0\u00a0^\\s+priority\\s+${PRIORITY} End<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c, \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c dap.xml.<\/p>\n<p>\u0422\u0435\u043c\u043f\u043b\u0435\u0439\u0442 Jinja2 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0438\u0436\u0435 (\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 host[&#8216;yaml_daps&#8217;] \u043b\u0435\u0436\u0438\u0442 \u044f\u043c\u043b \u043d\u0430\u0448\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 c DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c\u0438 \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438):<\/p>\n<pre><code class=\"python\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> &lt;dapRecordList> {% for policy in host['yaml_daps'] %} &lt;dapRecord> &lt;dapName> &lt;value>{{ policy }}&lt;\/value> &lt;\/dapName> &lt;dapViewsRelation> &lt;value>and&lt;\/value> &lt;\/dapViewsRelation> {% if host['yaml_daps'][policy]['lua_script_content'] is defined and host['yaml_daps'][policy]['lua_script_content']|length>0 %} &lt;advancedView> &lt;value>{{ host['yaml_daps'][policy]['lua_script_content']}} &lt;\/value> &lt;\/advancedView> {% endif %} &lt;dapBasicView> &lt;dapSelection> &lt;dapPolicy> &lt;value>match-all&lt;\/value> &lt;\/dapPolicy> &lt;attr> &lt;name>aaa.ldap.memberOf&lt;\/name> &lt;value>{{ host['yaml_daps'][policy]['ad_group'] }}&lt;\/value> &lt;operation>EQ&lt;\/operation> &lt;type>caseless&lt;\/type> &lt;\/attr> &lt;\/dapSelection> &lt;\/dapBasicView> &lt;\/dapRecord> {% endfor %} &lt;\/dapRecordList><\/code><\/pre>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443, \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043c \u0438 \u043a\u043b\u0430\u0434\u0435\u043c \u0435\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e task.host[&#8216;xml&#8217;] \u0438 \u0432 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c, \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u043b\u0430\u0433 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0442\u043a\u0430:<\/p>\n<pre><code class=\"python\">def download_and_compare_xml(task): \u00a0\u00a0\u00a0\u00a0task.host['need_xml'] = 0 \u00a0\u00a0\u00a0\u00a0xml_on_device = task.run(task=netmiko_send_command, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0command_string='more disk0:\/dap.xml', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name='Downloading XML file', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0use_timing = True, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0severity_level=logging.DEBUG) \u00a0\u00a0\u00a0\u00a0task.host['xml_on_device'] = xml_on_device.result \u00a0\u00a0\u00a0\u00a0task.host['xml_on_device_dict'] = json.loads(json.dumps(xmltodict.parse(task.host['xml_on_device']))) \u00a0\u00a0\u00a0\u00a0task.host['xml_dict'] = json.loads(json.dumps(xmltodict.parse(task.host['xml']))) \u00a0\u00a0\u00a0\u00a0if task.host['xml_dict'] != task.host['xml_on_device_dict']: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0colors.print(f'[gold1]!\\ndap.xml \u043d\u0430 [magenta]{task.host}[\/magenta] \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u0435\u043f\u043b\u043e\u0439\\n![\/gold1]') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0task.host['need_xml'] = 1<\/code><\/pre>\n<p>\u0418\u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0448\u0430\u0433\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 dap.xml \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u043b\u0430\u0433 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 xml \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0447\u0435\u0440\u0435\u0437 scp (\u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043b\u0438\u0448\u043d\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u044e\u0434\u0430 \u0431\u0435\u043a\u0430\u043f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dynamic-access-policy-config activate):<\/p>\n<pre><code class=\"python\">def upload_file(task): \u00a0\u00a0\u00a0\u00a0upload = task.run(task=netmiko_file_transfer, source_file=f'{artifacts}\/{task.host}_dap.xml', dest_file='dap.xml', file_system='disk0:\/', overwrite_file = True, name='Uploading XML File...', severity_level=logging.INFO)<\/code><\/pre>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0432 \u043f\u043b\u0430\u043d\u0435 \u043a\u043e\u0434\u0430 \u044d\u0442\u043e \u0432\u0441\u0451, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e Dockerfile \u0438 CI, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0445\u043e\u0447\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u044e\u0430\u043d\u0441\u043e\u0432:<\/p>\n<h4>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u0442\u043e\u0433\u0438 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442\u043e\u0432 \u0432 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b<\/h4>\n<p>\u042d\u0442\u043e \u043f\u0440\u0438\u043d\u0435\u0441\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u0443 \u0432 \u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430 \u0448\u0430\u0433\u0435 \u0441 \u0434\u0435\u043f\u043b\u043e\u0435\u043c, \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0440\u044f\u0434\u043e\u043c \u0432\u044b\u043a\u0430\u0442\u0438\u043b \u0434\u0440\u0443\u0433\u0443\u044e \u0432\u0435\u0442\u043a\u0443, \u0430 \u043c\u044b \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 rebase. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c task.host[&#8216;commands&#8217;] \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0438\u043f\u0430 f\u2019{task.host}_commands\u2019), \u043d\u0430 \u0448\u0430\u0433\u0435 \u0441 \u0434\u0435\u043f\u043b\u043e\u0435\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u0431\u0435\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u043c, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0440\u0430\u0437\u043d\u044f\u0442\u044c\u0441\u044f, \u0437\u043d\u0430\u0447\u0438\u0442 \u044f\u0432\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a \u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043b\u0430\u043d \u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.<\/p>\n<h4> \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/h4>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0441\u0443\u0442\u0438, \u043f\u043b\u0430\u043d \u0438 \u0434\u0435\u043f\u043b\u043e\u0439 &#8212; \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u043f\u043b\u043e\u044f), \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 argparse, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u0434\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e main(), \u0433\u0434\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0451, \u043d\u0430 \u0434\u0432\u0435: \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u0440\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\/\u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442\u044b, \u0438 \u043d\u0430 \u0442\u0443, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043f\u043b\u043e\u0439.<\/p>\n<pre><code class=\"python\">plan = nr.run(task=plan_and_prepare, name='Plan function...', severity_level=logging.DEBUG) print_result(plan, severity_level=log_level)  if args.deploy == True: \u00a0\u00a0\u00a0\u00a0deploy = nr.run(task=deploy, name='Deploy function...', severity_level=logging.DEBUG) \u00a0\u00a0\u00a0\u00a0print_result(deploy, severity_level=log_level)<\/code><\/pre>\n<p>\u0410 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043d\u0430 \u0432\u0432\u043e\u0434 \u0432 CLI \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<h4>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u0438 exit code<\/h4>\n<p>\u0415\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u041b\u043e\u0433\u0438\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c changes_falg = 0, \u0438 \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 1. \u0412 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u201c\u0435\u0441\u043b\u0438 \u044d\u0442\u043e dry run \u0438 \u0444\u043b\u0430\u0433 == 1 &#8212; \u043f\u0438\u0448\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0439\u0441\u044f \u0441 \u043e\u0441\u043e\u0431\u044b\u043c exit code\u201d, \u0434\u0430\u043b\u0435\u0435 \u044d\u0442\u043e\u0442 exit code \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 CI \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0434\u0436\u043e\u0431\u0443 \u0441 \u0432\u0430\u0440\u043d\u0438\u043d\u0433\u043e\u043c \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0412\u0430\u0440\u043d\u0438\u043d\u0433 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e \u0442\u0443\u0442 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0410 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0441\u044f\u0446 \u0438\u043b\u0438 \u0434\u0432\u0430 \u043d\u0430 \u044d\u0442\u0438 \u0432\u0430\u0440\u043d\u0438\u043d\u0433\u0438 \u0437\u0430\u0431\u044c\u044e\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e.<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0435\u043b\u043e \u0437\u0430 \u043c\u0430\u043b\u044b\u043c, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 (\u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0435 \u0438\u0437\u043b\u0438\u0448\u043a\u0438 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u043d\u0435\u0440-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438):<\/p>\n<pre><code>FROM alpine:3.15  RUN set -x \\    &amp;&amp; apk --no-cache add bash curl jq \\ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0python3 py3-pip python3-dev py3-paramiko py3-yaml \\ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0openldap-clients libxml2 libxslt-dev libxml2-dev build-base git openssh \\ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0build-base linux-headers py3-grpcio \\    &amp;&amp; pip3 install --upgrade pip \\    &amp;&amp; pip3 install --upgrade wheel \\    &amp;&amp; pip3 install --upgrade setuptools \\    &amp;&amp; pip3 install pyats \\    &amp;&amp; pip3 install nornir nornir_utils nornir_napalm nornir-netmiko nornir-paramiko \\    &amp;&amp; pip3 install nornir-jinja2 nornir-scrapli napalm-asa rich \\    &amp;&amp; pip3 install genie ipdb ttp ipaddress tqdm python-gitlab<\/code><\/pre>\n<p>(\u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ldaps \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a AD, \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 COPY \u043f\u043e\u0434\u043b\u043e\u0436\u0438\u0442\u044c ldap.conf \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430)<\/p>\n<p>\u041f\u0438\u0448\u0435\u043c CI, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u044f\u043a\u043e\u0440\u044f \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0437\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432:<\/p>\n<pre><code class=\"yaml\">.base_connection: &amp;base_connection \u00a0\u00a0- cp .\/some_folder\/base_connection.py \/usr\/lib\/python3.9\/site-packages\/netmiko\/base_connection.py \u00a0 .template_plan: &amp;template_plan \u00a0\u00a0before_script: \u00a0\u00a0\u00a0\u00a0- *base_connection \u00a0\u00a0rules: \u00a0\u00a0\u00a0\u00a0- if: $CI_PIPELINE_SOURCE == \"schedule\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0when: never \u00a0\u00a0\u00a0\u00a0- changes: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- dap\/* \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- inventory\/* \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- lua_scripts\/* \u00a0\u00a0artifacts: \u00a0\u00a0\u00a0\u00a0when: always \u00a0\u00a0\u00a0\u00a0paths: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/nornir.log \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/artifacts\/* \u00a0 .template_deploy: &amp;template_deploy \u00a0\u00a0before_script: \u00a0\u00a0\u00a0\u00a0- *base_connection \u00a0\u00a0rules: \u00a0\u00a0\u00a0\u00a0- if: $CI_PIPELINE_SOURCE == \"schedule\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0when: never \u00a0\u00a0\u00a0\u00a0- when: manual \u00a0\u00a0allow_failure: \u00a0\u00a0\u00a0\u00a0exit_codes: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- 127 \u00a0\u00a0artifacts: \u00a0\u00a0\u00a0\u00a0when: always \u00a0\u00a0\u00a0\u00a0paths: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/nornir.log \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/artifacts\/*<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u0443\u0441\u043a\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043d\u0435\u043a\u0438\u0439 \u0444\u0430\u0439\u043b \u0441 \u0434\u0435\u0444\u043e\u043b\u0442\u0430\u043c\u0438 netmiko, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 <em>netmiko.ssh_exception.NetmikoTimeoutException: Paramiko: &#8216;No existing session&#8217; error: try increasing &#8216;conn_timeout&#8217; to 10 seconds or larger<\/em>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e exit code 127 &#8212; \u044d\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c Warning, \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u0421\u0430\u043c \u0436\u0435 exit-code \u0441\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0437 python, \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439).<\/p>\n<p>\u041d\u0443 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0430\u043c\u0438 \u0434\u0436\u043e\u0431\u044b:<\/p>\n<pre><code class=\"yaml\">stages: \u00a0\u00a0- check \u00a0\u00a0- plan \u00a0\u00a0- approves \u00a0\u00a0- deploy \u00a0 Check: \u00a0\u00a0&lt;&lt;: *template_plan \u00a0\u00a0stage: check \u00a0\u00a0script: \u00a0\u00a0\u00a0\u00a0- mkdir .\/artifacts \u00a0\u00a0\u00a0\u00a0- python3 -u .\/check_syntax.py \u00a0\u00a0\u00a0\u00a0- python3 -u .\/make_file_acls.py \u00a0\u00a0\u00a0\u00a0- python3 -u .\/make_file_dap.py \u00a0 Plan: \u00a0\u00a0&lt;&lt;: *template_plan \u00a0\u00a0stage: plan \u00a0\u00a0script: \u00a0\u00a0\u00a0\u00a0- python3 -u nornir_script.py \u00a0\u00a0needs: \u00a0\u00a0\u00a0\u00a0- job: Check \u00a0\u00a0allow_failure: \u00a0\u00a0\u00a0\u00a0exit_codes: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- 127 \u00a0 Approves:   &lt;&lt;: *template_deploy   stage: approves   script:     - python3 -u .\/approves.py   needs:     - job: Plan   Deploy:   &lt;&lt;: *template_deploy   stage: deploy   script:     - python3 -u .\/nornir_script.py --no-dry-run   needs:     - job: Approves <\/code><\/pre>\n<p>\u0412\u0441\u0451.<\/p>\n<h2>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/h2>\n<p>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0437\u0434\u0435\u0441\u044c \u0432 \u0446\u0435\u043b\u043e\u043c \u0442\u0440\u0438.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\/\u043f\u0430\u043c\u044f\u0442\u044c\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 &#8212; \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e \u0447\u0435\u0440\u0435\u0437 SNMP, \u0437\u0434\u0435\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e.<\/p>\n<h4>Syslog<\/h4>\n<p>Syslog \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u0440\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b HostScan \u0438 \u043b\u043e\u0433\u0430\u043c\u0438 \u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u044f\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0443\u043b\u0435\u0442\u0430\u0435\u0442 \u0432 GrayLog, \u0433\u0434\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u043b\u044f\u043c \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043a\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f, \u043a\u043e\u0433\u0434\u0430, \u043a\u0443\u0434\u0430 \u0437\u0430\u0445\u043e\u0434\u0438\u043b, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b, \u043f\u043e\u0434 \u043a\u0430\u043a\u0438\u0435 DAP \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u043f\u0430\u043b(\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u043b\u044f\u043c lua_script \u0438 ad_group, \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u0438\u0442\u0438\u043a, \u0432\u0435\u0448\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443 AD, \u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 HostScan \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c), \u0441 \u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\/\u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0447\u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e, \u043a\u0430\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u043b\u0435\u0436\u0430\u0442. \u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0438.<\/p>\n<p>\u0422\u0443\u0442 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441: \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 sho log queue \u0438 show log &#8212; \u0438\u0437-\u0437\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (logging queue) \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u043e\u043f\u0430\u043c\u0438 \u043b\u043e\u0433\u043e\u0432, \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c.<\/p>\n<p><strong>Prometheus.<\/strong><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 show vpn-session detail anyconnect, \u043f\u0430\u0440\u0441\u0438\u043c \u0435\u0433\u043e \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0432\u0435\u0440\u0441\u0438\u044f\u043c Anyconnect, \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c, \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 DTLS\/TLS, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0434\u0440\u043e\u043f\u043d\u0443\u0442\u044b\u0445 \u043b\u043e\u0433\u043e\u0432 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0421\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0442\u0443\u0442 \u043d\u0435 \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u044b \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e: \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u0434\u0430\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442\u0442\u0443\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 node-exporter, \u043b\u0438\u0431\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0431 \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0433\u0430\u0442\u044c \u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u043e \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0435 \u0436\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0432\u0435\u0431\u0435.<\/p>\n<p>\u0421\u044e\u0434\u0430 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u0441\u0435\u0440 \u0438 \u0430\u043b\u0435\u0440\u0442 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0435 \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432, ASP \u0434\u0440\u043e\u043f\u044b, \u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0437 dap.yaml \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u0420\u0430\u0437 \u0432 N \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u041c\u0421\u042d, \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0451 \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u0430 show access-list | access-list DAP-ip-user.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u043a\u043b\u044e\u0447, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0445\u0438\u0442\u043a\u0430\u0443\u043d\u0442\u044b \u0432\u0441\u0435\u0445 \u0442\u0430\u043a\u0438\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0430 \u0432\u0441\u0435\u0445 \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u043b\u0430\u0445. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u043e\u043c \u0441\u043b\u0443\u0436\u0438\u0442 ACE (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, permit any host 10.0.0.1 eq 22), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u0438\u0442\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u043b\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0434\u0430\u0435\u043c \u0432 Prometheus. \u041f\u043e \u043a\u0440\u043e\u043d\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u044f\u0432\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c\u044e, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0443\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u0442\u0443\u0434\u0430 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0434\u0438\u0442.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0412 \u0438\u0442\u043e\u0433\u0435<\/h2>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 VPN, \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0441\u0435\u0442\u0435\u0432\u0438\u043a\u0443, \u0430 \u0441\u0435\u0442\u0435\u0432\u0438\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0447\u0435\u043c-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c, \u0447\u0435\u043c \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 (\u0438\u043b\u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0440\u0430\u0437) \u0432 \u0434\u0435\u043d\u044c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0418\u0411\u0448\u043d\u0438\u043a\u043e\u0432 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0437\u0430\u044f\u0432\u043e\u043a.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0442\u043e\u043b\u043a\u043d\u0435\u0442 \u0432\u0430\u0441 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442 \u0447\u0430\u0441\u0442\u044c \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/678586\/\"> https:\/\/habr.com\/ru\/post\/678586\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0430\u0441\u0438\u043b\u0438\u0439 \u0438 \u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a \u043c\u044b \u0438\u0434\u0435\u043c \u043a \u0443\u0434\u043e\u0431\u043d\u043e\u043c\u0443 \u0438 \u0433\u0438\u0431\u043a\u043e\u043c\u0443 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f VPN \u0441\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u0444\u0438\u0447\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u044b\u0445 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442.<\/p>\n<p>\u0425\u043e\u0447\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043b\u043e\u0432 \u0447\u0435\u043c \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u0435\u0436\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0435\u0445\u0430\u043b\u0438.<\/p>\n<hr\/>\n<h2>\u0427\u0430\u0441\u0442\u044c 0, \u0441 \u0447\u0435\u0433\u043e \u0432\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c<\/h2>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u043e\u0449\u0430\u0434\u043e\u043a, \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0442\u043e\u044f\u043b\u0430 \u043f\u0430\u0440\u0430 Cisco ASA 5512 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0440\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0438 \u0445\u043e\u0434\u0438\u043b\u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0430\u043c. \u0412\u0441\u0451 \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e, \u043f\u043e\u043a\u0430 \u0431\u041e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0438\u0437 \u043e\u0444\u0438\u0441\u0430. \u041f\u043e\u0442\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u0430\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043a\u0430 \u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e VPN \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437 \u0440\u0443\u043a \u0432\u043e\u043d \u043f\u043b\u043e\u0445\u043e: \u0441 \u0432\u043e\u0437\u0440\u043e\u0441\u0448\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 5512 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0434\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0443 \u0438 \u043a\u0430\u043d\u0430\u043b\u044b \u043d\u0435 \u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442.<\/p>\n<p>\u0412 \u0442\u0435\u043c\u043f\u0435 \u0432\u0430\u043b\u044c\u0441\u0430 \u043c\u044b \u0437\u0430\u043a\u0443\u043f\u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e ASA 5515, \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438\u0445 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439, \u0432 \u043f\u043b\u0430\u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439, \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0435, \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/cisco\/blog\/493098\/\" rel=\"noopener noreferrer nofollow\">vpn load-balancing<\/a> \u0438<strong> <\/strong>\u0436\u0438\u0442\u044c \u0441\u0442\u0430\u043b\u043e \u0432\u0435\u0441\u0435\u043b\u0435\u0435.<\/p>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0448\u043b\u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0418\u0411 \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u043a-\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0435\u0442\u0438. \u041c\u044b \u0441\u0440\u0430\u0437\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435 dynamic-access-policy, \u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 N \u0436\u0435\u043b\u0435\u0437\u043e\u043a (\u0434\u0430 \u0435\u0449\u0435 \u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u0445) \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 1, \u0433\u0434\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Active Directory. \u0410 \u0435\u0449\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0441\u0430\u043c\u0438 ACL\u044b \u043f\u0438\u0448\u0435\u0442 \u043d\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440, \u0430 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430. \u041d\u0430 \u0442\u043e\u043c \u0438 \u043f\u043e\u0440\u0435\u0448\u0438\u043b\u0438 &#8212; \u0434\u0435\u043b\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0431\u0449\u0438\u0439 \u0444\u0430\u0439\u043b, \u0434\u0430\u0435\u043c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u043e\u0442\u0434\u0435\u043b\u0443 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u043c\u0430\u0437\u043a\u0430\u043c\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043d\u0443\u0436\u043d\u044b\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c.<\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e Git \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439, \u0432\u0438\u0434\u043d\u043e \u043a\u0442\u043e \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u0438 \u043f\u0440\u043e\u0447\u0438\u0439 *Ops \u043f\u043e\u0434\u0445\u043e\u0434. \u041e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0441\u0430\u043c\u0430\u044f \u043c\u0430\u043b\u043e\u0441\u0442\u044c &#8212; \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043d\u0430\u0448\u0435\u0433\u043e vpn-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439, \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439, Hello World \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u0443 \u043f\u043e\u0447\u0442\u0438): \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c \u0438 \u0440\u0430\u0437\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c, \u0434\u0430\u043b\u0435\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c dap.xml, \u0442\u0430\u043a \u0436\u0435 \u043a\u043b\u0430\u0434\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e \u0447\u0435\u043c \u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044e?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u0442\u044c Cisco Anyconnect. \u042d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 VPN-\u043a\u043b\u0438\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e. \u041e\u0434\u043d\u043e \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0443\u043c\u0435\u043d\u0438\u0439 &#8212; \u044d\u0442\u043e Dynamic Access Policy. \u0421\u043c\u044b\u0441\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\/\u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u043d\u0430 \u043d\u0435\u0433\u043e \u0442\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0430\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u042d\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438 &#8212; \u043e\u0442 \u0433\u0440\u0443\u043f\u043f\u044b \u0432 AD, \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u0430.<\/p>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u043e\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438, \u043d\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e ACL. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 ACL, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0434 \u043d\u0435\u0435 \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442, \u043d\u0430 \u0435\u0433\u043e vpn-\u0442\u0443\u043d\u043d\u0435\u043b\u044c \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043b\u0438\u0447\u043d\u044b\u0439 ACL. \u0415\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u0434\u043f\u0430\u043b \u043f\u043e\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a, \u0442\u043e \u0438\u0445 ACL\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d, \u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u0435\u0449\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u0449\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437 <a href=\"https:\/\/www.cisco.com\/c\/en\/us\/support\/docs\/security\/asa-5500-x-series-next-generation-firewalls\/108000-dap-deploy-guide.html\" rel=\"noopener noreferrer nofollow\">\u0430\u0434\u043c\u0438\u043d \u0433\u0430\u0439\u0434\u0430<\/a>.<\/p>\n<p>\u0415\u0449\u0435, \u043a \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e LUA \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 true, \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0434 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442 (\u0430 \u0435\u0449\u0435 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0433\u0430\u043b\u043a\u0438 \u0442\u0438\u043f\u0430 AND \u0438 OR, \u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e \u043d\u0438\u0445 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c).<\/p>\n<p>\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u0440\u0451\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439:<\/p>\n<p>1) \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dynamic-access-policy, \u0432 \u043d\u0435\u0439 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 ACL \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c (\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435)<\/p>\n<p>2) ACL, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430.<\/p>\n<p>3) \u0424\u0430\u0439\u043b dap.xml, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u0430 ASA \u043a \u0433\u0440\u0443\u043f\u043f\u0435 \u0432 AD, \u0430 \u0442\u0430\u043a\u0436\u0435 LUA \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0447\u0442\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u044b(\u0440\u0430\u0434\u0438\u0443\u0441 \u0438\u043b\u0438 saml), \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 AD, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0435\u0433\u043e LDAP \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b.<\/p>\n<\/div>\n<\/details>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043f\u043e \u0444\u0435\u043d-\u0448\u0443\u0439, \u0434\u0435\u043b\u0430\u0435\u043c YAML \u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 DAP-\u0433\u0440\u0443\u043f\u043f\u044b, \u043a\u0430\u043a \u043a\u043b\u044e\u0447, \u0438 \u0441\u043f\u0438\u0441\u043e\u043a ACE, \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"yaml\">Group_1: - permit ip any 192.168.1.0 255.255.255.0 - permit tcp any 192.169.2.0 255.255.255.0 eq 5432  Group_2: - permit tcp any 192.169.2.0 255.255.255.0 eq 5432 - permit tcp any 10.1.1.1 255.255.255.255 eq 22<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u0438\u0448\u043b\u0430 \u0438\u0434\u0435\u044f, \u0447\u0442\u043e \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ASA \u0443 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0438 \u0432 ACE \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u043e\u0441\u044f\u043a\u0438.<\/p>\n<p>\u0411\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0434\u0435\u043b\u0430\u0435\u043c import re, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0433\u0435\u043a\u0441\u043e\u0432 \u043f\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<\/p>\n<pre><code class=\"python\">regexs = [\"(permit)\\s(tcp|icmp|udp|ip)\\s(any)\\s(any)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(any)\\s(eq)\\s(\\d+)$\", \"(permit)\\s(tcp|icmp|udp|ip)\\s(any)\\s(host)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp|ip)\\s(any)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(host)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (eq) (\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(host)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (range) (\\d+) (\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (\\d+\\.\\d+\\.\\d+\\.\\d+) (eq) (\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any) (eq) (\\d+)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any) (eq) (\\d+)\\s(host)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (\\d+\\.\\d+\\.\\d+\\.\\d+) (range) (\\d+) (\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(range) (\\d+) (\\d+)\\s(\\d+\\.\\d+\\.\\d+\\.\\d+) (\\d+\\.\\d+\\.\\d+\\.\\d+)$\", \"(permit)\\s(tcp|icmp|udp)\\s(any)\\s(range) (\\d+) (\\d+)\\s(host) (\\d+\\.\\d+\\.\\d+\\.\\d+)$\", ]<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u043c\u0430\u0442\u0447\u0438\u043b\u043e\u0441\u044c &#8212; \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 &#8212; \u043f\u043b\u043e\u0445\u043e \u0438 \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c IP\/\u041c\u0430\u0441\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 ipaddress.<\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u043e\u043c \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 AD-\u0433\u0440\u0443\u043f\u043f\u0430 (\u043e\u043d\u0430 \u0436\u0435 DAP-\u0433\u0440\u0443\u043f\u043f\u0430), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0431\u043e\u0440 ACE. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 ACL, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 ASA, \u0441\u0434\u0435\u043b\u0430\u0442\u044c diff, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0439\u043c\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0430 \u0447\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u0441\u0430\u043c\u0438 DAP \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438: \u0431\u0435\u0440\u0435\u043c \u043a\u043b\u044e\u0447\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0438 \u0440\u0435\u043f\u043b\u0435\u0439\u0441\u043e\u043c \u043f\u043e\u0434\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442<\/p>\n<pre><code>dynamic-access-policy-record _FOR_REPLACE_ \u00a0network-acl _FOR_REPLACE_<\/code><\/pre>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433 &#8212; \u0441\u043e\u0431\u0440\u0430\u0442\u044c dap.xml, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 AD-\u0433\u0440\u0443\u043f\u043f \u043a DAP-\u0433\u0440\u0443\u043f\u043f\u0430\u043c. \u0414\u0435\u043b\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0435\u0440\u043d\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0432 XML, \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0443\u0434\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u0435\u043b\u044b:<\/p>\n<pre><code class=\"python\">from lxml import etree  def createPolicy(policies): \u00a0\u00a0\u00a0\u00a0root = etree.Element('dapRecordList') \u00a0\u00a0\u00a0\u00a0for policy in policies: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0tree = etree.ElementTree(root) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapRecord = etree.SubElement(root, 'dapRecord') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapName = etree.SubElement(dapRecord, 'dapName') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapNameValue =\u00a0 etree.SubElement(dapName, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapNameValue.text = policy \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapViewsRelation = etree.SubElement(dapRecord, 'dapViewsRelation') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapViewsRelationValue =\u00a0 etree.SubElement(dapViewsRelation, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapViewsRelationValue.text = 'and' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapBasicView = etree.SubElement(dapRecord, 'dapBasicView') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapSelection = etree.SubElement(dapBasicView, 'dapSelection') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapPolicy = etree.SubElement(dapSelection, 'dapPolicy') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapPolicyValue =\u00a0 etree.SubElement(dapPolicy, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dapPolicyValue.text = 'match-all' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attr = etree.SubElement(dapSelection, 'attr') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrName = etree.SubElement(attr, 'name') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrName.text = 'aaa.ldap.memberOf' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrValue = etree.SubElement(attr, 'value') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrValue.text = policy \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrOperation = etree.SubElement(attr, 'operation') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrOperation.text = 'EQ' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrType = etree.SubElement(attr, 'type') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attrType.text = 'caseless' \u00a0\u00a0\u00a0\u00a0return root    xmlText = etree.tostring(xml, xml_declaration=True, encoding='UTF-8', standalone=True, pretty_print=True).decode('utf-8') xmlText = xmlText.replace(' ','') xmlText = xmlText.replace('&lt;?xmlversion=\\'1.0\\'encoding=\\'UTF-8\\'standalone=\\'yes\\'?>', '&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>')<\/code><\/pre>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c:<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 1<\/strong>: \u041c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430, \u0433\u0434\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0432 YAML \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0435 \u0432 AD, \u043d\u0438\u043a\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 pipeline \u0434\u0435\u043b\u0430\u0442\u044c ldapsearch, \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 AD \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0432\u0441\u0435 \u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0432 \u044f\u043c\u043b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 AD.<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 2:<\/strong> ASA \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0432 ACL \u0441 \u0446\u0438\u0444\u0440 \u043d\u0430 \u0431\u0443\u043a\u0432\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: tcp\/80 > www, tcp\/22 > ssh, udp\/53 > domain \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\/\u0446\u0438\u0444\u0440\u0430\/\u0438\u043c\u044f, \u0432\u044b\u0434\u0435\u0440\u0433\u0438\u0432\u0430\u0435\u043c \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e ACE \u043f\u043e\u0440\u0442 \u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">{ 'tcp': {'5190' : 'aol', '179' : 'bgp', '3020' : 'cifs',         '1494' : 'citrix-ica', '514' : 'cmd', '2748' : 'ctiqbe',         '13' : 'daytime', '9' : 'discard', '53' : 'domain',         '7' : 'echo', '512' : 'exec', '79' : 'finger',         '21' : 'ftp', '20' : 'ftp-data', '70' : 'gopher',         '1720' : 'h323', '101' : 'hostname', '80' : 'http',         '443' : 'https', '113' : 'ident', '143' : 'imap4',         '194' : 'irc', '543' : 'klogin', '544' : 'kshell',         '389' : 'ldap', '636' : 'ldaps', '513' : 'login',         '1352' : 'lotusnotes', '515' : 'lpd', '139' : 'netbios-ssn',         '2049' : 'nfs', '119' : 'nntp', '5631' : 'pcanywhere-data',         '496' : 'pim-auto-rp', '109' : 'pop2', '110' : 'pop3',         '1723' : 'pptp', '514' : 'rsh', '554' : 'rtsp', '5060' : 'sip',         '25' : 'smtp', '1522' : 'sqlnet', '22' : 'ssh',         '111' : 'sunrpc', '49' : 'tacacs', '517' : 'talk',         '23' : 'telnet', '540' : 'uucp', '43' : 'whois', '80' : 'www'} 'udp': {'53' : 'domain', '514' : 'rsh', '554' : 'rtsp',          '80' : 'www', '137' : 'netbios-ns', '5060' : 'sip', '123' : 'ntp'} }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u042d\u044d\u044d, GitLab?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0437\u043d\u0430\u0435\u0442 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 GitLab \u0438 CI.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445, GitLab &#8212; \u044d\u0442\u043e git \u0441\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u0448\u0442\u0443\u043a\u0430\u043c\u0438. \u0421\u0440\u0435\u0434\u0438 \u044d\u0442\u0438\u0445 \u0448\u0442\u0443\u043a \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 (pipelines). \u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d &#8212; \u044d\u0442\u043e \u043d\u0435\u043a\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447, \u0433\u0434\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043b\u0438\u0431\u043e \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u043b\u0438\u0431\u043e \u0433\u0434\u0435 \u0433\u0434\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0437\u0430 \u043e\u0434\u043d\u043e\u0439. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432 \u0440\u0443\u0447\u043d\u0443\u044e \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0410 \u0435\u0449\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u043e\u043c \u0444\u0430\u0439\u043b\u044b \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-336086","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=336086"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336086\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=336086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=336086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=336086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}