SELinux概述 • Security-Enhanced Linux – 美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系 – 集成到Linux内核(2.6及以上)中运行 – RHEL7基于SELinux体系针对用户、进程、目录和文件提供了预设的保护策略,以及管理工具

SELinux运行模式的切换 • SELinux的运行模式 – enforcing(强制)、permissive(宽松) – disabled(彻底禁用)

[root@server0 ~]# getenforce      #查看当前SELinux状态
Enforcing
[root@server0 ~]# setenforce 0    #临时修改成宽松状态
[root@server0 ~]# getenforce 
Permissive
[root@server0 ~]# setenforce 1    
[root@server0 ~]# getenforce 

– 固定配置:/etc/selinux/config 文件

补充: 在vim 命令模式下 按 “大写的C” 删除光标之后到行尾,并且进入插入模式

[root@server0 ~]# grep '^SELINUX=' /etc/selinux/config 
SELINUX=permissive
[root@server0 ~]# reboot

##################################################################################### 配置聚合连接(两张网卡eth1、eth2)

    HSRP    活跃路由器     备份路由器                          
                    虚拟路由器

         聚合连接    eth1      eth2    
                  team(192.168.1.1)  

链路聚合的优势 • team,聚合连接(也称为链路聚合) – 由多块网卡(team-slave)一起组建而成的虚拟网卡,即“组队” – 作用1:轮询式(roundrobin)的流量负载均衡 – 作用2:热备份(activebackup)连接冗余

[root@server0 ~]# man teamd.conf     	#按  “大写的G”到全文的最后
                             向上查找  EXAMPLES
       "runner": {"name": "activebackup"}   #热备份配置(最好复制粘贴)


# nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'		//添加热备份链路(team0配置文件/etc/sysconfig/network-scripts/ifcfg-team0,显示为team0)
# ifconfig team0		//查看生成的网卡(对应配置文件/etc/sysconfig/network-scripts/ifcfg-team0)

# nmcli connection add type team-slave con-name team0-eth1 ifname eth1 master team0 		//添加eth1网卡到team0当中,命名为team0-eth1
# nmcli connection add type team-slave con-name team0-eth2 ifname eth2 master team0 		//添加eth2网卡到team0当中,命名为team0-eth2

# nmcli connection modify team0 ipv4.method manual ipv4.addresses '172.16.3.20/24' connection.autoconnect yes 	//配置team0的IP地址,默认启用

# nmcli connection up team0-eth1		//激活成员
# nmcli connection up team0-eth2		//激活成员
# nmcli connection up team0			//激活team0

# teamdctl team0 state		//查看team状态
# man  teamd.conf  #查看man帮助,按G到最后去寻找关键字端复制
# ifconfig eth1 down		//关闭其中一张网卡后,进行测试

[root@server0 ~]# nmcli connection delete team0			//删除team配置
[root@server0 ~]# nmcli connection delete team0-eth1	//删除team配置
[root@server0 ~]# nmcli connection delete team0-eth2	//删除team配置

配置IPv6地址

• IPv4 地址表示 – 32个二进制位,点分隔的十进制数 – 例如:172.25.0.11、127.0.0.1

• IPv6 地址表示 – 128个二进制位,冒号分隔的十六进制数 – 每段内连续的前置 0 可省略、连续的多个 : 可简化为 :: – 例如:2003:ac18:0000:0000:0000:0000:0000:0305 2003:ac18::305/64

为两个虚拟机的接口 eth0 配置下列 IPv6 地址 – server0 上的地址应该是 2003:ac18::305/64 – desktop0 上的地址应该是 2003:ac18::306/64

# nmcli  connection  modify  'System eth0'  ipv6.method  manual  ipv6.addresses  '2003:ac18::305/64'  connection.autoconnect  yes 		//配置IPv6地址
# nmcli  connection  up  'System eth0'
# ifconfig		//查看IPv6
# ping6  2003:ac18::306/64		//测试IPv6联通性

alias别名设置 • 查看已设置的别名 – alias [别名名称] • 定义新的别名 – alias 别名名称= '实际执行的命令行' • 取消已设置的别名 – unalias [别名名称]

