Archive for the ‘Network’ Category

Căn bản về các thiết bị mạng

Repeater

Trong một mạng LAN, giới hạn của cáp mạng là 100m (cho loại cáp mạng CAT 5 UTP – là cáp được dùng phổ biến nhất), bởi tín hiệu bị suy hao trên đường truyền nên không thể đi xa hơn. Vì vậy, để có thể kết nối các thiết bị ở xa hơn, mạng cần các thiết bị để khuếch đại và định thời lại tín hiệu, giúp tín hiệu có thể truyền dẫn đi xa hơn giới hạn này.

Repeater là một thiết bị ở lớp 1 (Physical Layer) trong mô hình OSI. Repeater có vai trò khuếch đại tín hiệu vật lý ở đầu vào và cung cấp năng lượng cho tín hiệu ở đầu ra để có thể đến được những chặng đường tiếp theo trong mạng. Điện tín, điện thoại, truyền thông tin qua sợi quang… và các nhu cầu truyền tín hiệu đi xa đều cần sử dụng Repeater

Hub

Hub được coi là một Repeater có nhiều cổng. Một Hub có từ 4 đến 24 cổng và có thể còn nhiều hơn. Trong phần lớn các trường hợp, Hub được sử dụng trong các mạng 10BASE-T hay 100BASE-T. Khi cấu hình mạng là hình sao (Star topology), Hub đóng vai trò là trung tâm của mạng. Với một Hub, khi thông tin vào từ một cổng và sẽ được đưa đến tất cả các cổng khác.

Hub có 2 loại là Active Hub và Smart Hub. Active Hub là loại Hub được dùng phổ biến, cần được cấp nguồn khi hoạt động, được sử dụng để khuếch đại tín hiệu đến và cho tín hiệu ra những cổng còn lại, đảm bảo mức tín hiệu cần thiết. Smart Hub (Intelligent Hub) có chức năng tương tự như Active Hub, nhưng có tích hợp thêm chip có khả năng tự động dò lỗi – rất hữu ích trong trường hợp dò tìm và phát hiện lỗi trong mạng.

Bridge

Bridge là thiết bị mạng thuộc lớp 2 của mô hình OSI (Data Link Layer). Bridge được sử dụng để ghép nối 2 mạng để tạo thành một mạng lớn duy nhất. Bridge được sử dụng phổ biến để làm cầu nối giữa hai mạng Ethernet. Bridge quan sát các gói tin (packet) trên mọi mạng. Khi thấy một gói tin từ một máy tính thuộc mạng này chuyển tới một máy tính trên mạng khác, Bridge sẽ sao chép và gửi gói tin này tới mạng đích.

Ưu điểm của Bridge là hoạt động trong suốt, các máy tính thuộc các mạng khác nhau vẫn có thể gửi các thông tin với nhau đơn giản mà không cần biết có sự “can thiệp” của Bridge. Một Bridge có thể xử lý được nhiều lưu thông trên mạng như Novell, Banyan… cũng như là địa chỉ IP cùng một lúc. Nhược điểm của Bridge là chỉ kết nối những mạng cùng loại và sử dụng Bridge cho những mạng hoạt động nhanh sẽ khó khăn nếu chúng không nằm gần nhau về mặt vật lý.

Switch

Switch đôi khi được mô tả như là một Bridge có nhiều cổng. Trong khi một Bridge chỉ có 2 cổng để liên kết được 2 segment mạng với nhau, thì Switch lại có khả năng kết nối được nhiều segment lại với nhau tuỳ thuộc vào số cổng (port) trên Switch. Cũng giống như Bridge, Switch cũng “học” thông tin của mạng thông qua các gói tin (packet) mà nó nhận được từ các máy trong mạng. Switch sử dụng các thông tin này để xây dựng lên bảng Switch, bảng này cung cấp thông tin giúp các gói thông tin đến đúng địa chỉ.

Ngày nay, trong các giao tiếp dữ liệu, Switch thường có 2 chức năng chính là chuyển các khung dữ liệu từ nguồn đến đích, và xây dựng các bảng Switch. Switch hoạt động ở tốc độ cao hơn nhiều so với Repeater và có thể cung cấp nhiều chức năng hơn như khả năng tạo mạng LAN ảo (VLAN).

Router

Router là thiết bị mạng lớp 3 của mô hình OSI (Network Layer). Router kết nối hai hay nhiều mạng IP với nhau. Các máy tính trên mạng phải “nhận thức” được sự tham gia của một router, nhưng đối với các mạng IP thì một trong những quy tắc của IP là mọi máy tính kết nối mạng đều có thể giao tiếp được với router.

Ưu điểm của Router: Về mặt vật lý, Router có thể kết nối với các loại mạng khác lại với nhau, từ những Ethernet cục bộ tốc độ cao cho đến đường dây điện thoại đường dài có tốc độ chậm.

Nhược điểm của Router: Router chậm hơn Bridge vì chúng đòi hỏi nhiều tính toán hơn để tìm ra cách dẫn đường cho các gói tin, đặc biệt khi các mạng kết nối với nhau không cùng tốc độ. Một mạng hoạt động nhanh có thể phát các gói tin nhanh hơn nhiều so với một mạng chậm và có thể gây ra sự nghẽn mạng. Do đó, Router có thể yêu cầu máy tính gửi các gói tin đến chậm hơn. Một vấn đề khác là các Router có đặc điểm chuyên biệt theo giao thức – tức là, cách một máy tính kết nối mạng giao tiếp với một router IP thì sẽ khác biệt với cách nó giao tiếp với một router Novell hay DECnet. Hiện nay vấn đề này được giải quyết bởi một mạng biết đường dẫn của mọi loại mạng được biết đến. Tất cả các router thương mại đều có thể xử lý nhiều loại giao thức, thường với chi phí phụ thêm cho mỗi giao thức.

Gateway

Gateway cho phép nối ghép hai loại giao thức với nhau. Ví dụ: mạng của bạn sử dụng giao thức IP và mạng của ai đó sử dụng giao thức IPX, Novell, DECnet, SNA… hoặc một giao thức nào đó thì Gateway sẽ chuyển đổi từ loại giao thức này sang loại khác.

Qua Gateway, các máy tính trong các mạng sử dụng các giao thức khác nhau có thể dễ dàng “nói chuyện” được với nhau. Gateway không chỉ phân biệt các giao thức mà còn còn có thể phân biệt ứng dụng như cách bạn chuyển thư điện tử từ mạng này sang mạng khác, chuyển đổi một phiên làm việc từ xa…

Firewall – Các khái niệm, tính chất, nguyên lý và cách sử dụng

Firewall là gì ?

Thuật ngữ Firewall có nguồn gốc từ một kỹ thuật thiết kế trong xây dựng để ngăn chặn, hạn chế hoả hoạn. Trong công nghệ mạng thông tin, Firewall là một kỹ thuật đ­ợc tích hợp vào hệ thống mạng để chống sự truy cập trái phép, nhằm bảo vệ các nguồn thông tin nội bộ và hạn chế sự xâm nhập không mong muốn vào hệ thống. Cũng có thể hiểu Firewall là một cơ chế (mechanism) để bảo vệ mạng tin t­ởng (Trusted network) khỏi các mạng không tin t­ởng (Untrusted network).

Thông th­ờng Firewall đ­ợc đặt giữa mạng bên trong (Intranet) của một công ty, tổ chức, ngành hay một quốc gia, và Internet. Vai trò chính là bảo mật thông tin, ngăn chặn sự truy nhập không mong muốn từ bên ngoài (Internet) và cấm truy nhập từ bên trong (Intranet) tới một số địa chỉ nhất định trên Internet.

Chức năng chính

Chức năng chính của Firewall là kiểm soát luồng thông tin từ giữa Intranet và Internet. Thiết lập cơ chế điều khiển dòng thông tin giữa mạng bên trong (Intranet) và mạng Internet. Cụ thể là:

