Tóm tắt: (1) AAA qua TACACS+, luôn có fallback local và một user local khẩn cấp; (2) chỉ SSH v2 + NETCONF, tắt telnet, giới hạn phiên; (3) chỉ nhận management từ dải quản trị: control-plane management-plane trên IOS XR, filter trên lo0 trên Junos; (4) giới hạn tốc độ lưu lượng tới CPU (LPTS / policer). Mọi thay đổi trên thiết bị từ xa đều làm với commit confirmed.
Ví dụ dùng: dải quản trị 198.51.100.0/24, TACACS+ 198.51.100.10-11, BGP peer trong 203.0.113.0/24. Secret viết <...>, khi đẩy bằng Ansible thì lấy từ SOPS/ansible-vault.
Luồng hoạt động
flowchart LR U["Admin / automation"] -->|SSH, NETCONF| M["Mgmt ACL / management-plane"] M -->|"cho phép"| R["Routing engine / RP"] R -->|"xác thực, phân quyền, accounting"| T["TACACS+ server"] T -.->|"không phản hồi"| L["Fallback: user local"] P["BGP/IGP peer"] -->|"LPTS / lo0 filter + policer"| R X["Nguồn lạ"] -->|"drop"| M
Cấu hình
IOS XR: AAA/TACACS+
tacacs-server host 198.51.100.10 port 49
key 7 <ENCRYPTED_KEY>
!
tacacs-server host 198.51.100.11 port 49
key 7 <ENCRYPTED_KEY>
!
aaa group server tacacs+ TACACS-GRP
vrf MGMT
server 198.51.100.10
server 198.51.100.11
!
aaa authentication login default group TACACS-GRP local
aaa authorization exec default group TACACS-GRP local
aaa authorization commands default group TACACS-GRP none
aaa accounting exec default start-stop group TACACS-GRP
aaa accounting commands default stop-only group TACACS-GRP
!
username breakglass
group root-lr
secret 10 <SHA512_HASH>
!aaa authorization commands ... none nghĩa là khi TACACS+ mất hết thì lệnh được phép (không bị khoá ngoài). Ngược lại thiếu local ở authentication login thì mất TACACS+ = mất quyền vào thiết bị. Kiểm tra user breakglass trước khi đóng phiên.
IOS XR: SSH và session
ssh server v2
ssh server vrf MGMT
ssh server netconf vrf MGMT
ssh server rate-limit 30
ssh server session-limit 10
ssh timeout 60
netconf-yang agent
ssh
!
line default
exec-timeout 15 0
!Key host: chạy lệnh exec crypto key generate ed25519 (hoặc crypto key generate rsa, chọn 2048 trở lên). Telnet không bật mặc định trên XR; đảm bảo không có dòng telnet ... server trong running-config.
IOS XR: management-plane và LPTS
control-plane management-plane giới hạn nguồn được dùng từng giao thức quản trị, áp trên tầng LPTS nên không cần ACL trên từng interface:
control-plane
management-plane
out-of-band
vrf MGMT
interface MgmtEth0/RP0/CPU0/0
allow SSH peer
address ipv4 198.51.100.0/24
!
allow NETCONF peer
address ipv4 198.51.100.0/24
!
allow SNMP peer
address ipv4 198.51.100.0/24
!
!
!
inband
interface all
allow SSH peer
address ipv4 198.51.100.0/24
!
!
!
!
!- Có
management-planethì giao thức không được liệt kê trên interface đó sẽ bị chặn, nên khai báo đủ SSH/NETCONF/SNMP trước khi commit. - LPTS (Local Packet Transport Services) đã có policer mặc định cho từng loại flow tới CPU (BGP, OSPF, SSH, ICMP...). Chỉ chỉnh khi có lý do, cú pháp
lpts pifib hardware police→flow <type> rate <pps>và giá trị mặc định khác nhau theo dòng máy (ASR 9000, NCS 5500, 8000): tra tài liệu platform trước.
Junos: AAA/TACACS+
set system authentication-order [ tacplus password ]
set system tacplus-server 198.51.100.10 secret "<TACACS_KEY>"
set system tacplus-server 198.51.100.10 source-address 192.0.2.1
set system tacplus-server 198.51.100.11 secret "<TACACS_KEY>"
set system tacplus-server 198.51.100.11 source-address 192.0.2.1
set system accounting events [ login change-log interactive-commands ]
set system accounting destination tacplus
set system login user remote class read-only
set system login user breakglass class super-user
set system login user breakglass authentication encrypted-password "<SHA512_HASH>"- User
remotelà template: user TACACS+ không có tài khoản local sẽ được map vào class này (server TACACS+ có thể trả vềlocal-user-nameđể map vào template khác, vdnetopsclasssuper-user). passwordtrongauthentication-ordercho phép rơi về user local khi TACACS+ không phản hồi. Bị TACACS+ từ chối thì không thử local.
Junos: system services
delete system services telnet
delete system services ftp
set system services ssh root-login deny
set system services ssh protocol-version v2
set system services ssh connection-limit 10
set system services ssh rate-limit 5
set system services netconf ssh
set system login retry-options tries-before-disconnect 3
set system login retry-options backoff-threshold 2Junos: filter bảo vệ routing engine trên lo0
Filter đặt ở lo0 áp cho mọi lưu lượng tới RE qua các interface revenue (trên nhiều platform cả fxp0/em0). Thiếu term cho giao thức nào thì giao thức đó chết, nên đi theo thứ tự: liệt kê đủ, commit confirmed, xem counter.
set policy-options prefix-list MGMT-NETS 198.51.100.0/24
set policy-options prefix-list TACACS-SERVERS 198.51.100.10/32
set policy-options prefix-list TACACS-SERVERS 198.51.100.11/32
set policy-options prefix-list BGP-PEERS apply-path "protocols bgp group <*> neighbor <*>"
set firewall policer ICMP-1M if-exceeding bandwidth-limit 1m
set firewall policer ICMP-1M if-exceeding burst-size-limit 15k
set firewall policer ICMP-1M then discard
set firewall family inet filter PROTECT-RE term MGMT from source-prefix-list MGMT-NETS
set firewall family inet filter PROTECT-RE term MGMT from protocol tcp
set firewall family inet filter PROTECT-RE term MGMT from destination-port [ ssh 830 ]
set firewall family inet filter PROTECT-RE term MGMT then accept
set firewall family inet filter PROTECT-RE term SNMP from source-prefix-list MGMT-NETS
set firewall family inet filter PROTECT-RE term SNMP from protocol udp
set firewall family inet filter PROTECT-RE term SNMP from destination-port snmp
set firewall family inet filter PROTECT-RE term SNMP then accept
set firewall family inet filter PROTECT-RE term TACACS from source-prefix-list TACACS-SERVERS
set firewall family inet filter PROTECT-RE term TACACS from protocol tcp
set firewall family inet filter PROTECT-RE term TACACS from source-port 49
set firewall family inet filter PROTECT-RE term TACACS then accept
set firewall family inet filter PROTECT-RE term BGP from source-prefix-list BGP-PEERS
set firewall family inet filter PROTECT-RE term BGP from protocol tcp
set firewall family inet filter PROTECT-RE term BGP from port bgp
set firewall family inet filter PROTECT-RE term BGP then accept
set firewall family inet filter PROTECT-RE term OSPF from protocol ospf
set firewall family inet filter PROTECT-RE term OSPF then accept
set firewall family inet filter PROTECT-RE term BFD from protocol udp
set firewall family inet filter PROTECT-RE term BFD from destination-port [ 3784 4784 ]
set firewall family inet filter PROTECT-RE term BFD then accept
set firewall family inet filter PROTECT-RE term NTP-DNS from protocol udp
set firewall family inet filter PROTECT-RE term NTP-DNS from source-port [ ntp domain ]
set firewall family inet filter PROTECT-RE term NTP-DNS then accept
set firewall family inet filter PROTECT-RE term ICMP from protocol icmp
set firewall family inet filter PROTECT-RE term ICMP then policer ICMP-1M
set firewall family inet filter PROTECT-RE term ICMP then accept
set firewall family inet filter PROTECT-RE term TRACEROUTE from protocol udp
set firewall family inet filter PROTECT-RE term TRACEROUTE from destination-port 33434-33534
set firewall family inet filter PROTECT-RE term TRACEROUTE then accept
set firewall family inet filter PROTECT-RE term DENY then count RE-DENY
set firewall family inet filter PROTECT-RE term DENY then syslog
set firewall family inet filter PROTECT-RE term DENY then discard
set interfaces lo0 unit 0 family inet filter input PROTECT-RE- IS-IS không phải IP nên không bị filter
family inetchặn. IPv6 cần filterfamily inet6riêng (cho phép ICMPv6 ND, BGP v6). - Term
NTP-DNStheo source-port là cách đơn giản; muốn chặt hơn thì giới hạn thêmsource-prefix-listserver NTP/DNS. - Lưu lượng trả về từ kết nối do chính router mở (vd TACACS+, BGP chiều active) cũng đi qua filter, vì vậy mới có term
TACACStheosource-port 49.
Áp dụng an toàn
! IOS XR
commit confirmed 300
! ... mở phiên SSH mới kiểm tra, rồi:
commit
# Junos
commit check
commit confirmed 5
# ... kiểm tra, rồi:
commitKiểm tra
| Mục đích | IOS XR | Junos |
|---|---|---|
| Phiên SSH đang mở | show ssh session details |
show system users |
| Quyền của user hiện tại | show user tasks |
show cli authorization |
| Trạng thái TACACS+ server | show tacacs |
show configuration system tacplus-server |
| Cấu hình management-plane / filter | show running-config control-plane |
show configuration firewall family inet filter PROTECT-RE |
| Counter / log bị chặn | show lpts pifib hardware police location 0/0/CPU0 |
show firewall filter PROTECT-RE, show firewall log |
| Port đang lắng nghe trên RP/RE | show lpts bindings brief |
show system connections |
Từ máy quản trị, thử cả hai chiều: SSH từ dải được phép (phải vào), từ dải khác (phải timeout): nc -vz -w 3 192.0.2.1 22.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách xử lý |
|---|---|---|
| Mất truy cập ngay sau commit | Thiếu local fallback, hoặc dải quản trị không có trong management-plane / lo0 filter |
Chờ commit confirmed tự rollback; luôn dùng nó khi làm từ xa |
| BGP/OSPF down sau khi áp lo0 filter | Thiếu term cho giao thức đó hoặc peer chưa nằm trong BGP-PEERS |
Xem counter RE-DENY, show firewall log; bổ sung term |
| TACACS+ timeout dù server sống | Router gửi từ sai source/VRF; lo0 filter chặn gói trả về | Đặt vrf trong server group (XR) / source-address (Junos); thêm term TACACS |
| Đăng nhập TACACS+ được nhưng không có quyền | Server chưa trả task-group (XR) / class hoặc local-user-name (Junos) |
Kiểm tra attribute trên server; show user tasks / show cli authorization |
| Ansible/NETCONF hỏng, SSH vẫn được | Management-plane chỉ cho SSH, thiếu NETCONF; lo0 thiếu port 830 | Thêm allow NETCONF / port 830; xem Ansible network troubleshooting |
| Không có dòng accounting trên server | Thiếu aaa accounting commands / accounting events |
Bật và kiểm tra log server TACACS+ |