Linux网络学习

一、网络基础

1、    端口

在网络的应用层需要将数据分发给不同的端口,不管是TCP还是UDP协议的端口号长度都是16位,所以各有2^16=65536个端口,常用TCP端口号如下:

用途

端口号

FTP(文件传输协议)

20、21

SSH(安全shell协议)

22

telnet(远程登陆协议不安全,弃用)

23

DNS(域名服务器)

53

HTTP(超文本传输协议)

80

SMTP(简单邮件传输协议)

25

POP3(第三代邮局协议)

110

查看网络端口使用情况cmd:netstat -a

2、    DNS

域名解析系统(Domain Name System),把人们易于记忆的网络域名解析为计算机使用的IP地址。在DNS之前,是通过静态域名解析,例如windows中的hosts文件内静态对应了ip地址与对应的域名,其优先级高于DNS。但是大容量时解析困难,更新维护困难。域名结构有:根域名(“.”)、顶级域名(组织域“.com”或国家域”.cn”)、二级域名(自己命名)、主机域(“www”),后三个域名相加构成全球唯一域名。客户机域名进行逐级递归查询。

3、    网关

在局域网内进行两台主机数据交换依靠交换机MAC地址识别,在不同网段之间通信则需要网关进行数据传输,网关还负责公网IP与内网IP之间的转换

二、Linux网络配置

1、IP配置

用ifconfig查看连接状态,有两项,

  • lo(loopback):本地回环网卡,地址127.0.0.1。
  • eth0,第一块网卡,可以用ifconfig临时配置eth0的ip与子网掩码。

 

可以通过系统的setup工具命令来设置ip、子网、DNS等内容,设置后需要重启:service network restart。

也可以通过文件对网络IP进行配置:vi /etc/sysconfig/network-scripts/ifcfg-eth0。

DEVICE=eth0
  #关联的设备名称

BOOTPROTO={static|dhcp|none|bootp}
  #表示引导协议static|none表示静态;dhcp表示动态

IPADDR=192.168.10.10
  #设置IP地址

NETMASK=255.255.255.0
  #设置子网掩码

GATEWAY=192.168.10.1
  #设置网关

ONBOOT=yes|no
  #开机时是否自动激活网络接口

HWADDR=00:1E:0B:8F:B0:D0
  #硬件地址要与硬件中的地址保持一致可省

DNS1=202.106.0.20
  #指定DNS地址

USERCTL=yes|no
  #表示是否允许普通用户启用或禁用此接口

PEERDNS=yes|no
  #表示是否在BOOTPROTO为dhcp时接受由dhcp服务器指定的dns地址

DEVICE=eth0
#网卡的设备名称

BOOTPROTO={static|dhcp|none|bootp}
  #表示获取IP的方式,static|none表示静态;dhcp表示动态

IPADDR=192.168.10.10
  #设置IP地址

NETMASK=255.255.255.0
  #设置子网掩码

GATEWAY=192.168.10.1
  #设置网关

ONBOOT=yes|no
  #开机时是否自动激活网络接口

HWADDR=00:1E:0B:8F:B0:D0
  #硬件地址要与硬件中的地址保持一致可省

DNS1=202.106.0.20
  #指定DNS地址

USERCTL=yes|no
  #表示是否允许普通用户启用或禁用此接口

PEERDNS=yes|no
  #表示是否在BOOTPROTO为dhcp时接受由dhcp服务器指定的dns地址

如果有时通过ifconfig只能查看到lo而没有eth0,可能是因为网络没有随系统没有启动。

2、虚拟机网络配置

除了给Linux进行网络配置外,还需要对外部环境进行配置。虚拟机有三种网络连接方式:

  1. 桥接是占用真实的ip地址通过宿主机的真实网卡,可以与局域网及公网通讯。
  2. NAT方式通过VMnet1网卡只能跟宿主机通讯,可以访问互联网。
  3. HOST-only通过VMnet8网卡只能与宿主机通讯。桥接方式需要设置VMWare的桥接网卡,在virtual network editor中选择宿主机的连接方式(有线网卡还是无线网卡)。

3、网络管理

Linux目前提供两种网络管理工具,一种是network,一种是NetworkManager。 

network

network是控制网络接口配置信息修改后,网络服务必须重新启动,来激活网络新配置,从而使得配置生效。这部分操作对服务而言和重新启动系统时是一样的作用。控制脚本是/etc/init.d/network这个文件,可以用这个文件后面加上下面的参数来操作网络服务。例如:

