Trong bài viết tuần này, chúng ta sẽ cùng tìm hiểu về một tính năng bảo mật được tích hợp trên Cisco IOS – tính năng TCP Intercept. Tính năng này khi được bật lên có thể sử dụng để chống lại phương thức tấn công SYN flood trên những kết nối TCP đi ngang qua router.
Như thường lệ, chúng ta sẽ cùng tìm hiểu vấn đề cần quan tâm thông qua một bài lab ví dụ:
Sơ đồ

Trên sơ đồ lab là một phần của một mạng doanh nghiệp. Phần này gồm hai chi nhánh R1 và R2 được đấu nối với nhau bởi một link Ethernet với subnet IP 192.168.12.0/24. Chi nhánh R1 sử dụng cổng F0/0 đấu nối xuống một mạng LAN 1 với subnet 192.168.1.0/24, chi nhánh R2 sử dụng cổng F0/1 đấu nối xuống mạng LAN 2 với subnet 192.168.2.0/24.
Giả thiết rằng một số TCP server quan trọng của doanh nghiệp được đặt trong mạng LAN 1 và các server này đang phải hứng chịu những cuộc tấn công SYN Flood từ phía bên ngoài vào LAN 1. Ta sẽ thực hiện cấu hình tính năng TCP Intercept trên router R1 để chống lại những cuộc tấn công này.
Router R3 được sử dụng cho mục đích kiểm tra cấu hình đã thực hiện.
Các router được sử dụng trong bài lab này là các router 2811 của Cisco với hệ điều hành được sử dụng là “c2800nm-adventerprisek9-mz.124-15.T1.bin”.
Thực hiện
Bước 1: Cấu hình ban đầu cho sơ đồ lab
Đặt địa chỉ IP trên các cổng của router theo quy hoạch IP được chỉ ra trên hình 1.
Cấu hình định tuyến RIPv2 trên hai router R1 và R2, đảm bảo mọi địa chỉ trên hai chi nhánh R1 và R2 thấy nhau.
Cấu hình
Trên R1:
R1(config)#interface f0/0
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#exit
R1(config)#interface f0/1
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.12.1 255.255.255.0
R1(config-if)#exit
R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#no auto-summary
R1(config-router)#network 192.168.12.0
R1(config-router)#network 192.168.1.0
R1(config-router)#exit
Trên R2:
R2(config)#interface f0/0
R2(config-if)#no shutdown
R2(config-if)#ip address 192.168.12.2 255.255.255.0
R2(config-if)#exit
R2(config)#interface f0/1
R2(config-if)#no shutdown
R2(config-if)#ip address 192.168.2.1 255.255.255.0
R2(config-if)#exit
R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#no auto-summary
R2(config-router)#network 192.168.12.0
R2(config-router)#network 192.168.2.0
R2(config-router)#exit
Ta cấu hình R3 đóng vai trò như một host trên LAN 1:
R3(config)#interface f0/0
R3(config-if)#no shutdown
R3(config-if)#ip address 192.168.1.3 255.255.255.0
R3(config-if)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.1
Kiểm tra
Ta kiểm tra rằng định tuyến đã hội tụ trên hai router R1 và R2:
R1#show ip route rip
R 192.168.2.0/24 [120/1] via 192.168.12.2, 00:00:08, FastEthernet0/1
R2#show ip route rip
R 192.168.1.0/24 [120/1] via 192.168.12.1, 00:00:10, FastEthernet0/0
Các địa chỉ đã đi đến được nhau:
R1#ping 192.168.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/35/64 ms
R2#ping 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/40/48 ms
R2#ping 192.168.1.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 52/70/88 ms
Bước 2: Cấu hình TCP Intercept
Giả sử rằng trên subnet 192.168.1.0/24 có đặt một số TCP server quan trọng của doanh nghiệp (ví dụ: FTP, HTTP server,…). Cấu hình R1 bảo vệ các TCP server này chống lại các cuộc tấn công SYN Flood từ hướng R2.
Kiểm tra các kết nối đi đến các server và đóng các kết nối này nếu trong 30s không có hoạt động nào cả (inactivity).
Cấu hình
Trên R1:
R1(config)#access-list 100 permit ip any 192.168.1.0 0.0.0.255
R1(config)#ip tcp intercept list 100
R1(config)#ip tcp intercept connection-timeout 30
Lưu ý: Trong quá trình cấu hình TCP Intercept ta sẽ gặp thông báo “command accepted, interfaces with mls configured might cause inconsistent behavior”; ta có thể bỏ qua thông báo này vì đây là cảnh báo cho biết sẽ có những hoạt
động không ổn định khi ta thực hiện tính năng này trên switch lớp 3 có cấu hình QoS; trong khi ta đang thực hiện cấu hình tính năng này trên router.
Ghi chú
Tấn công SYN Flood là loại tấn công mà kẻ tấn công gửi một số lượng lớn các gói SYN đến TCP server mà không gửi ACK để hoàn thành tiến trình bắt tay 3 bước. Server sẽ nhanh chóng bị hao tốn tài nguyên và sẽ không còn có thể tiếp nhận các kết nối đến từ các client hợp lệ. Tính năng TCP Intercept cho phép chúng ta sử dụng router đứng trung gian giữa client và server bảo vệ server chống lại các cuộc tấn công SYN Flood.
Có hai mode hoạt đông cho tính năng TCP Intercept:
Intercept mode: Ở mode này router hoạt động như một “TCP proxy” đứng giữa router và client. Đầu tiên khi nhận được gói SYN từ client, router ngay lập tức gửi SYN + ACK cho client. Khi router nhận được ACK từ client (hoàn thành một nửa
kết nối), nó tiếp tục gửi SYN đến server, nhận SYN + ACK từ server, trả lời ACK cho server (hoàn thành nửa còn lại của kết nối). Khi hai nửa đã hoàn thành, router “ghép” hai nửa này lại với nhau một cách trong suốt với cả client và server và giám sát kết nối này.
Watch mode: Ở mode này router không làm proxy mà chỉ theo dõi kết nối TCP giữa client và server mà đi ngang qua nó.
Khi router gửi đi SYN + ACK về phía client mà không nhận được hổi đáp (ACK từ client), router sẽ tiếp tục truyền lại gói đã gửi (SYN + ACK) thêm 4 lần: chờ 1s rồi gửi gói thứ 2, chờ tiếp 2s rồi gửi gói thứ 3, chờ tiếp 4s rồi gửi gói thứ 4, chờ tiếp 8s rồi gửi gói thứ 5 và chờ tiếp 16s nữa. Mất tổng cộng là 31s kể từ khi gửi đi gói đầu tiên. Sau khoảng thời gian này, router gửi RST về cả hai phía xóa bỏ kết nối.
Ta có thể cấu hình một số thiết lập cho TCP Intercept:
Chọn mode cho hoạt động TCP Intercept:
R(config)#ip tcp intercept mode {intercept | watch}
Trong đó “intercept” là mode mặc định. Nếu sử dụng mode này, ta không cần phải cấu hình. Trong bài lab này, ta sử dụng Intercept mode.
Chọn kết nối theo dõi:
R(config)#ip tcp intercept list ACL
Chỉ những kết nối nào được permit trong access – list ACL mới được theo dõi. Các kết nối không được permit trong access – list này sẽ được bypass. Trong bài lab này, ta chỉ theo dõi mọi kết nối TCP đi đến subnet 192.168.1.0/24.
Khoảng thời gian timeout cho các kết nối inactive: là khoảng thời gian mà tính năng TCP Intercept duy trì một kết nối không hoạt động gì cả (inactive). Sau khoảng thời gian này, router sẽ gửi RST cho cả server và client để xóa bỏ kết nối inactive.
R(config)#ip tcp intercept connection-timeout seconds
Kiểm tra
Ta thực hiện cấu hình Telnet trên router R3 và thực hiện telnet từ R2 vào R3 đi ngang qua R1 để khảo sát hoạt động TCP Intercept (Telnet chạy trên nền TCP sử dụng port 23).
Cấu hình telnet trên R3:
R3(config)#line vty 0 4
R3(config-line)#password cisco
R3(config-line)#login
R3(config-line)#exit
R3(config)#enable password cisco
Thực hiện debug trên R1:
R1#debug ip tcp intercept
TCP intercept debugging is on
Từ R2, ta thực hiện telnet đến R3:
R2#telnet 192.168.1.3
Trying 192.168.1.3 ... Open
User Access Verification
Password: <- Password là “cisco”
R3>enable
Password: <- Password là “cisco”
R3#
R1 sẽ thực hiện theo dõi kết nối TCP này, chen vào giữa, xây dựng hai nửa kết nối đến client R2 và server R3 rồi ghép hai nửa này lại với nhau. Hoạt động này trong suốt với R2 và R3:
*Mar 1 00:21:02.271: INTERCEPT: new connection (192.168.12.2:33140 SYN -> 192.168.1.3:23)
*Mar 1 00:21:02.279: INTERCEPT(*): (192.168.12.2:33140 <- ACK+SYN 192.168.1.3:23)
*Mar 1 00:21:02.363: INTERCEPT: 1st half of connection is established (192.168.12.2:33140 ACK -> 192.168.1.3:23)
*Mar 1 00:21:02.363: INTERCEPT(*): (192.168.12.2:33140 SYN -> 192.168.1.3:23)
*Mar 1 00:21:02.407: INTERCEPT: 2nd half of connection established (192.168.12.2:33140 <- ACK+SYN 192.168.1.3:23)
*Mar 1 00:21:02.415: INTERCEPT(*): (192.168.12.2:33140 ACK -> 192.168.1.3:23)
*Mar 1 00:21:02.419: INTERCEPT(*): (192.168.12.2:33140 <- WINDOW 192.168.1.3:23)
Nếu ta không thực hiện hoạt động gì thêm sau khi khởi tạo kết nối telnet, kết nối này sẽ được R1 giải phóng sau khoảng thời gian inactivity 30s bằng cách gửi thông điệp RST về cả hai phía client R2 và server R3:
*Mar 1 00:21:39.975: INTERCEPT: ESTAB timing out (192.168.12.2:33140 <-> 192.168.1.3:23)
*Mar 1 00:21:39.979: INTERCEPT(*): (192.168.12.2:33140 <- RST 192.168.1.3:23)
*Mar 1 00:21:39.983: INTERCEPT(*): (192.168.12.2:33140 RST -> 192.168.1.3:23)
Ta tiếp tục kiểm tra rằng tính năng TCP Intercept có thể chống được tấn công SYN flood. Để thực hiện điều này, ta giả lập hoạt động SYN flood bằng cách chặn thông điệp ACK gửi đến từ R2 trên cổng F0/1 của R1. Ta sử dụng một access – list cho hoạt động này:
R1(config)#ip access-list extended DENY_ACK
R1(config-ext-nacl)#deny tcp any any established
R1(config-ext-nacl)#permit ip any any
R1(config-ext-nacl)#exit
R1(config)#interface f0/1
R1(config-if)#ip access-group DENY_ACK in
R1(config-if)#exit
Ta thực hiện telnet từ R2 đến R3:
R2#telnet 192.168.1.3
Trying 192.168.1.3 ...
Kết quả debug trên R1:
*Mar 1 00:33:25.015: INTERCEPT: new connection (192.168.12.2:12276 SYN -> 192.168.1.3:23)
*Mar 1 00:33:25.023: INTERCEPT(*): (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar 1 00:33:26.023: INTERCEPT(*): SYNRCVD retransmit 1 (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar 1 00:33:28.023: INTERCEPT(*): SYNRCVD retransmit 2 (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar 1 00:33:32.023: INTERCEPT(*): SYNRCVD retransmit 3 (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar 1 00:33:40.023: INTERCEPT(*): SYNRCVD retransmit 4 (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar 1 00:33:56.023: INTERCEPT: SYNRCVD retransmitting too long (192.168.12.2:12276 <-> 192.168.1.3:23)
*Mar 1 00:33:56.027: INTERCEPT(*): (192.168.12.2:12276 <- RST 192.168.1.3:23)
Ta thấy R1 theo dõi kết nối này và nhận thấy rằng SYN + ACK mà nó trả về cho client R2 không nhận được ACK hồi âm. R1 tiếp tục thử lại thêm 4 lần nữa không có kết quả và cuối cùng thực hiện gửi RST cho client R2 ngắt kết nối TCP không hoàn tất. Ta thấy, R1 đã thực hiện tốt tính năng TCP Intercept.
Trên đây, chúng ta đã cùng trao đổi về tính năng TCP Intercept trên router dùng để chống lại kiểu tấn công SYN Flood.
Cảm ơn các bạn!
Hẹn gặp lại các bạn trong các bài viết tiếp theo!