Cho phép hoặc cấm những dịch vụ truy nhập ra ngoài (từ Intranet ra Internet).
Cho phép hoặc cấm những dịch vụ phép truy nhập vào trong (từ Internet vào Intranet).
Theo dõi luồng dữ liệu mạng giữa Internet và Intranet.
Kiểm soát địa chỉ truy nhập, cấm địa chỉ truy nhập.
Kiểm soát ng­ời sử dụng và việc truy nhập của ng­ời sử dụng.
Kiểm soát nội dung thông tin thông tin l­u chuyển trên mạng.
Các thành phần

Firewall chuẩn bao gồm một hay nhiều các thành phần sau đây:

Bộ lọc packet (packet-filtering router)
Cổng ứng dụng (application-level gateway hay proxy server)
Cổng mạch (circuite level gateway)
Bộ lọc paket (Paket filtering router)

Nguyên lý

Khi nói đến việc l­u thông dữ liệu giữa các mạng với nhau thông qua Firewall thì điều đó có nghĩa rằng Firewall hoạt động chặt chẽ với giao thức TCI/IP. Vì giao thức này làm việc theo thuật toán chia nhỏ các dữ liệu nhận đ­ợc từ các ứng dụng trên mạng, hay nói chính xác hơn là các dịch vụ chạy trên các giao thức (Telnet, SMTP, DNS, SMNP, NFS…) thành các gói dữ liệu (data pakets) rồi gán cho các paket này những địa chỉ để có thể nhận dạng, tái lập lại ở đích cần gửi đến, do đó các loại Firewall cũng liên quan rất nhiều đến các packet và những con số địa chỉ của chúng.

Bộ lọc packet cho phép hay từ chối mỗi packet mà nó nhận đ­ợc. Nó kiểm tra toàn bộ đoạn dữ liệu để quyết định xem đoạn dữ liệu đó có thoả mãn một trong số các luật lệ của lọc packet hay không. Các luật lệ lọc packet này là dựa trên các thông tin ở đầu mỗi packet (packet header), dùng để cho phép truyền các packet đó ở trên mạng. Đó là:

Địa chỉ IP nơi xuất phát ( IP Source address)
Địa chỉ IP nơi nhận (IP Destination address)
Những thủ tục truyền tin (TCP, UDP, ICMP, IP tunnel)
Cổng TCP/UDP nơi xuất phát (TCP/UDP source port)
Cổng TCP/UDP nơi nhận (TCP/UDP destination port)
Dạng thông báo ICMP ( ICMP message type)
Giao diện packet đến ( incomming interface of packet)
Giao diện packet đi ( outcomming interface of packet)
Nếu luật lệ lọc packet đ­ợc thoả mãn thì packet đ­ợc chuyển qua firewall. Nếu không packet sẽ bị bỏ đi. Nhờ vậy mà Firewall có thể ngăn cản đ­ợc các kết nối vào các máy chủ hoặc mạng nào đó đ­ợc xác định, hoặc khoá việc truy cập vào hệ thống mạng nội bộ từ những địa chỉ không cho phép. Hơn nữa, việc kiểm soát các cổng làm cho Firewall có khả năng chỉ cho phép một số loại kết nối nhất định vào các loại máy chủ nào đó, hoặc chỉ có những dịch vụ nào đó (Telnet, SMTP, FTP…) đ­ợc phép mới chạy đ­ợc trên hệ thống mạng cục bộ.

Ưu điểm

Đa số các hệ thống firewall đều sử dụng bộ lọc packet. Một trong những ­u điểm của ph­ơng pháp dùng bộ lọc packet là chi phí thấp vì cơ chế lọc packet đã đ­ợc bao gồm trong mỗi phần mềm router.
Ngoài ra, bộ lọc packet là trong suốt đối với ng­ời sử dụng và các ứng dụng, vì vậy nó không yêu cầu sự huấn luyện đặc biệt nào cả.

Hạn chế

Việc định nghĩa các chế độlọc package là một việc khá phức tạp; đòi hỏi ng­ời quản trị mạng cần có hiểu biết chi tiết vể các dịch vụ Internet, các dạng packet header, và các giá trị cụ thể có thể nhận trên mỗi tr­ờng. Khi đòi hỏi vể sự lọc càng lớn, các luật lệ vể lọc càng trở nên dài và phức tạp, rất khó để quản lý và điều khiển.
Do làm việc dựa trên header của các packet, rõ ràng là bộ lọc packet không kiểm soát đ­ợc nôi dung thông tin của packet. Các packet chuyển qua vẫn có thể mang theo những hành động với ý đồ ăn cắp thông tin hay phá hoại của kẻ xấu.
Cổng ứng dụng (application-level getway)

Nguyên lý

Đây là một loại Firewall đ­ợc thiết kế để tăng c­ờng chức năng kiểm soát các loại dịch vụ, giao thức đ­ợc cho phép truy cập vào hệ thống mạng. Cơ chế hoạt động của nó dựa trên cách thức gọi là Proxy service. Proxy service là các bộ code đặc biệt cài đặt trên gateway cho từng ứng dụng. Nếu ng­ời quản trị mạng không cài đặt proxy code cho một ứng dụng nào đó, dịch vụ t­ơng ứng sẽ không đ­ợc cung cấp và do đó không thể chuyển thông tin qua firewall. Ngoài ra, proxy code có thể đ­ợc định cấu hình để hỗ trợ chỉ một số đặc điểm trong ứng dụng mà ng­òi quản trị mạng cho là chấp nhận đ­ợc trong khi từ chối những đặc điểm khác.

Một cổng ứng dụng th­ờng đ­ợc coi nh­ là một pháo đài (bastion host), bởi vì nó đ­ợc thiết kế đặt biệt để chống lại sự tấn công từ bên ngoài. Những biện pháp đảm bảo an ninh của một bastion host là:

Bastion host luôn chạy các version an toàn (secure version) của các phần mềm hệ thống (Operating system). Các version an toàn này đ­ợc thiết kế chuyên cho mục đích chống lại sự tấn công vào Operating System, cũng nh­ là đảm bảo sự tích hợp firewall.
Chỉ những dịch vụ mà ng­ời quản trị mạng cho là cần thiết mới đ­ợc cài đặt trên bastion host, đơn giản chỉ vì nếu một dịch vụ không đ­ợc cài đặt, nó không thể bị tấn công. Thông th­ờng, chỉ một số giới hạn các ứng dụng cho các dịch vụ Telnet, DNS, FTP, SMTP và xác thực user là đ­ợc cài đặt trên bastion host.
Bastion host có thể yêu cầu nhiều mức độ xác thực khác nhau, ví dụ nh­ user password hay smart card.
Mỗi proxy đ­ợc đặt cấu hình để cho phép truy nhập chỉ một sồ các máy chủ nhất định. Điều này có nghĩa rằng bộ lệnh và đặc điểm thiết lập cho mỗi proxy chỉ đúng với một số máy chủ trên toàn hệ thống.
Mỗi proxy duy trì một quyển nhật ký ghi chép lại toàn bộ chi tiết của giao thông qua nó, mỗi sự kết nối, khoảng thời gian kết nối. Nhật ký này rất có ích trong việc tìm theo dấu vết hay ngăn chặn kẻ phá hoại.
Mỗi proxy đều độc lập với các proxies khác trên bastion host. Điều này cho phép dễ dàng quá trình cài đặt một proxy mới, hay tháo gỡ môt proxy đang có vấn để.
Ưu điểm

Cho phép ng­ời quản trị mạng hoàn toàn điều khiển đ­ợc từng dịch vụ trên mạng, bởi vì ứng dụng proxy hạn chế bộ lệnh và quyết định những máy chủ nào có thể truy nhập đ­ợc bởi các dịch vụ.
Cho phép ng­ời quản trị mạng hoàn toàn điều khiển đ­ợc những dịch vụ nào cho phép, bởi vì sự vắng mặt của các proxy cho các dịch vụ t­ơng ứng có nghĩa là các dịch vụ ấy bị khoá.
Cổng ứng dụng cho phép kiểm tra độ xác thực rất tốt, và nó có nhật ký ghi chép lại thông tin về truy nhập hệ thống.
Luật lệ lọc filltering cho cổng ứng dụng là dễ dàng cấu hình và kiểm tra hơn so với bộ lọc packet.
Hạn chế

