<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Osi-Layer4 on Roduygo | Blog</title><link>/tags/osi-layer4/</link><description>Recent content in Osi-Layer4 on Roduygo | Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 21 May 2026 23:00:00 +0700</lastBuildDate><atom:link href="/tags/osi-layer4/index.xml" rel="self" type="application/rss+xml"/><item><title>IDS/IPS với Suricata &amp; Cân bằng tải</title><link>/post/ids-ips-suricata-load-balancer/</link><pubDate>Thu, 21 May 2026 23:00:00 +0700</pubDate><guid>/post/ids-ips-suricata-load-balancer/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở bài viết trước, chúng ta đã xây dựng thành công Vành đai Tường lửa (Firewall) vững chắc, nhưng Firewall truyền thống chỉ kiểm tra được lớp vỏ bên ngoài của gói tin. Để phát hiện được những mã độc nằm sâu bên trong &amp;ldquo;thùng hàng&amp;rdquo; dữ liệu và điều phối lưu lượng mạng khổng lồ, hệ thống cần được trang bị thêm &amp;ldquo;con mắt ma thuật&amp;rdquo; và &amp;ldquo;bộ não&amp;rdquo; thông minh. Hôm nay, chúng ta sẽ đi sâu vào phân tích hệ thống phát hiện/ngăn chặn xâm nhập (&lt;strong&gt;IDS/IPS&lt;/strong&gt;) với Suricata, đồng thời làm rõ nghệ thuật &lt;strong&gt;Cân bằng tải&lt;/strong&gt; (Load Balancing) ở Layer 4 và Layer 7.&lt;/p&gt;
&lt;h2 id="1-ranh-giới-giữa-quan-sát-và-hành-động-ids-vs-ips"&gt;1. Ranh giới giữa &amp;ldquo;Quan sát&amp;rdquo; và &amp;ldquo;Hành động&amp;rdquo;: IDS vs IPS
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;IDS&lt;/strong&gt; (Intrusion Detection System) và &lt;strong&gt;IPS&lt;/strong&gt; (Intrusion Prevention System) đều là các công nghệ bảo mật giúp phát hiện và cảnh báo hoạt động trái phép dựa trên chữ ký, trí tuệ nhân tạo hoặc các hành vi bất thường. Tuy nhiên, vị trí đứng và quyền sinh sát của chúng trong mạng lưới lại hoàn toàn khác nhau.&lt;/p&gt;
&lt;h3 id="11-giám-sát-thụ-động-với-ids-passive-monitoring"&gt;1.1 Giám sát thụ động với IDS (Passive Monitoring)
&lt;/h3&gt;&lt;p&gt;IDS hoạt động theo cơ chế &lt;strong&gt;Promiscuous Mode&lt;/strong&gt; (Chế độ hỗn tạp). Điều này có nghĩa là nó chỉ &lt;strong&gt;copy&lt;/strong&gt; một bản sao dữ liệu từ Switch (thông qua cổng SPAN/Mirror) để phân tích mà &lt;strong&gt;không hề can thiệp&lt;/strong&gt; vào luồng đi của gói tin gốc.&lt;/p&gt;
&lt;p&gt;Ví dụ, khi bạn đang tải một file qua FTP không bảo mật, IDS sẽ soi gói tin và phát hiện nội dung Clear-text truyền đi. Lúc này, nó sẽ kích hoạt &lt;strong&gt;Signature-based Detection&lt;/strong&gt; và bắn một Alert lên màn hình SOC: &amp;ldquo;Cảnh báo: Phát hiện truyền tin Clear-text trên cổng &lt;code&gt;21&lt;/code&gt;!&amp;rdquo;. Tuy nhiên, vì nó chỉ quan sát, tệp tin của bạn vẫn sẽ được tải về bình thường.&lt;/p&gt;
&lt;h3 id="12-kiểm-tra-trực-diện-với-ips-in-line-inspection"&gt;1.2 Kiểm tra trực diện với IPS (In-line Inspection)
&lt;/h3&gt;&lt;p&gt;Trái ngược với sự thụ động của IDS, IPS đứng ngay &lt;strong&gt;giữa đường truyền mạng&lt;/strong&gt; giống như một trạm thu phí (&lt;strong&gt;In-line Inspection&lt;/strong&gt;). Mọi gói tin bắt buộc phải đi xuyên qua thân xác nó. Nếu gói tin sạch thì được đi tiếp, còn gói tin &amp;ldquo;bẩn&amp;rdquo; chứa mã độc sẽ bị &lt;strong&gt;Drop&lt;/strong&gt; (Hủy) ngay lập tức.&lt;/p&gt;
&lt;p&gt;Trong thực tế, nếu kẻ xấu thực hiện &lt;strong&gt;Brute Force SSH&lt;/strong&gt; với hàng trăm gói tin từ một IP lạ, IPS sẽ dùng &lt;strong&gt;Statistical Anomaly-based Detection&lt;/strong&gt; để nhận diện bất thường. Nó không chỉ báo cáo mà còn tự động tạo một Rule trên tường lửa để Block/Deny IP đó ngay tức khắc, khiến kẻ tấn công chỉ nhận được thông báo &lt;code&gt;Connection timed out&lt;/code&gt;.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC:&lt;/strong&gt; Việc triển khai IPS tuy an toàn tuyệt đối nhưng lại mang rủi ro &amp;ldquo;nghẽn cổ chai&amp;rdquo; mạng hoặc chặn nhầm (&lt;strong&gt;False Positive&lt;/strong&gt;) lưu lượng hợp lệ. Trong thực tiễn vận hành SOC, các hệ thống giám sát mới sẽ luôn được chạy ở chế độ &lt;strong&gt;IDS&lt;/strong&gt; (chỉ nhận cảnh báo) một thời gian dài để &amp;ldquo;học&amp;rdquo; hành vi mạng, trước khi được chuyển sang bật chế độ &lt;strong&gt;IPS&lt;/strong&gt; (chặn cắt tự động).&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="2-thực-chiến-cấu-hình-ips-suricata-chặn-ping"&gt;2. Thực chiến cấu hình IPS Suricata chặn Ping
&lt;/h2&gt;&lt;p&gt;Để biến Suricata từ một &amp;ldquo;kẻ quan sát&amp;rdquo; thành một &amp;ldquo;vệ sĩ&amp;rdquo; thực thụ mang tính chất IPS, chúng ta phải dùng &lt;code&gt;iptables&lt;/code&gt; để tóm các gói tin ICMP (Ping) và đẩy chúng vào một hàng chờ (Queue) để Suricata trực tiếp duyệt và ra lệnh hủy.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Đẩy gói tin Ping (ICMP) chiều vào (INPUT) sang hàng chờ NFQUEUE số 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iptables -I INPUT -p icmp -j NFQUEUE --queue-num &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Đẩy gói tin Ping (ICMP) chiều ra (OUTPUT) sang hàng chờ NFQUEUE số 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iptables -I OUTPUT -p icmp -j NFQUEUE --queue-num &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Mở file rule của Suricata để thêm luật Drop ICMP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /var/lib/suricata/rules/local.rules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Khởi chạy Suricata trỏ vào file luật vừa tạo và lắng nghe trên card mạng enp7s0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo suricata -S /var/lib/suricata/rules/local.rules -i enp7s0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Theo dõi log cảnh báo và hành động chặn (Drop) theo thời gian thực&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tail -f /var/log/suricata/fast.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sau khi cấu hình, nếu bạn thực hiện lệnh &lt;code&gt;ping 8.8.8.8&lt;/code&gt;, gói tin sẽ bị tóm vào NFQUEUE. Thay vì nhận được phản hồi Ping thành công, màn hình của bạn sẽ báo &lt;code&gt;Request Timeout&lt;/code&gt;, và trong file &lt;code&gt;fast.log&lt;/code&gt; sẽ liên tục xuất hiện nhãn &lt;code&gt;[wDrop]&lt;/code&gt; chứng tỏ IPS đã ra tay chặn đứng thành công.&lt;/p&gt;
&lt;h2 id="3-nghệ-thuật-cân-bằng-tải-load-balancer"&gt;3. Nghệ thuật Cân bằng tải (Load Balancer)
&lt;/h2&gt;&lt;p&gt;Bên cạnh bảo mật, &lt;strong&gt;Cân bằng tải&lt;/strong&gt; (Load Balancing) là kỹ thuật sống còn để điều phối lưu lượng giao thông mạng, đảm bảo các máy chủ không bao giờ bị &amp;ldquo;nghẽn cổ chai&amp;rdquo; khi có lượng lớn người truy cập cùng lúc.&lt;/p&gt;
&lt;h3 id="31-cân-bằng-tải-lớp-4-l4-load-balancing"&gt;3.1 Cân bằng tải Lớp 4 (L4 Load Balancing)
&lt;/h3&gt;&lt;p&gt;Kiểu cân bằng này điều phối giao thông dựa trên giao thức TCP/UDP ở Tầng 4. Nó chỉ nhìn vào &lt;strong&gt;Địa chỉ IP Đích&lt;/strong&gt; và &lt;strong&gt;Số cổng&lt;/strong&gt; (Port) để ra quyết định — không cần quan tâm nội dung bên trong gói tin chứa cái gì. Nhờ việc không phải giải mã nội dung (Decapsulation), cách này có tốc độ xử lý cực kỳ nhanh (ví dụ: IPVS trên Linux, F5 Big-IP).&lt;/p&gt;
&lt;h3 id="32-cân-bằng-tải-lớp-7-l7-load-balancing"&gt;3.2 Cân bằng tải Lớp 7 (L7 Load Balancing)
&lt;/h3&gt;&lt;p&gt;Đây là kiểu cân bằng tải &lt;strong&gt;&amp;ldquo;thông minh&amp;rdquo;&lt;/strong&gt; hoạt động ở Tầng Ứng dụng, thường dựa trên giao thức HTTP/HTTPS. L7 Load Balancer có khả năng &amp;ldquo;soi&amp;rdquo; sâu vào nội dung của &lt;strong&gt;URL&lt;/strong&gt;, &lt;strong&gt;Header&lt;/strong&gt; hoặc &lt;strong&gt;Cookie&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nó cực kỳ linh hoạt và phù hợp cho kiến trúc Microservices. Ví dụ, nếu người dùng truy cập &lt;code&gt;ezlearn.com/api/v1/chat&lt;/code&gt;, nó sẽ đẩy sang cụm máy ảo xử lý Chat; còn nếu truy cập &lt;code&gt;ezlearn.com/static/images&lt;/code&gt;, nó lại đẩy sang cụm lưu trữ hình ảnh (ví dụ: Nginx, HAProxy).&lt;/p&gt;
&lt;h3 id="33-cân-bằng-tải-mức-dns-dns-load-balancing"&gt;3.3 Cân bằng tải mức DNS (DNS Load Balancing)
&lt;/h3&gt;&lt;p&gt;Đây là kiểu cân bằng nằm ở &amp;ldquo;vòng ngoài cùng&amp;rdquo; trước khi gói tin chạm tới hệ thống của bạn. Khi bạn gõ &lt;code&gt;google.com&lt;/code&gt;, máy chủ DNS sẽ tự động xoay vòng (&lt;strong&gt;Round Robin&lt;/strong&gt;) và trả về các địa chỉ IP khác nhau cho những người dùng khác nhau.&lt;/p&gt;
&lt;h2 id="4-demo-thực-chiến-nginx-load-balancer-round-robin"&gt;4. Demo thực chiến Nginx Load Balancer (Round Robin)
&lt;/h2&gt;&lt;p&gt;Để thấy rõ cách một L7 Load Balancer chia việc, chúng ta dùng Nginx thiết lập thuật toán &lt;strong&gt;Round Robin&lt;/strong&gt; (Chia đều) cho 2 máy chủ Python.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Bật máy chủ backend số 1 chạy nền ở cổng 8001&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -m http.server &lt;span style="color:#ae81ff"&gt;8001&lt;/span&gt; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Bật máy chủ backend số 2 chạy nền ở cổng 8002&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -m http.server &lt;span style="color:#ae81ff"&gt;8002&lt;/span&gt; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Sửa file cấu hình của Nginx để điều hướng tải giữa 2 máy chủ trên&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/nginx/conf.d/lb.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Kiểm tra xem file cấu hình Nginx có bị lỗi cú pháp không&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nginx -t
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Khởi động lại dịch vụ Nginx để áp dụng cấu hình Load Balancer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl restart nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Gửi request kiểm tra đến Nginx ở cổng 8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -I http://127.0.0.1:8080
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Với cơ chế Round Robin, mỗi request &lt;code&gt;curl&lt;/code&gt; mới sẽ được Nginx luân phiên gửi sang backend kế tiếp trong danh sách (gói thứ nhất vào &lt;code&gt;8001&lt;/code&gt;, gói thứ hai vào &lt;code&gt;8002&lt;/code&gt;). Nếu bạn dùng Wireshark với bộ lọc &lt;code&gt;http &amp;amp;&amp;amp; (tcp.port == 8001 || tcp.port == 8002)&lt;/code&gt;, bạn sẽ thấy rõ sự phân tán luồng cực kỳ nhịp nhàng này.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Việc kết hợp IDS/IPS để thanh lọc mã độc và Load Balancer để điều phối luồng truy cập giúp hệ thống mạng doanh nghiệp đạt được cả hai yếu tố: Bảo mật vững chắc và Hiệu năng tối đa. Tuy nhiên, hacker luôn tìm cách lẩn trốn, và chúng có thể dùng Proxy hoặc VPN để mã hóa toàn bộ dữ liệu, khiến cả IDS lẫn IPS đều bị &amp;ldquo;mù&amp;rdquo;. Trong Bài 13 tiếp theo, chúng ta sẽ phân tích cách VPN hoạt động ở Tầng 3 và nghệ thuật Vượt rào &amp;amp; Ẩn danh (Proxy vs VPN). Hãy cùng đón đọc nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Vành đai Tường lửa (Firewall) &amp; NAT</title><link>/post/firewall-nat-network-security/</link><pubDate>Thu, 21 May 2026 22:58:00 +0700</pubDate><guid>/post/firewall-nat-network-security/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Trong 10 bài viết trước, chúng ta đã lột tả mọi góc khuất của các giao thức mạng từ Tầng 1 đến Tầng 7 và phân tích cách hacker thao túng chúng. Giờ là lúc chúng ta chuyển từ thế bị động sang chủ động: Xây dựng các công sự bảo vệ. Hôm nay, chúng ta sẽ bắt đầu với lớp giáp kiên cố nhất của mọi hệ thống: &lt;strong&gt;Vành đai Tường lửa&lt;/strong&gt; (Firewall) và cơ chế ẩn danh nội bộ (&lt;strong&gt;NAT&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id="1-tường-lửa-firewall-là-gì-và-vị-trí-hoạt-động"&gt;1. Tường lửa (Firewall) là gì và Vị trí hoạt động
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Firewall&lt;/strong&gt; là một hệ thống bảo mật mạng đóng vai trò như một &amp;ldquo;màng lọc&amp;rdquo; khắc nghiệt, kiểm soát toàn bộ lưu lượng dữ liệu đi ra (Outbound) và đi vào (Inbound) giữa mạng nội bộ an toàn và môi trường Internet đầy rẫy hiểm nguy.&lt;/p&gt;
&lt;p&gt;Dưới góc độ triển khai, Firewall được chia thành hai loại chính:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Network Firewall:&lt;/strong&gt; Thường là thiết bị phần cứng hoặc máy chủ chuyên dụng đặt tại Gateway/Router để bảo vệ cả một mạng doanh nghiệp.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Host-based Firewall:&lt;/strong&gt; Chạy trực tiếp trên từng hệ điều hành (như &lt;strong&gt;Windows Defender Firewall&lt;/strong&gt; hoặc &lt;code&gt;firewalld&lt;/code&gt; trên Linux) để bảo vệ duy nhất chiếc máy tính đó.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Để chặn đứng các mối đe dọa, Firewall có thể hoạt động ở nhiều tầng khác nhau trong mô hình OSI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Layer 3 (Network):&lt;/strong&gt; Lọc dựa trên địa chỉ IP Nguồn/Đích (ví dụ: Chặn IP &lt;code&gt;157.240.199.35&lt;/code&gt; của Facebook).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 4 (Transport):&lt;/strong&gt; Lọc dựa trên giao thức TCP/UDP và số Cổng (ví dụ: Cấm cổng &lt;code&gt;22&lt;/code&gt; SSH).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 7 (Application):&lt;/strong&gt; Lọc dựa trên nội dung thực tế của ứng dụng (ví dụ: Chặn các truy vấn DNS độc hại hoặc các HTTP GET mang mã SQL Injection).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-nguyên-lý-hoạt-động-acl-packet-filtering-và-stateful-inspection"&gt;2. Nguyên lý hoạt động: ACL, Packet Filtering và Stateful Inspection
&lt;/h2&gt;&lt;p&gt;Sức mạnh của Firewall nằm ở một danh sách các quy tắc được định nghĩa từ trước gọi là &lt;strong&gt;ACL&lt;/strong&gt; (Access Control List). Khi một gói tin bay tới, Firewall sẽ áp dụng các cơ chế kiểm tra sau:&lt;/p&gt;
&lt;h3 id="21-lọc-gói-tin-packet-filtering"&gt;2.1 Lọc gói tin (Packet Filtering)
&lt;/h3&gt;&lt;p&gt;Firewall sẽ &amp;ldquo;soi&amp;rdquo; trực tiếp vào các lớp vỏ Header (Lớp 3 và Lớp 4) mà chúng ta đã phân tích trên Wireshark ở các bài trước. Nó kiểm tra xem địa chỉ IP và Port này có nằm trong danh sách đen (Blacklist) hay không.&lt;/p&gt;
&lt;h3 id="22-kiểm-tra-trạng-thái-stateful-inspection"&gt;2.2 Kiểm tra trạng thái (Stateful Inspection)
&lt;/h3&gt;&lt;p&gt;Những thế hệ Firewall thông minh không chỉ soi từng gói tin rời rạc, mà nó còn &lt;strong&gt;&amp;ldquo;nhớ&amp;rdquo;&lt;/strong&gt; trạng thái của cả một cuộc hội thoại. Ví dụ: Nếu nó nhớ rằng máy tính của bạn vừa gửi một gói &lt;code&gt;SYN&lt;/code&gt; ngỏ lời ra ngoài, nó sẽ tự động cho phép gói &lt;code&gt;SYN-ACK&lt;/code&gt; phản hồi từ Server đi xuyên qua tường lửa để trở về máy bạn.&lt;/p&gt;
&lt;h3 id="23-phán-quyết-actions"&gt;2.3 Phán quyết (Actions)
&lt;/h3&gt;&lt;p&gt;Sau khi đối chiếu ACL, Firewall sẽ đưa ra một trong ba phán quyết đối với gói tin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Allow / Accept:&lt;/strong&gt; Cho phép gói tin đi qua bình thường.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deny / Drop:&lt;/strong&gt; Tiêu hủy gói tin trong &lt;strong&gt;im lặng&lt;/strong&gt;. Kẻ gửi sẽ không biết gói tin đi đâu, dẫn đến việc Wireshark liên tục báo lỗi &lt;code&gt;TCP Retransmission&lt;/code&gt; do chờ mãi không thấy phản hồi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reject:&lt;/strong&gt; Hủy gói tin nhưng lịch sự gửi lại một thông báo lỗi (thường là gói tin &lt;strong&gt;ICMP&lt;/strong&gt;) báo cho kẻ gửi biết rằng &amp;ldquo;Cửa đã bị khóa&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-thực-chiến-firewall-và-bắt-bệnh-trên-wireshark"&gt;3. Thực chiến Firewall và Bắt bệnh trên Wireshark
&lt;/h2&gt;&lt;p&gt;Để minh họa sự khác biệt của phán quyết, chúng ta dùng &lt;code&gt;firewalld&lt;/code&gt; trên Linux để chặn cổng &lt;code&gt;22&lt;/code&gt; (SSH) bằng cơ chế &lt;strong&gt;REJECT&lt;/strong&gt; và xem hệ thống phản ứng ra sao.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Kiểm tra danh sách các luật (rules) đang hoạt động trên Firewall&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --list-all
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Thêm một Rich Rule để từ chối mọi kết nối TCP vào cổng 22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --add-rich-rule&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;rule family=&amp;#34;ipv4&amp;#34; port port=&amp;#34;22&amp;#34; protocol=&amp;#34;tcp&amp;#34; reject&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Reload để Tường lửa áp dụng luật mới ngay lập tức&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lúc này, nếu có kẻ cố tình truy cập vào cổng &lt;code&gt;22&lt;/code&gt; của máy bạn (&lt;code&gt;192.168.1.29&lt;/code&gt;), Wireshark sẽ không hiện lỗi gửi lại (Retransmission) mà sẽ chộp được ngay một gói tin phản hồi chí mạng ở Lớp 3:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Gói tin ICMP trả về khi Firewall áp dụng cơ chế REJECT
# Hệ thống trực tiếp đóng sập cửa và thông báo &amp;#34;Host unreachable&amp;#34;

No. Time Source Destination Protocol Info
5 2.204045407 192.168.1.29 192.168.1.29 ICMP Destination unreachable (Host unreachable)
&lt;/code&gt;&lt;/pre&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Góc nhìn SOC:&lt;/strong&gt; Thông điệp &lt;code&gt;Destination unreachable (Host unreachable)&lt;/code&gt; của ICMP chính là cách Firewall &amp;ldquo;trả lời&amp;rdquo; kẻ tấn công. Trong thực tế, Blue Team thường ưu tiên dùng quy tắc &lt;strong&gt;DROP&lt;/strong&gt; thay vì &lt;strong&gt;REJECT&lt;/strong&gt;. Việc Drop (hủy trong im lặng) sẽ làm công cụ quét mạng (Scanner) của hacker bị treo và chậm đi đáng kể do phải đợi Timeout, đồng thời không cung cấp cho chúng bất kỳ manh mối nào về việc hệ thống có Firewall hay không.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="4-nat-network-address-translation-người-hùng-giấu-mặt"&gt;4. NAT (Network Address Translation): Người hùng giấu mặt
&lt;/h2&gt;&lt;p&gt;Firewall chặn đứng các cuộc tấn công từ bên ngoài, nhưng còn một kỹ thuật khác giúp hệ thống nội bộ trở nên vô hình trên Internet: &lt;strong&gt;NAT&lt;/strong&gt;. NAT hoạt động chủ yếu ở Tầng 3 và Tầng 4, với nhiệm vụ thay đổi địa chỉ IP trong gói tin khi nó đi qua Router.&lt;/p&gt;
&lt;p&gt;Hãy xem quá trình gói tin đi từ máy tính của bạn (IP nội bộ &lt;code&gt;192.168.1.29&lt;/code&gt;) ra máy chủ Facebook (&lt;code&gt;157.240.199.35&lt;/code&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gói tin đi ra (Outbound):&lt;/strong&gt; Máy bạn gửi gói tin từ địa chỉ &lt;code&gt;192.168.1.29:56375&lt;/code&gt; tới &lt;code&gt;157.240.199.35:443&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tại Router (Quá trình dịch):&lt;/strong&gt; Router không thể đẩy dải IP &lt;code&gt;192.168.x.x&lt;/code&gt; ra Internet vì đây là dải địa chỉ &lt;strong&gt;Private&lt;/strong&gt; không được định tuyến. NAT sẽ &amp;ldquo;xóa&amp;rdquo; IP nguồn này và thay bằng IP Public của công ty (ví dụ: &lt;code&gt;113.161.x.x&lt;/code&gt;). Đồng thời, nó ghi vào &lt;strong&gt;NAT Table&lt;/strong&gt; một dòng: &amp;ldquo;Port &lt;code&gt;56375&lt;/code&gt; của máy nội bộ &lt;code&gt;.29&lt;/code&gt; đang được gán cho kết nối Facebook&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gói tin đi về (Inbound):&lt;/strong&gt; Facebook phản hồi lại địa chỉ Public &lt;code&gt;113.161.x.x:56375&lt;/code&gt;. Router nhận gói tin, dò lại NAT Table, thấy khớp Port nên tự động &amp;ldquo;dịch&amp;rdquo; ngược lại IP đích thành &lt;code&gt;192.168.1.29&lt;/code&gt; và đẩy vào máy bạn.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nhờ NAT, dù công ty bạn có hàng nghìn nhân viên, tất cả chỉ cần dùng chung một vài địa chỉ IP Public để lướt web. Hacker đứng ngoài Internet sẽ không thể nào biết được kiến trúc địa chỉ IP thực sự bên trong mạng nội bộ của bạn.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Việc triển khai vững chắc Firewall và NAT giúp che giấu và bảo vệ hạ tầng mạng của tổ chức khỏi 90% các cuộc rà quét tự động của tin tặc. Tuy nhiên, Firewall chỉ có thể soi được lớp vỏ Header, vậy nếu hacker nhét một tệp chứa mã độc vào bên trong một gói tin HTTP hợp lệ thì sao? Ở Bài 12 tiếp theo, chúng ta sẽ lắp đặt thêm &amp;ldquo;con mắt ma thuật&amp;rdquo; cho mạng lưới: Phân tích sự khác biệt giữa IDS (Giám sát thụ động) và IPS (Ngăn chặn chủ động) với công cụ Suricata. Đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>TCP và Nghệ thuật Bắt tay 3 Bước</title><link>/post/tcp-handshake/</link><pubDate>Thu, 21 May 2026 09:00:00 +0700</pubDate><guid>/post/tcp-handshake/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở bài trước, chúng ta đã thấy Tầng 2 và 3 chỉ biết tìm đường và &amp;ldquo;ném&amp;rdquo; gói tin đi mà không hề quan tâm đến sự sống chết của dữ liệu. Để đảm bảo thông tin không bị thất lạc hay lộn xộn trên môi trường Internet khắc nghiệt, chúng ta cần đến &amp;ldquo;trái tim&amp;rdquo; của sự ổn định: Giao thức TCP tại Tầng 4. Hôm nay, hãy cùng mổ xẻ cơ chế Bắt tay 3 bước kinh điển và cách dùng Wireshark để phát hiện các đòn tấn công mạng nguy hiểm.&lt;/p&gt;
&lt;h2 id="1-tầng-4-transport-và-sứ-mệnh-của-tcp"&gt;1. Tầng 4 (Transport) và Sứ mệnh của TCP
&lt;/h2&gt;&lt;p&gt;Nhiệm vụ cốt lõi của Tầng 4 (Giao vận) là kiểm soát toàn bộ quá trình truyền tải dữ liệu. Khi nhận dữ liệu từ các tầng trên, Tầng 4 sẽ thực hiện &lt;strong&gt;phân đoạn&lt;/strong&gt; (Segmentation) để chia nhỏ dữ liệu cho vừa với đường truyền, &lt;strong&gt;đánh số thứ tự&lt;/strong&gt; (Sequencing) và dùng số &lt;strong&gt;Cổng&lt;/strong&gt; (Port) để định tuyến đến đúng ứng dụng.&lt;/p&gt;
&lt;p&gt;Tại đây, hai giao thức thống trị là &lt;strong&gt;TCP&lt;/strong&gt; (Transmission Control Protocol) và &lt;strong&gt;UDP&lt;/strong&gt; (User Datagram Protocol). Việc lựa chọn giao thức nào hoàn toàn phụ thuộc vào ứng dụng ở Tầng 7. Hệ điều hành sẽ dán một cái nhãn vào IP Header ở Tầng 3 (ví dụ nhãn số &lt;code&gt;6&lt;/code&gt; cho TCP, &lt;code&gt;17&lt;/code&gt; cho UDP) để Tầng 4 biết phải lôi &amp;ldquo;bộ máy&amp;rdquo; nào ra xử lý.&lt;/p&gt;
&lt;p&gt;Trong khi UDP đề cao tốc độ bằng cách &amp;ldquo;cứ có là gửi, mất thì thôi&amp;rdquo;, thì TCP lại là biểu tượng của sự tin cậy. TCP đảm bảo mọi gói tin đều đến đúng nơi, đúng thứ tự, và nếu có bất kỳ dữ liệu nào bị mất, nó sẽ bắt buộc gửi lại (&lt;strong&gt;Retransmission&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id="2-nghệ-thuật-bắt-tay-3-bước-3-way-handshake"&gt;2. Nghệ thuật Bắt tay 3 Bước (3-Way Handshake)
&lt;/h2&gt;&lt;p&gt;Trước khi truyền đi dù chỉ một byte dữ liệu ứng dụng, TCP yêu cầu hai thiết bị phải thiết lập một kết nối vững chắc thông qua quá trình &lt;strong&gt;Bắt tay 3 bước&lt;/strong&gt;. Quá trình này diễn ra như sau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bước 1 — Gói SYN:&lt;/strong&gt; Máy Client gửi một gói tin mang cờ &lt;code&gt;SYN&lt;/code&gt; (Synchronize) với số thứ tự Sequence ban đầu để ngỏ lời kết nối. Gói này cũng khai báo &lt;code&gt;Window Size&lt;/code&gt;, báo cho Server biết: &amp;ldquo;Tôi có thể nhận tối đa 64,240 bytes dữ liệu một lúc đấy nhé&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bước 2 — Gói SYN-ACK:&lt;/strong&gt; Server đồng ý và đáp lại bằng gói &lt;code&gt;SYN, ACK&lt;/code&gt;. Cờ &lt;code&gt;ACK&lt;/code&gt; được bật để Server thông báo: &amp;ldquo;Tôi đã nhận được gói 0 của ông, tôi đang đợi gói 1 đây&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bước 3 — Gói ACK:&lt;/strong&gt; Client gửi lại gói &lt;code&gt;ACK&lt;/code&gt; cuối cùng để chốt hạ. Từ lúc này, &amp;ldquo;đường ống&amp;rdquo; đã thông suốt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="TCP handshake" class="gallery-image" data-flex-basis="326px" data-flex-grow="136" height="501" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/tcp-handshake/image.png" width="682"&gt;&lt;/p&gt;
&lt;p&gt;Dưới đây là output Wireshark bắt được khi Client &lt;code&gt;192.168.1.114&lt;/code&gt; kết nối đến Server &lt;code&gt;72.34.249.208&lt;/code&gt; qua cổng HTTPS (443):&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Lọc theo địa chỉ IP của Client và Server:
# Mẫu luồng gói tin trong Wireshark

No. Time Source Destination Protocol Info
1 0.000000 192.168.1.114 -&amp;gt; 72.34.249.208 TCP 47682 -&amp;gt; 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460
2 0.474661 72.34.249.208 -&amp;gt; 192.168.1.114 TCP 443 -&amp;gt; 47682 [SYN, ACK] Seq=0 Ack=1 Win=64512 Len=0
3 0.474780 192.168.1.114 -&amp;gt; 72.34.249.208 TCP 47682 -&amp;gt; 443 [ACK] Seq=1 Ack=1 Win=64512 Len=0
4 0.476483 192.168.1.114 -&amp;gt; 72.34.249.208 TLSv1.3 Client Hello (SNI=apex.go.sonobi.com)
&lt;/code&gt;&lt;/pre&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Ghi chú:&lt;/strong&gt; Gói số 4 cho thấy ngay sau khi bắt tay 3 bước hoàn tất, Client lập tức gửi &lt;code&gt;Client Hello&lt;/code&gt; của TLS để khởi động mã hóa. Đây là quy trình chuẩn của HTTPS.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="3-cơ-chế-đảm-bảo-toàn-vẹn-sequence--acknowledgment"&gt;3. Cơ chế Đảm bảo Toàn vẹn (Sequence &amp;amp; Acknowledgment)
&lt;/h2&gt;&lt;p&gt;Làm sao TCP biết một gói tin đã đến đích an toàn? Bí quyết nằm ở cách nó sử dụng hai con số: &lt;strong&gt;Sequence Number&lt;/strong&gt; (Số thứ tự) và &lt;strong&gt;Acknowledgment Number&lt;/strong&gt; (Số xác nhận).&lt;/p&gt;
&lt;p&gt;Khi gửi dữ liệu, Tầng 4 sẽ tính toán dựa trên số lượng byte. Nếu gói tin thứ nhất mang 500 byte dữ liệu và có &lt;code&gt;Seq=1&lt;/code&gt;, thì gói tin thứ hai sẽ được đánh số &lt;code&gt;Seq=501&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Khi máy đích nhận được gói thứ nhất, nó sẽ phản hồi bằng một gói có &lt;code&gt;Ack=501&lt;/code&gt;, mang hàm ý: &amp;ldquo;Tôi đã nhận đủ 500 byte, hãy gửi tiếp cho tôi dữ liệu từ byte 501 trở đi&amp;rdquo;. Nếu Server không gửi Acknowledgment phản hồi sau một khoảng thời gian chờ, máy gửi sẽ tự động thực hiện gửi lại gói tin đó (&lt;strong&gt;Fast Retransmit&lt;/strong&gt; hoặc &lt;strong&gt;RTO&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id="4-bắt-bệnh-mạng-và-cảnh-báo-soc-bằng-wireshark"&gt;4. Bắt bệnh Mạng và Cảnh báo SOC bằng Wireshark
&lt;/h2&gt;&lt;p&gt;Với cơ chế khắt khe của TCP, Wireshark cung cấp cho SOC Analyst các bộ lọc cực kỳ mạnh mẽ để &amp;ldquo;bắt bệnh&amp;rdquo; hệ thống khi mạng bị chậm hoặc gặp sự cố:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mất gói (Retransmission):&lt;/strong&gt; Bộ lọc &lt;code&gt;tcp.analysis.retransmission&lt;/code&gt; sẽ hiển thị các dòng chữ màu đỏ cảnh báo gói tin phải gửi lại do không nhận được ACK.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thiếu mảnh dữ liệu (Duplicate ACK):&lt;/strong&gt; Dùng bộ lọc &lt;code&gt;tcp.analysis.duplicate_ack&lt;/code&gt;. Bạn sẽ thấy máy nhận liên tục gửi các gói ACK có cùng một số hiệu để &amp;ldquo;gào thét&amp;rdquo; đòi mảnh dữ liệu bị rớt ở giữa luồng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hệ thống bị ngộp (Zero Window):&lt;/strong&gt; Bộ lọc &lt;code&gt;tcp.analysis.zero_window&lt;/code&gt; phát hiện khi thiết bị nhận đã cạn kiệt bộ nhớ đệm. Nó sẽ ném ra gói tin này để ép máy gửi phải dừng truyền ngay lập tức (cơ chế &lt;strong&gt;Flow Control&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC — Tấn Công SYN Flood:&lt;/strong&gt; Hacker rất thích lợi dụng sự &amp;ldquo;kỹ tính&amp;rdquo; trong quá trình Bắt tay 3 bước của TCP để thực hiện tấn công từ chối dịch vụ (DDoS). Bằng cách bắn hàng vạn gói &lt;code&gt;SYN&lt;/code&gt; giả mạo vào Server nhưng tuyệt đối không bao giờ trả lời bằng gói &lt;code&gt;ACK&lt;/code&gt; cuối cùng, Server sẽ bị treo cứng vì cạn kiệt tài nguyên để chờ đợi những cái &amp;ldquo;bắt tay&amp;rdquo; không bao giờ hoàn tất. Bộ lọc phát hiện nhanh: &lt;code&gt;tcp.flags.syn == 1 &amp;amp;&amp;amp; tcp.flags.ack == 0&lt;/code&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Như vậy, việc thấu hiểu nhịp đập của &amp;ldquo;Trái tim&amp;rdquo; TCP giúp chúng ta phân biệt được một sự cố mạng do đường truyền kém với một cuộc tấn công từ chối dịch vụ có chủ đích. Ở Tầng 4, chúng ta mới chỉ quản lý được các cổng (Port), nhưng để duy trì trạng thái đăng nhập liên tục của người dùng, chúng ta cần tiến lên một bậc nữa. Trong Bài 4 tiếp theo, hãy cùng khám phá Lớp 5 (Session) và các kỹ thuật cướp phiên (Session Hijacking) tinh vi của Hacker. Đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>