Jail là thuật ngữ dùng để chỉ ảo hóa cấp hệ điều hành trên FreeBSD. Thuật ngữ này được Poul-Henning Kamp giới thiệu vào năm 1999 và được FreeBSD áp dụng kể từ phiên bản 4.x.
Jail cho phép quản trị viên hệ thống tạo một hệ thống nhỏ hoặc 'jail' độc lập và riêng biệt bên trong hệ thống FreeBSD. 'Jail' có hệ thống gốc và cấu hình riêng, và rất hữu ích nếu bạn muốn triển khai ứng dụng trong môi trường riêng biệt.
Iocage là trình quản lý jail FreeBSD được viết bằng Python. Trình quản lý này đơn giản và có cú pháp lệnh dễ sử dụng. Trình quản lý jail Iocage dành riêng cho tập dữ liệu ZFS bên trong jail và cho phép bạn tạo một jail dựa trên các ngăn xếp mạng ảo 'VNET' và/hoặc jail dựa trên 'Shared IP'. Với Iocage, bạn có thể tạo mẫu jail, jail cơ sở và jail thông thường.
Hướng dẫn này sẽ chỉ cho bạn cách thiết lập và cấu hình jail FreeBSD bằng Iocage Jail Manager. Chúng tôi sẽ cài đặt Iocage trên FreeBSD, thiết lập một jail mới sử dụng IP được chia sẻ, thiết lập tường lửa pf, sau đó cài đặt máy chủ web nginx bên trong jail để thử nghiệm.
Dưới đây là hướng dẫn cài đặt FreeBSD trên ZFS và cấu hình tường lửa pf.
Cách cài đặt FreeBSD 12.0 trên ZFS
Cách thiết lập Tường lửa pf trên FreeBSD
Cài đặt Iocage vào hệ thống FreeBSD bằng lệnh pkg bên dưới.
Nhập 'y' để chấp nhận cài đặt gói python Iocage và quá trình cài đặt sẽ bắt đầu.
Sau khi quá trình cài đặt hoàn tất, hãy kiểm tra nhóm ZFS khả dụng trên hệ thống bằng lệnh zpool bên dưới.
Bây giờ hãy chọn nhóm ZFS để cài đặt Iocage. Đối với hướng dẫn này, chúng tôi sẽ sử dụng nhóm ZFS mặc định cho FreeBSD được cài đặt có tên là 'zroot'.
Kích hoạt nhóm 'zroot' để sử dụng Iocage bằng lệnh bên dưới.
Bây giờ quá trình cài đặt Iocage trên FreeBSD 12.0 đã hoàn tất và bạn có thể sử dụng dòng lệnh iocage để tạo và quản lý FreeBSD jail.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22218%22%3E%3C/svg%3E
Ngoài ra, bạn có thể bật jail khi khởi động hệ thống bằng cách thêm dịch vụ iocage vào tệp '/etc/rc.conf' bằng lệnh sysrc bên dưới.
Kiểm tra các phiên bản Release khả dụng bằng lệnh iocage bên dưới.
Bây giờ, bạn sẽ nhận được một phiên bản Release khác. Chọn phiên bản bạn cần và nhập số. Chọn số '2' để tải xuống phiên bản Phát hành mới nhất.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22352%22%3E%3C/svg%3E
Đợi ảnh phát hành FreeBSD được tải xuống.
Nếu bạn muốn tải xuống một ảnh khác, bạn có thể sử dụng lệnh sau.
Kết quả là, Đã tải xuống ảnh phát hành FreeBSD cho jail.
Thêm cấu hình mới vào tệp '/etc/rc.conf' bằng cách chạy lệnh sau.
Tạo một giao diện 'bridge0' mới với địa chỉ IP mạng '10.8.8.1/24'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22207%22%3E%3C/svg%3E
Bây giờ giao diện 'bridge0' đã được tạo, hãy kiểm tra nó bằng lệnh sau.
Và bạn sẽ nhận được kết quả như bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22262%22%3E%3C/svg%3E
Tiếp theo, chúng ta sẽ cấu hình tường lửa pf và thêm cấu hình mới cho môi trường jail. Chúng tôi đang sử dụng cấu hình tường lửa pf đơn giản trong hướng dẫn này.
Cách thiết lập tường lửa pf trên FreeBSD 12.0
Vào thư mục '/usr/local/etc' và chỉnh sửa tệp cấu hình 'pf.conf'.
Thêm giao diện mạng nội bộ 'bridge0' và địa chỉ IP của nó là 'int_if' và 'localnet' biến.
Bây giờ hãy xác định địa chỉ IP của máy chủ jail và các cổng sẽ được chuyển tiếp đến jail. Chúng tôi sẽ chuyển tiếp các kết nối HTTP và HTTPS trên giao diện bên ngoài của hệ thống đến địa chỉ IP của máy chủ jail là '10.8.8.5'.
Bật nat trên giao diện bên ngoài 'ext_if' cho biến 'localnet' của jail, sau đó bật chuyển hướng cổng từ biến 'ports_to_forward' đến máy chủ 'forward_host'.
Bây giờ hãy chuyển tất cả kết nối từ giao diện 'bridge0' và chuyển kết nối đến trên giao diện bên ngoài đến 'ports_to_forward' HTTP và HTTPS.
Lưu và đóng.
Bây giờ hãy kiểm tra cấu hình tường lửa pf và đảm bảo không có lỗi, sau đó tải lại pf dịch vụ.
Sau đó, kiểm tra tất cả các quy tắc trên tường lửa pf bằng lệnh sau.
Và bạn sẽ nhận được kết quả như bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22397%22%3E%3C/svg%3E
Ngoài ra, bạn có thể kiểm tra trạng thái nat trên tường lửa pf.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22271%22%3E%3C/svg%3E
Kết quả là giao diện mới 'bridge0' đã được tạo và tường lửa pf đã được cấu hình. Và chúng ta đã sẵn sàng để tạo nhà tù đầu tiên mới.
Dưới đây là cấu hình tường lửa pf đầy đủ.
Tạo một jail mới có tên là 'jail01' với bản phát hành FreeBSD '12.0-RELEASE' bằng lệnh iocage bên dưới.
Bây giờ hãy thêm địa chỉ IP và cổng định tuyến mặc định của jail. Chúng tôi sẽ cấp cho 'jail01' địa chỉ IP là 10.8.8.5' và cổng định tuyến mặc định là địa chỉ IP máy chủ 'bridge0' là '10.8.8.1'.
Cho phép jail khởi động khi khởi động.
Bây giờ hãy kiểm tra danh sách jail.
Và bạn sẽ nhận được 'jail01' với địa chỉ IP '10.8.8.5' và dựa trên bản phát hành FreeBSD '12.0'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22476%22%3E%3C/svg%3E
Tiếp theo, khởi động 'jail01' bằng lệnh bên dưới.
Sau khi jail khởi động, hãy truy cập jail bằng lệnh sau.
Bạn sẽ nhận được một shell mới bên trong jail01, như hiển thị bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22598%22%3E%3C/svg%3E
Bên trong jail, hãy kiểm tra địa chỉ IP của giao diện 'bridge0' trên 'jail01'.
Và bạn sẽ nhận được giao diện 'bridge0' có địa chỉ IP '10.8.8.5' như đã cấu hình.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22241%22%3E%3C/svg%3E
Kết quả là, một jail mới có tên là 'jail01' đã được tạo.
Đầu tiên, hãy cập nhật các gói nhị phân trên jail bằng lệnh pkg bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22309%22%3E%3C/svg%3E
Sau đó, cài đặt máy chủ web nginx bên trong jail bằng gói sau lệnh.
Sau khi cài đặt hoàn tất, hãy thêm dịch vụ nginx vào hệ thống khởi động và khởi động dịch vụ nginx.
Bây giờ hãy kiểm tra danh sách cổng mở trên 'jail01'.
Và bạn sẽ thấy dịch vụ Nginx đang hoạt động ở cổng HTTP '80'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22284%22%3E%3C/svg%3E
Tiếp theo, chúng ta sẽ thay đổi trang index.html mặc định trên 'jail01'.
Đi đến Thư mục '/usr/loca/www/' và chỉnh sửa tệp 'index.html'.
Thực hiện một số thay đổi và thoát.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22623%22%3E%3C/svg%3E
Bây giờ hãy truy cập địa chỉ IP bên ngoài của máy chủ từ trình duyệt web của bạn.
Và bạn sẽ nhận được trang nginx index.html bên trong 'jail01'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22262%22%3E%3C/svg%3E
Kết quả là, 'jail01' đã hoạt động và được cài đặt Nginx. Tất cả các kết nối HTTP và HTTPS tới máy chủ sẽ được chuyển hướng đến 'jail01'.
Jail cho phép quản trị viên hệ thống tạo một hệ thống nhỏ hoặc 'jail' độc lập và riêng biệt bên trong hệ thống FreeBSD. 'Jail' có hệ thống gốc và cấu hình riêng, và rất hữu ích nếu bạn muốn triển khai ứng dụng trong môi trường riêng biệt.
Iocage là trình quản lý jail FreeBSD được viết bằng Python. Trình quản lý này đơn giản và có cú pháp lệnh dễ sử dụng. Trình quản lý jail Iocage dành riêng cho tập dữ liệu ZFS bên trong jail và cho phép bạn tạo một jail dựa trên các ngăn xếp mạng ảo 'VNET' và/hoặc jail dựa trên 'Shared IP'. Với Iocage, bạn có thể tạo mẫu jail, jail cơ sở và jail thông thường.
Hướng dẫn này sẽ chỉ cho bạn cách thiết lập và cấu hình jail FreeBSD bằng Iocage Jail Manager. Chúng tôi sẽ cài đặt Iocage trên FreeBSD, thiết lập một jail mới sử dụng IP được chia sẻ, thiết lập tường lửa pf, sau đó cài đặt máy chủ web nginx bên trong jail để thử nghiệm.
Điều kiện tiên quyết
Đối với hướng dẫn này, bạn sẽ được yêu cầu cài đặt và cấu hình Iocage Jail Manager trên hệ thống FreeBSD được cài đặt trên ZFS (Z File System). Và hãy đảm bảo rằng bạn đã bật Tường lửa pf trên hệ thống FreeBSD của mình.Dưới đây là hướng dẫn cài đặt FreeBSD trên ZFS và cấu hình tường lửa pf.
Cách cài đặt FreeBSD 12.0 trên ZFS
Cách thiết lập Tường lửa pf trên FreeBSD
Những gì chúng ta sẽ làm:
- Cài đặt Trình quản lý Iocage Jail
- Tải xuống Bản phát hành FreeBSD
- Thiết lập IP được chia sẻ và Tường lửa pf
- Tạo Jail mới bằng Iocage
- Kiểm tra
Bước 1 - Cài đặt Iocage trên FreeBSD
Đầu tiên, chúng ta sẽ cài đặt và cấu hình trình quản lý Iocage Jail trên hệ thống FreeBSD. Iocage được viết bằng Python và có sẵn trong kho lưu trữ gói nhị phân FreeBSD.Cài đặt Iocage vào hệ thống FreeBSD bằng lệnh pkg bên dưới.
Mã:
pkg install py36-iocage
Sau khi quá trình cài đặt hoàn tất, hãy kiểm tra nhóm ZFS khả dụng trên hệ thống bằng lệnh zpool bên dưới.
Mã:
zpool list
Kích hoạt nhóm 'zroot' để sử dụng Iocage bằng lệnh bên dưới.
Mã:
iocage activate zroot
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22218%22%3E%3C/svg%3E
Ngoài ra, bạn có thể bật jail khi khởi động hệ thống bằng cách thêm dịch vụ iocage vào tệp '/etc/rc.conf' bằng lệnh sysrc bên dưới.
Mã:
sysrc iocage_enable=yes
Bước 2 - Tải xuống FreeBSD Phát hành
Để tạo một jail mới, bạn sẽ cần tải xuống FreeBSD Release. Và bạn có thể tạo một jail mới là phiên bản khác của phiên bản FreeBSD lưu trữ của bạn.Kiểm tra các phiên bản Release khả dụng bằng lệnh iocage bên dưới.
Mã:
iocage fetch
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22352%22%3E%3C/svg%3E
Đợi ảnh phát hành FreeBSD được tải xuống.
Nếu bạn muốn tải xuống một ảnh khác, bạn có thể sử dụng lệnh sau.
Mã:
iocage fetch 11.3-RELEASE
Bước 3 - Thiết lập IP chia sẻ và tường lửa Pf
Sau khi tải xuống ảnh nguồn cho jail, chúng tôi sẽ cấu hình mạng và tường lửa pf trên hệ thống. Chúng tôi sẽ tạo một giao diện mạng mới có tên là 'bridge0' với địa chỉ IP mạng là '10.8.8.1/24' và nó sẽ được jail sử dụng.Thêm cấu hình mới vào tệp '/etc/rc.conf' bằng cách chạy lệnh sau.
Mã:
sysrc cloned_interfaces+="bridge0"
sysrc ifconfig_bridge0="10.8.8.1/24"
Mã:
ifconfig bridge0 create
ifconfig bridge0 10.8.8.1/24 up
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22207%22%3E%3C/svg%3E
Bây giờ giao diện 'bridge0' đã được tạo, hãy kiểm tra nó bằng lệnh sau.
Mã:
ifconfig bridge0
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22262%22%3E%3C/svg%3E
Tiếp theo, chúng ta sẽ cấu hình tường lửa pf và thêm cấu hình mới cho môi trường jail. Chúng tôi đang sử dụng cấu hình tường lửa pf đơn giản trong hướng dẫn này.
Cách thiết lập tường lửa pf trên FreeBSD 12.0
Vào thư mục '/usr/local/etc' và chỉnh sửa tệp cấu hình 'pf.conf'.
Mã:
cd /usr/local/etc/
vim pf.conf
Mã:
# Internal interface
int_if = "bridge0"
localnet = $int_if:network
Mã:
# Port-Forward http and https to Jail '10.8.8.5'
ports_to_forward="{ 80, 443 }"
forward_host="10.8.8.5"
Mã:
# nat jail to internet and internet to jail (http and https only)
nat on $ext_if inet from $localnet to any -> ($ext_if)
rdr on $ext_if proto tcp from any to any port $ports_to_forward -> $forward_host
Mã:
pass from { self, $localnet } to any keep state
pass in on $ext_if proto {udp, tcp} from any to any port $ports_to_forward keep state
Bây giờ hãy kiểm tra cấu hình tường lửa pf và đảm bảo không có lỗi, sau đó tải lại pf dịch vụ.
Mã:
service pf check
service pf reload
Mã:
pfctl -s rules
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22397%22%3E%3C/svg%3E
Ngoài ra, bạn có thể kiểm tra trạng thái nat trên tường lửa pf.
Mã:
pfctl -v -s nat
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22271%22%3E%3C/svg%3E
Kết quả là giao diện mới 'bridge0' đã được tạo và tường lửa pf đã được cấu hình. Và chúng ta đã sẵn sàng để tạo nhà tù đầu tiên mới.
Dưới đây là cấu hình tường lửa pf đầy đủ.
Mã:
cat /usr/local/etc/pf.conf
Mã:
# Define External Interface and IP Address
ext_if="vtnet0"
ext_ip="198.13.39.207"
# Define TCP and UDP Services
ext_tcp_ports="{ ssh, smtp, smtps, imaps, http, https, domain }"
ext_udp_ports="{ domain, ntp }"
# Internal interface
int_if = "bridge0"
localnet = $int_if:network
# Port-Forward http and https to Jail '10.8.8.5'
ports_to_forward="{ 80, 443 }"
forward_host="10.8.8.5"
# Skip the localhost
set skip on lo0
# Log interface
set loginterface $ext_if
# nat jail to internet and internet to jail (http and https only)
nat on $ext_if inet from $localnet to any -> ($ext_if)
rdr on $ext_if proto tcp from any to any port $ports_to_forward -> $forward_host
# Default Policy
block in all
pass out all keep state
# Allow Ping
pass inet proto icmp icmp-type echoreq
pass from { self, $localnet } to any keep state
pass in on $ext_if proto {udp, tcp} from any to any port $ports_to_forward keep state
# Allow Services
pass in proto tcp from any to any port $ext_tcp_ports
pass in proto tcp from any to any port $ext_udp_ports
# Log access for ssh and http
pass log quick proto tcp from any to any port { ssh,http }
Bước 4 - Tạo nhà tù mới bằng Iocage
Sau khi cấu hình mạng và tường lửa pf trên hệ thống FreeBSD, chúng ta đã sẵn sàng tạo một jail mới bằng iocage.Tạo một jail mới có tên là 'jail01' với bản phát hành FreeBSD '12.0-RELEASE' bằng lệnh iocage bên dưới.
Mã:
iocage create -n jail01 -r 12.0-RELEASE
Mã:
iocage set ip4_addr="bridge0|10.8.8.5" jail01
iocage set defaultrouter="10.8.8.1" jail01
Mã:
iocage set boot=on jail01
Mã:
iocage list
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22476%22%3E%3C/svg%3E
Tiếp theo, khởi động 'jail01' bằng lệnh bên dưới.
Mã:
iocage start jail01
Mã:
iocage console jail01
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22598%22%3E%3C/svg%3E
Bên trong jail, hãy kiểm tra địa chỉ IP của giao diện 'bridge0' trên 'jail01'.
Mã:
ifconfig bridge0
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22241%22%3E%3C/svg%3E
Kết quả là, một jail mới có tên là 'jail01' đã được tạo.
Bước 5 - Kiểm tra
Trong bước này, chúng ta sẽ kiểm tra 'jail01' bằng cách cài đặt máy chủ web Nginx trên đó và sau đó thử truy cập Nginx từ bên ngoài mạng và kết nối sẽ được chuyển hướng đến 'jail01'.Đầu tiên, hãy cập nhật các gói nhị phân trên jail bằng lệnh pkg bên dưới.
Mã:
pkg update
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22309%22%3E%3C/svg%3E
Sau đó, cài đặt máy chủ web nginx bên trong jail bằng gói sau lệnh.
Mã:
pkg install nginx
Mã:
sysrc nginx_enable=yes
service nginx start
Mã:
sockstat -l4
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22284%22%3E%3C/svg%3E
Tiếp theo, chúng ta sẽ thay đổi trang index.html mặc định trên 'jail01'.
Đi đến Thư mục '/usr/loca/www/' và chỉnh sửa tệp 'index.html'.
Mã:
cd /usr/local/www/
edit nginx-dist/index.html
Mã:
cat nginx-dist/index.html
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22623%22%3E%3C/svg%3E
Bây giờ hãy truy cập địa chỉ IP bên ngoài của máy chủ từ trình duyệt web của bạn.
Đang tải…
198.xx.xx.207
Và bạn sẽ nhận được trang nginx index.html bên trong 'jail01'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22262%22%3E%3C/svg%3E
Kết quả là, 'jail01' đã hoạt động và được cài đặt Nginx. Tất cả các kết nối HTTP và HTTPS tới máy chủ sẽ được chuyển hướng đến 'jail01'.