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 4789cho 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
Giới thiệu về thuật ngữ và khái niệm 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
Cách phân vùng và định dạng thiết bị 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
 