Yêu cầu các users thay đổi thao tác, hoặc thay đổi phần mềm đã cài đặt trên máy client cho truy nhập vào các dịch vụ proxy. Chẳng hạn, Telnet truy nhập qua cổng ứng dụng đòi hỏi hai b­ớc để nối với máy chủ chứ không phải là một b­ớc thôi. Tuy nhiên, cũng đã có một số phần mềm client cho phép ứng dụng trên cổng ứng dụng là trong suốt, bằng cách cho phép user chỉ ra máy đích chứ không phải cổng ứng dụng trên lệnh Telnet.
Cổng vòng (circuit-Level Gateway)

Cổng vòng là một chức năng đặc biệt có thể thực hiện đ­ợc bởi một cổng ứng dụng. Cổng vòng đơn giản chỉ chuyển tiếp (relay) các kết nối TCP mà không thực hiện bất kỳ một hành động xử lý hay lọc packet nào.

Hình d­ới đây minh hoạ một hành động sử dụng nối telnet qua cổng vòng. Cổng vòng đơn giản chuyển tiếp kết nối telnet qua firewall mà không thực hiện một sự kiểm tra, lọc hay điều khiển các thủ tục Telnet nào.Cổng vòng làm việc nh­ một sợi dây,sao chép các byte giữa kết nối bên trong (inside connection) và các kết nối bên ngoài (outside connection). Tuy nhiên, vì sự kết nối này xuất hiện từ hệ thống firewall, nó che dấu thông tin về mạng nội bộ.

Cổng vòng th­ờng đ­ợc sử dụng cho những kết nối ra ngoài, nơi mà các quản trị mạng thật sự tin t­ởng những ng­ời dùng bên trong. Ưu điểm lớn nhất là một bastion host có thể đ­ợc cấu hình nh­ là một hỗn hợp cung cấp Cổng ứng dụng cho những kết nối đến, và cổng vòng cho các kết nối đi. Điều này làm cho hệ thống bức t­ờng lửa dễ dàng sử dụng cho những ng­ời trong mạng nội bộ muốn trực tiếp truy nhập tới các dịch vụ Internet, trong khi vẫn cung cấp chức năng bức t­ờng lửa để bảo vệ mạng nội bộ từ những sự tấn công bên ngoài.

Những hạn chế của firewall

Firewall không đủ thông minh nh­ con ng­ời để có thể đọc hiểu từng loại thông tin và phân tích nội dung tốt hay xấu của nó. Firewall chỉ có thể ngăn chặn sự xâm nhập của những nguồn thông tin không mong muốn nh­ng phải xác định rõ các thông số địa chỉ.
Firewall không thể ngăn chặn một cuộc tấn công nếu cuộc tấn công này không “đi qua” nó. Một cách cụ thể, firewall không thể chống lại một cuộc tấn công từ một đ­ờng dial-up, hoặc sự dò rỉ thông tin do dữ liệu bị sao chép bất hợp pháp lên đĩa mềm.
Firewall cũng không thể chống lại các cuộc tấn công bằng dữ liệu (data-drivent attack). Khi có một số ch­ơng trình đ­ợc chuyển theo th­ điện tử, v­ợt qua firewall vào trong mạng đ­ợc bảo vệ và bắt đầu hoạt động ở đây.
Một ví dụ là các virus máy tính. Firewall không thể làm nhiệm vụ rà quét virus trên các dữ liệu đ­ợc chuyển qua nó, do tốc độ làm việc, sự xuất hiện liên tục của các virus mới và do có rất nhiều cách để mã hóa dữ liệu, thoát khỏi khả năng kiểm soát của firewall.
Tuy nhiên, Firewall vẫn là giải pháp hữu hiệu đ­ợc áp dụng rộng rãi.

Sự khác biệt giữa Hub, Switch và Router

Ngày nay, hầu hết các router đều là thiết bị kết hợp nhiều chức năng, và thậm chí nó còn đảm nhận cả chức năng của switch và hub.

Đôi khi router, switch và hub được kết hợp trong cùng một thiết bị, và đối với những ai mới làm quen với mạng thì rất dễ nhầm lẫn giữa chức năng của các thiết bị này.

Nào chúng ta hãy bắt đầu với hub và switch bởi cả hai thiết bị này đều có những vai trò tương tự trên mạng. Mỗi thiết bị dều đóng vai trò kết nối trung tâm cho tất cả các thiết bị mạng, và xử lý một dạng dữ liệu được gọi là “frame” (khung). Mỗi khung đều mang theo dữ liệu. Khi khung được tiếp nhận, nó sẽ được khuyếch đại và truyền tới cổng của PC đích. Sự khác biệt lớn nhất giữa hai thiết bị này là phương pháp phân phối các khung dữ liệu.

Với hub, một khung dữ liệu được truyền đi hoặc được phát tới tất cả các cổng của thiết bị mà không phân biệt các cổng với nhau. Việc chuyển khung dữ liệu tới tất cả các cổng của hub để chắc rằng dữ liệu sẽ được chuyển tới đích cần đến. Tuy nhiên, khả năng này lại tiêu tốn rất nhiều lưu lượng mạng và có thể khiến cho mạng bị chậm đi (đối với các mạng công suất kém).
Ngoài ra, một hub 10/100Mbps phải chia sẻ băng thông với tất cả các cổng của nó. Do vậy khi chỉ có một PC phát đi dữ liệu (broadcast) thì hub vẫn sử dụng băng thông tối đa của mình. Tuy nhiên, nếu nhiều PC cùng phát đi dữ liệu, thì vẫn một lượng băng thông này được sử dụng, và sẽ phải chia nhỏ ra khiến hiệu suất giảm đi.

Trong khi đó, switch lưu lại bản ghi nhớ địa chỉ MAC của tất cả các thiết bị mà nó kết nối tới. Với thông tin này, switch có thể xác định hệ thống nào đang chờ ở cổng nào. Khi nhận được khung dữ liệu, switch sẽ biết đích xác cổng nào cần gửi tới, giúp tăng tối đa thời gian phản ứng của mạng. Và không giống như hub, một switch 10/100Mbps sẽ phân phối đầy đủ tỉ lệ 10/100Mbps cho mỗi cổng thiết bị. Do vậy với switch, không quan tâm số lượng PC phát dữ liệu là bao nhiêu, người dùng vẫn luôn nhận được băng thông tối đa. Đó là lý do tại sao switch được coi là lựa chọn tốt hơn so với hub.
Còn router thì khác hoàn toàn so với hai thiết bị trên. Trong khi hub hoặc switch liên quan tới việc truyền khung dữ liệu thì chức năng chính của router là định tuyến các gói tin trên mạng cho tới khi chúng đến đích cuối cùng. Một trong những đặc tính năng quan trọng của một gói tin là nó không chỉ chứa dữ liệu mà còn chứa địa chỉ đích đến.

Router thường được kết nối với ít nhất hai mạng, thông thường là hai mạng LAN hoặc WAN, hoặc một LAN và mạng của ISP nào đó. Router được đặt tại gateway, nơi kết nối hai hoặc nhiều mạng khác nhau. Nhờ sử dụng các tiêu đề (header) và bảng chuyển tiếp (forwarding table), router có thể quyết định nên sử dụng đường đi nào là tốt nhất để chuyển tiếp các gói tin. Router sử dụng giao thức ICMP để giao tiếp với các router khác và giúp cấu hình tuyến tốt nhất giữa bất cứ hai host nào.

