描述 Linux 系统从开机到登陆界面的启动过程
(1)开机 BIOS 自检,加载硬盘。
(2)读取 MBR,MBR 引导。
(3)grub 引导菜单(Boot Loader)。
(4)加载内核 kernel。
(5)启动 init 进程,依据 inittab 文件设定运行级别
(6)init 进程,执行 rc.sysinit 文件。
(7)启动内核模块,执行不同级别的脚本程序。
(8)执行/etc/rc.d/rc.local
(9)启动 mingetty,进入系统登陆界面
重设 root 密码
1)重启虚拟机 server,出现 GRUB 启动菜单时按 e 键进入编辑状态
2)找到 linux16 所在行,末尾添加 rd.break console=tty0,按 Ctrl+x 键进恢复模式
3)以可写方式挂载硬盘中的根目录,并重设 root 密码:
switch_root:/# mount -o remount,rw /sysroot #以可读写方式重新挂载根系统
switch_root:/# chroot /sysroot/ #切换到根系统
sh-4.2# passwd root #设置考试指定的密码
sh-4.2# touch /.autorelabel #标记下一次启动重做 SELinux 标签
sh-4.2# exit
switch_root:/# reboot
三次握手
由主机 A 发送建立 TCP 连接的请求报文,其中报文中包含 seq 序列号,是由发送端随机生
成的,并且还将报文中 SYN 字段置为 1,表示需要建立 TCP 连接 2. 主机 B 会回复 A 发送
的 TCP 连接请求报文,其中包含 seq 序列号,是由回复端随机生成的,并且将回复报文的
SYN 字段置 1,而会产生 ACK 字段,ACK 字段数值是在 A 发过来的 seq 序列号基础上加 1
进行回复,以便 A 收到信息时,知晓自已的 TCP 建立请求已得到了验证 3. A 端收到 B 端发送的 TCP 建立验证请求后,会使自已的序列号加 1 表示,并且再次回复 ACK 验证请求,
在 B 端发送过来的 seq 基础上加 1,进行回复
四次断开
主机 A 发送断开 TCP 连接请求的报文,其中报文中包含 seq 序列号,是由发送端随机生成
的,并且还将报文中 FIN 字段置为 1,表示需要断开 TCP 连接 2. 主机 B 会回复 A 发送的
TCP 断开请求报文,其中包含 seq 序列号,是则回复端随机生成的,而且会产生 ACK 字段,
ACK 字段数值,是在 A 发过来的 seq 序列号基础上加 1 进行回复,以便 A 收到信息时,知
晓自己的 TCP 断开请求已得到了验证 3. 主机 B 在回复完 A 的 TCP 断开请求后,不会马上
就进行 TCP 连接的断开,主机 B 会先确保断开前,所有传输到 A 的数据是否已经传输完毕,
一旦确认传输数据完毕就会将回复报文的 FIN 字段置 1,并产生随机 seq 序列号。4. 主机
A 收到主机 B 的 TCP 断开请求后,会回复主机 B 的断开请求,包含随机生成的 seq 字段和
ack 字段,ack 字段会在主机 B 的 TCP 点开请求的 seq 基础上加 1,从而完成主机 B 请求的
验证回复
一、通用基础知识
1、基本概念
什么是防火墙?
所谓防火墙指的是工作于主机或网络的边缘,对于进出的报文根据事先定义的规则作检查,将那些能够被规则所匹配到的报文作出相应处理的组件。
防火墙是由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入。
防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。
iptables -I INPUT -p icmp -j DROP #禁止ping
2、分类
主机防火墙
网络防火墙
有些设置可能还会有HoneyPot: 蜜罐
二、linux中的防火墙
与外部网络联网通信时的数据报文流程:
数据报文到达本机都是先到达内核的tcp/ip协议栈,因为网卡是硬件,硬件是直接内核管理的。然后在tcp/ip协议栈上,先要拆掉以太网帧,然后查报文的源ip和目标ip: ①如果是发往本机的,则根据tcp首部当中定义的目标端口送给用户空间的应用程序。 应用程序收到报文后一般需要回应,所以就需要生成新报文经由内核、网卡路由发出;② 数据报文不是发往本机的,需要由本机forward转发的,则经由网卡直接转发出去。
iptables: 程序
规则编写工具,编号规则后附加在netfilter设置好的卡点上起作用
netfilter:
网络过滤器, 内核中工作在TCP/IP网络协议栈上的框架;
netfilter是在主机或网络上划定数据进出的必由关卡,就像建起围墙,只留这么几个出入口,然后等着iptables设定规则,什么该拦什么不拦,如果没有设定,那么什么都不做,数据包还是能自由出入这几个口的。linux中netfilter一共设置了5个卡点,叫做hook function钩子函数。
hooks function :
抽象设置了5个报文经由卡点,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链
① prerouting:
进入本机后路由功能发生之前(还没有检查是不是需要本机路由之前,也即在到网卡之前)
② input:
到达本机内部
③ output:
由本机发出
④ forward:
由本机转发
⑤ postrouting:
路由功能发生之后,即将离开本机之前
chain:每个钩子函数上可放置n条规则;对应于每个钩子上的多条规则就称为一个链(CHAIN)
每个功能有多个链,形成一个表,因此内置有四表五链
filter : input, forward, output
nat :prerouting, output(少用) ,postrouting
mangle :prerouting, input, forward, output, postrouting
raw :prerouting, output
规则的功能:
①过 滤 :firewall,最主要、最重要的功能。
②地址转换:不做防火墙时叫NAT Server,而不叫firewall
Network Address Translation
③mangle :修改报文首部中的某些信息(不包括地址信息)
④ raw :关闭nat表上启用的连接追踪功能(是NAT的辅助补充功能,只能在NAT发生的前半段)
iptables中还有一种叫做自定义链的链,但不是实际存在的、固定不变的链,因此报文不可能经由自定义链,只有在被内置链上的规则引用才能生效(即做为自定义目标)
功能的优先级:
由高而低:raw --> mangle --> nat --> filter
三、防火墙设置
(一)防火墙设置流程
1、确定设置策略
2、确定链
3、确定每条链上规则的前后次序
4、用iptables命令设置
设置后立即生效,但不会永久有效,重启后丢失。
5、保存设置好的规则
(三)命令公式
规则的组成部分:
报文的匹配条件, 匹配之后如何处理
iptables [-t TABLE] SUBCOMMAND CHAIN CRITERIA -j TARGET
(由于网速问题,大图上传不了,放在附件里了)
1、-t TABLE:
2、SUBCOMMAND:
(1)链:
-F:flush,清空指定表的指定链上所有规则;省略链名时,清空表中的所有链;(注:不会冲刷掉policy!!!)
-P:policy,设置链的默认处理机制;当所有都无法匹配或有匹配有无法做出有效处理机制时,默认策略即生效;
filter表的可用策略:ACCEPT, DROP, REJECT
-N:new, 新建一个用户自定义的链;自定义链只能作为默认链上的跳转对象,即通过在默认链中引用来使自定义链生效起作用;自定义链生效完可以跳转回某个内置链继续过滤。
-X:drop,删除用户自定义的空链;非空自定义链和内置链无法删除;
-E:rename,重命名自定义链;
-Z:zero,将规则的计数器置0;
增删查改
(2)规则:
-A:append,在链尾追加一条规则;
-I:insert,在指定位置插入一条规则;
-D:delete,删除指定的规则;
-R:replace,替换指定的规则;
(3)查看:
-L:list,列出指定链上的所有规则;
-n: numeric,以数字格式显示地址和端口号,即不反解;
-v: verbose,详细格式,显示规则的详细信息,包括规则计数器等;
-vv:比v更详细
-vvv:比vv更详细
–line-number[s]: 显示规则编号;
-x: exactly,显示计数器的精确值;
3、CRITERIA
(1)通用匹配:
(2)扩展匹配:
使用iptables的模块实现扩展性检查机制(rpm -ql iptables可中有/lib64/xtables/libxt_NAME.so或者/lib64/xtables/libipt_NAME.so的都是有扩展的,其中小写字母的表示是扩展模块的,大写字母的表示是扩展target的)
扩展模块的:/lib64/xtables/libxt_string.so
/lib64/xtables/libxt_tcp.so
扩展target的:/lib64/xtables/libipt_CLUSTERIP.so
(2.2)显式扩展:必须指明使用的扩展机制;
-m 模块名称
每个模块会引入新的匹配机制;
①multiport扩展:
以离散定义多端口匹配;最多指定15个端口;
专用选项:
–source-ports, --sports PORT[,PORT,…]
–destination-ports, --dports PORT[,PORT,…]
–ports PORT[,PORT,…] 无论是源还是目标都匹配,但实际中不常见,因为源和目标端口号一般都不同
②iprange扩展:
指定连续的ip地址范围;在匹配非整个网络地址时使用;
专用选项:
[!] --src-range IP[-IP]
[!] --dst-range IP[-IP]
示例:
③string扩展:
检查报文中出现的字符串,与给定的字符串作匹配;
字符串匹配检查算法:
kmp, bm
目前来说,这两者在性能上没太大差别了,用哪个都可以。起的作用是加快匹配的速度。
专用选项:
–algo {kmp|bm}
–string “STRING”
–hex-string “HEX_STRING”:HEX_STRING为编码成16进制格式的字串;
第一种写法:
–algo kmp --string ”sex“
第二种写法:
–hex-string ”XXX“
XXX : 编码成的16进制格式的字串
示例:
④time扩展:
基于时间区间做访问控制
专用选项:
–datestart YYYY[-MM][-DD][hh[:mm[:ss]]]
–dattestop YYYY[-MM][-DD][hh[:mm[:ss]]]
–timestart hh:mm[:ss]
–timestop hh:mm[:ss]
–weekdays DAY1[,DAY2,…]
示例:
⑤connlimit扩展:
基于连接数作限制;对每个IP能够发起的并发连接数作限制;
注:计数器是从rule生效时才开始计数的
专用选项:
–connlimit-above [n]
⑥limit扩展:
基于发包速率作限制;
令牌桶算法——只发这么多个令牌,匹配到了就给个令牌执行本rule的target,如果超过了限制的则本规则直接不管(相当于每隔几秒发一个令牌后就下班休息了,连关卡都不看了,由其他规则匹配。超过数量规则限制的则直接去匹配下面的规则,如果匹配到了就能执行对应的target,如果没有,则最终采用默认policy。
专用选项:
–limit n[/second|/minute|/hour|/day]
–limit-burst n
练习:
(1) 配置本机的dns服务,并放行之;默认策略为drop;
(2) 配置本机的telnet服务,要求只允许来自于172.16.0.0/16网络中的主机访问,且只允许工作时间访问,而且,每个来源IP最多的并发连接数不能超过2个;
(2)
⑦state扩展:
启用连接追踪模板记录连接,并根据连接匹配连接状态的扩展;
启用连接追踪功能之前:简单包过滤防火墙;
启用连接追踪功能:带状态检测的包过滤防火墙;
可以过滤掉事先埋伏在主机内的反弹木马以特定端口(如80)去主动连接某个客户端
专用选项:
–state STATE
NEW:
新建立的连接,连接追踪模板中无相应的条目时,客户端第一次发出的请求;
ESTABLISHED:
NEW状态之后,连接追踪模板中的条目删除之前所进行的通信过程,都称为 ESTABLISHED;(理解:IP和端口号都是一样的)
RELATED:
相关联的连接,如ftp协议的命令连接与数据连接即为相关联的连接;(理解 : IP是一样,但端口号不一样)
INVALIED:
无法识别的状态;如 ① syn 1,fin 1;② 6个标志位全为1 或全为0 ;
4、TARGET:
ACCEPT:放行
DROP:丢弃
REJECT:明确拒绝
(1)SNAT:
(即要将发出的源地址改为NAT服务器上的外网地址,让外网的服务器能先回复到NAT上)
(2)DNAT:
主要用于发布内部服务器,让内网中的服务器在外网中可以被访问到;
注意:要定义在PREROUTING链;
定义方法:
练习:INPUT和OUTPUT默认策略为DROP;
1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;
2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;
3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;
4、拒绝TCP标志位全部为1及全部为0的报文访问本机;
5、允许本机ping别的主机;但不开放别的主机ping本机;
练习:判断下述规则的意义:
在filter表中新建一个名字为clean_in的链
经由clean_in到255.255.255.255的icmp包都丢弃
经由clean_in到172.16.255.255的icmp包都丢弃
经由clean_in新建立的连接的tcp包中追踪状态是NEW且不是(syn=1,ack=0,fin=0,rst=0)的都丢弃
经由clean_in的tcp包中丢弃tcp标识都为1的包
经由clean_in的tcp包中丢弃tcp标识都为0的包
经由clean_in的发往172.16.100.7的包都跳转至调用clean_in的链中规则的下一条接着处理
经由INPUT链的发往172.16.100.7的包都交由clean_in链处理
通过INPUT链时,数据报文指明接口为lo的都放行
通过OUTPUT链时,发出的数据报文指明接口为lo的都放行
经eth0流入的tcp数据包经由INPUT时,只要目标端口是53,113,135,137,139,445的都丢弃
经eth0流入的udp数据包经由INPUT时,只要目标端口是53,113,135,137,139,445的都丢弃
经eth0流入的udp数据包经由INPUT时,只要目标端口是1026的丢弃
经eth0流入的tcp数据包经由INPUT时,只要目标端口是1433和4899的都丢弃
进入的icmp包经由INPUT链时限速10个/秒,超过的不被本规则放行