Linux 基础教程:从零到进阶,成为最强管理员
由 linux.mba「Most Badass Admin」最强管理员社区撰写
第二部分:Linux 进阶
第八章:网络配置与管理
这一章我们将讲解如何在 Linux 系统中管理网络,重点是如何配置网络接口、IP 地址、配置防火墙以及如何使用 DNS 和 hosts
文件等。我们从基础开始,确保你对每一个命令都有清晰的理解。
8.1 网络接口与配置文件
在 Linux 中,网络接口指的是计算机与外部网络进行连接的“桥梁”。每个网络接口通常都有一个对应的配置文件,控制网络的设置。你可以通过这些配置文件来设置静态 IP 地址、动态 IP 地址(DHCP)以及其他网络参数。
查看网络接口
在命令行中,你可以通过以下命令来查看你的网络接口及其配置:
ip addr
或者
ifconfig
这会显示你的所有网络接口信息。比如,eth0
是以太网接口,lo
是本地环回接口。
8.2 配置静态 IP 与 DHCP
静态 IP:这是固定的 IP 地址,适用于你需要让系统始终保持在一个特定 IP 地址上的情况。比如,公司服务器或者你自己家的固定设备。
DHCP:这是一种动态 IP 地址分配方式,适用于你不需要一个固定 IP 地址,系统每次连接到网络时都会自动获取一个可用的 IP 地址。
8.2.1 配置静态 IP
在 Ubuntu 系统中,你可以通过编辑 /etc/netplan/
下的配置文件来设置静态 IP。
- 使用以下命令打开配置文件:
sudo vi /etc/netplan/00-installer-config.yaml
- 修改文件,设置静态 IP:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.10/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
- 保存并退出后,应用配置:
sudo netplan apply
8.2.2 配置 DHCP(动态 IP)
如果你希望使用动态 IP 地址,只需要确保配置文件中启用了 DHCP。
Ubuntu:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
CentOS:
- 打开网络接口的配置文件:
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 确保配置如下:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
- 保存并重启网络服务:
sudo systemctl restart network
8.3 配置防火墙:iptables
、firewalld
和 ufw
在 Linux 系统中,防火墙是用来控制哪些网络流量可以进出你的系统的。防火墙可以通过不同的工具来配置和管理,其中包括 iptables
、firewalld
和 ufw
。
我们先简单了解这三者的区别,然后再详细介绍如何使用它们。
8.3.1 iptables
、firewalld
和 ufw
的区别
iptables
:这是 Linux 中最传统的防火墙工具。它通过命令行配置防火墙规则,可以控制数据包的进出。iptables
功能强大,灵活性高,但需要你手动输入较为复杂的规则,适合有一定经验的管理员使用。firewalld
:这是 Red Hat 系列(包括 CentOS 和 Fedora)中用于管理防火墙的工具。它是基于iptables
的,提供了更易用的命令行工具,并且可以支持“区域”(zones)概念,使防火墙配置更加简洁和易管理。firewalld
默认在 CentOS 7 和更高版本中使用。ufw
:这是 Ubuntu 系统中使用的防火墙工具,它是iptables
的一个简化前端。对于初学者来说,ufw
非常简单,通常只需要几个命令就可以配置基本的防火墙规则。
8.3.2 使用 iptables
配置防火墙
iptables
是 Linux 中传统的防火墙工具,可以控制系统的网络流量。它的配置命令较为复杂,但灵活性极高。
- 查看当前防火墙规则:
sudo iptables -L
- 允许 HTTP(端口 80)流量:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-
sudo
: 这个命令告诉系统,你以管理员身份(超级用户)执行这条命令。 -
iptables
: 这是防火墙管理工具,用于配置规则来控制网络流量。 -
-A INPUT
:-A
表示“追加”,即将这条规则添加到防火墙规则的末尾。INPUT
表示这条规则适用于进入本机的流量。 -
-p tcp
:-p
表示协议,这里使用的是 TCP 协议。TCP 是一种常用的网络协议,用于大多数网络通信。 -
--dport 80
:--dport
表示目标端口,80
是 HTTP 协议的默认端口。这里意味着你允许通过端口 80 的流量,即网页访问请求。
-j ACCEPT
:-j
代表“跳转”到指定的动作,ACCEPT
表示接受(允许)符合此规则的流量。
总结:这个命令的意思是:允许任何进入你服务器的 HTTP 请求(即端口 80 的流量)。 -
允许 SSH(端口 22)流量:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo
: 同样表示以管理员身份执行命令。iptables
: 防火墙工具。-A INPUT
: 向进入流量的规则链添加规则。-p tcp
: 使用 TCP 协议。--dport 22
: 目标端口为 22,端口 22 是用于 SSH(安全远程登录)的默认端口。-j ACCEPT
: 接受通过端口 22 的流量,也就是允许 SSH 连接。
总结:这个命令允许你通过 SSH(端口 22)远程连接到你的机器。
- 阻止所有流量:
sudo iptables -A INPUT -j DROP
sudo
: 以管理员身份执行命令。iptables
: 防火墙工具。-A INPUT
: 向进入流量的规则链添加规则。-j DROP
:DROP
代表丢弃,这意味着你拒绝所有的流量,不允许任何进入服务器的连接。
总结:这个命令的意思是:丢弃所有进入服务器的流量,即拒绝所有外部连接。
- 保存
iptables
配置:在 Ubuntu 中,使用iptables-persistent
来保存防火墙规则:
sudo apt install iptables-persistent
在 CentOS 中,使用以下命令保存规则:
sudo service iptables save
8.3.3 使用 firewalld
配置防火墙(适用于 CentOS)
firewalld
作为 Red Hat 系列的防火墙工具,比 iptables
更加易用。它使用“区域”(zones)的概念来组织防火墙规则。
- 启用防火墙:
sudo systemctl start firewalld
sudo systemctl enable firewalld
- 允许 HTTP(端口 80)流量:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
sudo
: 以管理员身份执行命令,表示你需要超级用户权限来修改防火墙规则。firewall-cmd
: 这是管理firewalld
防火墙的命令行工具。firewalld
是一个动态防火墙管理工具,提供了比iptables
更简化的管理方式。--zone=public
:zone
是firewalld
中的一个概念,用来定义防火墙规则应用的网络区域。public
是默认区域之一,表示你所在的网络是公共网络(比如连接到互联网)。不同的区域有不同的安全策略。这里,我们表示将规则应用到public
区域。--add-service=http
:--add-service
是用来添加一个特定服务的规则,http
就是你要允许通过防火墙的服务,这个服务默认使用端口 80(HTTP)。也就是说,这个命令的作用是:允许 HTTP 流量进出你的服务器。--permanent
: 这个选项告诉firewalld
这个规则是永久性的,即使防火墙或服务器重启,规则依然有效。如果不加--permanent
,规则只会在当前会话中生效,重启后会失效。--reload
: 这个选项表示重新加载防火墙配置。firewalld
会应用之前添加的所有规则,确保新规则生效。- 允许 SSH(端口 22)流量:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload
- 查看当前防火墙规则:
sudo firewall-cmd --list-all
8.3.4 使用 ufw
配置防火墙(适用于 Ubuntu)
ufw
是 Ubuntu 中用于配置防火墙的工具,非常简洁和易用。
- 启用防火墙:
sudo ufw enable
- 允许 HTTP(端口 80)流量:
sudo ufw allow 80/tcp
- 允许 SSH(端口 22)流量:
sudo ufw allow 22/tcp
- 查看防火墙状态:
sudo ufw status
- 禁用防火墙:
sudo ufw disable
8.4 配置 DNS 与 hosts
文件
DNS(域名系统)是将域名(比如 www.google.com
)转换为 IP 地址的系统,/etc/hosts
文件则是一个本地的域名解析文件,系统可以通过它来直接解析某些特定的域名。
8.4.1 配置 DNS
你可以通过修改 /etc/resolv.conf
文件来配置 DNS 服务器。这样,系统就会通过指定的 DNS 服务器来进行域名解析。
- 打开
/etc/resolv.conf
文件:
sudo vi /etc/resolv.conf
- 添加 DNS 服务器:
nameserver 8.8.8.8
nameserver 8.8.4.4
- 保存并退出。
8.4.2 配置 hosts
文件
/etc/hosts
文件用于将 IP 地址映射到域名,可以直接在本地解析某些域名。比如,你可以配置局域网内某些设备的 IP 和名称。
- 打开
/etc/hosts
文件:
sudo vi /etc/hosts
- 添加条目,举个例子:
192.168.1.100 myserver.local
这样,你就可以在终端里使用 ping myserver.local
来访问这个 IP 地址了。
总结
这一章我们学习了如何配置网络,包括静态 IP 和 DHCP 设置,如何管理防火墙(使用 iptables
、firewalld
和 ufw
),以及如何配置 DNS 和 hosts
文件。掌握这些技能能让你高效地管理 Linux 系统的网络连接,确保你的机器安全并能够与其他设备顺利通信。