[{"data":1,"prerenderedAt":1562},["ShallowReactive",2],{"search-posts-dataset":3,"post-detail-/posts/how-to-secure-a-vps":159,"all-published-articles-list":1501,"series-posts-/posts/how-to-secure-a-vps":1561},[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":77,"author":161,"body":162,"categories":1490,"date":83,"description":78,"draft":1491,"extension":1492,"image":1493,"meta":1494,"navigation":376,"path":76,"seo":1495,"series":1496,"series_order":1496,"slug":1497,"stem":1498,"tags":1499,"updated":1496,"__hash__":1500},"post/posts/how-to-secure-a-vps.md","Duong Thu",{"type":163,"value":164,"toc":1472},"minimal",[165,170,174,182,190,193,197,200,240,245,248,281,288,336,338,342,351,398,404,431,433,437,444,448,451,473,477,508,512,515,530,537,631,640,682,684,688,694,819,822,839,841,845,848,851,869,875,951,954,969,972,989,991,995,1013,1019,1033,1036,1044,1047,1068,1070,1074,1077,1224,1227,1245,1247,1251,1254,1299,1310,1312,1316,1461,1468],[166,167,169],"h2",{"id":168},"tại-sao-bảo-mật-máy-chủ-vps-là-nhiệm-vụ-sống-còn","Tại sao bảo mật máy chủ VPS là nhiệm vụ sống còn?",[171,172,173],"p",{},"Ngay sau khi bạn khởi tạo một máy chủ ảo (VPS) hoặc Dedicated Server có IP tĩnh công khai, các botnet tự động trên khắp thế giới sẽ bắt đầu quét cổng và thực hiện hàng chục nghìn lượt tấn công brute-force mỗi ngày vào cổng SSH (cổng 22 mặc định).",[171,175,176,177,181],{},"Nếu bạn giữ nguyên cấu hình mặc định (dùng tài khoản ",[178,179,180],"code",{},"root"," với mật khẩu dạng chữ), việc máy chủ bị chiếm quyền điều khiển (compromised), bị cài đặt mã độc đào tiền ảo hoặc biến thành botnet phát tán thư rác chỉ là vấn đề thời gian.",[171,183,184,185,189],{},"Trong bài viết này, chúng tôi sẽ hướng dẫn bạn quy trình ",[186,187,188],"strong",{},"8 bước chuẩn hóa bảo mật máy chủ Linux"," (Hardening Checklist) được áp dụng tại các tổ chức công nghệ hàng đầu, giúp biến máy chủ của bạn thành một \"pháo đài\" kiên cố trước mọi cuộc tấn công tự động.",[191,192],"hr",{},[166,194,196],{"id":195},"_1-cập-nhật-hệ-thống-và-kích-hoạt-bản-vá-tự-động","1. Cập nhật hệ thống và kích hoạt bản vá tự động",[171,198,199],{},"Bước đầu tiên sau khi nhận VPS là cập nhật toàn bộ các gói phần mềm và hạt nhân hệ điều hành (Kernel) lên phiên bản mới nhất:",[201,202,207],"pre",{"className":203,"code":204,"language":205,"meta":206,"style":206},"language-bash shiki shiki-themes github-dark github-dark github-dark","sudo apt update && sudo apt upgrade -y\n","bash","",[178,208,209],{"__ignoreMap":206},[210,211,214,218,222,225,229,231,233,236],"span",{"class":212,"line":213},"line",1,[210,215,217],{"class":216},"sb7EE","sudo",[210,219,221],{"class":220},"skqr8"," apt",[210,223,224],{"class":220}," update",[210,226,228],{"class":227},"sFJ4l"," && ",[210,230,217],{"class":216},[210,232,221],{"class":220},[210,234,235],{"class":220}," upgrade",[210,237,239],{"class":238},"sKJT9"," -y\n",[241,242,244],"h3",{"id":243},"kích-hoạt-tính-năng-tự-động-cập-nhật-bản-vá-bảo-mật-unattended-upgrades","Kích hoạt tính năng tự động cập nhật bản vá bảo mật (Unattended Upgrades)",[171,246,247],{},"Để máy chủ tự động cài đặt các bản vá lỗi bảo mật khẩn cấp từ Canonical mà không cần bạn can thiệp thủ công:",[201,249,251],{"className":203,"code":250,"language":205,"meta":206,"style":206},"sudo apt install -y unattended-upgrades\nsudo dpkg-reconfigure --priority=low unattended-upgrades\n",[178,252,253,268],{"__ignoreMap":206},[210,254,255,257,259,262,265],{"class":212,"line":213},[210,256,217],{"class":216},[210,258,221],{"class":220},[210,260,261],{"class":220}," install",[210,263,264],{"class":238}," -y",[210,266,267],{"class":220}," unattended-upgrades\n",[210,269,271,273,276,279],{"class":212,"line":270},2,[210,272,217],{"class":216},[210,274,275],{"class":220}," dpkg-reconfigure",[210,277,278],{"class":238}," --priority=low",[210,280,267],{"class":220},[171,282,283,284,287],{},"Cấu hình file ",[178,285,286],{},"/etc/apt/apt.conf.d/50unattended-upgrades"," để tự động dọn dẹp các gói thừa và tự khởi động lại vào ban đêm (3h sáng) nếu cần thiết:",[201,289,291],{"className":203,"code":290,"language":205,"meta":206,"style":206},"sudo tee -a /etc/apt/apt.conf.d/50unattended-upgrades \u003C\u003C 'EOF'\nUnattended-Upgrade::Remove-Unused-Dependencies \"true\";\nUnattended-Upgrade::Automatic-Reboot \"true\";\nUnattended-Upgrade::Automatic-Reboot-Time \"03:00\";\nEOF\n",[178,292,293,313,318,324,330],{"__ignoreMap":206},[210,294,295,297,300,303,306,310],{"class":212,"line":213},[210,296,217],{"class":216},[210,298,299],{"class":220}," tee",[210,301,302],{"class":238}," -a",[210,304,305],{"class":220}," /etc/apt/apt.conf.d/50unattended-upgrades",[210,307,309],{"class":308},"sWuGj"," \u003C\u003C",[210,311,312],{"class":220}," 'EOF'\n",[210,314,315],{"class":212,"line":270},[210,316,317],{"class":220},"Unattended-Upgrade::Remove-Unused-Dependencies \"true\";\n",[210,319,321],{"class":212,"line":320},3,[210,322,323],{"class":220},"Unattended-Upgrade::Automatic-Reboot \"true\";\n",[210,325,327],{"class":212,"line":326},4,[210,328,329],{"class":220},"Unattended-Upgrade::Automatic-Reboot-Time \"03:00\";\n",[210,331,333],{"class":212,"line":332},5,[210,334,335],{"class":220},"EOF\n",[191,337],{},[166,339,341],{"id":340},"_2-tạo-tài-khoản-người-dùng-riêng-sudo-user-và-khóa-tài-khoản-root","2. Tạo tài khoản người dùng riêng (Sudo User) và khóa tài khoản Root",[171,343,344,345,347,348,350],{},"Không bao giờ làm việc hàng ngày trực tiếp bằng tài khoản ",[178,346,180],{},". Thay vào đó, hãy tạo một user riêng và cấp quyền ",[178,349,217],{},":",[201,352,354],{"className":203,"code":353,"language":205,"meta":206,"style":206},"# Tạo user mới (ví dụ: devadmin)\nsudo adduser devadmin\n\n# Thêm user vào nhóm sudo\nsudo usermod -aG sudo devadmin\n",[178,355,356,362,372,378,383],{"__ignoreMap":206},[210,357,358],{"class":212,"line":213},[210,359,361],{"class":360},"sGGCZ","# Tạo user mới (ví dụ: devadmin)\n",[210,363,364,366,369],{"class":212,"line":270},[210,365,217],{"class":216},[210,367,368],{"class":220}," adduser",[210,370,371],{"class":220}," devadmin\n",[210,373,374],{"class":212,"line":320},[210,375,377],{"emptyLinePlaceholder":376},true,"\n",[210,379,380],{"class":212,"line":326},[210,381,382],{"class":360},"# Thêm user vào nhóm sudo\n",[210,384,385,387,390,393,396],{"class":212,"line":332},[210,386,217],{"class":216},[210,388,389],{"class":220}," usermod",[210,391,392],{"class":238}," -aG",[210,394,395],{"class":220}," sudo",[210,397,371],{"class":220},[171,399,400,401,403],{},"Kiểm tra chuyển sang user mới để đảm bảo quyền ",[178,402,217],{}," hoạt động chuẩn:",[201,405,407],{"className":203,"code":406,"language":205,"meta":206,"style":206},"su - devadmin\nsudo whoami\n# Kết quả hiển thị 'root' là thành công\n",[178,408,409,419,426],{"__ignoreMap":206},[210,410,411,414,417],{"class":212,"line":213},[210,412,413],{"class":216},"su",[210,415,416],{"class":220}," -",[210,418,371],{"class":220},[210,420,421,423],{"class":212,"line":270},[210,422,217],{"class":216},[210,424,425],{"class":220}," whoami\n",[210,427,428],{"class":212,"line":320},[210,429,430],{"class":360},"# Kết quả hiển thị 'root' là thành công\n",[191,432],{},[166,434,436],{"id":435},"_3-khóa-xác-thực-bằng-mật-khẩu-và-chỉ-dùng-ssh-key-ed25519","3. Khóa xác thực bằng Mật khẩu và Chỉ dùng SSH Key (Ed25519)",[171,438,439,440,443],{},"Mật khẩu dù dài đến đâu vẫn có nguy cơ bị lộ hoặc bị quét vét cạn. Phương thức xác thực tối ưu nhất hiện nay là sử dụng ",[186,441,442],{},"SSH Key thuật toán Ed25519",".",[241,445,447],{"id":446},"bước-31-tạo-ssh-key-trên-máy-cá-nhân-của-bạn-local-machine","Bước 3.1: Tạo SSH Key trên máy cá nhân của bạn (Local machine)",[171,449,450],{},"Trên máy tính của bạn (macOS, Linux hoặc Windows PowerShell):",[201,452,454],{"className":203,"code":453,"language":205,"meta":206,"style":206},"ssh-keygen -t ed25519 -C \"my-vps-key\"\n",[178,455,456],{"__ignoreMap":206},[210,457,458,461,464,467,470],{"class":212,"line":213},[210,459,460],{"class":216},"ssh-keygen",[210,462,463],{"class":238}," -t",[210,465,466],{"class":220}," ed25519",[210,468,469],{"class":238}," -C",[210,471,472],{"class":220}," \"my-vps-key\"\n",[241,474,476],{"id":475},"bước-32-sao-chép-public-key-lên-máy-chủ","Bước 3.2: Sao chép Public Key lên máy chủ",[201,478,480],{"className":203,"code":479,"language":205,"meta":206,"style":206},"ssh-copy-id -i ~/.ssh/id_ed25519.pub devadmin@\u003CIP_MÁY_CHỦ>\n",[178,481,482],{"__ignoreMap":206},[210,483,484,487,490,493,496,499,502,505],{"class":212,"line":213},[210,485,486],{"class":216},"ssh-copy-id",[210,488,489],{"class":238}," -i",[210,491,492],{"class":220}," ~/.ssh/id_ed25519.pub",[210,494,495],{"class":220}," devadmin@",[210,497,498],{"class":308},"\u003C",[210,500,501],{"class":220},"IP_MÁY_CH",[210,503,504],{"class":227},"Ủ",[210,506,507],{"class":308},">\n",[241,509,511],{"id":510},"bước-33-vô-hiệu-hóa-đăng-nhập-mật-khẩu-và-root-login","Bước 3.3: Vô hiệu hóa đăng nhập mật khẩu và Root Login",[171,513,514],{},"Mở file cấu hình SSH trên máy chủ:",[201,516,518],{"className":203,"code":517,"language":205,"meta":206,"style":206},"sudo nano /etc/ssh/sshd_config\n",[178,519,520],{"__ignoreMap":206},[210,521,522,524,527],{"class":212,"line":213},[210,523,217],{"class":216},[210,525,526],{"class":220}," nano",[210,528,529],{"class":220}," /etc/ssh/sshd_config\n",[171,531,532,533,536],{},"Tìm và chỉnh sửa các dòng sau (đảm bảo không bị comment ",[178,534,535],{},"#"," ở đầu):",[201,538,542],{"className":539,"code":540,"language":541,"meta":206,"style":206},"language-ini shiki shiki-themes github-dark github-dark github-dark","# Đổi cổng SSH mặc định (ví dụ: 2222 thay vì 22) để giảm 99% lượng bot quét tự động\nPort 2222\n\n# Cấm hoàn toàn root đăng nhập từ xa\nPermitRootLogin no\n\n# Cấm đăng nhập bằng mật khẩu thường (chỉ chấp nhận SSH Key)\nPasswordAuthentication no\nPermitEmptyPasswords no\n\n# Tắt xác thực Challenge Response\nKbdInteractiveAuthentication no\n\n# Giới hạn thời gian đăng nhập và số lần thử\nLoginGraceTime 30\nMaxAuthTries 3\n","ini",[178,543,544,549,554,558,563,568,573,579,585,591,596,602,608,613,619,625],{"__ignoreMap":206},[210,545,546],{"class":212,"line":213},[210,547,548],{},"# Đổi cổng SSH mặc định (ví dụ: 2222 thay vì 22) để giảm 99% lượng bot quét tự động\n",[210,550,551],{"class":212,"line":270},[210,552,553],{},"Port 2222\n",[210,555,556],{"class":212,"line":320},[210,557,377],{"emptyLinePlaceholder":376},[210,559,560],{"class":212,"line":326},[210,561,562],{},"# Cấm hoàn toàn root đăng nhập từ xa\n",[210,564,565],{"class":212,"line":332},[210,566,567],{},"PermitRootLogin no\n",[210,569,571],{"class":212,"line":570},6,[210,572,377],{"emptyLinePlaceholder":376},[210,574,576],{"class":212,"line":575},7,[210,577,578],{},"# Cấm đăng nhập bằng mật khẩu thường (chỉ chấp nhận SSH Key)\n",[210,580,582],{"class":212,"line":581},8,[210,583,584],{},"PasswordAuthentication no\n",[210,586,588],{"class":212,"line":587},9,[210,589,590],{},"PermitEmptyPasswords no\n",[210,592,594],{"class":212,"line":593},10,[210,595,377],{"emptyLinePlaceholder":376},[210,597,599],{"class":212,"line":598},11,[210,600,601],{},"# Tắt xác thực Challenge Response\n",[210,603,605],{"class":212,"line":604},12,[210,606,607],{},"KbdInteractiveAuthentication no\n",[210,609,611],{"class":212,"line":610},13,[210,612,377],{"emptyLinePlaceholder":376},[210,614,616],{"class":212,"line":615},14,[210,617,618],{},"# Giới hạn thời gian đăng nhập và số lần thử\n",[210,620,622],{"class":212,"line":621},15,[210,623,624],{},"LoginGraceTime 30\n",[210,626,628],{"class":212,"line":627},16,[210,629,630],{},"MaxAuthTries 3\n",[632,633,634],"blockquote",{},[171,635,636,639],{},[210,637,638],{},"!WARNING","\nTrước khi khởi động lại dịch vụ SSH, hãy mở thêm một cửa sổ Terminal mới và thử kết nối qua SSH Key với cổng mới để chắc chắn bạn không bị khóa ở ngoài!",[201,641,643],{"className":203,"code":642,"language":205,"meta":206,"style":206},"# Kiểm tra cú pháp cấu hình\nsudo sshd -t\n\n# Khởi động lại dịch vụ SSH\nsudo systemctl restart ssh\n",[178,644,645,650,660,664,669],{"__ignoreMap":206},[210,646,647],{"class":212,"line":213},[210,648,649],{"class":360},"# Kiểm tra cú pháp cấu hình\n",[210,651,652,654,657],{"class":212,"line":270},[210,653,217],{"class":216},[210,655,656],{"class":220}," sshd",[210,658,659],{"class":238}," -t\n",[210,661,662],{"class":212,"line":320},[210,663,377],{"emptyLinePlaceholder":376},[210,665,666],{"class":212,"line":326},[210,667,668],{"class":360},"# Khởi động lại dịch vụ SSH\n",[210,670,671,673,676,679],{"class":212,"line":332},[210,672,217],{"class":216},[210,674,675],{"class":220}," systemctl",[210,677,678],{"class":220}," restart",[210,680,681],{"class":220}," ssh\n",[191,683],{},[166,685,687],{"id":686},"_4-thiết-lập-tường-lửa-nghiêm-ngặt-với-ufw","4. Thiết lập Tường lửa nghiêm ngặt với UFW",[171,689,690,691,443],{},"Ubuntu tích hợp sẵn công cụ quản lý tường lửa UFW (Uncomplicated Firewall). Hãy áp dụng quy tắc bảo mật chuẩn: ",[186,692,693],{},"Chặn toàn bộ chiều vào, cho phép toàn bộ chiều ra, và chỉ mở các cổng dịch vụ thực sự cần thiết",[201,695,697],{"className":203,"code":696,"language":205,"meta":206,"style":206},"# Thiết lập chính sách mặc định\nsudo ufw default deny incoming\nsudo ufw default allow outgoing\n\n# Mở cổng SSH (nhớ thay bằng cổng bạn đã đổi ở bước 3)\nsudo ufw allow 2222/tcp comment 'Custom SSH'\n\n# Mở cổng Web nếu máy chủ chạy Website\nsudo ufw allow 80/tcp comment 'HTTP'\nsudo ufw allow 443/tcp comment 'HTTPS'\n\n# Kích hoạt tường lửa\nsudo ufw enable\n",[178,698,699,704,720,734,738,743,760,764,769,785,801,805,810],{"__ignoreMap":206},[210,700,701],{"class":212,"line":213},[210,702,703],{"class":360},"# Thiết lập chính sách mặc định\n",[210,705,706,708,711,714,717],{"class":212,"line":270},[210,707,217],{"class":216},[210,709,710],{"class":220}," ufw",[210,712,713],{"class":220}," default",[210,715,716],{"class":220}," deny",[210,718,719],{"class":220}," incoming\n",[210,721,722,724,726,728,731],{"class":212,"line":320},[210,723,217],{"class":216},[210,725,710],{"class":220},[210,727,713],{"class":220},[210,729,730],{"class":220}," allow",[210,732,733],{"class":220}," outgoing\n",[210,735,736],{"class":212,"line":326},[210,737,377],{"emptyLinePlaceholder":376},[210,739,740],{"class":212,"line":332},[210,741,742],{"class":360},"# Mở cổng SSH (nhớ thay bằng cổng bạn đã đổi ở bước 3)\n",[210,744,745,747,749,751,754,757],{"class":212,"line":570},[210,746,217],{"class":216},[210,748,710],{"class":220},[210,750,730],{"class":220},[210,752,753],{"class":220}," 2222/tcp",[210,755,756],{"class":220}," comment",[210,758,759],{"class":220}," 'Custom SSH'\n",[210,761,762],{"class":212,"line":575},[210,763,377],{"emptyLinePlaceholder":376},[210,765,766],{"class":212,"line":581},[210,767,768],{"class":360},"# Mở cổng Web nếu máy chủ chạy Website\n",[210,770,771,773,775,777,780,782],{"class":212,"line":587},[210,772,217],{"class":216},[210,774,710],{"class":220},[210,776,730],{"class":220},[210,778,779],{"class":220}," 80/tcp",[210,781,756],{"class":220},[210,783,784],{"class":220}," 'HTTP'\n",[210,786,787,789,791,793,796,798],{"class":212,"line":593},[210,788,217],{"class":216},[210,790,710],{"class":220},[210,792,730],{"class":220},[210,794,795],{"class":220}," 443/tcp",[210,797,756],{"class":220},[210,799,800],{"class":220}," 'HTTPS'\n",[210,802,803],{"class":212,"line":598},[210,804,377],{"emptyLinePlaceholder":376},[210,806,807],{"class":212,"line":604},[210,808,809],{"class":360},"# Kích hoạt tường lửa\n",[210,811,812,814,816],{"class":212,"line":610},[210,813,217],{"class":216},[210,815,710],{"class":220},[210,817,818],{"class":220}," enable\n",[171,820,821],{},"Kiểm tra trạng thái các cổng đang mở:",[201,823,825],{"className":203,"code":824,"language":205,"meta":206,"style":206},"sudo ufw status verbose\n",[178,826,827],{"__ignoreMap":206},[210,828,829,831,833,836],{"class":212,"line":213},[210,830,217],{"class":216},[210,832,710],{"class":220},[210,834,835],{"class":220}," status",[210,837,838],{"class":220}," verbose\n",[191,840],{},[166,842,844],{"id":843},"_5-cài-đặt-và-cấu-hình-fail2ban-chống-brute-force","5. Cài đặt và cấu hình Fail2ban chống Brute-Force",[171,846,847],{},"Fail2ban là công cụ tự động quét log hệ thống và chặn IP (bằng cách thêm luật vào tường lửa) đối với bất kỳ kẻ tấn công nào nhập sai thông tin xác thực quá số lần quy định.",[171,849,850],{},"Cài đặt Fail2ban:",[201,852,854],{"className":203,"code":853,"language":205,"meta":206,"style":206},"sudo apt install -y fail2ban\n",[178,855,856],{"__ignoreMap":206},[210,857,858,860,862,864,866],{"class":212,"line":213},[210,859,217],{"class":216},[210,861,221],{"class":220},[210,863,261],{"class":220},[210,865,264],{"class":238},[210,867,868],{"class":220}," fail2ban\n",[171,870,871,872,350],{},"Tạo file cấu hình tùy chỉnh ",[178,873,874],{},"/etc/fail2ban/jail.local",[201,876,878],{"className":203,"code":877,"language":205,"meta":206,"style":206},"sudo tee /etc/fail2ban/jail.local \u003C\u003C 'EOF'\n[DEFAULT]\nbantime = 1h\nfindtime = 10m\nmaxretry = 5\nbanaction = ufw\n\n[sshd]\nenabled = true\nport = 2222\nmode = aggressive\nlogpath = %(sshd_log)s\nEOF\n",[178,879,880,893,898,903,908,913,918,922,927,932,937,942,947],{"__ignoreMap":206},[210,881,882,884,886,889,891],{"class":212,"line":213},[210,883,217],{"class":216},[210,885,299],{"class":220},[210,887,888],{"class":220}," /etc/fail2ban/jail.local",[210,890,309],{"class":308},[210,892,312],{"class":220},[210,894,895],{"class":212,"line":270},[210,896,897],{"class":220},"[DEFAULT]\n",[210,899,900],{"class":212,"line":320},[210,901,902],{"class":220},"bantime = 1h\n",[210,904,905],{"class":212,"line":326},[210,906,907],{"class":220},"findtime = 10m\n",[210,909,910],{"class":212,"line":332},[210,911,912],{"class":220},"maxretry = 5\n",[210,914,915],{"class":212,"line":570},[210,916,917],{"class":220},"banaction = ufw\n",[210,919,920],{"class":212,"line":575},[210,921,377],{"emptyLinePlaceholder":376},[210,923,924],{"class":212,"line":581},[210,925,926],{"class":220},"[sshd]\n",[210,928,929],{"class":212,"line":587},[210,930,931],{"class":220},"enabled = true\n",[210,933,934],{"class":212,"line":593},[210,935,936],{"class":220},"port = 2222\n",[210,938,939],{"class":212,"line":598},[210,940,941],{"class":220},"mode = aggressive\n",[210,943,944],{"class":212,"line":604},[210,945,946],{"class":220},"logpath = %(sshd_log)s\n",[210,948,949],{"class":212,"line":610},[210,950,335],{"class":220},[171,952,953],{},"Khởi động lại Fail2ban:",[201,955,957],{"className":203,"code":956,"language":205,"meta":206,"style":206},"sudo systemctl restart fail2ban\n",[178,958,959],{"__ignoreMap":206},[210,960,961,963,965,967],{"class":212,"line":213},[210,962,217],{"class":216},[210,964,675],{"class":220},[210,966,678],{"class":220},[210,968,868],{"class":220},[171,970,971],{},"Kiểm tra các IP đang bị giam (Banned IP):",[201,973,975],{"className":203,"code":974,"language":205,"meta":206,"style":206},"sudo fail2ban-client status sshd\n",[178,976,977],{"__ignoreMap":206},[210,978,979,981,984,986],{"class":212,"line":213},[210,980,217],{"class":216},[210,982,983],{"class":220}," fail2ban-client",[210,985,835],{"class":220},[210,987,988],{"class":220}," sshd\n",[191,990],{},[166,992,994],{"id":993},"_6-bảo-vệ-bộ-nhớ-chia-sẻ-devshm","6. Bảo vệ bộ nhớ chia sẻ (/dev/shm)",[171,996,997,998,1001,1002,1005,1006,1009,1010,350],{},"Thư mục ",[178,999,1000],{},"/dev/shm"," là bộ nhớ tạm chia sẻ giữa các tiến trình, thường bị hacker lợi dụng để biên dịch và thực thi mã độc ẩn danh. Hãy gắn thêm cờ ",[178,1003,1004],{},"noexec",", ",[178,1007,1008],{},"nosuid"," và ",[178,1011,1012],{},"nodev",[171,1014,1015,1016,350],{},"Mở file ",[178,1017,1018],{},"/etc/fstab",[201,1020,1022],{"className":203,"code":1021,"language":205,"meta":206,"style":206},"sudo nano /etc/fstab\n",[178,1023,1024],{"__ignoreMap":206},[210,1025,1026,1028,1030],{"class":212,"line":213},[210,1027,217],{"class":216},[210,1029,526],{"class":220},[210,1031,1032],{"class":220}," /etc/fstab\n",[171,1034,1035],{},"Thêm dòng sau vào cuối file:",[201,1037,1042],{"className":1038,"code":1040,"language":1041,"meta":206},[1039],"language-text","tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0\n","text",[178,1043,1040],{"__ignoreMap":206},[171,1045,1046],{},"Áp dụng thay đổi ngay mà không cần khởi động lại:",[201,1048,1050],{"className":203,"code":1049,"language":205,"meta":206,"style":206},"sudo mount -o remount /dev/shm\n",[178,1051,1052],{"__ignoreMap":206},[210,1053,1054,1056,1059,1062,1065],{"class":212,"line":213},[210,1055,217],{"class":216},[210,1057,1058],{"class":220}," mount",[210,1060,1061],{"class":238}," -o",[210,1063,1064],{"class":220}," remount",[210,1066,1067],{"class":220}," /dev/shm\n",[191,1069],{},[166,1071,1073],{"id":1072},"_7-cấu-hình-bảo-mật-nhân-linux-qua-sysctl-kernel-hardening","7. Cấu hình bảo mật nhân Linux qua sysctl (Kernel Hardening)",[171,1075,1076],{},"Tinh chỉnh các thông số mạng của nhân Linux để chống tấn công giả mạo gói tin IP Spoofing, từ chối dịch vụ SYN Flood và Smurf Attacks:",[201,1078,1080],{"className":203,"code":1079,"language":205,"meta":206,"style":206},"sudo tee /etc/sysctl.d/99-security.conf \u003C\u003C 'EOF'\n# Chống tấn công SYN Flood\nnet.ipv4.tcp_syncookies = 1\nnet.ipv4.tcp_max_syn_backlog = 2048\nnet.ipv4.tcp_synack_retries = 2\n\n# Chống giả mạo gói tin IP Spoofing\nnet.ipv4.conf.all.rp_filter = 1\nnet.ipv4.conf.default.rp_filter = 1\n\n# Không chấp nhận chuyển hướng gói tin ICMP\nnet.ipv4.conf.all.accept_redirects = 0\nnet.ipv4.conf.default.accept_redirects = 0\nnet.ipv6.conf.all.accept_redirects = 0\nnet.ipv6.conf.default.accept_redirects = 0\n\n# Tắt chức năng Send ICMP Redirects\nnet.ipv4.conf.all.send_redirects = 0\nnet.ipv4.conf.default.send_redirects = 0\n\n# Phớt lờ các yêu cầu Ping Broadcast\nnet.ipv4.icmp_echo_ignore_broadcasts = 1\n\n# Giới hạn ghi log lỗi giả mạo\nnet.ipv4.icmp_ignore_bogus_error_responses = 1\nEOF\n",[178,1081,1082,1095,1100,1105,1110,1115,1119,1124,1129,1134,1138,1143,1148,1153,1158,1163,1167,1173,1179,1185,1190,1196,1202,1207,1213,1219],{"__ignoreMap":206},[210,1083,1084,1086,1088,1091,1093],{"class":212,"line":213},[210,1085,217],{"class":216},[210,1087,299],{"class":220},[210,1089,1090],{"class":220}," /etc/sysctl.d/99-security.conf",[210,1092,309],{"class":308},[210,1094,312],{"class":220},[210,1096,1097],{"class":212,"line":270},[210,1098,1099],{"class":220},"# Chống tấn công SYN Flood\n",[210,1101,1102],{"class":212,"line":320},[210,1103,1104],{"class":220},"net.ipv4.tcp_syncookies = 1\n",[210,1106,1107],{"class":212,"line":326},[210,1108,1109],{"class":220},"net.ipv4.tcp_max_syn_backlog = 2048\n",[210,1111,1112],{"class":212,"line":332},[210,1113,1114],{"class":220},"net.ipv4.tcp_synack_retries = 2\n",[210,1116,1117],{"class":212,"line":570},[210,1118,377],{"emptyLinePlaceholder":376},[210,1120,1121],{"class":212,"line":575},[210,1122,1123],{"class":220},"# Chống giả mạo gói tin IP Spoofing\n",[210,1125,1126],{"class":212,"line":581},[210,1127,1128],{"class":220},"net.ipv4.conf.all.rp_filter = 1\n",[210,1130,1131],{"class":212,"line":587},[210,1132,1133],{"class":220},"net.ipv4.conf.default.rp_filter = 1\n",[210,1135,1136],{"class":212,"line":593},[210,1137,377],{"emptyLinePlaceholder":376},[210,1139,1140],{"class":212,"line":598},[210,1141,1142],{"class":220},"# Không chấp nhận chuyển hướng gói tin ICMP\n",[210,1144,1145],{"class":212,"line":604},[210,1146,1147],{"class":220},"net.ipv4.conf.all.accept_redirects = 0\n",[210,1149,1150],{"class":212,"line":610},[210,1151,1152],{"class":220},"net.ipv4.conf.default.accept_redirects = 0\n",[210,1154,1155],{"class":212,"line":615},[210,1156,1157],{"class":220},"net.ipv6.conf.all.accept_redirects = 0\n",[210,1159,1160],{"class":212,"line":621},[210,1161,1162],{"class":220},"net.ipv6.conf.default.accept_redirects = 0\n",[210,1164,1165],{"class":212,"line":627},[210,1166,377],{"emptyLinePlaceholder":376},[210,1168,1170],{"class":212,"line":1169},17,[210,1171,1172],{"class":220},"# Tắt chức năng Send ICMP Redirects\n",[210,1174,1176],{"class":212,"line":1175},18,[210,1177,1178],{"class":220},"net.ipv4.conf.all.send_redirects = 0\n",[210,1180,1182],{"class":212,"line":1181},19,[210,1183,1184],{"class":220},"net.ipv4.conf.default.send_redirects = 0\n",[210,1186,1188],{"class":212,"line":1187},20,[210,1189,377],{"emptyLinePlaceholder":376},[210,1191,1193],{"class":212,"line":1192},21,[210,1194,1195],{"class":220},"# Phớt lờ các yêu cầu Ping Broadcast\n",[210,1197,1199],{"class":212,"line":1198},22,[210,1200,1201],{"class":220},"net.ipv4.icmp_echo_ignore_broadcasts = 1\n",[210,1203,1205],{"class":212,"line":1204},23,[210,1206,377],{"emptyLinePlaceholder":376},[210,1208,1210],{"class":212,"line":1209},24,[210,1211,1212],{"class":220},"# Giới hạn ghi log lỗi giả mạo\n",[210,1214,1216],{"class":212,"line":1215},25,[210,1217,1218],{"class":220},"net.ipv4.icmp_ignore_bogus_error_responses = 1\n",[210,1220,1222],{"class":212,"line":1221},26,[210,1223,335],{"class":220},[171,1225,1226],{},"Kích hoạt cấu hình ngay:",[201,1228,1230],{"className":203,"code":1229,"language":205,"meta":206,"style":206},"sudo sysctl -p /etc/sysctl.d/99-security.conf\n",[178,1231,1232],{"__ignoreMap":206},[210,1233,1234,1236,1239,1242],{"class":212,"line":213},[210,1235,217],{"class":216},[210,1237,1238],{"class":220}," sysctl",[210,1240,1241],{"class":238}," -p",[210,1243,1244],{"class":220}," /etc/sysctl.d/99-security.conf\n",[191,1246],{},[166,1248,1250],{"id":1249},"_8-quét-mã-độc-và-theo-dõi-thay-đổi-tệp-tin-với-lynis","8. Quét mã độc và theo dõi thay đổi tệp tin với Lynis",[171,1252,1253],{},"Lynis là công cụ kiểm toán bảo mật (Security Auditing) mã nguồn mở hàng đầu dành cho Linux. Nó sẽ quét toàn bộ hệ thống và đưa ra điểm số bảo mật (Hardening Index) kèm hướng dẫn khắc phục cụ thể:",[201,1255,1257],{"className":203,"code":1256,"language":205,"meta":206,"style":206},"# Cài đặt Lynis\nsudo apt install -y lynis\n\n# Tiến hành quét toàn bộ hệ thống\nsudo lynis audit system\n",[178,1258,1259,1264,1277,1281,1286],{"__ignoreMap":206},[210,1260,1261],{"class":212,"line":213},[210,1262,1263],{"class":360},"# Cài đặt Lynis\n",[210,1265,1266,1268,1270,1272,1274],{"class":212,"line":270},[210,1267,217],{"class":216},[210,1269,221],{"class":220},[210,1271,261],{"class":220},[210,1273,264],{"class":238},[210,1275,1276],{"class":220}," lynis\n",[210,1278,1279],{"class":212,"line":320},[210,1280,377],{"emptyLinePlaceholder":376},[210,1282,1283],{"class":212,"line":326},[210,1284,1285],{"class":360},"# Tiến hành quét toàn bộ hệ thống\n",[210,1287,1288,1290,1293,1296],{"class":212,"line":332},[210,1289,217],{"class":216},[210,1291,1292],{"class":220}," lynis",[210,1294,1295],{"class":220}," audit",[210,1297,1298],{"class":220}," system\n",[171,1300,1301,1302,1305,1306,1309],{},"Sau khi quét xong, hãy xem tóm tắt tại ",[178,1303,1304],{},"/var/log/lynis-report.dat"," và kiểm tra mục ",[178,1307,1308],{},"Suggestions"," để hoàn thiện các lỗ hổng còn sót lại.",[191,1311],{},[166,1313,1315],{"id":1314},"bảng-tổng-kết-checklist-bảo-mật","Bảng tổng kết Checklist bảo mật",[1317,1318,1319,1336],"table",{},[1320,1321,1322],"thead",{},[1323,1324,1325,1330,1333],"tr",{},[1326,1327,1329],"th",{"align":1328},"left","Hạng mục",[1326,1331,1332],{"align":1328},"Trạng thái khuyến nghị",[1326,1334,1335],{"align":1328},"Công cụ thực hiện",[1337,1338,1339,1355,1370,1385,1400,1415,1430,1446],"tbody",{},[1323,1340,1341,1347,1350],{},[1342,1343,1344],"td",{"align":1328},[186,1345,1346],{},"Tài khoản Root",[1342,1348,1349],{"align":1328},"Vô hiệu hóa đăng nhập từ xa",[1342,1351,1352],{"align":1328},[178,1353,1354],{},"sshd_config: PermitRootLogin no",[1323,1356,1357,1362,1365],{},[1342,1358,1359],{"align":1328},[186,1360,1361],{},"Mật khẩu SSH",[1342,1363,1364],{"align":1328},"Tắt hoàn toàn, chỉ dùng SSH Key",[1342,1366,1367],{"align":1328},[178,1368,1369],{},"sshd_config: PasswordAuthentication no",[1323,1371,1372,1377,1380],{},[1342,1373,1374],{"align":1328},[186,1375,1376],{},"Cổng SSH",[1342,1378,1379],{"align":1328},"Đổi sang cổng phi tiêu chuẩn (>1024)",[1342,1381,1382],{"align":1328},[178,1383,1384],{},"sshd_config: Port 2222",[1323,1386,1387,1392,1395],{},[1342,1388,1389],{"align":1328},[186,1390,1391],{},"Tường lửa",[1342,1393,1394],{"align":1328},"Chặn toàn bộ cổng vào trừ cổng dịch vụ",[1342,1396,1397],{"align":1328},[178,1398,1399],{},"UFW",[1323,1401,1402,1407,1410],{},[1342,1403,1404],{"align":1328},[186,1405,1406],{},"Chống Brute-force",[1342,1408,1409],{"align":1328},"Tự động ban IP nhập sai",[1342,1411,1412],{"align":1328},[178,1413,1414],{},"Fail2ban",[1323,1416,1417,1422,1425],{},[1342,1418,1419],{"align":1328},[186,1420,1421],{},"Vá lỗi bảo mật",[1342,1423,1424],{"align":1328},"Cập nhật tự động hàng ngày",[1342,1426,1427],{"align":1328},[178,1428,1429],{},"Unattended-Upgrades",[1323,1431,1432,1437,1442],{},[1342,1433,1434],{"align":1328},[186,1435,1436],{},"Bảo vệ RAM ảo",[1342,1438,1439,1440],{"align":1328},"Gắn cờ noexec cho ",[178,1441,1000],{},[1342,1443,1444],{"align":1328},[178,1445,1018],{},[1323,1447,1448,1453,1456],{},[1342,1449,1450],{"align":1328},[186,1451,1452],{},"Kiểm toán định kỳ",[1342,1454,1455],{"align":1328},"Quét lỗ hổng hàng tuần",[1342,1457,1458],{"align":1328},[178,1459,1460],{},"Lynis",[171,1462,1463,1464,1467],{},"Áp dụng đầy đủ 8 bước trên sẽ giảm thiểu tới ",[186,1465,1466],{},"99.9%"," rủi ro bị tấn công tự động, giúp máy chủ của bạn luôn vận hành ổn định và an toàn tuyệt đối.",[1469,1470,1471],"style",{},"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 .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 pre.shiki code .sFJ4l, html code.shiki .sFJ4l{--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-light:#E1E4E8}html pre.shiki code .sKJT9, html code.shiki .sKJT9{--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-light:#79B8FF}html pre.shiki code .sWuGj, html code.shiki .sWuGj{--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-light:#F97583}html pre.shiki code .sGGCZ, html code.shiki .sGGCZ{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-light:#6A737D}",{"title":206,"searchDepth":270,"depth":270,"links":1473},[1474,1475,1478,1479,1484,1485,1486,1487,1488,1489],{"id":168,"depth":270,"text":169},{"id":195,"depth":270,"text":196,"children":1476},[1477],{"id":243,"depth":320,"text":244},{"id":340,"depth":270,"text":341},{"id":435,"depth":270,"text":436,"children":1480},[1481,1482,1483],{"id":446,"depth":320,"text":447},{"id":475,"depth":320,"text":476},{"id":510,"depth":320,"text":511},{"id":686,"depth":270,"text":687},{"id":843,"depth":270,"text":844},{"id":993,"depth":270,"text":994},{"id":1072,"depth":270,"text":1073},{"id":1249,"depth":270,"text":1250},{"id":1314,"depth":270,"text":1315},[9,14],false,"md",{"src":85,"alt":86},{},{"title":77,"description":78},null,"how-to-secure-a-vps","posts/how-to-secure-a-vps",[81,82,10],"GQZDDa393G",[1502,1507,1512,1517,1522,1527,1531,1536,1541,1546,1551,1556],{"path":5,"title":6,"categories":1503,"tags":1504,"date":16,"draft":1491,"slug":1505,"description":7,"image":1506},[9,10],[12,13,14,15],"incident-checklist",{"src":18,"alt":19},{"path":21,"title":22,"categories":1508,"tags":1509,"date":31,"draft":1491,"slug":1510,"description":23,"image":1511},[25,26],[28,29,30,10],"backup-postgres-docker",{"src":33,"alt":34},{"path":36,"title":37,"categories":1513,"tags":1514,"date":44,"draft":1491,"slug":1515,"description":38,"image":1516},[25,10],[41,42,43],"docker-compose-production",{"src":46,"alt":47},{"path":49,"title":50,"categories":1518,"tags":1519,"date":58,"draft":1491,"slug":1520,"description":51,"image":1521},[9,10],[54,55,56,57],"monitoring-server-basics",{"src":60,"alt":61},{"path":63,"title":64,"categories":1523,"tags":1524,"date":71,"draft":1491,"slug":1525,"description":65,"image":1526},[9,67],[10,69,70],"nginx-reverse-proxy",{"src":73,"alt":74},{"path":76,"title":77,"categories":1528,"tags":1529,"date":83,"draft":1491,"slug":1497,"description":78,"image":1530},[9,14],[81,82,10],{"src":85,"alt":86},{"path":88,"title":89,"categories":1532,"tags":1533,"date":95,"draft":1491,"slug":1534,"description":90,"image":1535},[9,10],[93,94,43,41],"systemd-node-service",{"src":97,"alt":98},{"path":100,"title":101,"categories":1537,"tags":1538,"date":107,"draft":1491,"slug":1539,"description":102,"image":1540},[9,25],[105,10,106],"how-to-install-docker-on-ubuntu-server",{"src":109,"alt":110},{"path":112,"title":113,"categories":1542,"tags":1543,"date":118,"draft":1491,"slug":1544,"description":114,"image":1545},[9,14],[117,10,15],"ssh-key-authentication",{"src":120,"alt":121},{"path":123,"title":124,"categories":1547,"tags":1548,"date":131,"draft":1491,"slug":1549,"description":125,"image":1550},[9,14],[128,129,130,15],"ufw-firewall-basics",{"src":133,"alt":134},{"path":136,"title":137,"categories":1552,"tags":1553,"date":145,"draft":1491,"slug":1554,"description":138,"image":1555},[140,10],[142,143,144,30],"git-deploy-key",{"src":147,"alt":148},{"path":150,"title":151,"categories":1557,"tags":1558,"date":155,"draft":1491,"slug":1559,"description":152,"image":1560},[9],[106,105,15],"ubuntu-server-initial-setup",{"src":157,"alt":158},[],1789616168136]