Linux基礎之網路管理

smileleooo發表於2024-05-01

目錄
  • 網路配置
  • 服務管理
  • 防火牆配置
  • 檔案下載wget和curl
  • 網路連線資訊netstat和ss

Linux 網路管理涉及一系列任務,包括配置網路介面、設定IP地址、管理網路服務和防火牆等。

網路配置

網路卡命名

根據網路介面定義裝置:

  • ethX 傳統的乙太網介面命名方式,其中 X 通常是數字,如 eth0 等

  • wlanX 用於無線網路卡介面,類似於 wlan0 等

不同的發行版和核心版本網路卡命名規則會有所不同,可以使用命令 ls /sys/class/net/ 來檢視系統中的網路卡介面。

其中預設存在的 lo 是指環回(loopback)介面,環回介面的 IP 地址通常是 127.0.0.1,也稱為本地迴環地址。

網路卡配置

ifconfig 命令用於檢視和配置網路介面資訊。

sudo ifconfig eth0 up            # 啟用 eth0 介面

sudo ifconfig eth0 down          # 禁用 eth0 介面

sudo ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up  # 設定IP地址和子網掩碼

其他命令包括 ip、nmcli 等都大同小異。

網路配置檔案

配置靜態IP地址,在 Ubuntu 中配置靜態 IP 地址可以透過編輯網路配置檔案來完成。

使用 NetworkManager 的方法:

  1. 編輯網路介面配置檔案
sudo vim /etc/network/interfaces
  1. 編輯靜態IP地址、閘道器和DNS伺服器的
auto eth0
iface eth0 inet static
    address 192.168.1.100   # 靜態 IP 地址
    netmask 255.255.255.0   # 掩碼
    gateway 192.168.1.1     # 閘道器
    dns-nameservers 8.8.8.8 8.8.4.4   # DNS 伺服器
  1. 儲存並退出編輯器,重新啟動網路服務
sudo systemctl restart NetworkManager

還有透過 netplan 管理網路的方式。

服務管理

systemctlservice 都是用於管理系統服務的命令列工具。

systemctl是在較新版本的Linux中引入的系統和服務管理工具,如systemd。service命令是傳統 SysVinit系統中用來管理系統服務的工具。

在許多Linux發行版中,service命令實際上是systemctl命令的一個符號連結,以向後相容。

使用 systemctl 啟動、停止和重啟網路服務:

sudo systemctl status network.service # 檢視服務狀態
sudo systemctl start network.service # 啟動服務
sudo systemctl stop network.service # 停止服務
sudo systemctl restart network.service # 重啟服務
sudo systemctl enable network.service # 設定開機自啟動
sudo systemctl disable network.service # 禁用開機自啟動

service和systemctl相比除了引數的位置不同,其他一致。

防火牆配置

常用的Linux防火牆工具包括 iptablesfirewalld,用於配置和管理Linux的防火牆規則。

Netfilter是Linux核心中用於實現資料包過濾和網路地址轉換功能的框架,iptables和firewalld都是基於Netfilter框架實現的工具。iptables是傳統的Linux防火牆工具,而firewalld則是較新的動態防火牆管理器。

重點關注firewalld防火牆,它支援動態更新技術並加入了區域的概念。

firewalld中常見的區域名稱(預設為public)以及相應的策略規則:

區域 預設規則策略
阻塞區域 (block) 拒絕流入的流量,除非與流出的流量相關
工作區域 (work) 拒絕流入的流量,除非與流出的流量相關
家庭區域 (home) 拒絕流入的流量,除非與流出的流量相關
公共區域 (public) 不相信網路上的任何計算機,只有選擇接受傳入的網路連線
隔離區域 (DMZ) 隔離區域也稱為非軍事區域,內外網路之間增加的一層網路,起到緩衝作用。對於隔離區域,只有選擇接受傳入的網路連線。
信任區域 (trusted) 允許所有的資料包
丟棄區域 (drop) 拒絕流入的流量,除非與流出的流量相關
內部區域 (internal) 等同於home區域
外部區域 (external) 拒絕流入的流量,除非與流出的流量有關;而如果流量與ssh服務相關,則允許 流量

