---
# System prepended metadata

title: 作業系統（三）

---

# 作業系統（三）basic of network services
###### tags: `作業系統`
:::info
請多加運用GOOGLE
:::
## ports
網路port是一個虛擬的通訊端口，用於在計算機之間進行通訊和數據傳輸。在TCP/IP協議中，每個通訊端口都與一個特定的應用程序或服務相關聯。透過端口，計算機可以識別發送到哪個應用程序或服務的數據，從而確保數據能夠準確地到達目的地。網路port通常用一個16位的數字表示，範圍從0到65535，
## 常用service
1. SSh
SSH（Secure Shell，安全外殼協定）是一種用於安全遠程登錄或遠程管理計算機的協定。它允許用戶通過網絡對遠程計算機進行加密的遠程登錄和指令操作，並安全地傳輸敏感資訊。SSH使用加密技術來確保通信的保密性和完整性，從而有效防止敏感資訊在傳輸過程中被竊取或竄改。通常，SSH用於遠程登錄和文件傳輸，並且被廣泛應用於管理遠程伺服器和網絡設備，如運營商的路由器、交換機、Web伺服器等。SSH的使用者身份驗證方式包括密碼驗證、公鑰驗證等，其中公鑰驗證方式提供了更高的安全性。SSH通常運行在TCP的22端口上。

3. HTTP
HTTP（Hypertext Transfer Protocol，超文本傳輸協定）是一種用於在網際網路上傳輸超文本的應用層協定。它是一種客戶端-服務器協定，用於從網頁伺服器傳輸超文本到用戶的瀏覽器。HTTP的基本功能是允許瀏覽器向伺服器發出請求，然後伺服器返回相應的資源。這些資源可以是HTML檔案、圖片、音頻檔案等等。HTTP是建立在TCP/IP協定上的，通常使用TCP的80端口進行通信。HTTP是一種無狀態協定，這意味著每個單獨的請求之間沒有記憶。

3. HTTPS
HTTPS（Hypertext Transfer Protocol Secure，安全超文本傳輸協定）是HTTP的加密版本，用於安全地傳輸資訊。它使用SSL（Secure Sockets Layer，安全套接層）或TLS（Transport Layer Security，傳輸層安全性）協定來加密資料傳輸。HTTPS的主要目的是確保在網絡上傳輸的資訊不會被攔截、竊取或竄改，從而提供更高的安全性和隱私保護。HTTPS的使用在網際網路上越來越普遍，特別是在需要保護用戶敏感資訊（如信用卡號碼、密碼等）的網站上，如銀行、電子商務平台等。HTTPS通常使用TCP的443端口進行通信。

