Sổ tay kỹ thuật

Hardening thiết bị mạng – AAA/TACACS+, SSH, mgmt ACL, bảo vệ control-plane (IOS XR, Junos)

how-to#iosxr#junos#tacacs#security· cập nhật 2026-11-06

Dùng khi đưa router IOS XR hoặc Junos vào vận hành và cần chuẩn hoá đăng nhập qua TACACS+, chỉ cho SSH/NETCONF từ dải quản trị, và lọc lưu lượng tới routing engine.

Sửa trang này
Mục lục

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+

IOS XR - AAA
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

IOS XR - SSH
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:

IOS XR - management-plane
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-plane thì 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+

Junos - AAA
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 remote là 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, vd netops class super-user).
  • password trong authentication-order cho 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

Junos - 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 2

Junos: 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.

Junos - lo0 filter
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 inet chặn. IPv6 cần filter family inet6 riêng (cho phép ICMPv6 ND, BGP v6).
  • Term NTP-DNS theo source-port là cách đơn giản; muốn chặt hơn thì giới hạn thêm source-prefix-list server 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 TACACS theo source-port 49.

Áp dụng an toàn

Áp dụng
! 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:
commit

Kiể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+

Tham khảo