Ngày nay, có rất nhiều các dịch vụ được gắn với các router băng rộng. Thông thường, một router bao gồm 4-8 cổng Ethernet switch (hoặc hub) và một bộ chuyển đổi địa chỉ mạng – NAT (Network Address Translator). Ngoài ra, router thường gồm một máy chủ DHCP (Dynamic Host Configuration Protocol), máy chủ proxy DNS (Domain Name Service), và phần cứng tường lửa để bảo vệ mạng LAN trước các xâm nhập trái phép từ mạng Internet.
Tất cả các router đều có cổng WAN để kết nối với đường DSL hoặc modem cáp – dành cho dịch vụ Internet băng rộng, và switch tích hợp để tạo mạng LAN được dễ dàng hơn. Tính năng này cho phép tất cả các PC trong mạng LAN có thể truy cập Internet và sử dụng các dịch vụ chia sẻ file và máy in.
Một số router chỉ có một cổng WAN và một cổng LAN, được thiết kế cho việc kết nối một hub/switch LAN hiện hành với mạng WAN. Các switch và hub Ethernet có thể kết nối với một router để mở rộng mạng LAN. Tuỳ thuộc vào khả năng (nhiều cổng) của mỗi router, switch hoặc hub, mà kết nối giữa các router, switche/hub có thể cần tới cáp nối thẳng hoặc nối vòng. Một số router thậm chí có cả cổng USB và nhiều điểm truy cập không dây tích hợp.
Một số router cao cấp hoặc dành cho doanh nghiệp còn được tích hợp cổng serial – giúp kết nối với modem quay số ngoài, rất hữu ích trong trường hợp dự phòng đường kết nối băng rộng chính trục trặc, và tích hợp máy chủ máy in mạng LAN và cổng máy in.
Ngoài tính năng bảo vệ được NAT cung cấp, rất nhiều router còn có phần cứng tường lửa tích hợp sẵn, có thể cấu hình theo yêu cầu của người dùng. Tường lửa này có thể cấu hình từ mức đơn giản tới phức tạp. Ngoài những khả năng thường thấy trên các router hiện đại, tường lửa còn cho phép cấu hình cổng TCP/UDP dành cho game, dịch vụ chat, và nhiều tính năng khác.

Và như vậy, có thể nói một cách ngắn gọn là: hub được gắn cùng với một thành phần mạng Ethernet; switch có thể kết nối hiệu quả nhiều thành phần Ethernet với nhau; và router có thể đảm nhận tất cả các chức năng này, cộng thêm việc định tuyến các gói TCP/IP giữa các mạng LAN hoặc WAN, và tất nhiên còn nhiều chức năng khác nữa.

Cơ bản về địa chỉ IP

Cơ bản về địa chỉ IP

1. Địa chỉ IP:Địa chỉ IP là một số nguyên 32 bit, thường được biểu diễn dưới dạng một dãy 4 số nguyên cách nhau bởi dấu chấm (dotted format). Một số nguyên trong địa chỉ IP là một byte, thường được gọi là một octet (8 bits).

Ví dụ về một địa chỉ IP điển hình là 123.255.0.15. Các thành phần 123, 255, 0 và 15 là các octet.

Một địa chỉ IP gồm có 3 phần. Phần đầu tiên là địa chỉ mạng (network address), phần thứ cuối cùng là địa chỉ máy (host address) và phần còn lại (nếu có) là địa chỉ mạng con (subnet address).

Địa chỉ mạng của một địa chỉ IP được tìm ra khi thực hiện phép toán logic AND giữa địa chỉ IP đấy và một giá trị gọi là mặt nạ mạng (network mask, tôi sẽ không dùng từ “mặt nạ mạng” trong tất cả các bài về sau mà chỉ dùng “network mask” cũng như sẽ không dịch từ “mask” thành “mặt nạ” nữa). Network mask cho biết bao nhiêu bit trong địa chỉ IP là địa chỉ mạng.
2. Phân lớp địa chỉ IP:

Địa chỉ IP được phân ra làm 5 lớp mạng (lớp A, B, C, D, và E). Trong đó bốn lớp đầu được sử dụng, lớp E được dành riêng cho nghiên cứu. Lớp D được dùng cho việc phát các thông tin broadcast/multicastt (broadcast/multicast IPs). Lớp A, B và C được dùng trong cuộc sống hàng ngày.
3. Cách phân biệt IP lớp A, B, C, và D:

Một địa chỉ IP với bit đầu tiên là 0 thuộc về lớp A, bit đầu tiên là 1 và bit thứ 2 là 0 thuộc lớp B, bit đầu là 1, bit 2 là 1, bit 3 là 0 thuộc lớp C, bit đầu là 1, bit 2 là 1, bit 3 là 1, bit 4 là 0 thuộc lớp D. Lớp E là các địa chỉ còn lại. Bảng sau tóm tắt ý tưởng này:
Lớp IP Dạng địa chỉ IP Network mask mặc định
A 0xxxx…….xxx 255.0.0.0
B 10xxx…….xxx 255.255.0.0
C 110xx…….xxx 255.255.255.0
D 1110x…….xxx (không dùng)

Ví dụ địa chỉ 10.243.100.56 là một địa chỉ IP lớp A vì octet đầu được biểu diễn dưới dạng nhị phân thành 00001010. Bit đầu tiên là 0 nên địa chỉ đó thuộc về lớp A.

Mỗi lớp có 2 địa chỉ dành riêng là địa chỉ thấp nhất (phần địa chỉ máy toàn bit 0), và địa chỉ cao nhất của lớp đó (phần địa chỉ máy toàn bit 1). Như vậy, địa chỉ mạng có thể có trong một lớp sẽ phụ thuộc vào số bit trong network mask (bit mang giá trị 1). Nếu gọi số bit 1 trong network mask là x thì số địa chỉ mạng tối đa có thể có trong một lớp là 2^x

Tuy nhiên, vì mỗi lớp bị phụ thuộc vào vài bit đầu tiên quy định nên số địa chỉ mạng tối đa thật sự trong mỗi lớp sẽ là 2^x – 2^(số bit cố định của lớp tương ứng).

Như vậy lớp A có 126 địa chỉ, lớp B có tối đa 16382 địa chỉ, lớp C có 2097150 địa chỉ.

Phần còn lại ngoài địa chỉ mạng sẽ là địa chỉ máy. Tương tự cũng có 2 địa chỉ máy dành riêng (địa chỉ thấp nhất và địa chỉ cao nhất) trong mỗi địa chỉ mạng. Như vậy, số địa chỉ máy có thể có trong mỗi mạng sẽ là 2^(32 – x) – 2. Công thức tính đơn giản giống công thức tính số địa chỉ mạng. Chỉ khác một điều là ta dùng số bit 0 (32-x) thay vì dùng số bit 1 (x).

Như vậy, một địa chỉ mạng lớp C sẽ có 254 địa chỉ máy, tương tự cho địa chỉ mạng lớp B, và A.

Tổng số địa chỉ của một lớp mạng là tích của số địa chỉ mạng và số địa chỉ máy trong một mạng thuộc lớp đó.
4. Subnet:

Tuy nhiên, các nhà quản trị mạng thường phân chia mạng của họ ra thành nhiều mạng nhỏ hơn gọi là mạng con subnet. Tương tự với địa chỉ mạng, địa chỉ mạng con cũng được quy định bởi một mask, gọi là subnet mask. Subnet mask của một địa chỉ mạng có số bit 1 nhiều hơn hoặc bằng (trường hợp bằng có nghĩa là không có chia mạng ra thành subnet) số bit 1 trong network mask của địa chỉ đó. Ví dụ subnet mask của một mạng thuộc lớp B sẽ có dạng 255.255.xxx.xxx với xxx là số bất kỳ từ 0 đến 255.

Cách tính số địa chỉ mạng con của một địa chỉ mạng sẽ phụ thuộc vào bao nhiêu bit của network mask đã được dùng để làm subnet mask (tạm gọi là y). Hai công thức bên trên đều được sử dụng với việc thay biến x thành y. Đặc biệt cách tính số địa chỉ IP trong mỗi subnet sẽ dùng cả x và y theo công thức sau:

2^(32 – x – y) – 2

