目录 1. 第一章 架设服务器前的准备工作2. 第二章 基础网络概念3. 第三章 局域网络架构简介4. 第四章 连上 Internet5. 第五章 Linux 常用网络指令6. 第六章 Li
- ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
- ❤️ 本篇创建记录 2022-11-29 ❤️
- ❤️ 本篇更新记录 2022-11-29 ❤️
- 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言 📝
- 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
- 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志🔥
整个联机分为几个部分,包括:网络
、服务器本身
、内部防火墙
软件设定、各项服务配置文件
、细部权限的 SElinux
以及最终最重要的档案权限
。
树莓派dns命令:
sudo apt-get install dnsutils
pi@raspberrypi:~ $ ifconfig wlan0wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.104 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::e969:5de2:c5f2:60d2 prefixlen 64 scopeid 0x20<link> ether dc:a6:32:ef:0b:9f txqueuelen 1000 (Ethernet) RX packets 32714407 bytes 2720628877 (2.5 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 49913634 bytes 872025979 (831.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0pi@raspberrypi:~ $
packets
代表封包数、errors
代表封包发生错误的数量、 dropped
代表封包由于有问题而遭丢弃的数量等等封包碰撞
的情况,如果发生太多次, 表示你的网络状况不太好;pi@raspberrypi:~ $ cat /etc/wpa_supplicant/wpa_supplicant.confpi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf
pi@raspberrypi:~ $ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.0.1 0.0.0.0 UG 303 0 0 wlan0169.254.0.0 0.0.0.0 255.255.0.0 U 206 0 0 vetha7980c9172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 Docker0192.168.0.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0pi@raspberrypi:~ $
Destination
, Genmask
:这两个玩意儿就是分别是 network 与 netmask 啦!所以这两个咚咚就组合成为一个完整的网域啰!Gateway
:该网域是通过哪个 gateway 连接出去的?如果显示 0.0.0.0 表示该路由是直接由本机传送
,亦即可以透过局域网络的 Mac 直接传讯;如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。Flags
:总共有多个旗标,代表的意义如下:
U (route is up):该路由是启动的;
H (target is a host):目标是一部主机 (IP) 而非网域;
G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的旗标;
D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由
M (modified from routing daemon or redirect):路由已经被修改了;
! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)
Iface
:这个路由传递封包的接口。ip 是个指令喔!并不是那个 tcp/IP 的 IP 啦!这个 ip 指令的功能可多了!基本上,他就是整合了 ifconfig 与 route 这两个指令
啰~不过, ip 可以达成的功能却又多更多!真是个相当厉害的指令。如果你有兴趣的话,请自行 vi /sbin/ifup ,就知道整个 ifup 就是利用 ip 这个指令来达成的。
pi@raspberrypi:~ $ ip -s link show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 RX: bytes packets errors dropped missed mcast 8647278892 58209131 0 0 0 0 TX: bytes packets errors dropped carrier collsns 8647278892 58209131 0 0 0 0 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc MQ state DOWN mode DEFAULT group default qlen 1000 link/ether dc:a6:32:ef:0b:9e brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped missed mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0 3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DORMANT group default qlen 1000 link/ether dc:a6:32:ef:0b:9f brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped missed mcast 2965435880 35848787 0 0 0 810721 TX: bytes packets errors dropped carrier collsns 1777368705 54661590 0 0 0 0 4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether 02:42:a6:1d:99:e2 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped missed mcast 786 6 0 0 0 5 TX: bytes packets errors dropped carrier collsns 43629 435 0 0 0 0 6: vetha7980c9@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default link/ether f6:66:6b:bc:14:be brd ff:ff:ff:ff:ff:ff link-netnsid 0 RX: bytes packets errors dropped missed mcast 870 6 0 0 0 0 TX: bytes packets errors dropped carrier collsns 8916604 23884 0 1 0 0 pi@raspberrypi:~ $
如果说 ip link
是与 OSI 七层协定 的第二层链接层有关的话,那么 ip address (ip addr)
就是与第三层网络层有关的参数啦! 主要是在设定与 IP 有关的各项参数,包括 netmask
, broadcast
等等。
pi@raspberrypi:~ $ ip address show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether dc:a6:32:ef:0b:9e brd ff:ff:ff:ff:ff:ff3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether dc:a6:32:ef:0b:9f brd ff:ff:ff:ff:ff:ff inet 192.168.0.104/24 brd 192.168.0.255 scope global noprefixroute wlan0 valid_lft forever preferred_lft forever inet6 fe80::e969:5de2:c5f2:60d2/64 scope link valid_lft forever preferred_lft forever4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:a6:1d:99:e2 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:a6ff:fe1d:99e2/64 scope link valid_lft forever preferred_lft forever6: vetha7980c9@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether f6:66:6b:bc:14:be brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 169.254.114.178/16 brd 169.254.255.255 scope global noprefixroute vetha7980c9 valid_lft forever preferred_lft forever inet6 fe80::c53a:237e:1d0f:b20f/64 scope link valid_lft forever preferred_lft foreverpi@raspberrypi:~ $
事实上, ip route
的功能几乎与 route 这个指令差不多,但是,他还可以进行额外的参数设计,例如 MTU 的规划等等,相当的强悍啊!
pi@raspberrypi:~ $ ip route showdefault via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.104 metric 303 169.254.0.0/16 dev vetha7980c9 scope link src 169.254.114.178 metric 206 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 192.168.0.0/24 dev wlan0 proto dhcp scope link src 192.168.0.104 metric 303
pi@raspberrypi:~ $ ping -c 3 www.baidu.comPING www.baidu.com (14.215.177.38) 56(84) bytes of data.64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=57 time=12.1 ms64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=57 time=5.56 ms64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=57 time=6.39 ms--- www.baidu.com ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2002msrtt min/avg/max/mdev = 5.560/8.018/12.105/2.909 mspi@raspberrypi:~ $
我们前面谈到的指令大多数都是针对主机的网络参数设定所需要的,而 ping 是两部主机之间的回声与否判断, 那么有没有指令可以追踪两部主机之间通过的各个节点 (node) 通讯状况的好坏呢?举例来说,如果我们联机到 yahoo 的速度比平常慢,你觉得是 (1)自己的网络环境有问题? (2)还是外部的 Internet 有问题?如果是 (1) 的话,我们当然需要检查自己的网络环境啊,看看是否又有谁中毒了?但如果是 Internet 的问题呢?那只有『等等等』啊! 判断是 (1) 还是 (2) 就得要使用 traceroute
这个指令啦!
pi@raspberrypi:~ $ traceroute -n www.baidu.comtraceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets 1 192.168.0.1 1.925 ms 2.967 ms 2.982 ms 2 100.64.0.1 11.060 ms 11.175 ms 11.137 ms 3 * * * 4 * * * 5 * * * 6 * * * 7 * * * 8 * * * 9 * * *10 * * *11 * * *12 * * *13 * * *14 * * *15 * * *16 * * *17 * * *18 * * *19 * * *20 * * *21 * * *22 * * *23 * * *24 * * *25 * * *26 * * *27 * * *28 * * *29 * * *30 * * *
pi@raspberrypi:~ $ nslookup www.baidu.comServer: 192.168.0.1Address: 192.168.0.1#53Non-authoritative answer:Name: www.baidu.comAddress: 14.215.177.39Name: www.baidu.comAddress: 14.215.177.38www.baidu.com canonical name = www.a.shifen.com.pi@raspberrypi:~ $
Linux 系统有内建的
防火墙机制
,因此你的联机能不能成功,得要先看防火墙的脸色才行。预设的 Linux 防火墙就有两个机制,这两个机制都是独立存在的,因此我们预设就有两层防火墙喔。第一层是封包过滤式的netfilter 防火墙
, 另一个则是透过软件控管的TCP Wrappers 防火墙
。
- 封包过滤防火墙:
IP Filtering
或Net Filter
。要进入 Linux 本机的封包都会先通过 Linux 核心的预设防火墙,就是称为 netfilter 的咚咚,简单的说,就是 iptables 这个软件所提供的防火墙功能。为何称为封包过滤呢?因为他主要是分析 TCP/IP 的封包表头来进行过滤的机制,主要分析的是 OSI 的第二、三、四层,主要控制的就是 MAC, IP, ICMP, TCP 与 UDP 的埠口与状态 (SYN, ACK…) 等。- 第二层防火墙:
TCP Wrappers
。通过 netfilter 之后,网络封包会开始接受 Super daemons 及 TCP_Wrappers 的检验,那个是什么呢? 说穿了就是/etc/hosts.allow
与/etc/hosts.deny
的配置文件功能啰。 这个功能也是针对 TCP 的 Header 进行再次的分析,同样你可以设定一些机制来抵制某些 IP 或 Port ,好让来源端的封包被丢弃或通过检验;透过防火墙的管控,我们可以将大部分来自因特网的垃圾联机丢弃,只允许自己开放的服务的联机进入本机而已, 可以达到最基础的安全防护。
预设的防火墙是 Linux 的内建功能,但
防火墙主要管理的是 MAC, IP, Port 等封包表头方面的信息
,如果想要控管某些目录可以进入, 某些目录则无法使用的功能,那就得要透过权限以及服务器软件提供的相关功能了。举例来说,你可以在Httpd.conf
这个配置文件之内规范某些 IP 来源不能使用 httpd 这个服务来取得主机的数据, 那么即使该 IP 通过前面两层的过滤,他依旧无法取得主机的资源喔!但要注意的是, 如果 httpd 这支程序本来就有问题的话,那么 client 端将可直接利用 httpd 软件的漏洞来入侵主机,而不需要取得主机内 root 的密码!因此, 要小心这些启动在因特网上面的软件喔!
为了避免前面一个步骤的权限误用,或者是程序有问题所造成的资安状况,因此
Security Enhanced Linux
(安全强化 Linux) 就来发挥它的功能啦!简单的说,SELinux 可以针对网络服务的权限来设定一些规则 (policy)
,让程序能够进行的功能有限, 因此即使使用者的档案权限设定错误,以及程序有问题时,该程序能够进行的动作还是被限制的,即使该程序使用的是 root 的权限也一样。举例来说,前一个步骤的 httpd 真的被 cracker 攻击而让对方取得 root 的使用权,由于 httpd 已经被 SELinux 控制在 /var/www/html 里面,且能够进行的功能已经被规范住了,因此 cracker 就无法使用该程序来进行系统的进一步破坏啰。现在这个 SELinux 一定要开启喔!
想一想,你使用浏览器连接到 WWW 主机最主要的目的是什么?当然就是读取主机的 WWW 数据啦! 那 WWW 资料是啥?就是档案啊!_!所以,最终网络封包其实是要向主机要求文件系统的数据啦。 我们这里假设你要使用 httpd 这支程序来取得系统的档案数据,但 httpd 默认是由一个系统账号名称为 httpd 来启动的,所以:你的网页数据的权限当然就是要让 httpd 这支程序可以读取才行啊!如果你前面三关的设定都 OK ,最终权限设定错误,使用者依旧无法浏览你的网页数据的。
所以啊,主机防护还是很重要的!不要小看了!提供几个方向给大家思考看看吧:
登入密码规则
限制;主机权限
设定;iptables
, TCP_Wrappers
强化网络防火墙;MRTG
与 logwatch
来分析主机状况与登录文件;防火墙能作什么呢?防火墙最大的功能就是帮助你『限制某些服务的存取来源』! 举例来说: (1)你可以限制文件传输服务 (FTP) 只在子域内的主机才能够使用,而不对整个 Internet 开放
; (2)你可以限制整部 Linux 主机仅可以接受客户端的 WWW 要求,其他的服务都关闭
; (3)你还可以限制整部主机仅能主动对外联机
。反过来说,若有客户端对我们主机发送主动联机的封包状态 (TCP 封包的 SYN flag) 就予以抵挡等等。这些就是最主要的防火墙功能了!
所以鸟哥认为,防火墙最重要的任务就是在规划出:
防火墙类型主要则有封包过滤的 Netfilter
与利用代理服务器 (proxy server) 进行存取代理
的方式了。
Netfilter
(封包过滤机制)
所谓的
封包过滤
,亦即是分析进入主机的网络封包,将封包的表头数据
捉出来进行分析,以决定该联机为放行或抵挡的机制。 由于这种方式可以直接分析封包表头数据,所以包括硬件地址(MAC)
, 软件地址 (IP
),TCP
,UDP
,ICMP
等封包的信息都可以进行过滤分析的功能。
Netfilter 提供了iptables
这个软件来作为防火墙封包过滤的指令。由于 Netfilter 是核心内建的功能,因此他的效率非常的高! 非常适合于一般小型环境的设定呢!Netfilter 利用一些封包过滤的规则设定,来定义出什么资料可以接收, 什么数据需要剔除,以达到保护主机的目的喔!
TCP Wrappers
(程序控管)
另一种抵挡封包进入的方法,为透过服务器程序的外挂 (tcpd) 来处置的!与封包过滤不同的是, 这种机制主要是分析谁对某程序进行存取,然后透过规则去分析该服务器程序谁能够联机、谁不能联机。 由于主要是透过分析服务器程序来控管,因此与启动的埠口无关,只与程序的名称有关。 举例来说,我们知道 FTP 可以启动在非正规的 port 21 进行监听,当你透过 Linux 内建的 TCP wrappers 限制 FTP 时, 那么你只要知道 FTP 的软件名称 (vsftpd) ,然后对他作限制,则不管 FTP 启动在哪个埠口,都会被该规则管理的。
Proxy
(代理服务器)
单一网域,仅有一个路由器:
内部网络包含安全性更高的子网,需内部防火墙切开子网:
不能保证所有使用企业内部计算机的用户都是公司的员工,也无法保证你的员工不会『搞破坏!』 更多时候是由于某些外来访客利用移动式装置 (笔记本电脑) 连接到公司内部的无线网络来加以窃取企业内部的重要信息。
在防火墙的后面架设网络服务器主机
防火墙的使用限制
最常拒绝的就是带有 SYN 的主动联机的旗标
MAC 是焊在网络卡上面的,所以你只要分析到该使用者所使用的 MAC 之后,可以利用防火墙将该 MAC 锁住
TCP Wrappers
说穿了, TCP wrappers 就是透过 /etc/hosts.allow
, /etc/hosts.deny
这两个宝贝蛋来管理的一个类似防火墙的机制, 但并非所有的软件都可以透过这两个档案来控管,只有底下的软件才能够透过这两个档案来管理防火墙规则,分别是:
先以 /etc/hosts.allow
为优先比对,该规则符合就予以放行;
再以 /etc/hosts.deny
比对,规则符合就予以抵挡;
若不在这两个档案内,亦即规则都不符合,最终则予以放行。
ssh
为主,已经取代上述的 telnet, rsh 等明码方式;VNC
, RDP 等较为常见
服务器建立公钥档
: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的档案,若系统刚刚安装完成时,由于没有这些公钥档案,因此 sshd 会主动去计算出这些需要的公钥档案,同时也会计算出服务器自己需要的私钥档;客户端主动联机要求
: 若客户端想要联机到 ssh 服务器,则需要使用适当的客户端程序来联机,包括 ssh, pietty 等客户端程序;服务器传送公钥档给客户端
: 接收到客户端的要求后,服务器便将第一个步骤取得的公钥档案传送给客户端使用 (此时应是明码传送,反正公钥本来就是给大家使用的!);客户端记录/比对服务器的公钥数据及随机计算自己的公私钥
: 若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户家目录内的~/.ssh/known_hosts
。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥数据, 则开始计算客户端自己的公私钥数据;回传客户端的公钥数据到服务器端
: 用户将自己的公钥传送给服务器。此时服务器:『具有服务器的私钥与客户端的公钥』
,而客户端则是: 『具有服务器的公钥以及客户端自己的私钥
』,你会看到,在此次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称式密钥系统喔。开始双向加解密
: (1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密; (2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。
当你登入远程服务器时,本机会主动的用接收到的服务器的 public key
去比对 ~/.ssh/known_hosts
有无相关的公钥, 然后进行底下的动作:
客户端:利用广播封包发送搜索 DHCP 服务器的封包
:若客户端网络设定使用 DHCP 协议取得 IP (在 windows 内为『
自动取得 IP
』),则当客户端开机或者是重新启动网络卡时, 客户端主机会发送出搜寻 DHCP 服务器的 UDP 封包给所有物理网段内的计算机。此封包的目标 IP 会是 255.255.255.255, 所以一般主机接收到这个封包后会直接予以丢弃,但若局域网络内有 DHCP 服务器时,则会开始进行后续行为。
服务器端:提供客户端网络相关的租约以供选择
:DHCP 服务器在接收到这个客户端的要求后,会针对这个客户端的硬件地址 (MAC) 与本身的设定数据来进行下列工作:
- 到服务器的登录文件中寻找该用户之前是否曾经用过某个 IP ,若有且该 IP 目前无人使用,则提供此 IP 给客户端;
- 若配置文件针对该 MAC 提供额外的固定 IP (static IP) 时,则提供该固定 IP 给客户端;
- 若不符合上述两个条件,则随机取用目前没有被使用的 IP 参数给客户端,并记录下来。
客户端:决定选择的 DHCP 服务器提供的网络参数租约并回报服务器
:由于局域网络内可能并非仅有一部 DHCP 服务器,但客户端仅能接受一组网络参数的租约。 因此客户端必需要选择是否要认可该服务器提供的相关网络参数的租约。当决定好使用此服务器的网络参数租约后, 客户端便开始使用这组网络参数来设定自己的网络环境。此外,客户端也会发送一个广播封包给所有物理网段内的主机, 告知已经接受该服务器的租约。此时若有第二台以上的 DHCP 服务器,则这些没有被接受的服务器会收回该 IP 租约。至于被接受的 DHCP 服务器会继续进行底下的动作。
服务器端:记录该次租约行为并回报客户端已确认的响应封包信息
当服务器端收到客户端的确认选择后,服务器会回传确认的响应封包,并且告知客户端这个网络参数租约的期限, 并且开始租约计时喔!那么该次租约何时会到期而被解约 (真可怕的字眼) ?你可以这样想:
- 客户端脱机:不论是关闭网络接口 (ifdown)、重新启动 (reboot)、关机 (shutdown) 等行为,皆算是脱机状态,这个时候 Server 端就会将该 IP 回收,并放到 Server 自己的备用区中,等待未来的使用;
- 客户端租约到期:前面提到 DHCP server 端发放的 IP 有使用的期限,客户端使用这个 IP 到达期限规定的时间,而且没有重新提出 DHCP 的申请时,就需要将 IP 缴回去!这个时候就会造成断线。但用户也可以再向 DHCP 服务器要求再次分配 IP 啰。
来源地址:https://blog.csdn.net/weixin_44614230/article/details/128092738
--结束END--
本文标题: 【树莓派不吃灰】Linux服务器篇(核心概念)
本文链接: https://lsjlt.com/news/416503.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0