/etc/init.d/network restart

同样也可以用service这个命令来操作网络服务例如:

service network restart

NetworkManager

RHEL6新增加的图形化网络管理工具,可用检测网络、自动连接网络的程序。对于无线网络,网络管理器可以自动切换到最可靠的无线网络。利用网络管理器的程序可以自由切换在线和离线模式。网络管理器可以优先选择有线网络,支持 VPN。网络管理器最初由 Redhat 公司开发,现在由 GNOME 管理。

NetworkManager 新版本增强设备以及协议的支持,NetworkManager 最新版有一个全新的漂亮的客户端界面nmtui。通过命令nmtui启动networkmanager 的图形化界面。

4、防火墙

在早期的Linux系统中,默认使用的是iptables防火墙管理服务来配置防火墙。RHEL 7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。

firewalld 与 iptables 都是 linux 中防火墙的管理程序,但其实其角色主要为对于防火墙策略的管理,真正的防火墙执行者是位于内核中的netfilter。二者区别如下:

  1. firewalld可以动态修改单条规则,动态管理规则集,允许更新规则而不破坏现有会话和连接。而iptables,在修改了规则后必须得全部刷新才可以生效;

  2. firewalld使用区域和服务而不是链式规则;

  3. firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制;

  4. iptables 仅能通过命令行进行配置;而 firewalld 提供了图形接口

  5. iptables 的配置文件在 /etc/sysconfig/iptables 中;而 firewalld 的配置文件在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件

  6. iptables 没有守护进程,并不能算是真正意义上的服务;而 firewalld 有守护进程

  7. iptables 通过控制端口来控制服务,而 firewalld 则是通过控制协议来控制端口
     

iptables

iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下:

1.在进行路由选择前处理数据包(PREROUTING);
2.处理流入的数据包(INPUT);     *外网-->内网
3.处理流出的数据包(OUTPUT);    *外网<--内网
4.处理转发的数据包(FORWARD);   *通过第三方
5.在进行路由选择后处理数据包(POSTROUTING)。

匹配策略规则采取的动作:

1.ACCEPT(允许):允许流量通过
2.LOG(登记):允许流量通过,但记录日志信息
3.REJECT(拒绝):拒绝流量通过且明确给予拒绝的响应(考试时务必用REJECT,让系统明确知道流量被拒绝)
4.DROP(丢弃):拒绝流量通过但不响应

 iptables命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功,iptables就会根据策略规则所预设的动作来处理这些流量。另外,再次提醒一下,防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误。如下所示为iptables对应参数

参数作用
-p设置默认策略
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-I num在规则链的头部加入新规则
-D num删除某一条规则
-s匹配来源地址IP/MASK,加叹号'、!”表示除这个IP
-d匹配目标地址
-i 网卡名称匹配从这块网卡流入的数据
-o网卡名称匹配从这块网卡流出的数据
-P匹配协议.如TCPUDP. ICMP
-dport num匹配目标端口w
-sport num匹配来源箍口号
-j采取的动作(ACCEPT. LOG. REJECT, DROP)

如下所示为对应的操作例子:

#查看已有的防火墙规则链
iptables -L   
#清空已有的防火墙规则链                                                      
iptables -F                                                         
#把INPUT规则链的默认策略设置为拒绝,规则链的默认拒绝动作只能是DROP,不能是REJECT
iptables -P INPUT DROP                                              
#向INPUT链头部中添加允许ICMP流量进入的策略规则
iptables -I INPUT -p icmp -j ACCEPT                                 
#删除INPUT规则链的第1条规则(即刚刚允许ICMP那条)
iptables -D INPUT 1                                                 
#把INPUT规则链默认策略设置为允许
iptables -P INPUT ACCEPT                                            
#将INPUT规则链设置为只允许指定网段的主机访问本机的22端口(必须先指明协议才能指明端口号)
iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT   
#向INPUT规则链尾部添加拒绝来自所有主机访问本机22端口的规则 
iptables -A INPUT -p tcp --dport 22 -j REJECT                       

firewalld

相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

