NỘI DUNG
Tiếp theo nội dung Giải ngố Linux – Phần 8: Quản lý user cơ bản trên Ubuntu 22.04 LTS, kỳ này tôi sẽ mần tiếp 2 nội dung:
- Quản lý firewall (tường lửa);
- Quản lý kết nối ssh đến server.
Đây sẽ là 2 phần cơ bản phục vụ việc thực hiện kết nối ssh từ client machine đến server. Sau khi hoàn tất phần này, tôi sẽ chuyển sang phần cập nhật cho VPN Server trên Ubuntun 22.04 LTS như đã đề cập trước đó.
#1. Quản lý firewall (tường lửa) trên Ubuntu 22.04 LTS
#1.1 Bật và tắt firewall
Trước khi có thể quản lý, tôi cần xác định tình trạng của firewall trước cái đã. Và để kiểm tra thông tin này, tôi có thể dùng command:
sudo ufw status
Nếu nhận kết quả “Status: inactive” (tức là đang không hoạt động), tôi có thể kích hoạt firewall với command:
sudo ufw enable
Và tất nhiên, nếu vì lý do gì đó, tôi cũng có thể tắt nó lại với command:
sudo ufw disable
sudo ufw status

#1.2 Thiết lập rule cho firewall
Giờ tôi sẽ thử add rule (tức là bổ sung các quy tắc xử lý) vào filewall. Ở đây, tôi có thể thử kiểm tra cái service list để tìm thông tin liên quan đến ssh.
cat /etc/services | grep ssh
Sau đó tôi sẽ có thể add rule tương ứng cho ssh và kiểm tra như sau:
sudo ufw allow ssh
sudo ufw status
Ngoài cách kiểm tra status nói trên, tôi cũng có thể yêu cầu bổ sung thêm thông tin được đánh số cho các rules để tiện quản lý với command:
sudo ufw status numbered

Lúc này, tôi có thể xóa rules dựa vào các chỉ số tương ứng (ví dụ tôi xóa cái rule số 1 như bên dưới)
sudo ufw delete 1

Ngoài ra, tôi cũng có thể thiết lập firewall cho ssh bằng cách sử dụng UFW profile. Trước hết tôi sẽ cần kiểm tra các UFW profile đã được cài đặt với command:
sudo ufw app list

Với kết quả trên, tôi có thể bổ sung rule cho phép kết nối ssh theo kiểu:
sudo ufw allow OpenSSH

Lưu ý: Nếu bạn quất rule đại mà không kiểm tra xem đã cài openssh-server chưa thì có thể văng lỗi “ERROR: Could not find a profile matching ‘OpenSSH”. Lúc này, bạn có thể cài đặt và kiểm tra với 2 command sau:
sudo apt install openssh-server

sudo systemctl status ssh

Với kết quả “acive (running)” thì coi như mọi chuyện đã êm đẹp.
Đến đây coi như tôi đã chuẩn bị xong phần thiết lập firewall cho kết nối ssh. Tuy nhiên, nếu cẩn thận, bạn nhớ kiểm tra lại tình hình firewall một lần nữa trước khi chuyển sang phần kế tiếp.
#2. Thiết lập kết nối ssh từ client machine đến server Ubuntu 22.04 LTS
#2.1 Tạo ssh key pair ở phía client machine
Để có thể kết nối ssh từ client machine đến server Ubuntu 22.04 LTS, trước hết, ở phía client, tôi sẽ cần tạo ssh key pair (tức là cặp private key và public key phục vụ kết nối ssh).
Nhằm minh họa nhanh, client machine tôi sử dụng ở đây sẽ là con hàng Kali Linux quen thuộc. Và command để tạo ssh key pair đơn giản như sau:
ssh-keygen

Lưu ý:
- Nếu tôi không thiết lập gì thêm thì mặc định nó sẽ tạo RSA key pair và đặt tại vị trí /home/kali/.ssh;
- Quá trình tạo key pair, bạn sẽ gặp yêu cầu nhập passphrase cho key và xác nhận. Để test cho vui thì bạn để trống bỏ qua cũng được. Tuy nhiên, nếu tạo key pair xài nghiêm chỉnh thì không nên bỏ qua cái passphrase này;
- Nếu không biết RSA là gì thì bạn có thể xem thêm nội dung Giải ngố Cryptography – Phần 4: Rivest–Shamir–Adleman (RSA), Diffie-Hellman (DH) và ứng dụng trong cấu hình OpenVPN.
#2.2 Chuyển ssh public key đến ssh server (Ubuntu 22.04 LTS)
Sau khi tạo ssh key pair ở client machine, việc kế tiếp tôi cần làm là chuyển ssh public key đến ssh server Ubuntu 22.04 LTS (còn cái private key thì hiển nhiên tôi cần giữ nó “private” ở client machine đúng như tên gọi rồi). Để chuyển public key, tôi sẽ sẽ một số cách như sau:
- Sử dụng ssh-copy-id;
- Chơi kiểu thủ công mỹ nghệ.
#2.2.1 Sử dụng ssh-copy-id
Tôi sẽ đề cập phương án dễ trước là sử dụng ssh-copy-id. Lúc này, từ client machine (Kali Linux), tôi chỉ đơn giản chạy command:
ssh-copy-id test@192.168.64.133
Lưu ý:
- Thiết lập ban đầu của ssh server sẽ cho phép thực hiện password based ssh (tức là kết nối ssh có xác thực thông qua việc sử dụng password của user tương ứng). Thiết lập này nên được tắt một khi đã hoàn tất thiết lập ssh với key pair;
- Con Ubuntu 22.04 LTS trong trường hợp tôi minh họa ở đây là Virtual Machine đang có IP là 192.168.64.133 và đã thiết lập với user test như nội dung kỳ trước;
- Việc thiết lập các Virtual Machine và đả thông kinh mạch cho đường mạng tôi có đề cập trong nội dung Giải ngố Virtualization – Phần 7: Cấu hình thủ công IP Address trên Kali Linux và đả thông kinh mạch đường mạng;
Sau khi tôi nhập cái password của user test, cái ssh-copy-id sẽ thực hiện các thiết lập cần thiết bao gồm dò cái ssh public key đã thiết lập rồi copy đến ~/.ssh/authorized_keys (nó sẽ tạo thư mục liên quan, nếu cần thiết) trên ssh server (vị trí cụ thể tôi minh họa ở đây sẽ là /home/test/.ssh/authorized_keys trên con Ubuntu 22.04 LTS). Tôi có thể nhảy qua con Ubuntu 22.04 LTS để kiểm tra lại với:
ls -la .ssh
cat .ssh/authorized_keys