用户个性化配置文件 • 影响指定用户的 bash 解释环境 – ~/.bashrc, 每次开启 bash 终端时生效

全局环境配置 • 影响所有用户的 bash 解释环境 – /etc/bashrc, 每次开启 bash 终端时生效

# vim /etc/bashrc
# alias myls='ls -lhd'
# su - student
# myls /opt



真机上操作
[root@room9pc14 桌面]# vim /root/.bashrc 

alias  s='ssh  -X  root@172.25.0.11'
alias  d='ssh  -X  root@172.25.0.10'
alias  rs='rht-vmctl  reset  server'
alias  rd='rht-vmctl  reset  desktop'
alias  rc='rht-vmctl  reset  cla***oom'


[root@room9pc14 桌面]#

##################################################################################### 防火墙策略管理

Web服务:

虚拟机server0上 服务端:安装服务端软件httpd

1.安装httpd
[root@server0 ~]# yum -y install httpd

2.重启httpd服务,设置开机服务自起
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# systemctl enable httpd

 默认网页文件存放路径:/var/www/html/
 默认主页文件的名称:index.html
[root@server0 ~]# cat /var/www/html/index.html
<marquee><font color=red><h1>NSD1705


   客户端:安装客户端软件firefox(自己访问自己)

[root@server0 ~]# firefox http://172.25.0.11

FTP服务

虚拟机server0上 服务端:安装服务端软件vsftpd

1.安装vsftpd
[root@server0 ~]# yum install -y vsftpd

2.重起vsftpd服务,设置开机服务自起
[root@server0 ~]# systemctl reset vsfpd

默认FTP共享路径:/var/ftp
[root@server0 ~]# touch /var/ftp/test.txt


客户端:安装客户端软件firefox(自己访问自己)

[root@server0 ~]# firefox ftp://172.25.0.11

##################################################################################### Iptables防火墙 Linux包过滤防火墙 · netfilter -位于Linux内核中的包过滤功能体系 -称为Linux防火墙的“内核态” · iptables -位于/sbin/iptables, 管理规则的工具 -称为Linux防火墙的“用户态”

4表:raw、mangle、nat、filter
5链:InPut、OutPut、ForWard、PostRouting、PreRouting
	
表:存放不同的规则链
	-raw: 确定是否对数据包进行状态跟踪
	-mangle: 为数据包设置标记
	-nat: 修改数据包的源/目标地址或端口
	-filter: 确定是否放行该数据包

链:存放防火墙规则:
	-InPut: 处理入站数据包
	-OutPut: 处理出站数据包
	-ForWard: 处理转发数据包
	-PostRouting: 路由选择之后处理
	-PreRouting: 路由选择之前处理
	
包过滤匹配流程:
	1.规则表顺序:
		--> raw --> mangle --> nat --> filter
	2.规则链顺序:
		-入站:PreRouting --> InPut
		-转发:PreRouting --> ForWard --> PostRouting
		-出站:OutPut --> PostRouting
	
	基本用法:
		iptables  [-t 表名]  选项  [链名]  [条件]  [-j 目标操作]
	整体规律:
		-不指定表,默认为filter表
		-不指定链,对应表的所有链
		-除默认策略外,必须指定匹配条件
		-选项、链名、目标操作用大写字母,其余都小写
		
		基本目标操作:
			-ACCEPT:允许通过
			-DROP:直接丢弃,不给任何回应
			-REJECT:拒绝通过,必要时会给出提示
			-LOG:记录日志,然后传给下一条规则
		
		常用管理项:
			-A: 在链的末尾追加一条规则
			-I: 在链的开头插入一条规则
			-L: 列出所有的规则条目
			-n: 以数字形式显示地址、端口竺信息
			--line-numbers:查看规则时,显示规则的序号
			-D: 删除链内指定序号的规则
			-F: 清空所有规则
			-P: 为指定的链设置默认规则
			
		基本匹配条件(!:取反):
			协议匹配:-p  协议名
			地址匹配:-s  源地址、-d  目标地址
			接口匹配:-i  收数据的网卡、-o  发数据的网卡
			端口匹配:--sport  源端口、--dport  目标端口
			ICMP类型匹配:--icmp-type  ICMP类型
			TCP标记匹配:--tcp-flags  检查哪些位  哪些位被设置
			
		网络连接的五种状态:
			-NEW: 请求建立连接的包,完全陌生的包
			-ESTABLISHED: 将要或已经建立连接的包
			-RELATED: 与已知某个连接相关联的包
			-INVALID: 无对应连接,以及连接无效的包
			-UNTRACKED: 未跟踪状态的包