Ví dụ subnet mask của một mạng lớp A (network mask mặc định 255.0.0.0) là 255.192.0.0 thì y sẽ là 2 (vì 192 biểu diễn ở dạng nhị phân là 11000000, có nghĩa là đã có 2 bit đã được sử dụng để làm subnet mask). Subnet mask phải là một dãy liên tục các bit 1 ngay sau network mask. Điều này nói lên rằng subnet mask dành một số bit 0 trong network mask (phần dành cho địa chỉ máy). Cũng có 2 địa chỉ máy dành riêng trong mỗi subnet. Hai địa chỉ đó là subnet address (địa chỉ thấp nhất trong subnet) và broadcast address (địa chỉ cao nhất trong subnet). Địa chỉ thấp nhất trong subnet không nhất thiết có tất cả các bit là 0 như đối với địa chỉ thấp nhất trong một mạng, cũng như địa chỉ cao nhất không nhất thiết phải là toàn bit 1. Lưu ý là trong một vài tài liệu cũ nói rằng cũng có 2 subnet dành riêng trong mỗi mạng nhưng bây giờ điều đó không còn dùng nữa. Hai subnet đó vẫn được dùng, gọi là zero subnet (subnet thấp nhất) và broadcast subnet (subnet cao nhất).

Ngoài ra, mỗi lớp mạng còn có 1 địa chỉ mạng dành riêng (private network address). Lớp A có địa chỉ 10.0.0.0. Lớp B có địa chỉ 172.16.0.0. Lớp C có địa chỉ 192.168.0.0. Địa chỉ broadcast của lớp A còn được gọi là địa chỉ universal broadcast (toàn bit 1 hay 255.255.255.255).
5. Broadcast và multicast:

Các phần trên đề cập đến broadcast và multicast nhưng chưa giải thích. Địa chỉ broadcast là một địa chỉ mà khi thông tin gửi tới địa chỉ đó sẽ được gửi đến toàn bộ các máy trong mạng. Multicast cũng như broadcast nhưng chỉ có tác dụng trong một subnet.

Trên đây là các kiến thức cơ bản về việc đánh địa chỉ IP. Vài ví dụ dưới sẽ giúp làm sáng tỏ các kiến thức trên.

Ví dụ 1: Địa chỉ 192.168.0.1 thuộc lớp nào?

Có 2 cách trả lời câu hỏi này: Một là dựa vào việc phân tích octet đầu ra dạng nhị phân, căn cứ vào các bit đầu mà có thể trả lời. Cách thứ hai là vì địa chỉ này thuộc mạng riêng của lớp C nên có thể trả lời ngay.

Ví dụ 2: Chỉ rõ địa chỉ mạng của địa chỉ 192.168.0.5 với network mask mặc định.

Câu hỏi này buộc ta phải biết địa chỉ 192.168.0.5 thuộc lớp nào và biết network mask của lớp đó.

192.168.0.5 thuộc lớp C.

Lớp C có network mask là 255.255.255.0.

Thực hiện phép AND sẽ ra 192.168.0.0.

Câu trả lời là 192.168.0.0. Câu hỏi này cũng có thể trả lời nếu ta biết là địa chỉ 192.168.0.5 là một trong 3 địa chỉ riêng.

Ví dụ 3: Chỉ rõ phần địa chỉ mạng (bỏ phần địa chỉ máy) của địa chỉ 192.168.0.10 với network mask mặc định.

Như câu trên ta đã biết network mask của địa chỉ 192.168.0.10 là 255.255.255.0. Câu hỏi yêu cầu chỉ rõ PHẦN địa chỉ mạng, nên ta chỉ lấy các bit còn nằm trong network mask:

Địa chỉ đầu 11000000.10101000.00000000.00001010

Network mask 11111111.11111111.11111111.00000000

Lấy phần trong network mask 11000000.10101000.00000000

Câu trả lời sẽ là 192.168.0.

Ví dụ 4: Địa chỉ IP 129.56.7.8 có subnet mask là 255.255.128.0. Hỏi có bao nhiêu subnet, bao nhiêu địa chỉ IP trong mỗi subnet, bao nhiêu địa chỉ IP trong mạng đó?

Việc trả lời đòi hỏi chút tính toán. Sau khi nhận biết địa chỉ IP này là thuộc lớp B, network mask mặc định là 255.255.0.0 (x là 16), ta biết quản trị mạng đã lấy 1 bit để chia subnet. Như vậy, y là 1. Số subnet là 2^1 là 2. Số địa chỉ IP trong mỗi subnet là 2^(32-y-x) – 2 là 32766. Suy ra số địa chỉ IP trong mạng đó là 2 * 32766 là 65532.
6. Câu hỏi dành cho người đọc tự trả lời:

Một quản trị viên có một network address thuộc lớp C. Anh ta muốn chia địa chỉ này ra thành nhiều subnet nhỏ hơn. Anh ta muốn mỗi subnet có tối thiểu 10 máy và tối đa 30 máy, vậy anh ta nên dùng những subnet mask nào?

Trên đây là một vài thông tin cần thiết để hiểu cách đánh địa chỉ IP.
7. Tài liệu tham khảo:

* Internetworking with TCP/IP
* TCP/IP illustrated
* Sybex CCNA2 study guide

SỬ DỤNG OPENLDAP ĐỂ QUẢN LÝ ĐĂNG NHẬP

Đây là một tài liệu ngắn gọn giới thiệu sơ lược về cách cài đặt và sử dụng OpenLDAP để quản lý việc đăng nhập tập trung cho một hệ thống. Đặc biệt do người viết chỉ mới tiếp xúc và sử dụng Linux trong một khoảng thời gian chưa lâu nên chỉ có kiến thức cơ bản đối với DEBIAN do đó các thao tác cài đặt, xử lý ở đây chỉ tập trung trên nền DEBIAN. Nội dung tài liệu bao gồm các phần sau:

* Tổng quan
* Cài đặt OpenLDAP trên Debian 3.0
* Cấu hình cho OpenLDAP
o Thiết lập cấu hình cho OpenLDAP
o Xây dựng CSDL
* Cài đặt và cấu hình cho NSS (Name Service Switch)
* Cấu hình cho module pam_ldap

Tài liệu này được viết dựa rất nhiều vào hai tài liệu hay sau:

http://howto.aphroland.de/HOWTO/LDAP/FrontPage

và http://homex.subnet.at/~max/ldap/index_NO-SW-PATENTS.php

Tổng quan

Trong môi trường máy tính mạng thì việc cấp phát và quản lý account là một việc không hoàn toàn đơn giản. Nếu tất cả các máy tính không nối mạng với nhau và mỗi một nhân viên đều chỉ đơn thuần sử dụng một máy tính cụ thể thì mọi việc sẽ trở nên tầm thường. Tuy nhiên, trong điều kiện làm việc ngày nay thì hầu hết các máy tính đều được nối mạng và nhu cầu đặt ra là mỗi người nhân viên có thể cơ động làm việc ở các máy khác nhau đã khiến cho việc quản lý đăng nhập tập trung trở nên cầp thiết. Giải pháp tầm thường cho vấn đề này là tạo tất cả các account trên tất cả các máy để mọi người có thể linh động làm việc ở bất cứ máy nào. Tuy nhiên giải pháp này dẫn đến sự khó khăn trong công tác quản lý ở các khía cạnh như: quản lý user id (uid), group id (gid), quyền hạn sử dụng (level of access), …

Trước đây NIS (Network Information Services) là một giải pháp được nhiều người sử dụng NIS là một giao thức dựa trên RPC và tương tự như NFS. Tuy nhiên NIS lại tỏ ra không thực sự ổn định và LDAP xuất hiện như một sự thay thế phù hợp.

Trong tài liệu này, ta sẽ lần lượt cài đặt và cấu hình các gói sau:

Về phía Server:

* libldap2
* slapd
* migrationtools
* openssl

Về phía Client:

* libldap2
* ldap-client
* nss_ldap
* pam_ldap

