Hướng dẫn cấu hình tường lửa Linux cho Docker Swarm trên Ubuntu 16.04
Giới thiệu
Docker Swarm là một tính năng của Docker giúp dễ dàng chạy các host và container Docker trên quy mô lớn. Một Docker Swarm, hoặc Docker cluster, được tạo thành từ một hoặc nhiều máy chủ Dockerized có chức năng như quản lý, và bất kỳ số lượng các node worker. Thiết lập một hệ thống như vậy đòi hỏi phải thao tác cẩn thận tường lửa Linux.
Cổng mạng được yêu cầu để chạy Docker Swarm là:
- TCP port
2376
cho việc bảo mật giao tiếp của các Docker client. Cổng này được yêu cầu để chạy Docker Machine. Docker Machine được dùng để bố trí các host Docker. - TCP port
2377
. Cổng này được dùng để giao tiếp giữa các node của Docker Swarm hay cluster. Ta chỉ cần nó để mở các node quản lí. - TCP và UDP port
7946
cho việc giao tiếp giữa các node (container network discovery). - UDP port
4789
cho việc chồng các lưu lượng mạng (container ingress networking).
Lưu ý: Bên cạnh những cổng trên, cổng22 ( cho SSH) và bất cứ cổng nào cần cho việc chạy các dịch vụ cụ thể trên cluster phải để mở.
Trong bài viết này, bạn sẽ tìm hiểu cách cấu hình tường lửa Linux trên Ubuntu 16.04 bằng cách sử dụng các ứng dụng quản lý tường lửa khác nhau có sẵn trên tất cả các bản phân phối Linux. Những ứng dụng quản lý tường lửa đó là FirewallD, IPTables Tools và UFW, Uncomplicated Firewall. UFW là ứng dụng tường lửa mặc định trên các bản phân phối Ubuntu, bao gồm cả Ubuntu 16.04. Vì hướng dẫn này bao gồm ba phương pháp ,và mỗi phương pháp đều mang lại kết quả tương tự nên bạn có thể chọn kết quả bạn quen thuộc nhất
Điều kiện cần
Trước khi thực hiện bài hướng dẫn này bạn nên:
- Cài đặt các máy chủ tạo cluster của bạn, bao gồm ít nhất một swarm manager và một swarm worker.
Lưu ý: Bạn phải lưu ý rằng các command( và tất cả các command trong bài hướng dẫn này) không được thêm tiền tốsudo
. Bạn phải làm vậy vì nó cho rằng bạn đăng nhập vào server sử dụng command docker-machine ssh
csau khi cho phép nó sử dụng Docker Machine
Cách 1 — Mở các cổng Docker Swarm sử dụng UFW
Nếu bạn đã cài đặt các host Docker thì UFW đã được cài đặt. Bạn chỉ cần mở và cấu hình chi nó.
Chạy các command sau trên các node có vai trò là Swarm manager:
$ ufw allow 22/tcp
$ ufw allow 2376/tcp
$ ufw allow 2377/tcp
$ ufw allow 7946/tcp
$ ufw allow 7946/udp
$ ufw allow 4789/udp
Sau đó, reload UFW:
$ ufw reload
Nếu UFW không được mở, dùng command sau:
$ ufw enable
Cái này có thể không cần thiết nhưng nó không bao giờ gây hại để khởi động lại daemon Docker bất cứ lúc nào bạn thay đổi vào khởi động lại tường lửa.
systemctl restart docker
Sau đó trên mỗi node hoạt động như một worker, chạy command sau:
$ ufw allow 22/tcp
$ ufw allow 2376/tcp
$ ufw allow 7946/tcp $ ufw allow 7946/udp $ ufw allow 4789/udp
Sau đó, reload UFW:
$ ufw reload
Nếu UFW không chạy, kích hoạt nó:
$ ufw enable
Sau đó khởi động lại daemon Docker:
systemctl restart docker
Đó là tất cả những gì bạn cần để mở các cổng cần thiết cho Docker Swarm dùng UFW.
Cách 2 — Mở các cổng Docker Swarm dùng FirewallD
FirewallD là ứng dụng tường lửa mặc định trên Fedora, CentOS và các bản phân phối Linux khác dựa trên chúng. Nhưng FirewallD cũng có sẵn trên các bản phân phối Linux khác, bao gồm cả Ubuntu 16.04
Nếu bạn chọn dùng Firewall ID thay vì UFW thì đầu tiên hãy bỏ cài đặt UFW: $apt-get purge ufw
Sau đó cài đặt FirewallD:
$ apt-get install firewalld
Xác minh rằng nó đang chạy:
$ systemctl status firewalld
Nếu nó không chạy, khởi động nó:
$ systemctl start firewalld
Sau đó mở nó để nó chạy trên boot:
$ systemctl enable firewalld
Trên node sẽ là Swarm manager, dùng các command sau để mở các cổng cần thiết:
$ firewall-cmd --add-port=22/tcp --permanent $ 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 xoá cái vừa nhập, gõ: firewall-cmd --remove-port=port-number/tcp —permanent
.
Sau đó load lại tường lửa:
$ firewall-cmd --reload
Sau đó khởi động lại Docker:
$ systemctl restart docker
Trên mỗi node sẽ hoạt động như Swarm worker, dùng command sau:
$ firewall-cmd --add-port=22/tcp --permanent $ 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 đó load lại tường lửa:
$ firewall-cmd --reload
Sau đó khởi động lại Docker.
systemctl restart docker
Bạn đã sử dụng FirewallD thành công để mở các cổng cần thiết cho Docker Swarm.
Cách 3 — Opening Docker Swarm Ports Using IPTables
Để sử dụng các 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 tường lửa nào khác. Nếu bạn đang chuyển từ FirewallD hoặc UFW, trước tiên hãy gỡ cài đặt chúng
Sau đó cài đặt gói iptables-persistent quản lí việc load tự động của IPtables.
$ apt-get install iptables-persistent
Tiếp theo xoá mọi quy tắc hiện có với command này:
$ netfilter-persistent flush
Bây giờ bạn có thể thêm các quy tắc sử dụng tính năng iptables. Tập command đầu tiên này nên được xử lí trên các node đóng vai trò là các Swarm manager .
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT $ iptables -A INPUT -p tcp --dport 2376 -j ACCEPT $ iptables -A INPUT -p tcp --dport 2377 -j ACCEPT $ iptables -A INPUT -p tcp --dport 7946 -j ACCEPT $ iptables -A INPUT -p udp --dport 7946 -j ACCEPT $ iptables -A INPUT -p udp --dport 4789 -j ACCEPT
Sau khi bạn nhập tất cả các command trên, lưu các quy tắc tới các ổ đĩa:
$ netfilter-persistent save
Sau đó khởi động lại Docker.
$ sudo systemctl restart docker
Trên các node với vai trò là Swarm worker, dùng các command sau:
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT $ iptables -A INPUT -p tcp --dport 2376 -j ACCEPT $ iptables -A INPUT -p tcp --dport 7946 -j ACCEPT $ iptables -A INPUT -p udp --dport 7946 -j ACCEPT $ iptables -A INPUT -p udp --dport 4789 -j ACCEPT
Lưu các quy tắc mới tới ổ đĩa:
$ netfilter-persistent save
Sau đó khởi động lại Docker:
$ sudo systemctl restart docker
Đó là tất cả những gì cần để mở các cổng cần thiết cho Docker Swarm sử dụng IPtables.
Nếu bạn muốn thay đổi sang FirewallD hay UFW sau khi dùng cách này thì cách thích hợp nhất là chặn tường lửa:
$ sudo netfilter-persistent stop
Sau đó xoá các quy tắc:
$ sudo netfilter-persistent flush
Sau đó lưu các tables trống tới ở đĩa:
$ sudo netfilter-persistent save
Sau đó bạn có thể đổi sangUFW hoặc FirewallD.
Kết luận
FirewallD, IPTables Tools và UFW là ba ứng dụng quản lý tường lửa trong thế giới Linux. Bạn chỉ cần học cách sử dụng từng cổng để mở các cổng mạng cần thiết để thiết lập Docker Swarm. Phương pháp nào bạn sử dụng chỉ là vấn đề sở thích cá nhân, vì chúng đều có khả năng như nhau.