firewall-cmd 是用於管理 firewalld 防火牆的命令列工具:

檢視防火牆狀態:

firewall-cmd --state

啟動/停止/重啟 firewalld 服務:

systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld

開啟/關閉 firewalld 服務:

systemctl enable firewalld
systemctl disable firewalld

檢視所有防火牆規則:

firewall-cmd --list-all

新增/移除埠:

firewall-cmd --add-port=PORT/PROTOCOL
firewall-cmd --remove-port=PORT/PROTOCOL

新增/移除服務:

firewall-cmd --add-service=SERVICE
firewall-cmd --remove-service=SERVICE

過載防火牆規則:

firewall-cmd --reload

如果想讓策略一直存在,需要在firewall-cmd命令設定防火牆策略時新增 --permanent 引數。

例如

配置在172.24.8.0 網段的主機訪問伺服器的5423埠被轉發到80埠:

firewall-cmd --zone=public --add-forward-port=port=5423:proto=tcp:toport=80:toaddr=SERVER_IP --source=172.24.8.0/24

檔案下載wget和curl

curlwget 都是在命令列下使用的用於下載檔案的工具。wget專門用於下載檔案,不支援傳送請求。curl不僅能下載,還可以傳送各種型別的請求,使用代理等。

curl 命令常用的引數:

  • -X, --request 指定 HTTP 請求方法,如 GET、POST、PUT、DELETE 等

  • -d, --data 傳送 POST 請求時使用的資料

  • -H, --header 新增額外的請求頭資訊

  • -i, --include 在輸出中包含 HTTP 頭資訊

  • -o, --output 將響應輸出到指定檔案

  • -O, --remote-name 將遠端檔案儲存到本地,使用遠端檔案的檔名

  • -L, --location 遵循重定向

  • -v, --verbose 顯示詳細的操作資訊,包括請求和響應的頭資訊

  • -A, --user-agent 設定使用者代理字串

wget 命令常用的引數:

  • -O, --output-document 將下載的檔案儲存為指定的檔名

  • -P, --directory-prefix 將下載的檔案儲存到指定目錄下

  • -r, --recursive 遞迴下載,下載指定 URL 下的所有連結

  • -t, --tries 設定重試次數

  • -b, --background 後臺下載模式

  • -U, --user-agent 設定使用者代理字串

  • --limit-rate= 限制下載速率

網路連線資訊netstat和ss

ssnetstat 都是用於檢視系統網路連線資訊的命令列工具。ss是一個更現代的工具,使用更快的核心資料來源,並且在處理大量連線時性比netstat更好,能夠顯示更多的詳細資訊。netstat 是一個更傳統的工具,用於顯示網路連線、路由表、介面統計資訊等。

ss 命令的一些常用選項:

  • -t 顯示TCP套接字

  • -u 顯示 UDP 套接字

  • -l 顯示監聽狀態的套接字

  • -a 顯示所有連線狀態的套接字

  • -p 展示使用socket的程序

  • -n 不解析服務名

  • -i 更多詳細資訊

netstat 命令的一些常用選項:

  • -a 顯示所有連線和監聽埠

  • -n 以數字形式顯示地址和埠號,而不是嘗試反解析主機名和服務名

  • -t 僅顯示 TCP 協議相關的連線

  • -u 僅顯示 UDP 協議相關的連線

  • -l 僅顯示正在監聽的套接字

  • -p 顯示每個套接字關聯的程序 ID 和程序名稱

通常ss和netstat會和grep命令結合,快速找到符合條件的網路連線資訊。

例如:

netstat -antlp | grep 80

# 找到埠為80的TCP網路連線資訊

若有錯誤,歡迎指正!o( ̄▽ ̄)ブ

相關文章