Cài đặt OpenLDAP trên Debian 3.0

Tải về các gói liên quan

Nếu không có nhu cầu bảo mật cao (bật tính năng SSL) đối với việc quản lý thì bạn có thể cài trực tiếp gói slapd đi kèm trên đĩa DEBIAN. Tuy nhiên, ở đây tôi muốn trình bày cách cài đặt hỗ trợ SSL cho nên bạn cần phải biên dịch lại phần source của gói slapd.

*

Bước 1: Bạn cần bổ sung vào tập tin /etc/apt/sources.list chương trình apt-get có thể tải về phần source của gói slapd và các gói tương ứng khác. Ví dụ:
#deb-src http://ftp.wa.au.debian.org/debian …
*

Bước 2: Cài đặt phần source của gói slapd.
#apt-get source slapd
*

Bước 3: Cài đặt các gói liên quan cần thiết để có thể biên dịch được gói slapd từ source.
#apt-get build-dep slapd
*

Bước 4: Cài đặt gói libssl-dev.
#apt-get íntall libssl-dev

Biên dịch và cài đặt

Trước tiên bạn cần chuyển vào thư mục mà lệnh apt-get đã tải về và giải nén nội dung phần source của gói slapd. Để bật tính năng bảo mật cho OpenLDAP, bạn cần thay đổi nội dung của tập tin /debian/rules như sau:

*

Thay tùy chọn –without-tls thành –with-tls
* Nếu bạn không sử dụng tính năng hỗ trợ SASL, bạn có thể xóa bỏ hai tùy chọn: –with-cyrus-sasl và –enable-spasswd.

Sau khi thay đổi nội dung của tập tin /debian/rules cho phù hợp với nhu cầu sử dụng, chúng ta bắt đầu biên dịch lại gói OpenLDAP:
#./debian/rules binary

Sau khi biên dịch thì các gói sau sẽ được tạo ra dưới dạng package của DEBIAN:

* slapd_2.0.23-6_i386.deb
* libldap2_2.0.23-6_i386.deb
* libldap2-dev_2.0.23-6_i386.deb
* ldap-utils_2.0.23-6_i386.deb

Sau khi biên dịch xong, ta sẽ cài đặt các gói:
#dpkg -i slapd_2.0.23-6_i386.deb libldap2_2.0.23-6_i386.deb libldap2-dev_2.0.23-6_i386.deb ldap-utils_2.0.23-6_i386.deb

Trong quá trình cài đặt, bạn sẽ được hỏi một loạt các câu hỏi. Khi này bạn chỉ việc trả lời OK với tất cả các câu hỏi vì sau này ta sẽ customize phần cấu hình lại cho phù hợp với nhu cầu sử dụng riêng.

Lưu ý:

* Sau khi biên dịch xong thì daemon slapd sẽ được thực thi ngay. Tuy nhiên trước khi hoàn tất việc cấu hình OpenLDAP cho phù hợp ta nên tắt daemon này đi.
* Các gói được cài đặt vào máy là các gói do ta tự biên dịch cho nên ta cần tránh việc DEBIAN tự động cập nhật lại các gói này bằng các gói được biên dịch sẫn đi kèm trên đĩa CDROM. Để thực hiện được việc này thì bạn có thể thực hiện bằng hai phương pháp (bạn có thể tham khảo thêm tài liệu Debian Reference để biết thêm thông tin). Ở đây ta sẽ dùng cách sau:
#echo “slapd hold” | dpkg –set-selections
Bạn cũng làm tương tự với các gói vừa cài vào để đảm bảo là tất cả các gói này không bị tự động cập nhật bởi DEBIAN (đây là một thao tác rất quan trọng vì nếu bạn không thực hiện thì các gói mới sẽ bị thay thế bởi các gói mặt nhiên và khi này chức năng SSL sẽ bị tắt đi và mọi việc sẽ trở nên rối rắm, khó debug :-!).

Cấu hình cho OpenLDAP

Thiết lập cấu hình cho OpenLDAP

Sau khi thực hiện xong các bước trên, ta đã hoàn tất việc cài đặt OpenLDAP và bây giờ ta sẽ đi vào việc cấu hình cho nó.

Trước tiên, ta sẽ tạo ra một người dùng mới là slapd:
#useradd slapd

Mọi việc khởi động, quản lý, … sẽ được thực hiện dưới quyền của người dùng tên là slapd.

Sau đó, ta sẽ thực hiện việc đổi owner và quyền truy cập cho hệ thống thư mục liên quan của OpenLDAP:
#chown -R slapd.slapd /etc/ldap
#chmod 750 /etc/ldap
#find /etc/ldap -type f -exec chmod 440 {} \;
#find /etc/ldap -type d -exec chmod 770 {} \;
#chown -R slapd.slapd /var/lib/ldap
#chmod 750 /var/lib/ldap
#rm /var/lib/ldap/*
#chown -R slapd.slapd /var/spool/splurd
#rm /var/spool/slurpd/*

Mọi cấu hình chính của OpenLDAP đều được lưu trong tập tin /etc/ldap/slapd.conf . Để cấu hình lại cho OpenLDAP theo ý của mình thì ta sẽ chỉnh sửa lại tập tin với nội dung sau:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/misc.schema

Các tập tin *.schema trên sẽ định nghĩa các kiểu dữ liệu được lưu vào CSDL. Các tập tin *.schema này định nghĩa rất nhiều các quy tắc, quan hệ giữa các thành phần trong CSDL. Ở mức độ ban đầu thì ta chưa cần quan tâm đến các mục này. Sau này, khi cần customize để tạo ra các lớp dữ liệu phù hợp cho một nhu cầu riêng thì ta có thể định nghĩa riêng một schema.

Sau đó, bạn cần thêm vào các mục sau:

# lệnh này yêu cầu OpenLDAP kiểm tra cấu trúc của dữ liệu có
# phù hơp với cấu trúc của dữ liệu được định
# nghĩa trong tập tin *.schema hay không.
schemacheck on
# đường dẫn đến tập tin lưu trữ proccess id của daemon slapd.
pidfile /var/run/slapd.pid
# đường dẫn đến tập tin lưu các tham số được gửi đến daemon slapd.
argsfile /var/run/slapd.arg
# xác định kiểu password-hash mặc định.
password-hash {CRYPT}
password-crypt-salt-format “$1$%.8s”
# log file của daemon thực hiện chức năng replication.
replogfile /var/lib/ldap/replog
# mức độ debug khi thực thi daemon slapd. Bạn nên bắt đầu ở mức 256
loglevel 256
# kiểu CSDL
database ldbm
# kích thước của cache (tính bằng byte).
dbcachesize 3000000

Trên đây chỉ là các thông số có tính chất tham khảo, bạn hoàn toàn có thể thay đổi nó cho phù hợp với nhu cầu sử dụng. Để biết thêm chi tiết về các tham số, bạn có thể tham khảo tài liệu tại trang web http://www.openldap.org

Xây dựng CSDL ban đầu

LDAP tổ chức dữ liệu dạng cây. Do đó trong CSDL phải có một cơ sở, các nhánh, các nhánh của nhánh và các nút lá (các entries trong CSDL). Trong ví dụ này tôi sẽ xây dựng CSDL có cấu trúc như sau:

* Cơ sở (base): dc=hcmup,dc=vn
* Nhánh 1:
ou=People : lưu trữ thông tin về người dùng (lấy ra từ /etc/passwd)
ou=Group : lưu trữ trong tin về các group trên hệ thống.

Ứng với cơ sở và mỗi nhánh sẽ có một người có toàn quyền quản lý. Và do LDAP tổ chức dữ liệu kiểu cây cho nên người ở mức cao hơn sẽ có quyền cao hơn.