4. DNS
DNS（Domain Name System，域名系統）是互聯網上用於將域名轉換為IP地址的分散式命名系統。它允許人們使用易於記憶的域名（example.com）來訪問互聯網上的各種服務和資源，而不必記住它們的IP地址。DNS的運作原理大致如下：當用戶在瀏覽器中輸入一個域名時，瀏覽器會向本地DNS伺服器發送一個DNS查詢請求。如果本地DNS伺服器已經緩存了該域名的IP地址，則直接返回結果；否則，它會向其他DNS伺服器發送請求，直到找到包含該域名對應IP地址的DNS伺服器。一旦找到，本地DNS伺服器將結果返回給瀏覽器，瀏覽器便可以通過該IP地址訪問相應的網站或服務。 DNS的分散式架構使其具有高度的可靠性和可擴展性，同時也提供了域名解析的快速性。
![image](https://hackmd.io/_uploads/BJSSjNabA.png)


## SSH實作
openssh server安裝
```
sudo apt install ssh
```
![image](https://hackmd.io/_uploads/S1GdYdsgA.png)

ssh 連接
```
ssh user@127.0.0.1
```
or
```
ssh -l user 127.0.0.1
```
![image](https://hackmd.io/_uploads/BJAFqOoxC.png)

## HTTP實作
在實作上實現 HTTP 伺服器可以使用多種工具和框架，其中兩個最常見的是 Nginx 和 Apache2。

Nginx 是一個輕量級、高效的 Web 伺服器，也是一個反向代理伺服器。它的特點包括低記憶體消耗、高並發處理能力和事件驅動架構。以下是在 Debian 上使用 Nginx 實現 HTTP 伺服器的步驟：

1. 安裝 Nginx：在 Debian 中，你可以使用 apt package manager 安裝 Nginx。輸入以下命令：
```
sudo apt update
sudo apt install nginx
```

2. 啟動 Nginx 服務：安裝完成後，啟動 Nginx 服務：
```
sudo systemctl start nginx
```

3. 設定 Nginx：Nginx 的設定文件位於 /etc/nginx/nginx.conf 和 /etc/nginx/sites-available/。你可以根據你的需求編輯這些文件，例如配置伺服器區塊、虛擬主機和代理設定。

4. 測試伺服器：當你完成設定後，重新載入 Nginx 以使設定生效：
```
sudo systemctl reload nginx
```

5. 檢查 Nginx 狀態：可以使用以下命令檢查 Nginx 服務的運行狀態：
```
sudo systemctl status nginx
```
![image](https://hackmd.io/_uploads/rkvKh_ilR.png)

6. 建立http連線

```
sudo apt install curl #安裝curl
curl 127.0.0.1
```
![image](https://hackmd.io/_uploads/r1LJa_jlA.png)
在瀏覽器輸入伺服器IP
![image](https://hackmd.io/_uploads/HkoMpuslR.png)

### NGINX 進階設定
1. 修改檔案
NGINX 預設html檔案路徑在 /var/www/html, 可修改底下檔案改變網站內容
![image](https://hackmd.io/_uploads/BysS0usgA.png)

2. 代理伺服器
網頁代理伺服器是一種位於客戶端和網頁伺服器之間的中介軟體，負責處理來自客戶端的請求，並將其轉發到適當的網頁伺服器，然後將伺服器的回應返回給客戶端。這種架構可以提高網路安全性、性能和可擴展性，並允許在後端伺服器之間進行負載平衡。
![image](https://hackmd.io/_uploads/H12S1togR.png)
經入 /etc/nginx/sites-enabled/
```
cd /etc/nginx/sites-enabled/
```
刪除預設檔案
```
sudo rm default
```
新建檔案如下
```
server {
    listen 80;

    location / {
        proxy_pass http://example.com;
    }
}
```
重啟NGINX伺服器
```
sudo systemctl restart nginx.service
```
![image](https://hackmd.io/_uploads/Bk4Wftsx0.png)

## HTTPS實作
### SSl
#### Self-Signed SSL
```
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned.key -out selfsigned.crt
```
![image](https://hackmd.io/_uploads/HkrWbepZA.png)
provide information below
![image](https://hackmd.io/_uploads/Skcnbga-C.png)
#### set ssl nginx
```
sudo mkdir /etc/nginx/ssl # create ssl folder
sudo cp * /etc/nginx/ssl # copy key and crt to nginx ssl folder
```
config /etc/nginx/site-enable/
![image](https://hackmd.io/_uploads/rJORXla-A.png)


## DNS實作

在Debian 12上實作DNS伺服器需要安裝和配置BIND（Berkeley Internet Name Domain）軟體。以下是在Debian 12上設置DNS伺服器的步驟：
install bind9 server
```
sudo apt update
sudo apt install bind9
```

config bind9 server
named.conf.local
```
zone "test.tw" {
    type master;
    file "/etc/bind/test.tw.zone";
};
```
create /etc/bind/test.tw.zone
```
$TTL 86400
@       IN      SOA     ns1.test.tw. admin.test.tw. (
                2022042901 ; Serial
                3600       ; Refresh
                1800       ; Retry
                604800     ; Expire
                86400 )    ; Negative Cache TTL

@       IN      NS      ns1.test.tw.
ns1     IN      A       192.168.4.99
vmtest  IN      A       192.168.4.99
```

restart bind9 server
```
sudo systemctl restart bind9 restart service
sudo systemctl status bind9 # show status
```

test dns server
```
nslookup vmtest.test.tw 192.168.4.99
```
![image](https://hackmd.io/_uploads/ry6JoNp-R.png)


config forwarding
/etc/bind/named.conf.options
```
forwarders {
        8.8.8.8;
};
// forwards unknown dns query to 8.8.8.8(google dns server)
```