Cách cấu hình firewall Linux cho Docker Swarm trên CentOS 7
Docker Swarm là một tính năng của Docker giúp dễ dàng chạy các server và containers Docker trên quy mô lớn. Docker Swarm, hoặc cụm Docker, được tạo thành từ một hoặc nhiều server được Tài liệu hóa có chức năng như các node người quản lý và bất kỳ số lượng nút công nhân nào . Việc cài đặt một hệ thống như vậy đòi hỏi phải thao tác cẩn thận với firewall Linux.Các cổng mạng cần thiết để Docker Swarm hoạt động bình thường là:
- Cổng TCP
2376
để giao tiếp ứng dụng client Docker an toàn. Cổng này là cần thiết để Docker Machine hoạt động. Docker Machine được sử dụng để sắp xếp các server Docker. - Cổng TCP
2377
. Cổng này được sử dụng để giao tiếp giữa các node của một Docker Swarm hoặc cụm. Nó chỉ cần được mở trên các node quản lý. - Cổng TCP và UDP
7946
để giao tiếp giữa các node (khám phá mạng containers ). - Cổng UDP
4789
cho lưu lượng mạng lớp phủ (mạng xâm nhập containers ).
Lưu ý: Ngoài các cổng đó, cổng 22
(cho lưu lượng SSH) và bất kỳ cổng nào khác cần thiết cho các dịch vụ cụ thể chạy trên cụm phải được mở.
Trong bài này, bạn sẽ cấu hình firewall Linux trên CentOS 7 bằng FirewallD và IPTables. FirewallD là ứng dụng firewall mặc định trên CentOS 7, nhưng IPTables cũng có sẵn. Mặc dù hướng dẫn này bao gồm cả hai phương pháp, nhưng mỗi phương pháp đều mang lại kết quả giống nhau, vì vậy bạn có thể chọn phương pháp quen thuộc nhất.
Yêu cầu
Trước khi tiếp tục với bài viết này, bạn nên:
- Cài đặt các server tạo nên cụm của bạn, bao gồm ít nhất một người quản lý bầy đàn và một nhân viên bầy đàn. Bạn có thể làm theo hướng dẫn Cách Cung cấp và Quản lý Server Docker Từ xa bằng Máy Docker trên CentOS 7 ) để cài đặt những điều này.
Lưu ý: Bạn sẽ nhận thấy rằng các lệnh (và tất cả các lệnh trong bài viết này) không có tiền tố là sudo
. Đó là vì giả định bạn đã đăng nhập vào server bằng lệnh docker-machine ssh
sau khi cấp phép bằng Docker Machine.
Phương pháp 1 - Mở cổng Docker Swarm bằng FirewallD
FirewallD là ứng dụng firewall mặc định trên CentOS 7, nhưng trên server CentOS 7 mới, nó đã bị vô hiệu hóa. Vì vậy, hãy kích hoạt nó và thêm các cổng mạng cần thiết để Docker Swarm hoạt động.
Trước khi bắt đầu, hãy xác minh trạng thái của nó:
- systemctl status firewalld
Nó không nên chạy, vì vậy hãy khởi động nó:
- systemctl start firewalld
Sau đó, kích hoạt nó để nó bắt đầu khởi động:
- systemctl enable firewalld
Trên nút sẽ là trình quản lý Swarm, hãy sử dụng các lệnh sau để mở các cổng cần thiết:
- firewall-cmd --add-port=2376/tcp --permanent
- firewall-cmd --add-port=2377/tcp --permanent
- firewall-cmd --add-port=7946/tcp --permanent
- firewall-cmd --add-port=7946/udp --permanent
- firewall-cmd --add-port=4789/udp --permanent
Lưu ý : Nếu bạn mắc lỗi và cần xóa một mục nhập, hãy nhập:
firewall-cmd --remove-port= port-number /tcp —permanent
.
Sau đó, cập nhật firewall :
- firewall-cmd --reload
Sau đó khởi động lại Docker.
- systemctl restart docker
Sau đó, trên mỗi nút sẽ hoạt động như một nhân viên Swarm, hãy thực hiện các lệnh sau:
- firewall-cmd --add-port=2376/tcp --permanent
- firewall-cmd --add-port=7946/tcp --permanent
- firewall-cmd --add-port=7946/udp --permanent
- firewall-cmd --add-port=4789/udp --permanent
Sau đó, cập nhật firewall :
- firewall-cmd --reload
Sau đó khởi động lại Docker.
- systemctl restart docker
Bạn đã sử dụng thành công FirewallD để mở các cổng cần thiết cho Docker Swarm.
Lưu ý : Nếu bạn đang thử nghiệm các ứng dụng trên cụm yêu cầu quyền truy cập mạng bên ngoài, hãy đảm bảo mở các cổng cần thiết. Ví dụ: nếu bạn đang thử nghiệm một ứng dụng Web yêu cầu quyền truy cập trên cổng 80, hãy thêm luật cấp quyền truy cập vào cổng đó bằng cách sử dụng lệnh sau trên tất cả các node (người quản lý và nhân viên) trong cụm:
- firewall-cmd --add-port=80/tcp --permanent
Hãy nhớ cập nhật firewall khi bạn thực hiện thay đổi này.
Phương pháp 2 - Mở cổng Docker Swarm bằng IPTables
Để sử dụng IPTables trên bất kỳ bản phân phối Linux nào, trước tiên bạn sẽ phải gỡ cài đặt bất kỳ tiện ích firewall nào khác. Để chuyển sang IPTables từ FirewallD, trước tiên hãy dừng FirewallD:
- systemctl stop firewalld
Sau đó vô hiệu hóa nó
- systemctl disable firewalld
Sau đó, cài đặt gói iptables-services
, gói này quản lý việc tải tự động các luật IPTables:
- yum install iptables-services
Tiếp theo, khởi động IPTables:
- systemctl start iptables
Sau đó, kích hoạt nó để nó tự động khởi động khi server khởi động :
- systemctl enable iptables
Trước khi bạn bắt đầu thêm các luật dành riêng cho Docker Swarm vào chuỗi INPUT, hãy xem các luật mặc định trong chuỗi đó:
- iptables -L INPUT --line-numbers
Đầu ra sẽ giống hệt như sau:
OutputChain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Kết hợp lại với nhau, các luật mặc định cung cấp khả năng bảo vệ trạng thái cho server , từ chối tất cả lưu lượng đầu vào ngoại trừ những lưu lượng đã được cài đặt . Lưu lượng truy cập SSH được cho phép. Hãy chú ý đến luật số 5, được đánh dấu ở trên, vì đó là luật từ chối thông tin. Để Docker Swarm của bạn hoạt động bình thường, các luật bạn thêm cần phải được thêm vào bên trên luật này. Điều đó nghĩa là các luật mới cần phải được chèn, thay vì được nối vào chuỗi INPUT.
Đến đây bạn biết phải làm gì, bạn có thể thêm các luật bạn cần bằng cách sử dụng trình iptables
. Tập hợp lệnh đầu tiên này sẽ được thực thi trên các node sẽ đóng role là trình quản lý Swarm.
- iptables -I INPUT 5 -p tcp --dport 2376 -j ACCEPT
- iptables -I INPUT 6 -p tcp --dport 2377 -j ACCEPT
- iptables -I INPUT 7 -p tcp --dport 7946 -j ACCEPT
- iptables -I INPUT 8 -p udp --dport 7946 -j ACCEPT
- iptables -I INPUT 9 -p udp --dport 4789 -j ACCEPT
Các luật đó là luật thời gian chạy và sẽ bị mất nếu hệ thống được khởi động lại. Để lưu các luật thời gian chạy hiện tại vào file để chúng tồn tại sau khi khởi động lại, hãy nhập:
- /usr/libexec/iptables/iptables.init save
Các luật hiện được lưu vào một file có tên iptables
trong folder /etc/sysconfig
. Và nếu bạn xem các luật bằng iptables -L --line-numbers
, bạn sẽ thấy rằng tất cả các luật đã được chèn bên trên luật từ chối nhận tất cả:
OutputChain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 ACCEPT tcp -- anywhere anywhere tcp dpt:2376 6 ACCEPT tcp -- anywhere anywhere tcp dpt:7946 7 ACCEPT udp -- anywhere anywhere udp dpt:7946 8 ACCEPT udp -- anywhere anywhere udp dpt:4789 9 ACCEPT tcp -- anywhere anywhere tcp dpt:http 10 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Sau đó khởi động lại Docker.
Output- systemctl restart docker
Trên các node sẽ hoạt động như Swarm worker, hãy thực hiện các lệnh sau:
- iptables -I INPUT 5 -p tcp --dport 2376 -j ACCEPT
- iptables -I INPUT 6 -p tcp --dport 7946 -j ACCEPT
- iptables -I INPUT 7 -p udp --dport 7946 -j ACCEPT
- iptables -I INPUT 8 -p udp --dport 4789 -j ACCEPT
Lưu các luật vào đĩa:
- /usr/libexec/iptables/iptables.init save
Sau đó khởi động lại Docker:
- systemctl restart docker
Đó là tất cả những gì cần thiết để mở các cổng cần thiết cho Docker Swarm bằng IPTables. Bạn có thể tìm hiểu thêm về cách các luật này hoạt động trong hướng dẫn Cách hoạt động của Tường lửa IPTables .
Lưu ý : Nếu bạn đang thử nghiệm các ứng dụng trên cụm yêu cầu quyền truy cập mạng bên ngoài, hãy đảm bảo mở các cổng cần thiết. Ví dụ: nếu bạn đang thử nghiệm một ứng dụng Web yêu cầu quyền truy cập trên cổng 80, hãy thêm luật cấp quyền truy cập vào cổng đó bằng cách sử dụng lệnh sau trên tất cả các node (người quản lý và người lao động) trong cụm:
- iptables -I INPUT rule-number -p tcp --dport 80 -j ACCEPT
Đảm bảo chèn luật bên trên luật từ chối nhận thư.
Kết luận
FirewallD và IPTables là hai trong số những ứng dụng quản lý firewall phổ biến nhất trong thế giới Linux. Bạn chỉ cần đọc cách sử dụng chúng để mở các cổng mạng cần thiết để cài đặt Docker Swarm. Phương pháp bạn sử dụng chỉ là vấn đề sở thích cá nhân, bởi vì họ đều có khả năng như nhau.
Các tin liên quan
Cách cấu hình firewall Linux cho Docker Swarm trên Ubuntu 16.042017-01-09
Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP Stack) trên Debian 8
2016-12-20
Cách thiết lập xác thực Linux tập trung với FreeIPA trên CentOS 7
2016-12-15
Cách bảo vệ server của bạn chống lại lỗ hổng Linux COW bẩn
2016-10-31
Cách cấu hình TRIM định kỳ cho bộ lưu trữ SSD trên server Linux
2016-08-25
Cách bảo vệ server của bạn chống lại lỗ hổng HTTPoxy
2016-07-18
Cách phân vùng và định dạng thiết bị lưu trữ trong Linux
2016-07-13
Cách thực hiện các tác vụ quản trị cơ bản cho thiết bị lưu trữ trong Linux
2016-07-13
Giới thiệu về thuật ngữ và khái niệm lưu trữ trong Linux
2016-07-13
Cách cấu hình BIND làm server DNS Mạng riêng trên Ubuntu 16.04
2016-05-09