linux网络基础
一 介绍
关于防火墙,这里在做补充。先看一幅图
防火墙是内核提供的功能,可以通过iptables
命令直接设置防火墙规则,也可以通过图中的两个守护进程提供的工具来设置,它们底层使用的命令都是iptables
。目前发行版大都使用firewalld作为守护进程,使用firewall-cmd
来配置规则,这里就介绍firewalld。
firewalld中,zone是一系列规则的集合(类似iptables命令中的chain),zone的target字段定义默认行为,如果到来(incoming)数据包没有匹配zone的规则,就使用默认行为。firewalld预定义了多种zone,默认网卡设备使用public。public zone中target为default,表示没有成功匹配的(incoming)数据包会被拒绝进入。
规则可以被定义为多种形式,如直接指定服务,如http,ftp,ssh;或者使用端口+协议,如80/tcp,123/udp。但是你可能会发现这些功能很有限,远没有iptables
命令灵活,因此firewall-cmd
提供--direct
直接使用iptables
命令的规则来配置防火墙。当不用直接使用iptables,这会造成firewalld服务内核数据不一致。
规则分为运行时规则和永久规则,其实就是保存为内存中副本的规则为运行时规则,保存文件中的规则为永久规则。只不过firewall-cmd
一次只能保存一个地方,内存或文件。
网卡具体使用什么zone由NetworkManager确定,如果没有明确指定,会使用firewalld的默认zone,一般为public,但可以通过public-cmd
修改。
二 命令
2.1 ip
ip命令功能很强大,常用于查看、修改、设置网卡ip、路由表、设备等功能。配置不会被保存。
代替了ifconfig、route、arp等老工具的使用
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT
:表示ip具体的某个子功能,常用的为addr
(设置ip)、route
(路由表)、neighbour
(arp缓存)COMMAND
:每个object的动作都不一样,可以查询、修改、添加对应实体,但如果没有给出则默认查询help
:通过help可查询对应object具体用法
用法参考:Linux命令之ip
2.2 ss
用于查看sockets信息。
代替了老工具netstat的使用
ss [options]
默认显示所有已建立连接(non-listening)的sockets,包括TCP/UNIX/UDP类型的socket。
-l
:仅显示正在监听(listening)的sockets无
:仅显示已建立连接(non-listening)的sockets-a
:同时显示正在监听(listening)和已建立连接(non-listening)的sockets
-t
:仅显示tcp类型的sockets-u
:仅显示udp类型的sockets-x
:仅实现unix类型的sockets无
:同时显示tcp、udp、unix类型的sockets
-n
:显示端口而不是服务名-p
:显示使用socket的进程
2.3 nmtui
NetworkManager提供的,用于配置网络的字符界面工具。如配置网卡ip、掩码、网关、DNS服务器,并且配置会被保存下来。
2.4 firewall-cmd
- 检测防火墙状态
sudo firewall-cmd --state
- 重新加载防火墙规则,运行时添加但没有保存的规则会消失
sudo firewall-cmd --reload
- 一般添加规则不会被永久保存,添加`–permanent``永久保存却不会立刻生效。有两种方法解决:
# 设置运行时规则后再保存 firewall-cmd <other options> firewall-cmd --runtime-to-permanent 保存到文件中,然后重新加载所有规则 firewall-cmd --permanent <other options> firewall-cmd --reload
- zone操作
# 查看当前默认zone sudo firewall-cmd --get-default-zone # 改变默认zone sudo firewall-cmd --set-default-zone=internal # 查看网卡设备使用的zone。网卡只会在没有明确设置zone时才使用默认zone sudo firewall-cmd --get-active-zones # 得到一个zone的全部配置 sudo firewall-cmd --zone=public --list-all # 得到全部zone的配置 sudo firewall-cmd --list-all-zones
- 添加、删除服务或端口
# 通过服务名添加、删除服务 sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --remove-service=http --permanent # 通过端口+协议添加、删除服务 sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --remove-service=http --permanent
- 等等等等
参考:Introduction to FirewallD on CentOS
参考
Introduction to FirewallD on CentOS
CHAPTER 5. USING FIREWALLS
Firewalld
CentOS 7 中firewall-cmd命令
Computer network
OSI model
A Deep Dive into Iptables and Netfilter Architecture
iptables查看、开放、删除端口、保存设置
NetworkManager
What’s the difference between Network Initscript and NetworkManager in RHEL 7?
Linux命令之ip