[{"data":1,"prerenderedAt":1057},["ShallowReactive",2],{"search-posts-dataset":3,"post-detail-/posts/ufw-firewall-basics":159,"all-published-articles-list":996,"series-posts-/posts/ufw-firewall-basics":1056},[4,20,35,48,62,75,87,99,111,122,135,149],{"path":5,"title":6,"description":7,"categories":8,"tags":11,"date":16,"image":17},"/posts/incident-checklist","Checklist xử lí sự cố máy chủ Linux: Phục hồi sau thảm họa","Qui trình phản ứng và xử lí sự cố máy chủ Linux khi hệ thống bị sập, tràn RAM/HDD hoặc nghi ngờ bị xâm nhập: Các bước chuẩn đoán, cô lập, phân tích log và khôi phục.",[9,10],"linux","devops",[12,13,14,15],"incident","troubleshooting","security","sysadmin","2026-08-15T00:00:00.000Z",{"src":18,"alt":19},"/img/incident-response.webp","Xử lí sự cố máy chủ Linux",{"path":21,"title":22,"description":23,"categories":24,"tags":27,"date":31,"image":32},"/posts/backup-postgres-docker","Sao lưu tự động PostgreSQL trong Docker với cron job và gzip","Hướng dẫn xây dựng script tự động backup database PostgreSQL chạy trong Docker container: gzip, cron hàng ngày, tự động xóa bản sao lưu cũ và kiểm thử phục hồi.",[25,26],"docker","database",[28,29,30,10],"postgresql","backup","automation","2025-10-20T00:00:00.000Z",{"src":33,"alt":34},"/img/postgres-backup.webp","Sao lưu tự động PostgreSQL Docker",{"path":36,"title":37,"description":38,"categories":39,"tags":40,"date":44,"image":45},"/posts/docker-compose-production","Thiết kế Docker compose chuẩn Production","Hướng dẫn thực chiến xây dựng docker-compose.yml hoàn chỉnh cho Production: healthchecks, restart policies, resource limits, quản lí .env và Persistent Volumes",[25,10],[41,42,43],"production","compose","backend","2025-10-15T00:00:00.000Z",{"src":46,"alt":47},"/img/docker-compose.webp","Docker Compose Production Best Practices",{"path":49,"title":50,"description":51,"categories":52,"tags":53,"date":58,"image":59},"/posts/monitoring-server-basics","Giám sát server Linux từ cơ bản đến nâng cao: htop, ncdu, prometheus và Uptime Kuma","Cẩm nang toàn diện về giám sát hiệu năng máy chủ Linux: Khai thác công cụ CLI thời gian thực (Htop, Btop, Ncdu), thiết lập hệ thống cảnh báo sự cố Uptime Kuma qua Telegram và thu thập chỉ số với Prometheus & Grafana.",[9,10],[54,55,56,57],"monitoring","grafana","prometheus","uptime","2024-10-18T00:00:00.000Z",{"src":60,"alt":61},"/img/monitoring.webp","Giám sát máy chủ Linux",{"path":63,"title":64,"description":65,"categories":66,"tags":68,"date":71,"image":72},"/posts/nginx-reverse-proxy","Hướng dẫn cấu hình Nginx Reverse Proxy với SSL Certbot và Docker chuẩn Production","Cẩm nang toàn diện cấu hình Nginx Reverse Proxy trên Ubuntu: Tích hợp chứng chỉ SSL Let's Encrypt miễn phí qua Certbot, hỗ trợ WebSockets, HTTP/2, nén Brotli/Gzip và Rate Limiting chống DDoS.",[9,67],"nginx",[10,69,70],"ssl","webserver","2024-10-10T00:00:00.000Z",{"src":73,"alt":74},"/img/nginx.webp","Nginx Reverse Proxy với SSL",{"path":76,"title":77,"description":78,"categories":79,"tags":80,"date":83,"image":84},"/posts/how-to-secure-a-vps","Bảo mật máy chủ Linux VPS: Cẩm nang toàn diện 8 bước chống tấn công","Hướng dẫn thực chiến từng bước thiết lập bảo mật máy chủ Linux VPS mới: Vô hiệu hóa mật khẩu SSH, thiết lập SSH Key Ed25519, cấu hình Fail2ban, tường lửa UFW và cập nhật tự động Unattended-Upgrades.",[9,14],[81,82,10],"vps","hardening","2024-10-05T00:00:00.000Z",{"src":85,"alt":86},"/img/linux-security.webp","Bảo mật máy chủ Linux VPS",{"path":88,"title":89,"description":90,"categories":91,"tags":92,"date":95,"image":96},"/posts/systemd-node-service","Quản lí ứng dụng Node.js trong Production với Systemd Service và Journalctl","Hướng dẫn triển khai ứng dụng Node.js, Go hoặc Python dưới dạng Systemd Service trên Linux: Tự động khởi động lại khi crash, quản lý biến môi trường, giới hạn bộ nhớ RAM và theo dõi log thời gian thực với Journalctl.",[9,10],[93,94,43,41],"systemd","nodejs","2024-10-01T00:00:00.000Z",{"src":97,"alt":98},"/img/systemd.webp","Quản lý ứng dụng với Systemd Service",{"path":100,"title":101,"description":102,"categories":103,"tags":104,"date":107,"image":108},"/posts/how-to-install-docker-on-ubuntu-server","Hướng dẫn cài đặt Docker & Docker compose trên Ubuntu server","Hướng dẫn toàn diện cách cài đặt Docker Engine và Docker Compose V2 trên Ubuntu Server, cấu hình bảo mật non-root user, tối ưu daemon và xử lí xung đột tường lửa UFW",[9,25],[105,10,106],"beginner","ubuntu","2024-09-30T00:00:00.000Z",{"src":109,"alt":110},"/img/docker.webp","Cài đặt Docker trên Ubuntu Server",{"path":112,"title":113,"description":114,"categories":115,"tags":116,"date":118,"image":119},"/posts/ssh-key-authentication","Xác thực SSH Key từ cơ bản đến nâng cao: Ed25519, SSH Config và Bảo mật đa tầng","Cẩm nang toàn diện về xác thực SSH Key trên máy chủ Linux: So sánh Ed25519 vs RSA, cấu hình SSH Config quản lí hàng chục VPS, chuyển tiếp Agent Forwarding, và các qui tắc bảo mật chống lộ khóa.",[9,14],[117,10,15],"ssh","2024-09-25T00:00:00.000Z",{"src":120,"alt":121},"/img/ssh-keys.webp","Xác thực SSH Key Linux",{"path":123,"title":124,"description":125,"categories":126,"tags":127,"date":131,"image":132},"/posts/ufw-firewall-basics","Làm chủ tường lửa UFW trên Linux: Qui tắc, giới hạn kết nối và xử lí xung đột Docker","Hướng dẫn toàn diện làm chủ tường lửa UFW (Uncomplicated Firewall) trên Ubuntu: Thiết lập chính sách mặc định, mở cổng theo IP, giới hạn brute-force (Rate Limiting) và khắc phục lỗi Docker bypass tường lửa.",[9,14],[128,129,130,15],"ufw","firewall","networking","2024-09-20T00:00:00.000Z",{"src":133,"alt":134},"/img/ufw-firewall.webp","Cấu hình Tường lửa UFW Linux",{"path":136,"title":137,"description":138,"categories":139,"tags":141,"date":145,"image":146},"/posts/git-deploy-key","Tự động hóa triển khai với Git deploy keys: Thiết lập an toàn cho GitHub và GitLab","Hướng dẫn thiết lập Git Deploy Key chuẩn bảo mật để kéo mã nguồn tự động từ GitHub hoặc GitLab về máy chủ Production: Phân quyền Read-Only, cấu hình SSH Config và tích hợp Webhook tự động cập nhật.",[140,10],"git",[142,143,144,30],"github","gitlab","cicd","2024-09-18T00:00:00.000Z",{"src":147,"alt":148},"/img/git-deploy.webp","Git Deploy Keys cho máy chủ",{"path":150,"title":151,"description":152,"categories":153,"tags":154,"date":155,"image":156},"/posts/ubuntu-server-initial-setup","Qui trình thiết lập ban đầu cho Ubuntu Server: Swap, Timezone, User và Firewall","Hướng dẫn các bước thiết lập chuẩn mực ban đầu cho máy chủ Ubuntu Server mới: Cấu hình múi giờ Việt Nam (Asia/Ho_Chi_Minh), tạo phân vùng RAM ảo (Swap File), phân quyền Sudoer và kích hoạt tường lửa UFW.",[9],[106,105,15],"2024-09-15T00:00:00.000Z",{"src":157,"alt":158},"/img/ubuntu.webp","Thiết lập ban đầu Ubuntu Server",{"id":160,"title":124,"author":161,"body":162,"categories":984,"date":131,"description":125,"draft":985,"extension":986,"image":987,"meta":988,"navigation":261,"path":123,"seo":989,"series":990,"series_order":990,"slug":991,"stem":992,"tags":993,"updated":994,"__hash__":995},"post/posts/ufw-firewall-basics.md","Duong Thu",{"type":163,"value":164,"toc":963},"minimal",[165,170,189,198,204,207,211,218,284,286,290,297,394,399,406,421,428,436,438,442,445,459,470,473,490,493,499,501,505,508,512,555,559,582,586,612,614,618,625,646,648,652,655,671,674,680,683,700,702,706,710,730,734,741,746,780,783,798,801,819,826,845,847,851,942,944,948,959],[166,167,169],"h2",{"id":168},"giới-thiệu-về-ufw-tường-lửa-thân-thiện-của-linux","Giới thiệu về UFW: Tường lửa thân thiện của Linux",[171,172,173,174,181,182,185,186,188],"p",{},"Trên hệ điều hành Linux, công cụ quản lý gói tin mạng gốc là ",[175,176,177],"strong",{},[178,179,180],"code",{},"iptables"," (hoặc ",[178,183,184],{},"nftables"," trong các bản phân phối mới). Mặc dù ",[178,187,180],{}," cực kỳ mạnh mẽ và linh hoạt, cú pháp của nó lại vô cùng phức tạp và dễ gây nhầm lẫn dẫn đến việc người quản trị vô tình khóa chính mình ra khỏi máy chủ.",[171,190,191,194,195,197],{},[175,192,193],{},"UFW (Uncomplicated Firewall)"," được phát triển bởi Canonical nhằm cung cấp một giao diện dòng lệnh đơn giản, trực quan và an toàn để quản lý ",[178,196,180],{},".",[171,199,200,201,197],{},"Trong bài viết này, chúng ta sẽ đi sâu vào cách làm chủ UFW từ các lệnh cơ bản nhất, cấu hình mở cổng theo IP nguồn, giới hạn tốc độ chống brute-force và giải quyết triệt để vấn đề nan giải: ",[175,202,203],{},"Docker tự động bypass tường lửa UFW",[205,206],"hr",{},[166,208,210],{"id":209},"_1-thiết-lập-chính-sách-tường-lửa-mặc-định-default-policies","1. Thiết lập Chính sách Tường lửa Mặc định (Default Policies)",[171,212,213,214,217],{},"Một quy tắc vàng trong an ninh mạng là áp dụng mô hình ",[175,215,216],{},"Zero Trust",": Chặn toàn bộ lưu lượng truy cập từ ngoài vào (Incoming) và chỉ mở từng cổng cụ thể theo danh sách cho phép (Whitelist), trong khi cho phép toàn bộ lưu lượng từ trong máy chủ đi ra (Outgoing).",[219,220,225],"pre",{"className":221,"code":222,"language":223,"meta":224,"style":224},"language-bash shiki shiki-themes github-dark github-dark github-dark","# Chặn toàn bộ kết nối đi vào\nsudo ufw default deny incoming\n\n# Cho phép toàn bộ kết nối đi ra\nsudo ufw default allow outgoing\n","bash","",[178,226,227,236,256,263,269],{"__ignoreMap":224},[228,229,232],"span",{"class":230,"line":231},"line",1,[228,233,235],{"class":234},"sGGCZ","# Chặn toàn bộ kết nối đi vào\n",[228,237,239,243,247,250,253],{"class":230,"line":238},2,[228,240,242],{"class":241},"sb7EE","sudo",[228,244,246],{"class":245},"skqr8"," ufw",[228,248,249],{"class":245}," default",[228,251,252],{"class":245}," deny",[228,254,255],{"class":245}," incoming\n",[228,257,259],{"class":230,"line":258},3,[228,260,262],{"emptyLinePlaceholder":261},true,"\n",[228,264,266],{"class":230,"line":265},4,[228,267,268],{"class":234},"# Cho phép toàn bộ kết nối đi ra\n",[228,270,272,274,276,278,281],{"class":230,"line":271},5,[228,273,242],{"class":241},[228,275,246],{"class":245},[228,277,249],{"class":245},[228,279,280],{"class":245}," allow",[228,282,283],{"class":245}," outgoing\n",[205,285],{},[166,287,289],{"id":288},"_2-mở-cổng-kết-nối-cơ-bản-hỗ-trợ-giao-thức-ipv6","2. Mở cổng kết nối cơ bản & Hỗ trợ giao thức IPv6",[171,291,292,293,296],{},"Trước khi bật tường lửa, bạn ",[175,294,295],{},"BẮT BUỘC PHẢI MỞ CỔNG SSH"," để không bị ngắt kết nối:",[219,298,300],{"className":221,"code":299,"language":223,"meta":224,"style":224},"# Cho phép cổng SSH mặc định (Port 22)\nsudo ufw allow 22/tcp comment 'SSH standard'\n\n# Nếu bạn đã đổi cổng SSH sang 2222:\nsudo ufw allow 2222/tcp comment 'SSH custom'\n\n# Cho phép dịch vụ Web (HTTP cổng 80 & HTTPS cổng 443)\nsudo ufw allow 80/tcp comment 'HTTP Web'\nsudo ufw allow 443/tcp comment 'HTTPS Web'\n",[178,301,302,307,324,328,333,349,354,360,377],{"__ignoreMap":224},[228,303,304],{"class":230,"line":231},[228,305,306],{"class":234},"# Cho phép cổng SSH mặc định (Port 22)\n",[228,308,309,311,313,315,318,321],{"class":230,"line":238},[228,310,242],{"class":241},[228,312,246],{"class":245},[228,314,280],{"class":245},[228,316,317],{"class":245}," 22/tcp",[228,319,320],{"class":245}," comment",[228,322,323],{"class":245}," 'SSH standard'\n",[228,325,326],{"class":230,"line":258},[228,327,262],{"emptyLinePlaceholder":261},[228,329,330],{"class":230,"line":265},[228,331,332],{"class":234},"# Nếu bạn đã đổi cổng SSH sang 2222:\n",[228,334,335,337,339,341,344,346],{"class":230,"line":271},[228,336,242],{"class":241},[228,338,246],{"class":245},[228,340,280],{"class":245},[228,342,343],{"class":245}," 2222/tcp",[228,345,320],{"class":245},[228,347,348],{"class":245}," 'SSH custom'\n",[228,350,352],{"class":230,"line":351},6,[228,353,262],{"emptyLinePlaceholder":261},[228,355,357],{"class":230,"line":356},7,[228,358,359],{"class":234},"# Cho phép dịch vụ Web (HTTP cổng 80 & HTTPS cổng 443)\n",[228,361,363,365,367,369,372,374],{"class":230,"line":362},8,[228,364,242],{"class":241},[228,366,246],{"class":245},[228,368,280],{"class":245},[228,370,371],{"class":245}," 80/tcp",[228,373,320],{"class":245},[228,375,376],{"class":245}," 'HTTP Web'\n",[228,378,380,382,384,386,389,391],{"class":230,"line":379},9,[228,381,242],{"class":241},[228,383,246],{"class":245},[228,385,280],{"class":245},[228,387,388],{"class":245}," 443/tcp",[228,390,320],{"class":245},[228,392,393],{"class":245}," 'HTTPS Web'\n",[395,396,398],"h3",{"id":397},"đảm-bảo-ufw-hỗ-trợ-cả-ipv4-và-ipv6","Đảm bảo UFW hỗ trợ cả IPv4 và IPv6",[171,400,401,402,405],{},"Mở file cấu hình ",[178,403,404],{},"/etc/default/ufw",":",[219,407,409],{"className":221,"code":408,"language":223,"meta":224,"style":224},"sudo nano /etc/default/ufw\n",[178,410,411],{"__ignoreMap":224},[228,412,413,415,418],{"class":230,"line":231},[228,414,242],{"class":241},[228,416,417],{"class":245}," nano",[228,419,420],{"class":245}," /etc/default/ufw\n",[171,422,423,424,427],{},"Đảm bảo dòng ",[178,425,426],{},"IPV6=yes"," được kích hoạt:",[219,429,434],{"className":430,"code":432,"language":433,"meta":224},[431],"language-text","IPV6=yes\n","text",[178,435,432],{"__ignoreMap":224},[205,437],{},[166,439,441],{"id":440},"_3-kích-hoạt-và-kiểm-tra-trạng-thái-tường-lửa","3. Kích hoạt và Kiểm tra trạng thái Tường lửa",[171,443,444],{},"Bây giờ bạn có thể an tâm bật UFW:",[219,446,448],{"className":221,"code":447,"language":223,"meta":224,"style":224},"sudo ufw enable\n",[178,449,450],{"__ignoreMap":224},[228,451,452,454,456],{"class":230,"line":231},[228,453,242],{"class":241},[228,455,246],{"class":245},[228,457,458],{"class":245}," enable\n",[171,460,461,462,465,466,469],{},"Nhấn ",[178,463,464],{},"y"," và ",[178,467,468],{},"Enter"," khi hệ thống cảnh báo lệnh có thể làm gián đoạn kết nối SSH.",[171,471,472],{},"Kiểm tra danh sách các quy tắc chi tiết:",[219,474,476],{"className":221,"code":475,"language":223,"meta":224,"style":224},"sudo ufw status verbose\n",[178,477,478],{"__ignoreMap":224},[228,479,480,482,484,487],{"class":230,"line":231},[228,481,242],{"class":241},[228,483,246],{"class":245},[228,485,486],{"class":245}," status",[228,488,489],{"class":245}," verbose\n",[171,491,492],{},"Kết quả hiển thị:",[219,494,497],{"className":495,"code":496,"language":433,"meta":224},[431],"Status: active\nLogging: on (low)\nDefault: deny (incoming), allow (outgoing), disabled (routed)\nNew profiles: skip\n\nTo                         Action      From\n--                         ------      ----\n22/tcp                     ALLOW IN    Anywhere                   # SSH standard\n80/tcp                     ALLOW IN    Anywhere                   # HTTP Web\n443/tcp                    ALLOW IN    Anywhere                   # HTTPS Web\n22/tcp (v6)                ALLOW IN    Anywhere (v6)              # SSH standard\n80/tcp (v6)                ALLOW IN    Anywhere (v6)              # HTTP Web\n443/tcp (v6)               ALLOW IN    Anywhere (v6)              # HTTPS Web\n",[178,498,496],{"__ignoreMap":224},[205,500],{},[166,502,504],{"id":503},"_4-các-quy-tắc-nâng-cao-giới-hạn-theo-địa-chỉ-ip-và-dải-mạng","4. Các quy tắc nâng cao: Giới hạn theo Địa chỉ IP và Dải mạng",[171,506,507],{},"Trong thực tế sản xuất, bạn thường cần giới hạn quyền truy cập database hoặc cổng quản trị chỉ cho các địa chỉ IP cố định của công ty hoặc máy chủ nội bộ.",[395,509,511],{"id":510},"a-chỉ-cho-phép-một-địa-chỉ-ip-cụ-thể-truy-cập-cổng-database-postgresql-5432","A. Chỉ cho phép một địa chỉ IP cụ thể truy cập cổng Database (PostgreSQL 5432)",[219,513,515],{"className":221,"code":514,"language":223,"meta":224,"style":224},"sudo ufw allow from 203.0.113.88 to any port 5432 proto tcp comment 'Allow office IP to DB'\n",[178,516,517],{"__ignoreMap":224},[228,518,519,521,523,525,528,532,535,538,541,544,547,550,552],{"class":230,"line":231},[228,520,242],{"class":241},[228,522,246],{"class":245},[228,524,280],{"class":245},[228,526,527],{"class":245}," from",[228,529,531],{"class":530},"sKJT9"," 203.0.113.88",[228,533,534],{"class":245}," to",[228,536,537],{"class":245}," any",[228,539,540],{"class":245}," port",[228,542,543],{"class":530}," 5432",[228,545,546],{"class":245}," proto",[228,548,549],{"class":245}," tcp",[228,551,320],{"class":245},[228,553,554],{"class":245}," 'Allow office IP to DB'\n",[395,556,558],{"id":557},"b-cho-phép-toàn-bộ-dải-mạng-con-nội-bộ-subnet","B. Cho phép toàn bộ dải mạng con nội bộ (Subnet)",[219,560,562],{"className":221,"code":561,"language":223,"meta":224,"style":224},"sudo ufw allow from 10.0.0.0/24 comment 'Allow all internal VPC traffic'\n",[178,563,564],{"__ignoreMap":224},[228,565,566,568,570,572,574,577,579],{"class":230,"line":231},[228,567,242],{"class":241},[228,569,246],{"class":245},[228,571,280],{"class":245},[228,573,527],{"class":245},[228,575,576],{"class":245}," 10.0.0.0/24",[228,578,320],{"class":245},[228,580,581],{"class":245}," 'Allow all internal VPC traffic'\n",[395,583,585],{"id":584},"c-mở-một-dải-cổng-liên-tiếp-port-range","C. Mở một dải cổng liên tiếp (Port Range)",[219,587,589],{"className":221,"code":588,"language":223,"meta":224,"style":224},"# Cho phép dải cổng từ 6000 đến 6010 cho giao thức UDP\nsudo ufw allow 6000:6010/udp comment 'Media ports'\n",[178,590,591,596],{"__ignoreMap":224},[228,592,593],{"class":230,"line":231},[228,594,595],{"class":234},"# Cho phép dải cổng từ 6000 đến 6010 cho giao thức UDP\n",[228,597,598,600,602,604,607,609],{"class":230,"line":238},[228,599,242],{"class":241},[228,601,246],{"class":245},[228,603,280],{"class":245},[228,605,606],{"class":245}," 6000:6010/udp",[228,608,320],{"class":245},[228,610,611],{"class":245}," 'Media ports'\n",[205,613],{},[166,615,617],{"id":616},"_5-giới-hạn-tần-suất-kết-nối-chống-brute-force-rate-limiting","5. Giới hạn tần suất kết nối chống Brute-force (Rate Limiting)",[171,619,620,621,624],{},"UFW tích hợp sẵn tính năng ",[178,622,623],{},"limit"," rất hữu ích cho các dịch vụ nhạy cảm như SSH. Lệnh này sẽ tự động từ chối kết nối nếu một địa chỉ IP cố gắng kết nối từ 6 lần trở lên trong vòng 30 giây:",[219,626,628],{"className":221,"code":627,"language":223,"meta":224,"style":224},"sudo ufw limit 22/tcp comment 'Rate limit SSH brute force'\n",[178,629,630],{"__ignoreMap":224},[228,631,632,634,636,639,641,643],{"class":230,"line":231},[228,633,242],{"class":241},[228,635,246],{"class":245},[228,637,638],{"class":245}," limit",[228,640,317],{"class":245},[228,642,320],{"class":245},[228,644,645],{"class":245}," 'Rate limit SSH brute force'\n",[205,647],{},[166,649,651],{"id":650},"_6-xóa-và-chỉnh-sửa-các-quy-tắc-tường-lửa","6. Xóa và Chỉnh sửa các quy tắc Tường lửa",[171,653,654],{},"Để xóa một quy tắc mà không sợ nhầm lẫn, cách tốt nhất là hiển thị danh sách theo số thứ tự (Numbered rules):",[219,656,658],{"className":221,"code":657,"language":223,"meta":224,"style":224},"sudo ufw status numbered\n",[178,659,660],{"__ignoreMap":224},[228,661,662,664,666,668],{"class":230,"line":231},[228,663,242],{"class":241},[228,665,246],{"class":245},[228,667,486],{"class":245},[228,669,670],{"class":245}," numbered\n",[171,672,673],{},"Kết quả:",[219,675,678],{"className":676,"code":677,"language":433,"meta":224},[431],"[ 1] 22/tcp                     ALLOW IN    Anywhere\n[ 2] 80/tcp                     ALLOW IN    Anywhere\n[ 3] 443/tcp                    ALLOW IN    Anywhere\n[ 4] 5432/tcp                   ALLOW IN    203.0.113.88\n",[178,679,677],{"__ignoreMap":224},[171,681,682],{},"Để xóa quy tắc số 4 (mở cổng 5432):",[219,684,686],{"className":221,"code":685,"language":223,"meta":224,"style":224},"sudo ufw delete 4\n",[178,687,688],{"__ignoreMap":224},[228,689,690,692,694,697],{"class":230,"line":231},[228,691,242],{"class":241},[228,693,246],{"class":245},[228,695,696],{"class":245}," delete",[228,698,699],{"class":530}," 4\n",[205,701],{},[166,703,705],{"id":704},"_7-giải-quyết-triệt-để-vấn-đề-docker-vượt-mặt-ufw-docker-bypass-ufw","7. Giải quyết triệt để vấn đề Docker vượt mặt UFW (Docker Bypass UFW)",[395,707,709],{"id":708},"vấn-đề","Vấn đề:",[171,711,712,713,716,717,719,720,465,723,726,727,197],{},"Khi bạn chạy Docker với cờ ",[178,714,715],{},"-p 8080:8080",", Docker tự động chèn các quy tắc vào bảng ",[178,718,180],{}," (chuỗi ",[178,721,722],{},"PREROUTING",[178,724,725],{},"DOCKER","), điều này khiến các gói tin mạng đi thẳng vào container mà ",[175,728,729],{},"hoàn toàn bỏ qua các quy tắc của UFW",[395,731,733],{"id":732},"giải-pháp-xử-lý-chuẩn-mực","Giải pháp xử lý chuẩn mực:",[171,735,736,737,740],{},"Chúng ta sử dụng dự án mã nguồn mở chuẩn ",[178,738,739],{},"ufw-docker"," để điều chỉnh bảng định tuyến của UFW tương thích với Docker:",[171,742,743,744,405],{},"Tải và cài đặt script ",[178,745,739],{},[219,747,749],{"className":221,"code":748,"language":223,"meta":224,"style":224},"sudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker\nsudo chmod +x /usr/local/bin/ufw-docker\n",[178,750,751,767],{"__ignoreMap":224},[228,752,753,755,758,761,764],{"class":230,"line":231},[228,754,242],{"class":241},[228,756,757],{"class":245}," wget",[228,759,760],{"class":530}," -O",[228,762,763],{"class":245}," /usr/local/bin/ufw-docker",[228,765,766],{"class":245}," https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker\n",[228,768,769,771,774,777],{"class":230,"line":238},[228,770,242],{"class":241},[228,772,773],{"class":245}," chmod",[228,775,776],{"class":245}," +x",[228,778,779],{"class":245}," /usr/local/bin/ufw-docker\n",[171,781,782],{},"Cài đặt cấu hình chuỗi UFW cho Docker:",[219,784,786],{"className":221,"code":785,"language":223,"meta":224,"style":224},"sudo ufw-docker install\n",[178,787,788],{"__ignoreMap":224},[228,789,790,792,795],{"class":230,"line":231},[228,791,242],{"class":241},[228,793,794],{"class":245}," ufw-docker",[228,796,797],{"class":245}," install\n",[171,799,800],{},"Khởi động lại UFW:",[219,802,804],{"className":221,"code":803,"language":223,"meta":224,"style":224},"sudo systemctl restart ufw\n",[178,805,806],{"__ignoreMap":224},[228,807,808,810,813,816],{"class":230,"line":231},[228,809,242],{"class":241},[228,811,812],{"class":245}," systemctl",[228,814,815],{"class":245}," restart",[228,817,818],{"class":245}," ufw\n",[171,820,821,822,825],{},"Bây giờ, mọi cổng publish của Docker sẽ mặc định bị chặn bởi UFW. Khi muốn mở cổng container ",[178,823,824],{},"web_app"," ra ngoài, bạn dùng lệnh tường minh:",[219,827,829],{"className":221,"code":828,"language":223,"meta":224,"style":224},"sudo ufw-docker allow web_app 80\n",[178,830,831],{"__ignoreMap":224},[228,832,833,835,837,839,842],{"class":230,"line":231},[228,834,242],{"class":241},[228,836,794],{"class":245},[228,838,280],{"class":245},[228,840,841],{"class":245}," web_app",[228,843,844],{"class":530}," 80\n",[205,846],{},[166,848,850],{"id":849},"_8-bảng-tra-cứu-các-lệnh-ufw-thiết-yếu","8. Bảng tra cứu các lệnh UFW thiết yếu",[852,853,854,868],"table",{},[855,856,857],"thead",{},[858,859,860,865],"tr",{},[861,862,864],"th",{"align":863},"left","Lệnh",[861,866,867],{"align":863},"Mô tả",[869,870,871,882,892,902,912,922,932],"tbody",{},[858,872,873,879],{},[874,875,876],"td",{"align":863},[178,877,878],{},"sudo ufw enable",[874,880,881],{"align":863},"Bật tường lửa",[858,883,884,889],{},[874,885,886],{"align":863},[178,887,888],{},"sudo ufw disable",[874,890,891],{"align":863},"Tắt tường lửa",[858,893,894,899],{},[874,895,896],{"align":863},[178,897,898],{},"sudo ufw status verbose",[874,900,901],{"align":863},"Kiểm tra trạng thái và toàn bộ luật chi tiết",[858,903,904,909],{},[874,905,906],{"align":863},[178,907,908],{},"sudo ufw status numbered",[874,910,911],{"align":863},"Liệt kê các luật kèm số thứ tự",[858,913,914,919],{},[874,915,916],{"align":863},[178,917,918],{},"sudo ufw delete \u003Csố>",[874,920,921],{"align":863},"Xóa luật theo số thứ tự",[858,923,924,929],{},[874,925,926],{"align":863},[178,927,928],{},"sudo ufw reload",[874,930,931],{"align":863},"Nạp lại các quy tắc sau khi chỉnh sửa",[858,933,934,939],{},[874,935,936],{"align":863},[178,937,938],{},"sudo ufw reset",[874,940,941],{"align":863},"Đưa toàn bộ cấu hình về mặc định ban đầu",[205,943],{},[166,945,947],{"id":946},"tổng-kết","Tổng kết",[171,949,950,951,954,955,958],{},"Tường lửa ",[175,952,953],{},"UFW"," là công cụ bảo vệ tuyến đầu không thể thiếu của bất kỳ máy chủ Linux nào. Kết hợp chính sách mặc định ",[178,956,957],{},"deny incoming",", giới hạn IP cho các cổng nhạy cảm và xử lý chuỗi định tuyến với Docker sẽ giúp hệ thống của bạn luôn an toàn trước mọi hành vi dò quét trái phép từ Internet.",[960,961,962],"style",{},"html pre.shiki code .sGGCZ, html code.shiki .sGGCZ{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-light:#6A737D}html pre.shiki code .sb7EE, html code.shiki .sb7EE{--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-light:#B392F0}html pre.shiki code .skqr8, html code.shiki .skqr8{--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-light:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .sKJT9, html code.shiki .sKJT9{--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-light:#79B8FF}",{"title":224,"searchDepth":238,"depth":238,"links":964},[965,966,967,970,971,976,977,978,982,983],{"id":168,"depth":238,"text":169},{"id":209,"depth":238,"text":210},{"id":288,"depth":238,"text":289,"children":968},[969],{"id":397,"depth":258,"text":398},{"id":440,"depth":238,"text":441},{"id":503,"depth":238,"text":504,"children":972},[973,974,975],{"id":510,"depth":258,"text":511},{"id":557,"depth":258,"text":558},{"id":584,"depth":258,"text":585},{"id":616,"depth":238,"text":617},{"id":650,"depth":238,"text":651},{"id":704,"depth":238,"text":705,"children":979},[980,981],{"id":708,"depth":258,"text":709},{"id":732,"depth":258,"text":733},{"id":849,"depth":238,"text":850},{"id":946,"depth":238,"text":947},[9,14],false,"md",{"src":133,"alt":134},{},{"title":124,"description":125},null,"ufw-firewall-basics","posts/ufw-firewall-basics",[128,129,130,15],"2026-08-22","CcRzURsxlh",[997,1002,1007,1012,1017,1022,1027,1032,1037,1042,1046,1051],{"path":5,"title":6,"categories":998,"tags":999,"date":16,"draft":985,"slug":1000,"description":7,"image":1001},[9,10],[12,13,14,15],"incident-checklist",{"src":18,"alt":19},{"path":21,"title":22,"categories":1003,"tags":1004,"date":31,"draft":985,"slug":1005,"description":23,"image":1006},[25,26],[28,29,30,10],"backup-postgres-docker",{"src":33,"alt":34},{"path":36,"title":37,"categories":1008,"tags":1009,"date":44,"draft":985,"slug":1010,"description":38,"image":1011},[25,10],[41,42,43],"docker-compose-production",{"src":46,"alt":47},{"path":49,"title":50,"categories":1013,"tags":1014,"date":58,"draft":985,"slug":1015,"description":51,"image":1016},[9,10],[54,55,56,57],"monitoring-server-basics",{"src":60,"alt":61},{"path":63,"title":64,"categories":1018,"tags":1019,"date":71,"draft":985,"slug":1020,"description":65,"image":1021},[9,67],[10,69,70],"nginx-reverse-proxy",{"src":73,"alt":74},{"path":76,"title":77,"categories":1023,"tags":1024,"date":83,"draft":985,"slug":1025,"description":78,"image":1026},[9,14],[81,82,10],"how-to-secure-a-vps",{"src":85,"alt":86},{"path":88,"title":89,"categories":1028,"tags":1029,"date":95,"draft":985,"slug":1030,"description":90,"image":1031},[9,10],[93,94,43,41],"systemd-node-service",{"src":97,"alt":98},{"path":100,"title":101,"categories":1033,"tags":1034,"date":107,"draft":985,"slug":1035,"description":102,"image":1036},[9,25],[105,10,106],"how-to-install-docker-on-ubuntu-server",{"src":109,"alt":110},{"path":112,"title":113,"categories":1038,"tags":1039,"date":118,"draft":985,"slug":1040,"description":114,"image":1041},[9,14],[117,10,15],"ssh-key-authentication",{"src":120,"alt":121},{"path":123,"title":124,"categories":1043,"tags":1044,"date":131,"draft":985,"slug":991,"description":125,"image":1045},[9,14],[128,129,130,15],{"src":133,"alt":134},{"path":136,"title":137,"categories":1047,"tags":1048,"date":145,"draft":985,"slug":1049,"description":138,"image":1050},[140,10],[142,143,144,30],"git-deploy-key",{"src":147,"alt":148},{"path":150,"title":151,"categories":1052,"tags":1053,"date":155,"draft":985,"slug":1054,"description":152,"image":1055},[9],[106,105,15],"ubuntu-server-initial-setup",{"src":157,"alt":158},[],1789616168247]