- Sản phẩm & Dịch vụSản phẩm & Dịch vụ
- Giải phápGiải pháp
- Bảng giáBảng giá
- Công tyCông ty
- Tài liệuTài liệu
vi
vi
Chuyên mục với các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.
I’m Blue Strategist, walking beside businesses for 13 years to craft lasting security strategies, guiding them through ISO 27001, GDPR, and more. @#@ 13 năm đồng hành cùng các doanh nghiệp xây dựng chiến lược bảo mật bền vững, hỗ trợ tuân thủ SO 27001, GDPR,...Bảo mật không chỉ là công cụ, mà là một phần của văn hóa doanh nghiệp. Mỗi bài viết đều là tâm huyết của tôi mong được chia sẻ đến các doanh nghiệp
I’m Blue Strategist, walking beside businesses for 13 years to craft lasting security strategies, guiding them through ISO 27001, GDPR, and more. @#@ 13 năm đồng hành cùng các doanh nghiệp xây dựng chiến lược bảo mật bền vững, hỗ trợ tuân thủ SO 27001, GDPR,...Bảo mật không chỉ là công cụ, mà là một phần của văn hóa doanh nghiệp. Mỗi bài viết đều là tâm huyết của tôi mong được chia sẻ đến các doanh nghiệp
Thảo luận (0)
Đăng nhập để thảo luận
Iptables là một phần mềm tường lửa dành riêng cho các bản phân phối Linux. Dưới đây là toàn bộ kiến thức về các lệnh iptables quan trọng nhất để xây dựng quy tắc tường lửa trong doan nghiệp để vận hành thàng ngày. Bên cạnh các lý thuyết cơ bản, tôi sẽ đưa ra thêm các ví dụ thực tiễn về allow và block iptables qua port, mạng hoặc địa chỉ IP.

