Việc cập nhật bản vá lỗi cho các phiên bản zimbra cũ có thể gây lỗi khó khắc phục và gây gián đoạn dịch vụ.
Đối với server zimbra đã bị hack thì việc khắc phục và cập nhật cũng rất khó khăn
Vì vậy việc lựa chọn cài đặt 1 server zimbra hoàn toàn mới và đồng bộ dữ liệu từ server zimbra cũ vẫn là phương án tối ưu nhất .
Server mail cũ : cài đặt zimbra 8.6.0
Server mail mới : cài đặt zimbra 8.8.15
Thực hiện di chuyển toàn bộ dữ liệu từ zimbra 8.6.0 sang zimbra 8.8.15
Yêu cầu : hạn chế downtime nhất có thể
Contents
1. Thao tác trên server cũ
Để thao tác không bị ngắt quãng do mất mạng, bạn nên thực hiện trong chế độ “screen”
1.2 Tạo thư mục chứa dữ liệu backup
# mkdir /migration # mkdir -p /migration/zimbra # chmod 777 /migration # chmod 777 /migration/zimbra # chown zimbra:zimbra /migration # chown zimbra:zimbra /migration/zimbra
1.2 Xuất toàn bộ tên miền hiện có trên server mail cũ
# su - zimbra # cd /migration/zimbra # mkdir domains # cd domains # zmprov gad | tee -a domains.txt (Xuất toàn bộ tên miền và lưu vào domains.txt)
1.3 Xuất toàn bộ tài khoản mail
# cd /migration/zimbra # mkdir accounts # cd accounts # zmprov gaaa | tee -a admins.txt ##Xuất tài khoản quản trị và lưu vào admins.txt
Xuất toàn bộ user thường và lưu vào users.txt
zmprov -l gaa | tee -a users.txt
###Nếu chỉ xuất user active thì dùng lệnh bên dưới:
zmprov -l sa "(zimbraAccountStatus=active)" | tee -a users.txt
1.4 Xuất thông tin user
# cd /migration/zimbra
# mkdir account_details
# cd account_details
# for user in `cat ../accounts/users.txt`
; do zmprov ga $user | grep -i Name: | tee -a $user.txt ; done
Nếu câu lệnh trên không hoạt động đúng, bạn sẽ cần gõ thủ công bằng tay
Bạn sẽ thấy màn hình xuất ra font chữ bị lỗi ( nếu là tiếng việt có dấu), tuy nhiên không cần bận tâm .
1.5 Xuất mật khẩu user
# cd /migration/zimbra # mkdir passwords # cd passwords # for user in `cat ../accounts/users.txt`; do zmprov -l ga $user userPassword | grep userPassword: | awk '{ print $2}' | tee -a $user.shadow; done
1.6 Xuất distribution lists
# cd /migration/zimbra # mkdir distribution_lists # cd distribution_lists # zmprov gadl | tee -a distribution_lists.txt # for list in `cat distribution_lists.txt`; do zmprov gdlm $list > $list.txt ;echo "$list"; done
1.7 Xuất aliases
# cd /migration/zimbra # mkdir aliases # cd aliases # for user in `cat ../accounts/users.txt`; do zmprov ga $user | grep zimbraMailAlias | awk '{print $2}' | tee -a $user.txt ;echo $i ;done
# find . -type f -empty | xargs -n1 rm -v (do không phải user nào cũng có aliase , vì vậy sẽ cần xoá các file .txt không chứa dữ liệu )
2. Thao tác trên server mới
( Đảm bảo rẳng bạn đã rsync toàn bộ các thư mục dữ liệu vừa xuất trên server cũ sang)
Để thao tác không bị ngắt quãng do mất mạng, bạn nên thực hiện trong chế độ “screen”
2.1 Restore domain
Lưu ý : nếu trên máy chủ mới, bạn đã tạo domain thì có thể bỏ qua bước này
# su zimbra
# cd /migration/zimbra/domains # for domain in `cat domains.txt `; do zmprov cd $domain zimbraAuthMech zimbra ;echo $domain ;done
2.2 Restore user & password
su zimbra
# cd /migration/zimbra # mkdir scripts # cd scripts
# vim restore_accounts.sh ##tạo script
Nội dung script :
#!/bin/bash PASSWDS="../passwords" ACCOUNT_DETAILS="../account_details" USERS="../accounts/users.txt" for i in `cat $USERS` do export LC_ALL=vi_VN.utf8 ##Giúp import ký tự Tiếng Việt không bị lỗi font givenName=$(grep givenName: $ACCOUNT_DETAILS/$i.txt | cut -d ":" -f2) displayName=$(grep displayName: $ACCOUNT_DETAILS/$i.txt | cut -d ":" -f2) shadowpass=$(cat $PASSWDS/$i.shadow) zmprov ca $i "TeMpPa55^()" cn "$givenName" displayName "$displayName" givenName "$givenName" zmprov ma $i userPassword "$shadowpass" done
Phân quyền và thực thi script :
# chmod 777 restore_accounts.sh # ./restore_accounts.sh
Lưu ý :Sau khi restore mật khẩu admin@ , sẽ là mật khẩu ở máy chủ cũ.
2.3 Restore distribution lists
# cd /migration/zimbra # for lists in `cat distribution_lists/distribution_lists.txt`; do zmprov cdl distribution_lists/$lists ; echo "$lists -- done " ; done
# cd /migration/zimbra/distribution_lists # vim restore_dist_lists.sh ##tạo script
Nội dung script :
#!/bin/bash for list in `cat distribution_lists.txt` do for mbmr in `grep -v '#' ./$list.txt | grep '@'` do zmprov adlm $list $mbmr echo " $mbmr has been added to $list" done done
Phân quyền và thực thi:
# chmod 777 restore_dist_lists.sh # ./restore_dist_lists.sh
2.4 Restore aliases
# cd /migration/zimbra/aliases # vim restore_aliases.sh ##tạo script
Nội dung script :
#!/bin/bash echo "Processing User accounts" for user in `cat ../accounts/users.txt` do echo $user if [ -f "./$user.txt" ]; then for alias in `grep '@' ./$user.txt` do zmprov aaa $user $alias echo "$user ALIAS $alias - Restored" done fi done echo "Processing Admin accounts" for user in `cat ../accounts/admins.txt` do echo $user if [ -f "./$user.txt" ]; then for alias in `grep '@' ./$user.txt` do zmprov aaa $user $alias echo "$user ALIAS $alias - Restored" done fi done
Phân quyền và thực thi :
# chmod 777 restore_aliases.sh # ./restore_aliases.sh
Tiến hành khởi động lại dịch vụ :
# zmcontrol restart
Tới đây , bạn có thể trỏ lại DNS , cấu hình DKIM…. sang IP của server mới
Người dùng lúc này sẽ có thể gửi và nhận mail trên server mới
Đây mới chỉ là bước đồng bộ tài khoản , vì vậy nếu user muốn truy cập và xem dữ liệu email , có thể truy cập server mail cũ theo địa chỉ https://IP-servermail cũ
3. Migrating mailbox data
Bước này sẽ mất khá nhiều thời gian tuỳ thuộc vào dữ liệu email của bạn
Để thao tác không bị ngắt quãng do mất mạng, bạn nên thực hiện trong chế độ “screen”
3.1 Tại máy chủ mail cũ
3.1.1 Xuất dữ liệu hòm thư người dùng:
# su - zimbra # cd /migration/zimbra # mkdir mailbox_data # cd mailbox_data # for user in `cat ../accounts/users.txt`; do echo "Exporting mailbox $user" ; zmmailbox -z -m $user getRestURL '/?fmt=tgz' > ./$user.tgz ; done
3.1.2 Xuất dữ liệu bộ lọc mail
# mkdir /migration/zimbra/filters # cd /migration/zimbra/filters # vim export_filters.sh ##tạo script
Nội dung script :
#!/bin/bash clear echo "Retrieve zimbra user name..." USERS=`su - zimbra -c 'zmprov -l gaa | sort'`; for ACCOUNT in $USERS; do NAME=`echo $ACCOUNT`; filter=`su - zimbra -c "zmprov ga $NAME zimbraMailSieveScript" > /tmp/$NAME` sed -i -e "1d" /tmp/$NAME sed 's/zimbraMailSieveScript: //g' /tmp/$NAME > /migration/zimbra/filters/$NAME rm /tmp/$NAME echo "Export filter for $NAME..." done echo "All filter has been export successfully"
Phân quyền và thực thi : # chmod 777 export_filters.sh # ./export_filters.sh ##Lưu ý : thực thi với quyền user root
3.2 Tại mảy chủ mới
Đảm bảo rằng bạn đã rsync dữ liệu mailbox_data từ máy chủ cũ sang
3.2.1 Nhập dữ liệu mailbox
# su zimbra # cd /migration/zimbra/mailbox_data # for mailbox in `cat ../accounts/users.txt`; do zmmailbox -z -m $mailbox postRestURL "/?fmt=tgz&resolve=skip" ./$mailbox.tgz ; echo "$mailbox - done "; done
3.2.2 Nhập dữ liệu bộ lọc
# cd /migration/zimbra/filter # vim import_filters.sh ##tạo script
Nội dung script:
for file in /migration/zimbra/filters/* do StrFilter=`cat "$file"` Acc=`echo $file | cut -d "/" -f5` su - zimbra -c "zmprov ma $Acc zimbraMailSieveScript '$StrFilter'" echo "Process filter $Acc" done echo "All filter has been import successfully"
Phân quyền và thực thi
# chmod 777 import_filters.sh # ./import_filters.sh
4. Đồng bộ lại trạng thái user
Đối với các tài khoản user ở trạng thái Locked , khi đồng bộ sẽ đều chuyển thành Active
Để khắc phục bạn thao tác thêm các bước sau :
4.1 Trên máy chủ cũ
Xuất list user đang trong trạng thái Locked :
# cd /migration/zimbra
# mkdir account_status
# cd account_status
# zmprov -l sa “(zimbraAccountStatus=locked)” > user_locked.txt
4.2 Trên máy chủ mới
Đảm bảo rằng bạn đã rsync dữ liệu /migration/zimbra/account_status sang
# cd /migration/zimbra/account_status # for user in $(cat user_locked.txt) ; do zmprov modifyAccount $user zimbraAccountStatus locked ; done
Hoàn tất quá trình đồng bộ dữ liệu , tiến hành khởi động lại dịch vụ, sau đó kiểm tra hoạt động của server mới
# su zimbra # zmcontrol restart
Leave a Reply