Các bước được đề xuất cho server FreeBSD 10.1 mới
Khi cài đặt server FreeBSD mới, bạn có thể thực hiện một số bước tùy chọn để đưa server của bạn sang trạng thái thân thiện với production hơn. Trong hướng dẫn này, ta sẽ đề cập đến một số ví dụ phổ biến nhất.Ta sẽ xem xét cách cài đặt firewall đơn giản, dễ cấu hình để từ chối hầu hết lưu lượng truy cập. Ta cũng sẽ đảm bảo múi giờ server của bạn phản ánh chính xác vị trí của nó. Ta sẽ cài đặt tính năng thăm dò NTP để giữ cho thời gian của server chính xác và cuối cùng, ta sẽ trình bày cách thêm một số không gian swap bổ sung vào server của bạn.
Trước khi bắt đầu với hướng dẫn này, bạn nên đăng nhập và cấu hình môi trường shell của bạn theo cách bạn muốn. Bạn có thể xem cách thực hiện việc này theo hướng dẫn này .
Cách cấu hình firewall IPFW đơn giản
Nhiệm vụ đầu tiên mà ta sẽ giải quyết là cài đặt một firewall đơn giản để bảo vệ server của ta .
FreeBSD thực sự hỗ trợ và bao gồm ba firewall riêng biệt, mỗi firewall có điểm mạnh và điểm yếu riêng. Chúng được gọi là pf
, ipfw
và ipfilter
. Trong hướng dẫn này, ta sẽ sử dụng ipfw
vì ta có thể dễ dàng cài đặt và chạy với firewall trạng thái, an toàn.
Cấu hình firewall cơ bản
Hầu hết tất cả cấu hình của ta sẽ diễn ra trong file /etc/rc.conf
. Mở file đó với quyền sudo
trong editor :
sudo vi /etc/rc.conf
Bên trong, ta sẽ phải thêm một số dòng khác nhau để kích hoạt và kiểm soát cách hoạt động của firewall ipfw
. Hãy bắt đầu với các luật thiết yếu. Thêm những thứ này vào cuối file :
. . . firewall_enable="YES" firewall_quiet="YES"
Như bạn có thể mong đợi, dòng đầu tiên kích hoạt firewall ipfw
, khởi động nó tự động khi khởi động và cho phép khởi động nó bằng các lệnh service
thông thường.
Lệnh thứ hai yêu cầu ipfw
không xuất bất kỳ thứ gì ra tiêu chuẩn khi nó thực hiện các hành động nhất định. Điều này có vẻ như là một vấn đề ưu tiên, nhưng nó thực sự ảnh hưởng đến chức năng của firewall .
Hai yếu tố kết hợp để làm cho điều này trở thành một lựa chọn quan trọng. Đầu tiên là kịch bản cấu hình firewall được thực thi trong môi trường shell hiện tại, không phải là tác vụ nền. Thứ hai là khi lệnh ipfw
đọc một tập lệnh cấu hình mà không có cờ “yên tĩnh”, nó lần lượt đọc và xuất ra từng dòng theo tiêu chuẩn. Khi nó xuất ra một dòng, nó ngay lập tức thực hiện hành động liên quan.
Hầu hết các file cấu hình firewall xóa các luật hiện tại ở đầu tập lệnh để bắt đầu với một phương tiện chặn rõ ràng. Nếu firewall ipfw
gặp một dòng như thế này mà không có cờ yên tĩnh, nó sẽ ngay lập tức xóa tất cả các luật và hoàn nguyên về policy mặc định của nó, thường là từ chối tất cả các kết nối. Nếu bạn đang cấu hình firewall qua SSH, điều này sẽ làm mất kết nối, đóng phiên shell hiện tại và không có luật nào tuân theo sẽ được xử lý, khóa bạn khỏi server một cách hiệu quả. Cờ yên tĩnh về cơ bản cho phép firewall xử lý các luật như một tập hợp thay vì triển khai từng luật riêng lẻ.
Sau hai dòng này, ta có thể bắt đầu cấu hình hành vi của firewall :
. . . firewall_type="workstation" firewall_myservices="22 80" firewall_allowservices="any" firewall_logdeny="YES"
Đầu tiên, ta chọn “máy trạm” làm loại firewall mà ta sẽ cấu hình. Đây là một firewall trạng thái với một số hành vi mặc định tốt. Nó cũng cho phép ta dễ dàng tùy chỉnh các dịch vụ ta muốn khách hàng để có thể truy cập bằng cách sử dụng các firewall_myservices
và firewall_allowservices
tùy chọn. Cuối cùng, ta cấu hình ipfw
để ghi lại bất kỳ kết nối nào bị từ chối bởi các luật đã cấu hình.
Tùy chọn firewall_myservices
nên được đặt thành danh sách các cổng hoặc dịch vụ TCP, được phân tách bằng dấu cách, có thể truy cập được trên server của bạn. Bạn có thể sử dụng các cổng như ta có ở đây ( ta đã cấu hình cổng 22 cho kết nối SSH và cổng 80 cho web server HTTP thông thường). Bạn cũng có thể sử dụng các dịch vụ theo tên. Các dịch vụ mà FreeBSD biết theo tên được liệt kê trong file /etc/services
. Ví dụ: ta có thể thay đổi ở trên thành thông tin như thế này:
firewall_myservices="ssh http"
Điều này sẽ có kết quả tương tự. Nếu bạn sử dụng SSL trên web server của bạn , hãy đảm bảo thêm cổng 443
hoặc dịch vụ https
vào danh sách này.
Các mục danh sách firewall_allowservices
là các client nên được phép truy cập vào các dịch vụ được cung cấp. Từ khóa “bất kỳ” nghĩa là bất kỳ khách hàng nào cũng có thể truy cập các dịch vụ này. Nếu ta muốn giới hạn những khách hàng có thể kết nối với dịch vụ của ta , ta có thể làm điều đó tại đây.
Tùy chọn firewall_logdeny
yêu cầu ipfw
ghi lại tất cả các nỗ lực kết nối bị từ chối vào một file nằm tại /var/log/security
.
Tất cả cùng nhau, phần này của file /etc/rc.conf
sẽ trông giống như sau:
. . . firewall_enable="YES" firewall_quiet="YES" firewall_type="workstation" firewall_myservices="22 80" firewall_allowservices="any" firewall_logdeny="YES"
Hãy nhớ điều chỉnh tùy chọn firewall_myservices
để tham chiếu đến các dịch vụ bạn muốn hiển thị cho khách hàng. Khi bạn hoàn tất, hãy lưu file .
Cho phép kết nối UDP
Các cổng và dịch vụ được liệt kê trong tùy chọn firewall_myservices
trong file /etc/rc.conf
cho phép truy cập các kết nối TCP. Nếu bạn có các dịch vụ mà bạn muốn hiển thị sử dụng UDP, bạn cần chỉnh sửa file /etc/rc.firewall
:
sudo vi /etc/rc.firewall
Ta đã cấu hình firewall của bạn để sử dụng loại firewall “máy trạm”, vì vậy hãy tìm phần giống như sau:
. . . [Ww][Oo][Rr][Kk][Ss][Tt][Aa][Tt][Ii][Oo][Nn]) . . .
Có một phần trong khối này là dành riêng cho xử lý firewall_allowservices
và firewall_myservices
giá trị mà ta cài đặt . Nó sẽ trông giống thế này:
for i in ${firewall_allowservices} ; do for j in ${firewall_myservices} ; do ${fwcmd} add pass tcp from $i to me $j done done
Sau phần này, bạn có thể thêm bất kỳ dịch vụ hoặc cổng nào chấp nhận gói UDP bằng cách thêm các dòng như sau:
${fwcmd} add pass udp from any to me port_num
Trong ví dụ trên, bạn có thể để từ khóa “bất kỳ” nếu kết nối được phép cho tất cả các client hoặc thay đổi nó thành địa chỉ IP hoặc dải mạng cụ thể. port_num
ở trên phải được thay thế bằng số cổng hoặc tên dịch vụ mà bạn muốn cho phép truy cập UDP. Ví dụ: nếu bạn đang chạy một server DNS, bạn có thể cần có một dòng trông giống như sau:
for i in ${firewall_allowservices} ; do for j in ${firewall_myservices} ; do ${fwcmd} add pass tcp from $i to me $j done done ${fwcmd} add pass udp from 192.168.2.0/24 to me 53
Điều này sẽ cho phép bất kỳ client nào từ trong phạm vi mạng 192.168.2.0/24
truy cập server DNS hoạt động trên cổng tiêu chuẩn 53. Lưu ý trong ví dụ này, bạn cũng muốn mở cổng này cho các kết nối TCP vì cổng này được sử dụng bởi DNS server để trả lời lâu hơn.
Lưu file khi bạn hoàn tất.
Khởi động firewall
Khi bạn hoàn thành cấu hình của bạn , bạn có thể khởi động firewall bằng lệnh :
sudo service ipfw start
Tường lửa phải xuất hiện chính xác, chặn lưu lượng truy cập không mong muốn trong khi tuân theo các dịch vụ và cổng được phép của bạn. Tường lửa này sẽ tự động khởi động mỗi lần khởi động.
Ta cũng muốn cấu hình giới hạn về số lần từ chối trên mỗi địa chỉ IP mà ta sẽ ghi lại. Điều này sẽ ngăn không cho log của ta được lấp đầy bởi một user duy nhất, liên tục. Bạn có thể thực hiện việc này trong file /etc/sysctl.conf
:
sudo vi /etc/sysctl.conf
Ở cuối file , ta có thể giới hạn ghi log của bạn ở mức “5” bằng cách thêm:
net.inet.ip.fw.verbose_limit=5
Lưu file khi bạn hoàn tất. Điều này sẽ cấu hình cài đặt đó trong lần khởi động tiếp theo.
Để thực hiện hành vi tương tự này cho phiên hiện đang hoạt động của bạn, ta có thể sử dụng chính lệnh sysctl
, như sau:
sudo sysctl net.inet.ip.fw.verbose_limit=5
Điều này sẽ ngay lập tức thực hiện giới hạn cho lần khởi động này.
Cách đặt múi giờ cho server của bạn
Bạn nên đặt đúng múi giờ cho server của bạn . Đây là bước quan trọng khi ta cấu hình đồng bộ hóa thời gian NTP trong phần tiếp theo.
FreeBSD đi kèm với một công cụ dựa trên menu gọi là tzsetup
để cấu hình múi giờ. Để đặt múi giờ cho server của bạn, hãy gọi lệnh này với các quyền sudo
:
sudo tzsetup
Bạn sẽ thấy màn hình menu đầu tiên hỏi xem đồng hồ phần cứng của bạn được đặt thành UTC hay giờ local :
Chọn “Không” ở đây. Tiếp theo, bạn cần chọn khu vực trên thế giới mà server của bạn đang đặt:
Tiếp theo, bạn cần chọn một vùng phụ hoặc quốc gia:
Cuối cùng, chọn múi giờ cụ thể phù hợp với server của bạn:
Xác nhận lựa chọn múi giờ được hiển thị dựa trên lựa chọn của bạn.
Đến đây, múi giờ của server của bạn phải trùng với lựa chọn bạn đã thực hiện.
Cách cấu hình NTP để giữ thời gian chính xác
Bây giờ ta đã cấu hình múi giờ trên server của bạn , ta có thể cài đặt NTP, hoặc Giao thức thời gian mạng, trên server của bạn . Điều này sẽ giúp giữ cho thời gian của server của bạn đồng bộ với những người khác trên toàn thế giới. Điều này rất quan trọng đối với các tương tác giữa client và server nhạy cảm với thời gian cũng như ghi log chính xác.
, ta có thể bật dịch vụ NTP trên server của bạn bằng cách điều chỉnh file /etc/rc.conf
. Mở cái này với các quyền của sudo
:
sudo vi /etc/rc.conf
Trong file này, thêm dòng sau:
ntpd_enable="YES"
Ta cũng cần thêm dòng thứ hai sẽ đồng bộ thời gian trên máy của ta với các server NTP từ xa khi khởi động. Điều này là cần thiết vì nó cho phép server của ta vượt quá giới hạn trôi dạt bình thường khi khởi tạo. Server của ta có thể sẽ nằm ngoài giới hạn trôi dạt khi khởi động vì múi giờ của ta sẽ được áp dụng trước khi khởi động daemon NTP, điều này sẽ bù đắp thời gian hệ thống của ta :
ntpd_enable="YES" ntpd_sync_on_start="YES"
Nếu ta không có dòng này, daemon NTP của ta sẽ không thành công khi khởi động do cài đặt múi giờ làm lệch thời gian hệ thống của ta trước khi quá trình khởi động.
Lưu file khi bạn hoàn tất.
Bạn có thể bắt đầu dịch vụ ntpd
của bạn bằng lệnh :
sudo service ntpd start
Điều này sẽ duy trì thời gian của server của bạn bằng cách đồng bộ hóa với các server NTP được liệt kê trong /etc/ntp.conf
.
Cách cấu hình không gian swap bổ sung
Trên các server FreeBSD được cấu hình trên DigitalOcean, 1 Gigabyte không gian swap được tự động cấu hình dù kích thước server của bạn. Bạn có thể thấy điều này bằng lệnh :
sudo swapinfo -g
Nó sẽ hiển thị thông tin như thế này:
Device 1G-blocks Used Avail Capacity /dev/gpt/swapfs 1 0 1 0%
Một số user và ứng dụng có thể cần nhiều không gian swap hơn mức này. Điều này có thể dễ dàng thực hiện bằng cách thêm file swap .
Điều đầu tiên ta cần làm là phân bổ một phần của hệ thống file cho file ta muốn sử dụng để swap . Ta sẽ sử dụng lệnh truncate
, có thể nhanh chóng phân bổ không gian khi đang di chuyển.
Trong hướng dẫn này, ta sẽ đặt file swap tại /swapfile
, nhưng bạn có thể sử dụng bất kỳ vị trí hợp lý nào trong hệ thống file . Tệp này sẽ cung cấp thêm 1 Gigabyte dung lượng swap . Bạn có thể điều chỉnh con số này bằng cách sửa đổi giá trị được cung cấp cho tùy chọn -s
.
sudo truncate -s 1G /swapfile
Sau khi ta phân bổ không gian, ta cần khóa quyền truy cập vào file . User bình thường sẽ không có bất kỳ quyền truy cập nào vào file :
sudo chmod 0600 /swapfile
Tiếp theo, liên kết một thiết bị giả với file của ta và cấu hình nó để mount khi khởi động bằng lệnh :
sudo sh -c 'echo "md99 none swap sw,file=/swapfile,late 0 0" >> /etc/fstab'
Lệnh trên thêm một dòng giống như thế này vào file /etc/fstab
:
md99 none swap sw,file=/swapfile,late 0 0
Sau khi dòng được thêm vào file /etc/fstab
ta , ta có thể kích hoạt file swap cho phiên bằng lệnh :
sudo swapon -aqL
Ta có thể xác minh file swap hiện đang hoạt động bằng cách sử dụng lại lệnh swapinfo
:
sudo swapinfo -g
Bạn sẽ thấy thiết bị bổ sung ( /dev/md99
) được liên kết với file swap của bạn:
Device 1G-blocks Used Avail Capacity /dev/gpt/swapfs 1 0 1 0% /dev/md99 1 0 1 0% Total 2 0 2 0%
Tệp swap này sẽ được tự động gắn vào mỗi lần khởi động.
Kết luận
Các bước được nêu trong hướng dẫn này được dùng để đưa server FreeBSD của bạn vào trạng thái sẵn sàng production hơn. Bằng cách cấu hình các yếu tố cơ bản cần thiết như firewall , đồng bộ hóa NTP và không gian swap thích hợp, server của bạn được dùng làm cơ sở tốt cho các cài đặt và dịch vụ trong tương lai.
Các tin liên quan