Bài viết này tập trung vào việc xây dựng các quy tắc tường lửa trong môi trường sử dụng input policy là DROP. Tức là, mặc định, mọi lưu lượng truy cập đến sẽ bị chặn, trừ khi được chỉ định cho phép rõ ràng. Quy trình:
telnet, ssh) để xác nhận.Lưu ý:
Quy tắc iptables là tạm thời, tức là cần được lưu thủ công để duy trì sau khi khởi động lại. Trên Ubuntu, gói iptables-persistent là một phương pháp để lưu trữ các rule này.
Cài đặt gói bằng lệnh sudo apt install iptables-persistent. Trong quá trình cài đặt, hệ thống sẽ hỏi bạn có muốn lưu các quy tắc tường lửa hiện tại hay không. Sau khi cập nhật các quy tắc tường lửa, hãy chạy lệnh sudo netfilter-persistent save để lưu các thay đổi. Các bản phân phối Linux khác có thể có các phương pháp thay thế để làm cho các thay đổi iptables của bạn trở thành vĩnh viễn.
Nội dung về listing và delete iptables rule khá phức tạp nên tôi đã viết 1 bài hướng dẫn riêng, mời bạn xem bài viết Các list và xóa rule của tường lửa Iptables.
Giao diện loopback, còn được gọi là lo, là giao diện mà máy tính sử dụng để chuyển tiếp các kết nối mạng đến chính nó. Ví dụ: nếu bạn chạy ping localhost hoặc ping 127.0.0.1, máy chủ của bạn sẽ ping chính nó bằng loopback. Giao diện loopback cũng được sử dụng nếu bạn cấu hình máy chủ ứng dụng để kết nối với máy chủ cơ sở dữ liệu bằng địa chỉ localhost. Do đó, bạn cần đảm bảo rằng tường lửa của bạn cho phép các kết nối này.
Để chấp nhận tất cả lưu lượng trên giao diện loopback, hãy chạy các lệnh sau:
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT
Vì lưu lượng mạng thường cần hai chiều—đến và đi—để hoạt động bình thường, nên thông thường sẽ tạo một quy tắc tường lửa cho phép lưu lượng đến đã được thiết lập và liên quan, để máy chủ cho phép lưu lượng trả về cho các kết nối đi do chính máy chủ khởi tạo. Bạn sử dụng lệnh:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Nếu bạn muốn cho phép lưu lượng đi của tất cả các kết nối đã được thiết lập, thường là phản hồi cho các kết nối đến hợp lệ, hãy sử dụng lệnh:
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
Giả sử eth0 là mạng bên ngoài và eth1 là mạng nội bộ của bạn, lệnh này sẽ cho phép mạng nội bộ của bạn truy cập mạng bên ngoài:
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Một số gói tin lưu lượng mạng được đánh dấu là không hợp lệ (invalid). Đôi khi, việc ghi nhật ký loại gói tin này có thể hữu ích, nhưng thường thì bạn chỉ cần loại bỏ chúng luôn. Sử dụng lệnh:
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Để chặn các kết nối mạng bắt nguồn từ một địa chỉ IP cụ thể, ví dụ: 203.0.113.51, hãy chạy lệnh này:
sudo iptables -A INPUT -s 203.0.113.51 -j DROP
Để chặn kết nối từ một địa chỉ IP cụ thể, ví dụ: 203.0.113.51, đến một giao diện mạng cụ thể, ví dụ: eth0, sử dụng lệnh:
iptables -A INPUT -i eth0 -s 203.0.113.51 -j DROP
Nếu bạn đang sử dụng máy chủ không có console cục bộ, bạn có thể sẽ muốn cho phép các kết nối SSH đến (cổng 22) để có thể kết nối và quản lý máy chủ của mình.
Sử dụng lệnh:
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối SSH đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép các kết nối SSH đến từ một địa chỉ IP hoặc mạng con cụ thể, hãy chỉ định nguồn. Ví dụ: nếu bạn muốn cho phép toàn bộ mạng con 203.0.113.0/24, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Nếu chính sách OUTPUT của tường lửa không được đặt thành ACCEPT và bạn muốn cho phép các kết nối SSH đi—máy chủ của bạn khởi tạo kết nối SSH đến một máy chủ khác—bạn có thể chạy các lệnh sau:
sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Rsync, chạy trên cổng 873, có thể được sử dụng để truyền tệp từ máy tính này sang máy tính khác.
Để cho phép các kết nối rsync đến từ một địa chỉ IP hoặc mạng con cụ thể, hãy chỉ định địa chỉ IP nguồn và cổng đích.
Ví dụ: nếu bạn muốn cho phép toàn bộ mạng con 203.0.113.0/24 có thể rsync đến máy chủ của bạn, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối rsync đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Máy chủ web, chẳng hạn như Apache và Nginx, thường nhận các yêu cầu trên cổng 80 và 443 cho các kết nối HTTP và HTTPS, tương ứng. Nếu chính sách mặc định của bạn cho lưu lượng truy cập đến được đặt thành drop hoặc deny, hãy tạo các quy tắc cho phép máy chủ của bạn phản hồi các yêu cầu đó.
Để cho phép tất cả các kết nối HTTP (cổng 80) đến, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối HTTP đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép tất cả các kết nối HTTPS (cổng 443) đến, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối HTTP đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Nếu bạn muốn cho phép cả lưu lượng HTTP và HTTPS, bạn có thể sử dụng mô-đun multiport để tạo một quy tắc cho phép cả hai cổng. Để cho phép tất cả các kết nối HTTP và HTTPS (cổng 443) đến, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối HTTP và HTTPS đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
MySQL lắng nghe các kết nối máy khách trên cổng 3306. Nếu máy chủ cơ sở dữ liệu MySQL của bạn đang được sử dụng bởi một máy khách trên một máy chủ từ xa, hãy đảm bảo cho phép lưu lượng đó.
Để cho phép các kết nối MySQL đến từ một địa chỉ IP hoặc mạng con cụ thể, hãy chỉ định nguồn. Ví dụ: nếu bạn muốn cho phép toàn bộ mạng con2 203.0.113.0/24, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối MySQL đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép các kết nối MySQL đến một giao diện mạng cụ thể—ví dụ, bạn có một giao diện mạng riêng eth1—hãy sử dụng các lệnh sau:
sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối MySQL đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
PostgreSQL lắng nghe các kết nối máy khách trên cổng 5432. Nếu máy chủ cơ sở dữ liệu PostgreSQL của bạn đang được sử dụng bởi một máy khách trên một máy chủ từ xa, bạn cần đảm bảo cho phép lưu lượng đó.
Để cho phép các kết nối PostgreSQL đến từ một địa chỉ IP hoặc mạng con cụ thể, hãy chỉ định nguồn. Ví dụ: nếu bạn muốn cho phép toàn bộ mạng con3 203.0.113.0/24, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối PostgreSQL đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép các kết nối PostgreSQL đến một giao diện mạng cụ thể—ví dụ, bạn có một giao diện mạng riêng eth1—hãy sử dụng các lệnh sau:
sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối PostgreSQL đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Máy chủ mail, chẳng hạn như Sendmail và Postfix, lắng nghe trên nhiều cổng khác nhau tùy thuộc vào giao thức được sử dụng để phân phối mail. Nếu bạn đang chạy một máy chủ mail, hãy xác định giao thức bạn đang sử dụng và cho phép các loại lưu lượng thích hợp. Dưới đây là cách tạo một quy tắc để chặn mail SMTP đi.
Nếu máy chủ của bạn không nên gửi mail đi, bạn có thể muốn chặn loại lưu lượng đó. Để chặn mail SMTP đi, sử dụng cổng 25, hãy chạy lệnh sau:
sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT
Điều này cấu hình iptables để từ chối tất cả lưu lượng đi trên cổng 25. Nếu bạn cần từ chối một dịch vụ khác theo số cổng của nó, thay vì cổng 25, hãy thay thế số cổng đó cho 25 ở trên.
Để cho phép máy chủ của bạn phản hồi các kết nối SMTP trên cổng 25, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối SMTP đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép máy chủ của bạn phản hồi các kết nối IMAP, cổng 143, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối IMAP đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép máy chủ của bạn phản hồi các kết nối IMAPS, cổng 993, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối IMAPS đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép máy chủ của bạn phản hồi các kết nối POP3, cổng 110, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối POP3 đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép máy chủ của bạn phản hồi các kết nối POP3S, cổng 995, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lệnh thứ hai, cho phép lưu lượng đi của các kết nối POP3 đã được thiết lập, chỉ cần thiết nếu chính sách OUTPUT không được đặt thành ACCEPT.
Để cho phép máy chủ của bạn phản hồi các kết nối POP3S, cổng 995, hãy chạy các lệnh sau:
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Kết luận: Hy vọng hướng dẫn về cách sử dụng các rule trong Iptables này đã mang lại nhiều thông tin hữu ích cho bạn. Đăng ký nhận tin để được cập nhật nhiều kiến thức qua các bài viết mới của chúng tôi.
Bài viết cùng chủ đề: