Tôi biến laptop hỏng thành “cần câu cơm” như thế nào?

Mối lương duyên của tôi với chiếc laptop được thừa kế từ ông nội cho đến khi nó hỏng màn hình lần thứ n+1 cộng combo liệt phím, vỡ thân vỏ là một câu chuyện dài. Cho đến khi vào công ty và được dùng Macbook xịn xò tôi đã quên đi mất người bạn đồng hành suốt những năm tháng đại học “vất vả”.

Nhưng thật may mắn cho tôi khi tìm hiểu về network, mà cụ thể là khi đọc cuốn Computer Networking: A Top-Down Approach tôi bắt gặp được nội dung như thế này:

“In a client-server architecture, there is an always-on host, called the server, which services request from many other hosts, called client.”

Một điều tưởng như là đơn giản, nhưng khi đọc được câu này tôi như Tố Hữu năm 1938, được ánh sáng của Đảng soi rọi. Như vậy bất cứ thiết bị nào có khả năng cung cấp dịch vụ cho các thiết bị khác đều có thể trở thành server. Và tôi quyết định sẽ hồi sinh chiếc laptop hỏng của mình và mục tiêu đặt ra là có thể SSH vào laptop qua Internet.

1. Setup máy

Việc đầu tiên cần làm là kiểm tra laptop còn hoạt động những phần nào. Thật may mắn cho tôi, không hổ danh là nồi đồng cối đá từ thời ông bà tổ tiên để lại, hầu hết các bộ phận của laptop đều hoạt động bình thường, chỉ màn hình bị hỏng, bàn phím đã liệt hoàn toàn. Vấn đề này là không đáng kể vì trên thực tế các servers trên thế giới chỉ cần Motherboard, CPU, RAM, Hard Drive, Network. 

Vì sẽ không sử dụng màn hình nên để tăng hiệu năng cho máy, tôi sẽ cài đặt lại hệ điều hành và không sử dụng GUI. Cụ thể tôi đã chọn Arch Linux và lý do vì sao tôi chọn bản phân phối này có thể kể đến như:

  • Arch được đánh giá là nhẹ hơn so với một số bản phân phối Linux khác như Ubuntu bởi khả năng tuỳ biến cao. Bạn sẽ chỉ cài những gì mà bạn cần thay vì các phần mềm được cài đặt sẵn như Ubuntu.
  • Arch User Repository (AUR) cung cấp các package phong phú từ người dùng và thường xuyên được cập nhật

Tuy không sử dụng GUI nhưng là một người duy mĩ, tôi cũng muốn giao diện terminal của mình trở nên bắt mắt hơn. Vì thế thay vì sửa dụng Bourne Shell (Bash) mặc định, tôi sử dụng Z Shell (ZSH) kết hợp với Zim (với những ai chưa biết thì Zim là một configuration framework mà quen thuộc hơn với nhiều người là Oh My Zsh)

2. Cấu hình OpenSSH

Cho những ai chưa biết rõ về SSH (Secure Shell) thì đây là giao thức mạng dùng để kết nối một cách bảo mật. SSH hoạt động ở lớp trên trong mô hình phân lớp TCP/IP. So với các chương trình kết nối trước đây như telnet, rlogin không sử dụng phương thức mã hoá nên sử dụng SSH là phương pháp hữu hiệu bảo mật dữ liệu trên đường truyền giữa các hệ thống. SSH làm việc thông qua 3 bước:

  • Bước 1. Định danh host – xác định định danh của hệ thống tham gia phiên làm việc SSH:

    • Client gửi khóa public tới server

    • Server sinh ra một khóa ngẫu nhiên và mã hóa khóa này bằng khóa public do client gửi tới và gửi trả lại client

    • Client giải mã khóa do server gửi tới bằng khóa private của mình và nhận được khóa của server

  • Bước 2. Mã hoá – thiết lập kênh làm việc mã hoá
  • Bước 3. Chứng thực – xác thực client có quyền đăng nhập hệ thống:

    • Được thực hiện trên kênh trao đổi bảo mật

    • Mỗi định danh và truy cập của client được cung cấp theo nhiều cách khác nhau:

      • Chứng thực rhosts: chỉ kiểm tra định danh được liệt kê trong file rhosts (theo DNS và địa chỉ IP)

      • Chứng thực mật khẩu: rất thông dụng (dùng tài khoản của hệ thống)

      • Chứng thực RSA: sử dụng ssh-keygen và ssh-agent để chứng thực các cặp khóa

Còn OpenSSH là một bộ công cụ hỗ trợ SSH hoạt động dưới dạng client-server và cung cấp khá nhiều tính năng để giúp cho việc truyền thông giữa 2 host trở nên an toàn. Một số tính năng nổi bật có thể kể đến như:

  • Khả năng mã hoá mạnh bởi việc sử dụng chuẩn mã hoá 3DES và Blowfish
  • Khả năng chứng thực mạnh bởi việc sử dụng các cơ chế Public Key, mật khẩu một lần (One-Time Password – OTP), Kerberos, có tác dụng bảo vệ chống lại tính dễ tổn thương trong quá trình chứng thực bởi việc khai thác và sử dụng các kỹ thuật như: IP Spoof, DNS Spoof, Fake Router…Có 4 phương pháp chứng thực được Open SSH sử dụng :

    • Chỉ chứng thực Public Key

    • Sự chứng thực host bởi việc sử dụng Public Key kết hợp với .rhost

    • Sự chứng thực dựa trên OPT kết hợp với s/key

    • Sự chứng thực dựa trên cơ chế Kerberos

Các tập tin cấu hình SSH đều nằm trong thư mục /etc/ssh

Ở đây tôi sẽ giữ nguyên các cầu hình mặc định, chỉ thay đổi SSH Port từ mặc định là 80 sang 9009 cùng với chỉ cho phép một số user SSH.

Với OpenSSH việc tạo cặp public-private key là khá đơn giản với câu lệnh ssh-keygen, một số cách sử dụng thông dụng như sau:

Khi đã có cặp key này từ máy tính mà tôi sẽ sử dụng, tôi cần ném public key lên laptop vào đường dẫn .ssh/authorized_keys để đăng nhập vào laptop thay vì tài khoản mật khẩu thông thương, ví dụ một public key như sau:

3. Cấu hình router

Sau khi đã có thể SSH vào laptop, điều tiếp theo tôi cần làm là publish IP để có thể truy cập vào nó ở bất kì đâu trên thế giới. Hiện tại có 2 loại IP hiện hành là IPv4 và IPv6. Sơ lược về IPv4, là một địa chỉ có chiều dài là 32 bit, ví dụ 123.456.789.111, và chính vì sử dụng 32 bit nên số lượng địa chỉ IPv4 chỉ gần 4,3 tỉ. Tuy nhiên đến thời điểm hiện tại đã hơn 7,6 tỉ người và số lượng thiết bị kết nối Internet là một con số khổng lồ. Vì thế IPv6 đã ra đời để giải quyết một số vấn đề trong đó có việc cạn kiệt địa chỉ IPv4. Thay vì 32 bit, một địa chỉ IPv6 được biểu diễn bằng 128 bit trong các cụm số hexa, ví dụ 2001:0DC8:1005:2F43:0BCD:FFFF. Tuy nhiên việc thế giới thay đổi từ IPv4 sang IPv6 không đơn giản như cắt Internet toàn cầu rồi đổi địa chỉ, vì thế hầu hết các thiết tại hỗ trợ kết nối cả IPv4 và IPv6 và một số thiết bị chỉ support IPv4.

Với IPv6 sẽ rất dễ dàng vì là địa chỉ duy nhất, nhưng với IPv4 sẽ cần một số cài đặt thêm ở router để định danh được thiết bị đang kết nối vào mạng. Khi kết nối vào router, laptop hay bất kì thiết bị gì sẽ được cấp một địa chỉ IP thông qua DHCP. Địa chỉ IP này là địa chỉ nội bộ trong router. Khi kết nối ra ngoài với IPv4, router sẽ phải sử dụng phương thức NAT (Network Address Translation), khi đó các gói tin gửi đi sẽ có nguồn từ địa chỉ IP của router trong mạng Internet, và khi nhận gói tin, phương thức này cũng sẽ đảm nhận việc truyền đến chính xác thiết bị trong mạng nội bộ nói trên.

Để giải quyết các vấn đề trên, ở trong màn hình cấu hình router với địa chỉ mặc định thường là 192.168.1.1, tôi thêm địa chỉ IP đã được cố định trên laptop là 192.168.1.224 và forward đến port 9009Cùng với đó tôi cấu hình DHCP chỉ cho phép cung cấp địa chỉ từ 192.168.1.2 đến 192.168.1.200 để đảm bảo không có thiết bị nào lỡ may được cấp trùng địa chỉ của laptop.

4. Laptop hỏng và “cần câu cơm”

Như vậy là các cài đặt cần thiết đã x0ng, từ giờ, ở bất kì đâu trên thế giới tôi đều có thể sử dụng chiếc laptop hỏng của mình với câu lệnh đơn giản như sau: ssh phucpercy@171.229.235.230 -p 9009 -i .ssh/phuchome

Vì sao tôi lại ví chiếc laptop hỏng này như chiếc “cần câu cơm”? Sự thật là từ khi có chiếc server nhà làm, kết hợp với việc đang tập tành học chứng khoán, tôi đã bắt đầu một dự án cá nhân với ý tưởng thu thập dữ liệu cổ phiếu hàng ngày, cùng với đó dựa trên một số kĩ thuật phân tích kĩ thuật đưa ra một con bot hỗ trợ. Tuy nhiên cao cả hơn việc đấy, chính việc mày mò đã làm cho tôi một cái nhìn trực quan hơn rất nhiều về Internet, và việc gia tăng lượng kiến thức chính là cần câu vững chắc nhất cho một coder như tôi đúng không mọi người?

Add a Comment

Scroll Up