#网络 #防火墙
Linux 处理数据包过程
数据包从网卡流入主机,进入 kernel 内核层,内核层进行路由决策,如果是发送到该主机的数据,则将数据传入用户层,否则将丢弃该数据包或者进行转发 。
本机数据从用户层流向内核层后,进行路由决策决定从哪个网卡流出
ip_forward 转发功能
ip_forward
叫做 Kernel IP Forwarding
,这是 Linux Kernel
的一个特性,可以在 ip 层实现类似路由器的路由转发功能
我们可以以一个简单的例子来理解,假如你的主机现在有两个网卡,第一个网络接口的地址为 192.168.2.1/24 (NIC1),第二个网络接口的地址为 192.168.3.1/24 (NIC2),从 NIC1 流入一个数据包,destination 为 192.168.3.24/24,与 NIC2 在同一个子网中,这时如果我们开启了 ip_forward
,内核层就会将该数据包转发到 NIC2 端口流出
网络配置
常见的配置手段
- nmcli
nmcli
是NetworkManager
的命令行接口,用于配置和管理网络连接。NetworkManager 是一个动态网络管理器,旨在使配置和管理网络连接更加简便,尤其是对于移动设备和桌面环境。 - ip
ip
命令是iproute2
工具包的一部分,用于配置网络接口、路由和隧道。ip
命令是ifconfig
和route
等旧工具的现代替代品,提供更强大的功能和更灵活的语法。 - ifcfg
ifcfg
通常用于基于 Red Hat 系列的 Linux 发行版,如 RHEL、CentOS 和 Fedora,用于配置网络接口。网络配置通常存储在/etc/sysconfig/network-scripts/ifcfg-<interface>
文件中。
ifcfg
文件配置方法正在逐渐被淘汰,尤其是在现代 Linux 发行版中。这主要是因为 NetworkManager 和 systemd-networkd
等更现代化的网络管理工具的广泛采用,这些工具提供了更强大的功能和更灵活的配置选项。
网络配置过程
这部分主要想谈谈关于网络配置中我们需要关注哪些,对整个网络配置有一个概括性的了解,以便能够更好的使用工具进行网络配置,通常我们着重关注以下几点:
- IP 地址类型:静态 IP 地址或动态 IP 地址(DHCP)。
- 子网掩码:确定子网范围。
- 网关:用于访问外部网络。
- DNS 服务器:域名解析服务。
- 网络接口:需要配置的网络接口(如 eth0、wlan0)。
我们不管通过什么工具都可以进行网络配置
配置文件
网卡配置文件ifcfg-*
位于文件夹 /etc/sysconfig/network-scripts
,其命名规则为 ifcfg-*
,在系统启动时都会扫描到这些文件
我们可以查看其中内容
关于以上配置,几个比较关键的为:
ONBOOT=yes
- 说明:指定系统启动时是否激活此网络接口。
NETBOOT=yes - 说明:指定网络引导协议(Netboot,允许计算机在本地没有存储设备时,通过网络从远程服务器上获得操作系统和启动文件)是否启用。
IPV6INIT=yes - 说明:指定是否初始化 IPv6 配置。
BOOTPROTO=dhcp - 说明:指定获取 IP 地址的方式(包括 static,dhcp,none)。
TYPE=Ethernet - 说明:指定网络接口的类型(常见的 TYPE 有:Ethernet,VLAN,Wireless等。
常见的ifcfg
文件配置参数及其说明:
参数 | 说明 | 示例 |
---|---|---|
DEVICE | 网络接口名称 | DEVICE=eth0 |
BOOTPROTO | 获取 IP 地址的方式 | BOOTPROTO=static |
ONBOOT | 启动时是否激活网络接口 | ONBOOT=yes |
IPADDR | 静态 IP 地址 | IPADDR=192.168.1.100 |
NETMASK | 子网掩码 | NETMASK=255.255.255.0 |
GATEWAY | 默认网关 IP 地址 | GATEWAY=192.168.1.1 |
DNS1, DNS2 | DNS 服务器 IP 地址 | DNS1=8.8.8.8 |
DOMAIN | 默认搜索域名 | DOMAIN=mydomain.com |
DEFROUTE | 是否作为默认路由 | DEFROUTE=yes |
HWADDR | 网卡 MAC 地址 | HWADDR=00:11:22:33:44:55 |
MTU | 最大传输单元 (MTU) | MTU=1500 |
TYPE | 网络接口类型 | TYPE=Ethernet |
UUID | 网络接口唯一标识符 (UUID) | UUID=123e4567-e89b-12d3-a456-426614174000 |
域名解析(DNS)配置文件(/etc/resolv.conf)
其中 search 参数表示,当域名不全时候,补全的内容,比如当我们 ping baidu
没有 .
,则会先进行补全为 baidu.localdomain
对其进行解析
nameserver
参数表示域名服务器的 IP
防火墙
基本概念
防火墙就是规定一系列规则组,以控制流量在物联网和本机信任区的流通
zone:防火墙守护进程使用称为“区域”的实体管理规则组。其中的规则将计算机连接到的网络划分为不同的信任等级
从最不信任到最受信任的顺序,防火墙中的预定义区域是:
Trust Level | Name (Chinese) | Description |
---|---|---|
drop | 丢弃 | 最低信任级别。所有传入连接在没有回复的情况下丢弃,并且只能进行传出连接。 |
block | 限制 | 与上述类似,但传入请求不是简单地丢弃连接,而是使用或消息被拒绝。 |
public | 公共 | 表示公共、不受信任的网络。您不信任其他计算机,但可能会根据情况允许选定的传入连接。 |
external | 外部 | 使用防火墙作为网络的外部网络。它配置为 NAT 伪装,以便你的内部网络保持私有但可访问。 |
dmz | 用于位于 DMZ 中的计算机(无法访问内网络其余部分的隔离计算机),仅允许某些传入连接。 | |
work | 工作 | 用于工作机。信任网络中的大多数计算机。可能允许使用更多服务。 |
home | 家 | 家庭环境。它通常意味着你信任大多数其他计算机,并且将接受更多服务。 |
internal | 内部 | 外部区域的另一侧,用于网络的内部部分。计算机是相当值得信赖的,一些额外的服务是可用的。 |
trusted | 受信任 | 信任网络中的所有计算机。最开放的可用选项,应谨慎使用。 |
对于 firewalld 的操作
-
启动防火墙服务:
sudo systemctl start firewalld
-
停止防火墙服务:
sudo systemctl stop firewalld
-
重启防火墙服务:
sudo systemctl restart firewalld
-
查看防火墙服务状态:
sudo systemctl status firewalld
配置操作
-
查看当前防火墙规则:
sudo firewall-cmd --list-all
-
添加一个端口到防火墙:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
-
移除一个端口从防火墙:
sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
- 添加允许的服务:
sudo firewall-cmd --zone=public --add-service=http --permanent
- 移除允许的服务:
sudo firewall-cmd --zone=public --remove-service=http --permanent