Giải ngố Linux – Phần 9: Thiết lập firewall và cấu hình ssh trên Ubuntu 22.04 LTS

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

enable and disable firewall
enable and disable firewall

#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

check firewall status
check firewall status

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

delete firewall rule
delete firewall rule

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

check UFW profile
check UFW profile

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

 add firewall rules
add firewall rules

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

 install openssh-server
install openssh-server

sudo systemctl status ssh

check ssh status
check ssh status

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 keypublic 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

ssh-keygen
ssh-keygen

Lưu ý:

#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

check authorized_keys
check 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

test ssh connection
test ssh connection

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

add key manually to authorized_keys
add key manually to 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

sshd_config
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

denied ssh connection
denied ssh connection

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”

Leave a Reply

Your email address will not be published. Required fields are marked *