Đến đây tôi đã có thể kiểm tra kết nối ssh từ client machine Kali Linux đến server Ubuntu 22.04 LTS với command:
ssh test@192.168.64.133

Lưu ý: Khi đã chuyển sang sử dụng ssh với key pair, tôi sẽ cần nhập cái passphrase tương ứng (nếu có thiết lập)
#2.2.2 Sử dụng kiểu thủ công mỹ nghệ
Trường hợp không thể sử dụng ssh-copy-id, tôi cũng có thể thực hiện thủ công với các bước như sau:
Trên server Ubuntu 22.04 LTS, tôi tạo thư mục .ssh cho user (test) tương ứng:
mkdir -p ~/.ssh
Lưu ý: -p flag sẽ xử lý nested directories (cụ thể là tạo thư mục cha nếu cần thiết, còn nếu có rồi thì thôi!)
Copy cái public_key_string từ client machine Kali Linux rồi chạy command:
echo public_key_string >> ~/.ssh/authorized_keys

Lưu ý:
- Tôi sẽ cần đọc cái public_key_string từ client machine Kali Linux bằng command kiểu như cat ~/.ssh/id_rsa.pub;
- “>>” có nghĩa là tôi ghi thêm vào cuối file ~/.ssh/authorized_keys chứ không không đè lên nội dung đã có (bạn có thể thấy thông tin của test1@ubuntu-virtual-machine được bổ sung bên dưới của cái kali@kali thiết lập trước đó)
Tiếp đến tôi sẽ thực hiện remove (-R để xử lý kiểu recursive) tất cả permission cho 2 nhóm đối tượng “group-g” và “other-o” (tức chỉ giữ lại quyền cho “file owner“)đối với cái ~/.ssh directory trên con server Ubuntu 22.04 LTS với command:
chmod -R go= ~/.ssh
Lưu ý: Trường hợp nếu đang chạy với command với user khác (ví dụ user root), tôi cũng sẽ cần cấp lại quyền cho user (và group) tương ứng (user test trong trường hợp này).
chown -R test:test ~/.ssh
Để đỡ cực thân, tôi có thể tận dụng cái piping (“|”) để quất cả đám command nói trên một lần từ client machine Kali Linux theo kiểu:
cat ~/.ssh/id_rsa.pub | ssh test@192.168.64.133 "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Lưu ý: Bạn có thể xem thêm về cái piping trong nội dung Giải ngố Kali Linux – Phần 5: Nâng cấp kỹ năng tìm kiếm trên Linux với grep command.
#2.3 Tắt password based authentication ssh
Như đã đề cập ở trên, sau khi thiết lập ssh với key pair và test hàng chạy ngon lành, tôi sẽ triển khai việc tắt thiết lập cho phép password based authentication ssh.
Nếu bạn đang trong quá trình vọc vạch cho vui thì việc này là không quá quan trọng. Tuy nhiên, tôi thấy việc tạo thói quen để tăng cường độ bảo mật cho kết nối ssh là một việc nên làm.
Để mần vụ này, tôi sẽ cần cập nhập cái ssh config (kích hoạt “PasswordAuthentication no
“) với command:
sudo nano /etc/ssh/sshd_config

Sau đó khởi động lại ssh với:
sudo systemctl restart ssh
Lúc này, nếu chưa thiết lập ssh với key pair, tôi sẽ bị từ chối kết nối thằng thừng.
ssh test@192.168.64.133

P/S: Tôi thấy cần nhấn mạnh lại rằng “việc tắt thiết lập password based authentication ssh chỉ nên triển khai sau ĐÃ khi thiết lập ssh với key pair và test hàng chạy ngon lành“. Trường hợp nếu đang chiến với remote server thật và ssh là con đường duy nhất để kết nối mà bạn lại quên vụ này thì vỡ mồm.
2 thoughts on “Giải ngố Linux – Phần 9: Thiết lập firewall và cấu hình ssh trên Ubuntu 22.04 LTS”