区域默认规则策路
trusted允许所有的数据包
home拒绝流入的流量,除非与流出相关,如果与sshmdnsx ipp-clientx amba-clientdhcpv6-client於后相关,则允许况量
internal等同于home区域
work拒绝流入的流量,而如果流量与sshipp-clientdhcpv6-client相关,则允许流量
public拒绝流入,除非与流出的流生相关;而如果流毋与sshdhcpv6-client服务相关,则允许流量
external拒绝流入,除非与流出的流量相关:而如果流量与ssh,装亮相关,则允许流量
dmz拒绝流入,除非与流出的流域相关;而如果与ssh相关.则允许
block拒绝流入,除非与流出的流量相关
drop拒绝流入,除非与流出的流量相关

firewalld防火墙常用操作

#查看状态
systemctl status firewalld
#开启防火墙
systemctl start firewalld.service
# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙服务,则开机不会自启动
systemctl disable firewalld.service
#重启防火墙
systemctl restart firewalld.service
#查看firewall防火墙的状态
firewall-cmd --state
#查看防火墙开放端口规则
firewall-cmd --list-port
#查看80端口是否开启
firewall-cmd --query-port=80/tcp
#开放80端口,–permanent永久生效,没有此参数重启后就失效
firewall-cmd --permanent --add-port=80/tcp
#加载生效开放的端口
firewall-cmd --reload
#查询指定端口80是否开放
firewall-cmd --query-port=80/tcp
# 移除8080端口
firewall-cmd --permanent --remove-port=8080/tcp

三、网络命令

ifconfig

查看当前的网卡状况

ifdown/ifup

关闭/开启网卡设备

netstat -t/u/l/a/n

查看端口使用情况 -tcp协议端口/udp协议端口/监听的端口/所有连接/使用ip号、端口号

route -n

查看路由列表

nslookup

查看域名对应的ip

Ping -c 3

握手,测试网络是否通畅,-c 3指定ping的次数3次

telnet

与对应ip的端口进行连通测试

traceroute

追踪访问指定地址的路由路径

wget

从网络地址下载文件

tcpdump -i eth0 -nnX -port 21

网络抓包命令,-i 网卡号,-nn显示端口ip号,-X以16进制显示,-port抓包端口号

scp

使用scp命令可以实现在两个Linux服务器之间进行文件拷贝,其命令格式为

#   递归  文件源用户@主机:路径/文件名称    目的地用户@主机:目的地路径/名称
scp -r   root@hadoop102:/opt/module/*  tory@hadoop103:/opt/module

其中-r代表递归操作,如果用户当前就在文件源主机上登录,则可以省略“用户名@主机”,同理,如果在登陆在目标主机,则可以省略“目标用户@主机”。

rsync

远程同步工具rsync用于Linux之间的文件同步,用rsync做文件的复制要比scp的速度快,因为rsync只对差异文件做更新。scp是把所有文件都复制过去。其命令如下:

#     参数  文件源用户@主机:源文件路径                 目标用户@主机:目的地路径
rsync -av root@hadoop102:/opt/module/hadoop-3.1.3/ tory@hadoop103:/opt/module/hadoop-3.1.3/

其中参数-a代表归档拷贝,-v代表显示复制过程

SSH

互联网的ftp与telnet协议明文传输,易被抓包截获,网络传输不安全。对称加密算法,加密与解密使用同一密钥,单密钥加密,解密需要加密的密码,不安全。SSH使用非对称加密算法有公钥与私钥,使用公钥加密,私钥解密,保护发送端的私钥不会被接收端看到。

如下所示为使用SSH的原理:

  1. 首先在A服务器生成一对公钥和私钥,公钥用于发送给别人,私钥自己保存。例如这里服务器B保存了A的公钥。
  2. 当A需要向B发送数据时,在A本地使用私钥对数据进行加密,B接收到数据后使用公钥进行解密
  3. 反之,当B向A发送数据时,在B使用公钥对数据进行加密,A接收到之后使用私钥进行解密

 首先生成公钥和私钥,在Linux每个用户目录下都有一个隐藏的.ssh文件夹,用于保存ssh相关文件,在该目录下执行如下命令,生成id_rsa(私钥)、id_rsa.pub(公钥)。此外known_hosts文件中记录ssh访问过的计算机公钥,authorized_keys存放授权过的无密登录服务器公钥

ssh-keygen -t rsa

之后通过如下命令将公钥发送到目标主机

ssh-copy-id hadoop102

这样对当前用户,通过ssh登录hadoop102时就不需要输入密码了

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