Sau khi được hướng dẫn và tìm hiểu về công cụ tự động hoá Ansible, sinh viên thực hiện đề tài nhằm giải quyết vấn đề khó trong di chuyền đến các chỉ nhánh xa nhau để cấu hình thiết bị cũ
Phương pháp thực hiện với mô hình WAN
Cấu hình SSH cho các thiết bị router. hostname Headquarter ip domain-name khoaluan.com crypto key generate rsa general-keys modulus 1024 ip ssh version 2 ip ssh authentication-retries 2 username PQ privilege 15 password 1207 line vty 0 4 login local transport input ssh privilege level 15 exit exit wr
Hình 3-1: File câu hình SSH cho router ở mô hình WAN ¢ Hostname dùng để đặt lại tên của thiết bị theo ý quan trị viên giúp dé quản lý. ¢ Ip domain-name dùng dé đặt tên miền. © Crypto key generate rsa general-keys modulus 1024 dùng để tạo ra cặp khoá ‘Public/Private’ dé mã hoá dữ liệu bằng RSA với số bit là 1024 (mặc định là 502 bit, tối đa là 2048 bit). © IP SSH verion 2 dùng để bật tính năng SSH và dùng SSH version 2 chú ý nâng cấp bản mới nhất cho thiết bị để được hỗ trợ version 2. © IP SSH authentication-retries là cấu hình tùy chọn dùng để giới hạn số lần nhập username và password sai. © Username và password dùng dé tao tài khoản và mật khẩu cho người dùng đăng nhập SSH và privilege 15 để giúp người dùng có toàn quyền truy cập. © Line vty 0 4 dùng dé vào mode line vty. ¢ Transport input SSH dùng dé chi ra phương thức cho phép truy cập điều khiển là SSH thay vì Telnet.
Thiết lập file inventory cho từng riêng mô hình vì các IP và mật khẩu cũng như cách gom nhóm có thể khác nhau.
Hình 3-2: Eile inventory của mô hình WAN
Sau khi hoàn thiện các bước thiết yêu cho việc cấu hình tự động, tiễn hành tạo fileYAML dé thực hiện các yêu cầu của quan tri viên.
- name: RUN COMMAND AND PRINT TO TERMINAL WINDOW hosts: all gather_facts: false connection: network_cli tas! name: ENABLE OSPF ios_config: lines:
- network 172.16 parents: router ospf 1 register: command_output when: ansible_ssh_host == "172.16. name: PRINT TO TERMINAL WINDOW debug ommand_output}}" name: ENABLE OSPF ios_config: lines:
- network 172.16.2.0 parents: router ospf 1 register: command_output when: ansible _ssh_host name: PRINT TO TI debug:
- network 192.16. parents: router ospf 1 register: command_output when: ansible_ssh_host == '172.16. name: PRINT TO TERMINAL WINDOW debug msg: "{{command_output}}"
Hinh 3-3: File YAML cau hinh OSPF Hosts là tên thiết bị muốn truy cập tiến hành chạy Playbook Ở đây tên nay phải giống với tên trong file ‘inventory’ mới có thé truy cập. Để Playbook thực thi nhanh hơn có thể khai báo gather_facts: false déAnsible không thực hiện bước thu thập thông tin từ các thiết bị. e Connection chọn phương thức kết nối đến các thiết bị mạng, tuỳ vào loại mà chọn phương thức cho phù hợp, nếu sai ở bước này có thé cấu hình sẽ không chạy. e Tasks là các nhiệm vụ cần thực thi. e Ios _config là một module mà Ansible hỗ trợ cho quản trị viên nhằm cấu hình cho các thiết bị mạng ở mode Configuration. e Parents dùng để cấu hình một Interface, các lệnh cần phải nằm dưới một
Interface cụ thé. © Đồng thời khai báo từ khóa register là command_output của lệnh cấu hình
OSPF và lưu trong command_output. e Su dung module debug (giúp in ra các msg như ham print trong các ngôn ngữ lập trình).
Thực thi các file YAML đã tạo sau đó thực hiện truy cập SSH vào các thiết bị mạng đã cấu hình xem xét kết quả đạt được.
Phương pháp thu thập thông tin các thiết bị mạng
Khi cần xem các thông tin cấu hình của thiết bị hay các thông số khác, việc SSH vào từng thiết bị mang hay xem trực tiếp trên thiết bị đó đều mat thời gian và hiệu suất Sử dụng file YAML viết các task mà quản trị viên muốn thực hiện để có thể có thông tin cầu hình của các thiết bị cùng một lúc.
Hình 3-5: File YAML thu thập cấu hình các thiết bị
Hình 3-6: Thông tin cầu hình được trả về từ Branch!
Trường hợp cần biết các thông tin về phần cứng quản trị viên tạo một file YAML để thực hiện task đó. tasks:
- name: Get the facts ios facts: gather_subset: all
- name: DISPLAY MODEL AND SERIAL NUMBER debug: msg: "Model number of {{ansible net hostname }} is {{ ansible net model }} land serial number is {{ ansible net serialnum }}"
Hình 3-7: File YAML lay thông tin phan cứng
ASK [DISPLAY MODEL AND SERIAL NUMBER] **************++++*x+ + tt t tt tt tk tt tt tk tk
DLAY RECAP *******VV eee xk#xx ke DU QQỤỤNNNAAAAg changed=@ unreachable=0ứ failed=0 skip bed=0 rescued=8 changed unreachable=@ failed=0 skip rescued=@ rescued=@ ignored=0
Hình 3-8: Thông tin lấy được từ các thiết bị
Phương pháp thực hiện kiểm tra cấu hình với CIS Benchamark
Cần tìm hiéu lý thuyết và cách hoạt động của các lệnh Benchmark từ đó đưa ra cách đánh giá phù hợp.
Thực hiện tạo file YAML va viết task chạy lệnh theo CIS Benchmark gợi ý sau đó xem kết quả trả về từ thiết bị rồi viết thêm 4 task in ra và lưu lại kết quả mong muốn khi đã hiểu và kiểm tra kết quả được trả về.
Ví dụ được thực hiện trên một router.
Perform the following to determine if AAA services are enabled: hostname#show running-cenfig | incl aaa new-model
If the result includes a "no", the feature is not enabled.
Hình 3-9: Lệnh và cách kiểm tra của Benchmark đề xuất.
Dựa vào câu lệnh và gợi ý xác định ‘aaa new-model’ có được mở hay không từ đó thực hiện viết task để lấy kết quả từ thiết bị đối chiếu với gợi ý.
Hình 3-10: Playbook thu thập thông tin theo gợi ý của Benchmark Ở gợi ý của Benchmark là có ‘no’ trong kết quả trả về thì chức năng chưa được thiết lập Từ đó viết thêm 4 task sử dụng điều kiện when dé in ra một câu thông báo cho người quản trị biết và lưu vào một file đã tạo sẵn có tên ‘checkBranch1’.
Tạo thêm 2 task để lấy ngày tháng và thời gian tại thời điểm chạy các cấu hình check dé lưu lại giúp cho việc quản lý va troubleshoot diễn ra dé hơn. letworkAutomation:ô# cat Benchmark.yml
: Branch1 facts: no ion: network,
- name: Get current date local_actio mmand date +%V-%m-%d register: date register: time name: Enable ‘aaa new-model" ios_command: mmands: show running-config | incl aaa new-model register: result name: print
: Benchmark "Enable aaa new-model’ is set result.stdout[@] != "no aaa new-model" print
Benchmark ‘Enable aaa new-model'isn"t result stdout[@] ode1' save check lineinfile
‘Benchmark’ En sn‘t set-{{ date.stdout_lines }}-{{ time.stdout_lines }
Hình 3-12: File kiểm thử của một nội dung trong CIS Benchmark © 2 task đầu dùng dé lấy thời gian và ngày giờ khi chạy kiểm tra. ¢ Task tiếp theo dùng dé hiển thị cấu hình theo như CIS Benchmark gợi ý. © 2 task tiếp theo dùng để in ra câu biểu ngữ thông báo cho người quan trị có sử dụng điều kiện. © 2 task cuối dùng dé lưu lại câu biểu ngữ vào một file giúp quản trị viên dễ dàng thống kê và có sử dụng điều kiện.
TASK [print] *********+**+*++*k++++# 4k tk k4 HC Ki KIC
TASK [print] ********** tk tk tk ke
TASK [Save check] ***********++++ II tt 449 4444444444444 anchi - st] => { cu "“¿ “changed”: true, "msg": "line ad
TASK [save check] ********** CO NAAAAANANNANNAY
Hình 3-13: Kết quả sau khi kiểm thử Sau khi thực hiện kiểm tra thì nội dung sẽ được lưu vào một file giúp người quản trị dễ dàng tìm thấy và hệ thống lại các nội dung đã thực hiện kiểm tra File chứa thông tin này được lưu tại ‘root’ Quản trị viên có thể xem xoá chỉnh sửa hoặc ghi chú lại các lưu ý về một cấu hình dé điều chỉnh lại hệ thống.
Hình 3-14: Lưu lại một output mà người quản trị mong muốn đề quản lý
Tuy nhiên không phải bất cứ các lệnh check nào Benchmark cũng gợi ý một kết quả từ thiết bị một cách dé dàng dé chúng ta thực hiện Cần phải hiểu rõ về các lệnh dé có thể xác định được các lệnh kiểm tra.
Perform the following to determine if AAA authentication for line login is enabled:
If the command does not return a result for each management access method, the feature is not enabled hostname#sh run | sec line | incl login authentication
Hình 3-15: Lệnh va cách kiểm tra của Benchmark dé xuất Ở phan gợi ý này Benchmark yêu cầu xem kết quả trả về từ thiết bị nếu không có phương thức quản lý truy cập nào thì chức năng chưa được mở.
Hình 3-16: Playbook thu thập thông tin theo gợi ý của Benchmark
Từ kết quả hiển thị về từ Branch1 cho thấy cổng line tty không có phương thức quản lý truy cập cũng như các thông tin khác Từ đó cần phải hiéu về các kết quả tra về dé in và lưu lại các câu kiểm tra dé quan lý tập trung. name: Set ‘login authentication for ‘line con 8” ios_command: commands: show run | sec line | incl login authentication register: result name: print debu msg: Benchmark ‘Set login authentication for "line con 8''is not set when: result.stdout[@] != "" name: print debu msg: Benchmark 'Set login authentication for 'line con when: result.stdout[@] == "" name: save check local_action: module: lineinfile path: /root/checkBranch1 line: "Benchmark’Set login authentication for le.stdout_lines }}-{{ time.stdout_lines }}" when: result.stdout[@] =
- name: save check local_action: module: lineinfile for date.stdout_lines }}-{{ time.stdout_lines when: result.stdout[@] !
Hình 3-18: Playbook hoàn chỉnh dé kiểm thử và lưu lại vào file đã tao sẵn
3.4 Phương pháp thực hiện cấu hình an toàn dựa vào CIS Benchmark
Sau khi thực hiện kiểm tra an toàn cấu hình cho thiết bị sẽ thấy còn nhiều thiếu sót các cấu hình an toàn, nhằm khắc phục yếu tổ đó CIS Benchmark đã gợi ý các lệnh nhằm sửa chữa.
Configure the EXEC banner presented to a user when accessing the devices enable prompt. hostname (config) #banne:
exec c with the character 'c'.
Hình 3-19: CIS Benchmark gợi ý phương pháp cấu hình banner exec
Configure the device so a login hanner presented ta a user attempting ta access the device. hostname(config)#banner login c
Enter TEXT message End with the character 'c',
Hình 3-20: CIS Benchmark gợi ý phương pháp cấu hình banner login
Enable password encryption service to protect sensitive access passwords in the device configuration. hostname (config) #service password-encryption
Hình 3-21: CIS Benchmark gợi ý phương pháp cấu hình service password- encryption
Configure a strong, enable secret password. hostname (config) #enabie secrer (ENABLE SECRET PASSWORD)
Hình 3-22: CIS Benchmark gợi ý phương pháp cau hình enable secret © Dựa vào các gợi ý của Benchmark thiết kế được 1 playbook trong đó có 4 cấu hình an toàn Playbook thực hiện cấu hình an toàn ‘banner và encrypt password’ nằm ở tang quản lý và là các cấu hình thuộc nhóm level 1. ¢ _ Các cầu hình an toàn ở nhóm level I chỉ là giảm thiểu các thiệt hại bên ngoài cho thiết bị, đơn giản mà nói các thông báo banner cũng như mã hoá password chỉ là che đi các thông tin bên ngoài hoặc cảnh báo người đăng nhập vào thiết bị chứ không thé che giấu nội dung trao đổi giữa các thiết bị. © Thay vào đó các cấu hình ở level 1 cũng đơn giản và dé dàng cau hình hơn các câu hình ở level 2.
Banner login 1 dùng để cấu hình banner khi thực hiện login vào thiết bị.
!!Warning!! Enter password if you were Admin 1 là câu mà người quan trị muốn đưa ra thông báo khi ai đó đăng nhập vào thiết bị.
Banner exec 1 dùng dé cấu hình banner khi vào mode exec trên thiết bi.
Welcome to exec prompt 1 là câu mà quan trị viên đưa ra cảnh bảo khi ai đó vào mode exec trên thiết bị.
“1” ở cả 2 cấu hình giống như chữ “c” theo gợi ý của CIS Benchmark bắt đầu và kết thúc phải giống nhau.
Service password-encryption dùng để mã hoá password chỉ nhằm ngăn chặn các tình huống vô tình nhìn vào máy tính và thấy mật khẩu chứ không thể chống lại những người cố tinh ăn cắp dữ liệu và giải mã.
Từ đó thực hiện thêm enable secret 123 dùng mã hoã md5 để mã hoá dữ liệu 123 là password của dùng để mã hoá. root8NetworkAutomation:~# ansible-playbook -i inventory cfgBannerandEncryption.yml
PLAY [RUN COMMAND AND PRINT TO TERMINAL WINDOW] *********** Seen tt te eeees
TASK [Config Benchmark] **********x***x+x++ T TT w,ỢỢ T n unreachable: failed=9 s ignored=8 ignored2@
Hình 3-24: Kết quả khi thực thi Playbook
Tính an toàn của tự động hoá -: -+++++tttttttrtrtrrrrrrrrrrrrrrrrree OD Chương 4 TRIỂN KHAI VA THU NGHIỆM .s+e.c 37 4.1 Mô hình WAN -<TEEtEEEEEEEEE rrrrriorT 4.1.1 Chuẩn bị (pre-configuration) e.e.ceeee., SO 4.1.2 — Xác định thiếtb .eceeereeeeeececce 39 4.1.3 — Triển khai eo, OD
Sự hiệu quả và tính tiện lợi, nhanh chóng của tự động hoá là một điều hiển nhiên mang lại rất nhiều lợi cho quản trị viên trong công cuộc công nghiệp chuyên đồi từ phương pháp cũ đến phương pháp mới tự động hơn.
Sau khi thấy được sự tiện lợi của tự động nói chung và làm việc với Playbook nói riêng thì các yếu tố như an toàn thông tin cần được đảm bảo Tin tặc có thé là người trong công ty hay người ngoài vô tình lấy được laptop của quản trị viên hay chỉ đơn thuần là chạm vào được thì cũng sẽ rất nguy hiểm.
File ‘inventory’ là một file quan trọng chứa tat cả thông tin có thé truy cập được vào thiết bị mạng của công ty như password hay một Playbook cấu hình quan trọng có thê bị sửa đổi và làm tê liệt cả công ty.
Các Playbook và file ‘inventory’ là hai thứ mà tin tặc nhắm đến đầu tiên vì lộ rõ ra ngoài và không có che đậy Chỉ cần thay đổi 1 chút thông tin bên trong Playbook hay file ‘inventory’ cũng gây ra nghiêm trọng khi tin tặc không cần thực hiện phá hoại chỉ cần sửa đổi và để chính quản trị viên khi vô ý không kiểm tra lại 1 trong 2
Tính quan trọng của an toàn thông tin nên được cân nhắc khi sự tiện lợi và nhanh chóng mà Ansible tự động hoá mang lại Quản trị viên cần thực hiện các công cụ bảo vệ hơn cho các file trọng yếu của mình.
Ansible đã hỗ trợ cho quản trị viên mạng một module mã hoá các file nhằm ngăn chặn thông tin dễ dàng bị tiết lộ ra ngoài.
Ansible_vault là công cụ mà tự động hoá Ansible hỗ trợ giúp mã hoá các file với cipher mặc định là AES256
Hình 3-25: Playbook sau khi được mã hoá e Ansible_vault công cụ mà Ansbile hỗ trợ cho quản trị viên e Encrypt là từ khoá dùng dé mã hoá Playbook © New Vault password là nhập password dé mã hoá Playbook trên © _ Thông báo hiền thị đã mã hoá thành công
Sau khi mã hoá có thể nhìn thấy thông tin bên trong Playbook không còn như ban đầu nữa mà là dãy số tránh bị tiết lộ thông tin ra ngoài.
Cũng như vậy tiếp tục mã hoá file ‘inventory’.
Hình 3-26: file ‘inventory’ sau khi được mã hoá Để giải mã thì chỉ cần thay đổi từ khoá ‘encrypt’ thành ‘decrypt’ là có thể giải mã thành công trở lại như trước. root@NetworkAutomat ion ~ decrypt inventory ault password:
Decryption successful root@NetworkAutomation-1:n# cat inventory
Hình 3-27: file ‘inventory’ sau khi giải mã
Sau khi giải mã đã có thé xem lại file ‘inventory’
Quản trị viên đôi lúc cần sửa chữa thông tin nên phải giải mã các file đã mã hoá nhưng lại không nhớ mình đã mã hoá lại hay chưa, đó cũng là một bất cập với công cụ khi mã hoá và giải mã dé chỉnh sửa hoặc thêm bớt các thông tin Ansible_vault hỗ trợ thêm các từ khoá khác. © ‘edit’ dùng để chỉnh sửa nội dung bên trong file mã hoá mà không cần phải giải mã. ¢ ‘rekey’ dùng dé thay đổi password cũ của file dang mã hoa.
Khi một file bị mã hoá thì chạy Playbook sẽ có một thông báo xuất hiện và không
Hình 3-28: Playbook không thể thực thi khi file bị mã hoá Để thực hiện được Playbook cần có một dòng thêm vào sau nhằm giải mã các file đã mã hoá trước đó và thực thi Playbook. e_ ask-vault-pass dùng để yêu cầu password cho file thực thi mà được mã hoá
Chương 4 TRIEN KHAI VÀ THU NGHIỆM
Số lượng Tên thiệt bị IP/frame-relay Muc tiéu cau hinh
3 Branch2 DLCI 104-401 DLCI 301 Routing, SSH
Bảng 4-1: Bảng thiết bị mô hình WAN
Mục tiêu cấu hình: e_ Giúp các máy PC va DNS server có thể trao đổi với nhau, từ đó cần cầu hình
OSPF. e Tiếp theo cấu hình ACL chan ping từ máy PC đến DNS server ngăn chặn việc kẻ xấu lợi dụng và DDoS làm sập DNS server. ° Tiếp tục thực hiện cấu hình NTP cho thiết bị với Headquarter làm server. e _ Thực hiện bằng công cụ tự động thay thé phương pháp thủ công.
Thực hiện trên các router © _ Thiết lập IP cho các router kết nối với FRSW cùng lớp mạng là 172.16 1.x. e Câu hình frame-relay cho các router kết nội được với nhau. e_ Thực hiện cấu hình SSH t e Ping thử các router với nh: heo fi au và le đã soạn sẵn và giới thiệu phía trên. © Sau khi tất cả hoàn thành thì sẵn sàng kết nối và triển khai. máy NetworkAutomation kiểm tra kết nói.
Thiết lập Cấu hình Cấu hình Kiểm tra Sẵn sàng
IP F—* frame- —*| giaothức —>| kếtnối | —>_ kếtnối relay SSH cac SSH Thực hiện trên máy chu Ansible
Thiết lập Tạo file Kết nối Tạo file Sẵn sàng
IP inventory SSH dén YAML trién khai cac playbook
Hình 4-2: File Inventory của mô hình WAN © 3 thiết bị mạng được đặt tên dé dé dàng hình dung mô hình một công ty thật từ đó xác định nhiệm vụ của các thiết bị mạng trong mô hình. ¢ Headquarter xem như là trung tâm nhằm vận chuyện thông tin và triển khai xuống các chỉ nhánh. e Branchl và Branch2 là 2 chỉ nhánh được trung tâm triển khai các cấu hình lệnh.
Từ các mục tiêu đã định trước thực hiện xây dựng playbook một cách cụ thể và thực thi Trong đó playbook thực thi cấu hình OSPF đã được nêu ở phần phương pháp cấu hình mô hình WAN.
Tiếp tục thực thi playbook cấu hình ACL và NTP như đã nêu ở phần mục tiêu.
- name: RUN COMMAND AND PRINT TO TERMINAL WINDOW hosts: Headquarter gather_facts: false connection: network_cli tasks: name: TIMEZONEcfg ios_config: lines:
- clock summer-time VNT recurring register: command_output name: TIMEcfg c1i_command: command: clock set 1: 00 10 July name: PRINT TO TERMINAL WINDOW debug
JrASK [PRINT TO TERMINAL WINDON] ********+*+