Lưu ý: Password-hash ở đây là dạng CRYPT chứ không phải MD5. Việc mã hóa theo kiểu CRYPT có một số hạn chế nhất định (ví dụ như kích thước chuối mã hóa dài tối đa là 8 kí tự, … Tuy nhiên, đây cũng là một kiểu mã hóa khá tốt. Mặt khác, trên một số hệ thống thì LDAP lại không làm việc tốt với kiểu mã hóa MD5.

Bây giờ ta sẽ thêm vào tập tin /etc/ldap/slapd.conf thông số về CSDL như sau:

##############################################
## LDAP Authentication
##############################################
database ldbm
suffix “dc=hcmup,dc=vn”
rootpw your-password (được sinh ra bởi lệnh slappasswd -h {CRYPT} )
directory “/var/lib/ldap”
index objectClass eq
lastmod on
dbcachesize 3000000

access to attribute=userPassword
by dn=”cn=LDAPManager,dc=hcmup,dc=vn” write
by dn=”cn=nss,dc=hcmup,dc=vn” read
by anonymous auth
by * none
access to *
by dn=”cn=LDAPManager,dc=hcmup,dc=vn” write
by dn=”cn=nss,dc=hcmup,dc=vn” read
by * auth

Bây giờ ta sẽ xây dựng CSDL ban đầu, lưu vào tập tin /tmp/initial.ldif:

dn: dc=hcmup, dc=vn
objectClass: organization
o: hcmup

dn: cn=LDAPManager, dc=hcmup, dc=vn
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: Administrator
description: LDAP Administrator
userPassword: your-desired-passwd

dn: cn=nss, dc=hcmup, dc=vn
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: nss
description: LDAP NSS user for authentication
userPassword: your-desired-passwd

dn: ou=People, dc=hcmup, dc=vn
objectClass: organizationalUnit
ou: People

dn: ou=Group, dc=hcmup, dc=vn
objectClass: top
objectClass: organizationalUnit
ou: Group

Trong phần dữ liệu ở trên thì account LDAPManager được tạo ra để quản lý toàn bộ CSDL và người dùng nss được tạo ra để cho phép các máy client kết nối được vào server để đọc được thông tin trong CSDL của LDAP nhằm phục vụ cho việc đăng nhập. Sau này thì ta sẽ dùng account LDAPManager để thay đổi, thêm vào thông tin người dùng hay account tùy theo yêu cầu.

Để thêm dữ liệu vào CSDL, bạn cần thực hiện lệnh sau:

#slapadd -l /tmp/initial.ldif

Lưu ý: để thêm dữ liệu vào CSDL thì bạn có hai cách: dùng slapadd hay ldapadd. Lệnh slapadd chỉ thực hiện được khi daemon slapd đã được tắt. Còn đối với lệnh ldapadd thì daemon slapd phải chạy trước, sau đó thì việc thêm dữ liệu vào mới được tiến hành. Ngoài ra bạn cần chú ý rằng vì ta đã tạo một account mới là slapd để thực hiện mọi dịch vụ liên quan đến LDAP cho nên khi thêm dữ liệu vào thì chỉ có người dùng này mới được thêm và truy xuất.

Khởi động OpenLDAP

Ở bước này ta sẽ chạy daemon slapd bằng account slapd (account được thêm vào để dành cho chức năng này).:
#su – slapd /usr/bin/slapd -h `ldap://địa-chỉ-ip-của-máy-chủ/’ -d 255

Nếu lệnh su trên máy của bạn không hỗ trợ tính năng này thì bạn có thể làm như sau:
#su slapd -c /usr/bin/slapd -h `ldap://địa-chỉ-ip-của-máy-chủ/` -d 255

Theo mặc nhiên thì daemon này sẽ lắng nghe ở cổng 389. Nếu bạn thêm vào tính năng bảo mật SSL thì slapd sẽ lắng nghe ở cổng 636.

Nếu mọi việc thực hiện thành công thì daemon này sẽ chạy và bạn có thể kiểm tra xem nó có chạy chưa:
#ps aux | grep slapd
Khi này bạn sẽ thấy một loạt thông tin về daemon này trên màn hình.

Xây dựng CSDL quản lý đăng nhập

Để chuyển nội CSDL người dùng trong tập tin /etc/passwd và /etc/group sang CSDL được quản lý bởi OpenLDAP, ta có thể sử dụng gói migrationtools.
#apt-get install migrationtools

Theo một số nguồn thông tin thì gói này trên bản Debian Woody (version 40-1) lại hơi bị “buggy”. Phiên bản mới hơn dành cho Debian Sarge (version 44-6) làm việc tốt hơn. Do đó, thay vì cài gói migrationtools như trên thì bạn có thể tải về gói mới nhất để sử dụng. Bạn có thể tải về gói này ở trang web www.padl.com.

Sau khi giải nén, bạn cần chỉnh lại một số thông tin cho phù hợp trong tập tin migrate_common.ph:
$DEFAULT_MAIL_DOMAIN = “hcmup.vn”;
$DEFAULT_BASE = “dc=hcmup,dc=vn”;
$DEFAULT_MAIL_HOST = “hcmup.edu.vn”;
$EXTENDED_SCHEMA = 1;

Sau khi chỉnh lại các thông số trên, ta bắt đầu tiến hành việc chuyển CSDL trong tập tin /etc/passwd và /etc/group sang dạng LDIF để đưa vào CSDL của OpenLDAP:
#./usr/share/migrationtools/migrate_passwd /etc/passwd > /tmp/passwd.ldif
#./usr/share/migrationtools/migrate_group /etc/group > /tmp/group.ldif

Lưu ý: Tùy theo yêu cầu của bạn mà bạn có thể chuyển các thông tin khác như host, …

Sau khi chuyển dữ liệu xong, bạn cần phải thêm dữ liệu này vào CSDL của OpenLDAP như đã làm:
#slapadd -l /tmp/passwd
#slapadd -l /tmp/group
Bạn nên nhớ là phải dừng daemon slapd trước khi thực hiện việc thêm dữ liệu vào.

Sau khi thêm dữ liệu vào server thì ta đã sẵn sàng cho việc cấu hình phía client. Tuy nhiên để sử dụng SSL thì ta cần phải thực hiện thêm một bước nữa đó là tạo CERTIFICATE (nếu không sửa dụng tính năng SSL thì bạn có thể bỏ qua bước này)..

Tạo Certificate

Khi sử dụng SSL thì bạn cần phải tạo một certificate để giúp cho server và client có thể bắt tay với nhau và trao đổi giữ liệu (nếu không sử dụng SSL thì bạn có thể bỏ qua bước này).

Bạn cần cài đặt gói openssl để có thể tự tạo được certificate (ngoài ra bạn cũng có thể liên hệ với một số web site chuyên về vấn đề này).

Chuyển vào thư mục /usr/lib/ssl/misc và thực hiện lệnh:
#./CA.pl -newca
CA certificate filename (or enter to create)

Making CA certificate …
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 1024 bit RSA private key
………………..++++++
…………………………..++++++
writing new private key to ./demoCA/private/cakey.pem
Enter PEM pass phrase:
Verifying password – Enter PEM pass phrase:
—–
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
—–
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []: địa-chỉ-ip-của-server
Email Address []:

Thông tin ở mục Common Name và rất quan trọng vì nếu thông tin này không đúng thì server và client không thể nào bắt tay với nhau để có thể trao đổi dữ liệu —> mọi thứ xôi hỏng bổng không hết!! :- new.cert.csr
Using configuration from /usr/lib/ssl/openssl.cnf
Generating a 1024 bit RSA private key
………………++++++
…………….++++++
writing new private key to privkey.pem
Enter PEM pass phrase:
Verifying password – Enter PEM pass phrase:
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
—–
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:

(DO NOT PUT ANYTHING FOR THESE ENTRIES) Please enter the following extra attributes to be sent with your certificate request
A challenge password []:
An optional company name []:

Tiếp đến ta sẽ lấy phần password trong key file ra để khỏi phải nhập password khi sử dụng

#openssl rsa -in privkey.pem -out new.cert.key
read RSA key
Enter PEM pass phrase:
writing RSA key

#cat privkey.pem > newreq.pem
#cat new.cert.csr >>newreq.pem
#./CA.pl -signreq

Using configuration from /usr/lib/ssl/openssl.cnf
(enter the password you used when you created the authority using the CA.pl -newca command above)
Enter PEM pass phrase:
Check that the request matches the signature Signature ok
The Subjects Distinguished Name is as follows
countryName :P RINTABLE:VI
stateOrProvinceName :P RINTABLE:HO CHI MINH
organizationName :P RINTABLE:UNIVERSITY OF EDUCATION
commonName :P RINTABLE: địa-chỉ-ip-của-server
Certificate is to be certified until Jul 27 22:03:10 2022 GMT (7300 days) Sign the certificate? [y/n]:y

Trích phần CERTIFICATE trong tập tin newcert.pem vào một tập tin mới là server.cert. Bên cạnh đó, bạn cần đổi tên tập tin new.cert.key thành server.key. Vậy là quá trình tạo CERTIFICATE hòan tất với hai tập tin quan trong là server.key và server.cert.

Sau đi tạo CERTIFICATE xong, ta cần báo cho OpenLDAP là ta sẽ sử dụng chúng. Do đó, ta sẽ chép hai tập tin trên và thư mục demoCA vào thư mục /etc/ldap/ và chỉnh tập tin /etc/ldap/slapd.conf như sau:
TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSCertificateFile /etc/ldap/server.cert
TLSCertificateKeyFile /etc/ldap/server.key
TLSCACertificateFile /etc/ldap/demoCA/cacert.pem
TLSVerifyClient 0

Lưu ý là phần nội dung trên phải nằm trước khai báo CSDL và bạn cần phải restart lại LDAP server:
#su slapd /usr/sbin/slapd -h “ldap://địa-chỉ-ip-của-server/ ldaps://địa-chỉ-ip-của-server/”

Cài đặt và cấu hình cho NSS (Name Service Switch)

Cài đặt NSS (Name Service Switch)

Để các máy con có thể thay đổi cách đăng nhập truyền thống, ta cần phải cài thêm hai gói sau vào máy: libnss-ldap và libpam-ldap. Nếu bạn không cần sử dụng tính năng SSL thì chỉ việc cài đặt ngay hai gói trên vào máy. Ở đây, ta sẽ build lại từ source và bất tính năng hỗ trợ SSL:
#apt-get source libnss-ldap libpam-ldap

Sau khi tải về hai gói trên thì bạn cần chỉnh từ –disable-ssl thành –enable-ssl. Tiếp đến, chạy lệnh ./debian/rules binary để build từ source thành gói của Debian.

Lưu ý: hai gói này có sử dụng gói libldap2. Theo mặc định thì khi bạn cài hai gói này thì DEBIAN sẽ tự động cài gói libldap2 mặc định và gói này lại chưa được biên dịch để hỗ trợ SSL. Do đó, bạn cần sử dụng gói libldap2 đã được biên dịch lại khi biên dịch gói slapd trên server để cài vào máy client. Nếu không thì khi sử dụng các tính năng liên quan đến SSL thì bạn sẽ gặp lỗi !!!! (lỗi này đã khiến tác giả mất 1 tuần –> hơi bị thiếu “iốt”)

Tương tự như việc cài đặt gói slapd, bạn có thể cài hai gói này như sau:
#dpkg -i libnss-ldap_186_1.i386.deb libpam-ldap_140-1.deb

Sau khi cài đặt, để tránh việc Debian sẽ tự động upgrade các gói thì bạn cần thực hiện lệnh:
#echo “libnss-ldap hold” | dpkg –set-selections
#echo “libpam-ldap hold” | dpkg –set-selections

Cấu hình cho NSS (Name Service Switch)

Để thay đổi cách thức đăng nhập của hệ thống, ta sẽ thay đổi nội dung của tập tin nsswitch.conf như sau:
passwd: files ldap
group: files ldap
shadow: files ldap

Khi này hệ thống sẽ tìm người dùng trong các tập tin trên đĩa trước, nếu không thấy thì sẽ tìm trong CSDL của LDAP. Sau khi thử nghiệm thành công thì bạn có thể thay đổi cách thức đăng nhập là tìm ngay dữ liệu trong CSDL của LDAP ngay.

Tiếp đến, bạn cần thay đổi nội dung của tập tin /etc/libnss-ldap.conf
# địa chỉ của máy chủ
host địa-chỉ-ip-của-server
# cơ sở và nhánh mặc định
base dc=hcmup,dc=vn
# địa chỉ của server
# Nếu bạn không sử dụng SSL thì dùng uri ldap:// …
# còn nếu bạn muốn dùng SSL thì khai báo uri ldaps://…
#uri ldap://địa-chỉ-ip-của-server/
uri ldaps://địa-chỉ-ip-của-server/
# phiên bản của LDAP
ldap_version 3
# account được sử dụng để đăng nhập và đọc dữ liệu từ CSDL của OpenLDAP
binddn cn=nss,dc=hcmup,dc=vn
# mật mã của account được sử dụng — lưu ý là mật mã này được ghi ở dạng plain text
bindpw password-of-nss
# cổng sẽ kết nối (mặc đinh là 389) nếu dùng SSL thì mặc đinh là 636
port 636
nss_base_passwd ou=People,o=aphroland,c=us?one
nss_base_group ou=Group,o=aphroland,c=us?one:

Bây giờ bạn có thể kiểm tra xem mọi việc có thành công không bằng cách:
#finger tên-người-dùng-có-trong-CSDL-của-LDAP-mà-không-có-trên-client

Nếu mọi việc diễn ra tốt thì bạn sẽ thấy thông tin về người dùng này.

Cấu hình cho module pam_ldap — để quản lý việc đăng nhập

Tương tự như cấu hình cho nss, ta cũng sẽ thay đổi nội dung của tập tin /etc/pam_ldap.conf:
# địa chỉ của máy chủ
host địa-chỉ-ip-của-server
# cơ sở và nhánh mặc định
base dc=hcmup,dc=vn
# địa chỉ của server
#uri ldap://địa-chỉ-ip-của-server/
uri ldaps://địa-chỉ-ip-của-server/
# phiên bản của LDAP
ldap_version 3
# account được sử dụng để đăng nhập và đọc dữ liệu từ CSDL của OpenLDAP
binddn cn=nss,dc=hcmup,dc=vn
# mật mã của account được sử dụng — lưu ý là mật mã này được ghi ở dạng plain text
bindpw password-of-account-nss
# cổng sẽ kết nối (mặc đinh là 389) nếu dùng SSL thì mặc đinh là 636
port 636

Sau khi cài module pam_ldap thì cách thức đăng nhập, … được ghi trong các tập tin có tên tương ứng trong thư mục /etc/pam.d.

Do đó, để thay đổi cách thức đăng nhập thì ta cần thay đổi nội dung của tập tin /etc/pam.d/login.
#%PAM-1.0
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth sufficient /lib/security/pam_ldap.so use_first_pass
auth required /lib/security/pam_deny.so

account sufficient /lib/security/pam_ldap.so
account required /lib/security/pam_unix.so

session sufficient /lib/security/pam_ldap.so
session required /lib/security/pam_unix.so
session optional /lib/security/pam_lastlog.so # [1]
session optional /lib/security/pam_motd.so # [1]
session optional /lib/security/pam_mail.so standard noenv # [1]
session required /lib/security/pam_limits.so

password sufficient /lib/security/pam_ldap.so
password required /lib/security/pam_unix.so

Tương tự, bạn có thể thay đổi nội dung của file ssh, su, … cho phù hợp với yêu cầu sử dụng.

Trong cách thiết lập cấu hình như trên thì việc thay đổi password của người dùng vẫn chưa được giải quyết trọn vẹn. Để người dùng có thể thay đổi được password, … thì bạn cần xem thêm tài liệu về tham số rootbinddn để customize cho phù hợp với yêu cầu sử dụng.

Author: tankhoasp@yahoo.com (Khoa Nguyen Tan) – November 19, 2003