# iptables -t filter -I INPUT -p icmp -j REJECT		//拒绝ICMP包入站
# iptables -t filter -A INPUT -s 192.168.4.10 -j DROP	//丢弃192.168.4.10的入站包
# iptables -t filter -nL		//查看已有规则
# iptables -D INPUT 1 		//删除INPUT中第一条规则
# iptables -t filter -nL		//再次查看
# iptables -t filter -A INPUT -s 192.168.4.10 -p tcp --dport 21 -j DROP		//拒绝指定主机访问TCP21号端口

# sysctl -w net.ipv4.ip_forward=1		//开启路由转发(临时)
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -A FORWARD -s 192.168.4.10 -j DROP		//不转发来自192.168.4.10的包
# iptables -t filter -n

# iptables -A FORWARD -s 192.168.4.12 -d 100.100.100.100 -p tcp --dport 80 -j DROP		//拒绝4.12访问100的80端口
# iptables -A FORWARD ! -s 192.168.4.0/24 -j DROP		//只有192.168.4.0段的包不丢弃(!:取反)

# cat iptables.rule

# iptables -t nat -A POSTROUTING -s 192.168.4.10 -j SNAT --to-source 172.16.4.10	//192.168.4.10源NAT转化为172.16.4.10(源地址伪装)
# iptables -t nat -F POSTROUTING

# iptables -t nat -A PREROUTING -d 192.168.4.10 -p tcp --dport 222 -j DNAT --to 172.16.4.10:22	//把访问192.168.4.10的222端口DNAT到172.16.4.10的22端口(目标地址伪装)
# iptables -t nat -nL PREROUTING
# iptables -t nat -D PREROUTING 2                //删除第2条

# iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 10022 -j DNAT --to-destination 172.16.0.2:22 ! -i docker0

# iptables -t filter -A INPUT -s 192.168.4.15 -p tcp --dport 80 -j DROP            //禁止192.168.4.15访问本机的web服务

# iptables -t filter -A INPUT ! -s 192.168.4.12 -j DROP             //禁止除192.168.4.12以外的其他主机ping本机

NAT防火墙,需要打开内核IP转发

POSTROUTING   源地址伪装
通过伪装192.168.4.0网段的机器上网,首先防火墙本机可以访问互联网
# iptables -t nat -A  POSTROUTING -s 192.168.4.0 -j SNAT --to-source  外网地址

PREROUTING	  目标地址转换
所有访问防火墙10022端口的请求都转发给后端的192.168.4.15的22端口
# iptables -t nat -A PREROUTING -i 本机名 -p tcp -m tcp --dport 10022 -j DNAT --to-destination 192.168.4.15:22

防火墙策略管理

  • 系统服务:firewalld
  • 管理工具:firewall-cmd(命令) firewall-config(图形)
# systemctl status firewalld.service		//查看防火墙服务状态
# firewall-cmd --get-zones			//获取支持的区域列表

预设安全区域 • 根据所在的网络场所区分,预设保护规则集 – public: 仅允许访问本机的sshd等少数几个服务(默认区域) – trusted: 允许任何访问 – block: 阻塞任何来访请求(明确拒绝) – drop: 丢弃任何来访的数据包(丢弃请求:节省资源)

# firewall-cmd --get-default-zone		//查看默认区域(一般为public)
# firewall-cmd --zone=public --list-all		//查看区域规则
# firewall-cmd --list-all-zones			//查看所有区域的详细规则

防火墙判断规则:(匹配及停止) 1、首先看请求(客户端)当中的源IP地址,所有区域中是否对于该IP地址的策略,如果有,则该请求进入该区域 2、如果没有其它匹配,则进入默认区域(前面没有匹配)

# firewall-cmd --zone=public --add-service=http		//默认区域添加规则(临时生效)
# firewall-cmd --zone=public --list-all		//查看区域规则(刚添加的)
# firewall-cmd --get-services			//获取所有支持的服务

• 配置规则的位置 – 运行时(runtime) – 永久(permanent)

# firewall-cmd --permanent --zone=public --add-service=http		//默认区域添加规则(permanent:永久生效)
# firewall-cmd --reload			//重新加载规则
# firewall-cmd --zone=public --list-all		//查看区域规则(刚添加的)

# firewall-cmd –get-active-zones		//获取活动的区域和网络接口
# firewall-cmd –get-zone-of-interface=eno1		//根据网卡接口获取所在区域
# firewall-cmd --zone=public –change-interface=eno1		//更改网卡接口到public区域
# firewall-cmd --zone=drop --remove-source 192.168.1.7		//从drop区域中删除源IP
修改默认区域

Server0(172.25.0.11):
# firewall-cmd --list-all  		#查看当前区域public状态
desktop0(172.25.0.10):
# ping -c 2 172.25.0.11    	#可以ping通

server0:
# firewall-cmd --set-default-zone=block   #修改默认区域为block区域(永久)
# firewall-cmd --list-all
desktop0:
# ping -c 2 172.25.0.11    #不通但是有回应
 
server0:
# firewall-cmd --set-default-zone=drop		 #修改默认区域为block区域(永久)
# firewall-cmd --list-all
desktop0:
# ping -c 2 172.25.0.11    #不通但是没有回应


# firewall-cmd --set-default-zone=public
# firewall-cmd --permanent --zone=public --add-source=172.25.0.10		//默认区域添加规则(permanent:永久生效)
# firewall-cmd --reload			//重新加载规则
# firewall-cmd --zone=public --list-all		//查看区域规则(刚添加的)
# firefox ftp://172.25.0.11		//测试ftp
# firefox http://172.25.0.11	//测试http

##################################################################################### 防火墙判断的规则,匹配即停止

  1.首先看客户端请求中的源IP地址,查询所有区域中是那个区域有该源IP地址的策略,然后进入该区域

  2.如果前面没有匹配到,则进入默认区域

#####################################################################################

典型的应用方式: 严格,方式1:将默认区域保持为block,针对需要放行的访问在trusted区域添加策略 宽松,方式2:将默认区域保持为trusted,针对需要阻止的访问在block区域添加策略

#####################################################################################

添加服务到默认区域 server0:

# firewall-cmd --set-default-zone=public
# firewall-cmd --list-all    

desktop0:

# firefox http://172.25.0.11    #不能访问
# firefox ftp://172.25.0.11     #不能访问

server0:

# firewall-cmd --permanent --add-service=http  	#永久添加http
# firewall-cmd --permanent --add-service=ftp  	#永久添加ftp
# firewall-cmd --list-all   
# firewall-cmd --reload            #重新加载配置
# firewall-cmd --list-all   

desktop0:

# firefox http://172.25.0.11      #可以访问
# firefox ftp://172.25.0.11       #可以访问

#####################################################################################

实现本机的端口映射 • 本地应用的端口重定向(端口1 --> 端口2) – 从客户机访问 端口1 的请求,自动映射到本机 端口2 – 比如,访问以下两个地址可以看到相同的页面: http://172.25.0.11:5423/ http://172.25.0.11/

 ------->tcp 5423  ------> tcp 80
# firewall-cmd --permanent --add-forward-port=port=5423:proto=tcp:toport=80		//将5423端口映射到80端口
# firewall-cmd --reload
# firewall-cmd --list-all
# firefox http://172.25.0.11:5423      #测试是否可以访问到80端口的效果
# firewall-cmd --permanent --remove-forward-port=port=5423:proto=tcp:toport=80		//删除将5423到80端口的映射
# firewall-cmd --reload
# firewall-cmd --list-all