【安全防御】

常见的攻击方式

  • 拒绝服务(DOS): 通过大量访问请求使服务器资源耗尽,无法向正常用户处理请求连接。常见解决手段使用云服务商的流量清洗功能,抗D设备
  • 分布式拒绝服务(DDOS):攻击者控制大量的僵尸主机(肉鸡)向目标主机发送大量的攻击报文,从而达到网络瘫痪的作用
  • 口令爆破: 常用攻击手法俗称“跑字典”,常用解决方案设置登录错误次数限制
  • 已知漏洞: 通过已知漏洞进行数据获取或提权,常见解决手段定时更新防御性补丁
  • 欺骗攻击:又称社会工程学,通过欺骗权限用户得到授权资格的方式,如钓鱼网站,垃圾邮箱等方式

常见的安全防御设备

  • 基础类防火墙: 主要实现包过滤防火墙
  • IDS 类防火墙: 入侵检测系统,提供报告和事后监督为主,一般旁挂在交换机旁边,被动型防火墙,只做警告不做处理
  • IPS 类防火墙: 入侵防御系统,分析数据包内容,根据模式匹配去阻断非法访问,一般串联在网络中,主动型防火墙,检测攻击,并阻断
  • 主动安全类防火墙: 对特定服务类型进行专项防御,常见设备有 waf(web应用防火墙)、daf(数据库应用防火墙)

基础类防火墙

何为防火墙?工作在主机边缘或者网络边缘处对数据报文进行检测,并且能够根据事先定义好的规则,对数据报文进行相应处理的模块

防火墙的分类
软件:windows防火墙、iptables
硬件:深信服、天融信、山石网科

工作机制
包过滤防火墙:源地址 目的地址 源端口 目标端口 连接状态
应用层防火墙:URL、HOSTNAME

iptables

iptables 模块

	      防火墙         类似          LVS             
内核态:netfilter                     ipvsadm   
用户态:iptables                       ipvs

iptables 服务

  • 脚本位置:/etc/init.d/iptables
  • 规则文件位置:/etc/sysconfig/iptables

iptables 工作结构

众多的路由规则(Rule)和预设的规则(policy)组成了一个功能链(chain),多个链组成一个表,多个表就组成了防火墙iptables。最常用的就是filter表,nat表。在这里插入图片描述

iptables 版本变化

在这里插入图片描述

iptables 四表五链

表:filter、nat、mangle、raw
链:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING

规则链:承载防火墙规则

  • 入站:INPUT
  • 出站:OUTPUT
  • 转发:FORWARD
  • 路由前应用规则:修改目标地址 PREROUTING
  • 路由后应用规则:修改源地址 POSTROUTING

规则表:承载防火墙链

  • raw:状态跟踪
  • mangle:标记 TTL
  • nat:实现地址转换
  • filter:过滤

防火墙链表结构

在这里插入图片描述
规则匹配顺序: 由上至下,匹配即停止(LOG除外)

表应用顺序: raw>mangle>nat>filter

链应用顺序

  • 入站:PREROUTING>INPUT
  • 出站:OUTPUT>POSTROUTING
  • 转发:PREROUTING>FORWARD>POSTROUTING

链表匹配顺序示意图
在这里插入图片描述

iptables 语法规则

语法构成: iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

几个注意事项
不指定表名时,默认指 filter 表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写

常见控制类型:

  • ACCEPT:允许通过
  • DROP:直接丢弃,不给出任何回应
  • REJECT:拒绝通过,必要时会给出提示
  • LOG:记录日志信息,然后传给下一条规则继续匹配
  • SNAT:修改数据包源地址
  • DNAT:修改数据包目的地址
  • REDIRECT:重定向

常见选项(注:-P,设定默认策略时,控制类型只有ACCEPT、DROP)
在这里插入图片描述

配型类型分类

①通用匹配

  • 可直接使用,不依赖于其他条件或扩展
  • 包括网络协议、IP 地址、网络接口等条件

常见的通用匹配条件
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o 出站网卡

[root@localhost ~]$ iptables -A FORWARD -s 192.168.1.11 -j REJECT   
[root@localhost ~]$ iptables -I INPUT -s 10.20.30.0/24 -j DROP 
[root@localhost ~]$ iptables -I INPUT -p icmp -j DROP 
[root@localhost ~]$ iptables -A FORWARD -p ! icmp -j ACCEPT 
[root@localhost ~]$ iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

②隐含匹配

  • 要求以特定的协议匹配作为前提
  • 包括端口、TCP 标记、ICMP 类型等条件

端口匹配:–sport 源端口、–dport 目的端口
ICMP 类型匹配:–icmp-type ICMP 类型

[root@localhost ~]$ iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT 
[root@localhost ~]$ iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT 
[root@localhost ~]$ iptables -A INPUT -p icmp --icmp-type 8 -j DROP 
[root@localhost ~]$ iptables -A INPUT -p icmp -j DROP
#下面两台配置了,可实现本机能ping别人,别人不能ping本机
[root@localhost ~]$ iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 
[root@localhost ~]$ iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT 

③显式匹配

  • 要求以“-m 扩展模块”的形式明确指出类型
  • 包括多端口、MAC 地址、IP 范围、数据包状态等条件

常用的显式匹配条件
多端口匹配
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
IP 范围匹配
-m iprange --src-range IP 范围
MAC 地址匹配
-m mac –mac1-source MAC 地址
状态匹配
-m state --state 连接状态

[root@localhost ~]$ iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT 
[root@localhost ~]$ iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT 
[root@localhost ~]$ iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP 
[root@localhost ~]$ iptables -P INPUT DROP 
[root@localhost ~]$ iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT 
[root@localhost ~]$ iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

NAT书写规则

SNAT

SNAT 策略的典型应用环境: 局域网主机共享相同的公网 IP 地址接入 Internet
原理:修改数据包的源ip,私网------>公网
在这里插入图片描述
iptables SNAT转换规则

[root@localhost ~]$ iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o ens34 -j SNAT --to-source 192.168.28.12
MASQUERADE —— 地址伪装

适用于外网 IP 地址非固定的情况
对于 ADSL 拨号连接,接口通常为 ppp0、ppp1
将 SNAT 规则改为 MASQUERADE 即可

[root@localhost ~]$ iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o ens34 -j MASQUERADE
DNAT

DNAT 策略的典型应用环境: 将局域网内的服务器发布到公网,为公网用户提供服务
原理:修改目的ip,公网------->私网
在这里插入图片描述
iptables DNAT转换规则

[root@localhost ~]$ iptables -t nat -A PREROUTING -i ens34 -d 192.168.28.12 -p tcp --dport 80 -j DNAT --to-destination 10.10.10.11

常见 Iptables 相关命令(补充)
导出(备份)规则: iptables-save 工具,可结合重定向输出保存到指定文件
导入(还原)规则: iptables-restore 工具,可结合重定向输入指定规则来源

常用 Iptables 配置脚本分享

[root@localhost ~]$ vim 1.iptalbes
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH 
function support_distro(){ 
	if [ -z "`egrep -i "centos" /etc/issue`" ];then 
	echo "Sorry,iptables script only support centos system now." 
	exit 1 
	fi 
}

support_distro
echo "====================iptablesconfigure====================="
# Only support CentOS system

# 获取 SSH 端口 
if grep "^Port" /etc/ssh/sshd_config>/dev/null;then 
	sshdport=`grep "^Port" /etc/ssh/sshd_config | sed "s/Port\s//g" ` 
else 
	sshdport=22 
fi


# 获取 DNS 服务器 IP 
if [ -s /etc/resolv.conf ];then 
	nameserver1=`cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'` 
	nameserver2=`cat /etc/resolv.conf |grep nameserver |awk 'NR==2{print $2 }'` 
fi

IPT="/sbin/iptables"

# 删除已有规则 
$IPT --delete-chain 
$IPT --flush


# 禁止进,允许出,允许回环网卡 
$IPT -P INPUT DROP 
$IPT -P FORWARD DROP 
$IPT -P OUTPUT ACCEPT 
$IPT -A INPUT -i lo -j ACCEPT


# 允许已建立的或相关连接的通行 
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


# 限制 80 端口单个 IP 的最大连接数为 10 
# $IPT -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP

# 允许 80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的连接
# 生产环境可以自己定义 
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT


# 允许 SSH 端口的连接,脚本自动侦测目前的 SSH 端口,否则默认为 22 端口 
$IPT -A INPUT -p tcp -m tcp --dport $sshdport -j ACCEPT

# 允许 ping 
$IPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 
$IPT -A INPUT -p icmp -m icmp --icmp-type 11 -j

# 允许 DNS 
[ ! -z "$nameserver1" ] && $IPT -A OUTPUT -p udp -m udp -d $nameserver1 --dport 53 -j ACCEPT 
[ ! -z "$nameserver2" ] && $IPT -A OUTPUT -p udp -m udp -d $nameserver2

# 保存规则并重启 IPTABLES 
service iptables save 
service iptables restart 
echo "====================iptables configure completed============================"
[root@localhost ~]$ bash 1.iptables

Selinux

SELinux 前世今生

windows 与 Linux 的安全等级均为C2级别,自左向右安全性依次增加
在这里插入图片描述
创造者:美国国家安全局(NationalSecurityAgency,简写为 NSA)

Selinux的实现模型:
在这里插入图片描述
Linux的四大护城河:
在这里插入图片描述
Selinux 在 Linux 中的地位变化

  • 2.2 需要手动加载的一个外部模块
  • 2.4 直接写到内核的一个模块
  • 2.6 成为了一部分 Linux 发行版的内核的一部分
    特性: 提高了 Linux 系统内部的安全等级,对于进程和用户只赋予最小权限,并且防止了权限升级, 即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响

安全上下文(安全令牌)

所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。常常用下面的格式指定或显示安全上下文: 用户:角色:类型
#修改类型
chcon [-R] [-t type] [-u user] [-r role] 文件
-R :连同该目录下的次目录也同时修改;
-t :后面接安全性本文的类型字段!
-u :后面接身份识别,例如 system_u;
-r :后面接角色,例如 system_r;

相关配置命令

restorecon 还原成原有的 SELinux type 
格式:restorecon [-Rv] 档案或目录 
		-R :连同次目录一起修改; 
		-v :将过程显示到屏幕上

实验验证selinux的存在:

[root@localhost ~]$ getenforce 
Disabled
[root@localhost ~]$ vim /etc/selinux/config 
SELINUX=enforcing
[root@localhost ~]$ reboot  #selinux重新写入内核需要重启,重启需要一点时间
#重启后,查看此时selinux状态为enforcing
[root@localhost ~]$ getenforce 
Enforcing
#接着打开httpd,在/var/www/html/下创建一个网页文件,index.html
[root@localhost ~]$ echo "this is server" >> /var/www/html/index.html 

访问10.10.10.16网页正常!!!
在这里插入图片描述
接着重新建一个网页目录/www

[root@localhost ~]$ vim  /etc/httpd/conf/httpd.conf 
DocumentRoot "/var/www/html"   改为  DocumentRoot "/www" 
<Directory "/var/www/html">    改为  <Directory "/www/">
[root@localhost ~]$ echo "this is server" >> /www/index.html
[root@localhost ~]$ systemctl restart httpd

再去访问10.10.10.16,则会自动跳转到apache的官方页面(selinux生效了)
在这里插入图片描述
为什么?于是我chmod 777 /www,结果还是不行
为什么会这样?原因是 用户 角色 类型 发生了改变

[root@localhost ~]$ ll -Z /www
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@localhost ~]$ ll -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
我们可以尝试将/www的类型修改为/var/www/html类型一致

通过chcon命令实现
chcon [-R] [-t type] [-u user] [-r role] 文件
选型与参数:
-R:连同该目录下的次目录也同时修改
-t:后面接安全性本文的类型字段
-u:后面接身份识别,例如system_u;
-r:后面接角色,例如system_r;

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@localhost ~]$ 
[root@localhost ~]$ chcon -t  httpd_sys_content_t -R /www/
[root@localhost ~]$ ll -Z /www
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
此时/www 与 /var/www/html 的用户 角色 类型 相同了,因此再去访问web

发现可以访问了!!!
在这里插入图片描述
如果想还原selinux的配置,则可以利用restorecon命令

[root@localhost ~]$ restorecon -Rv /www/index.html 
[root@localhost ~]$ ll -Z /www
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
此时发现已经还原了!!!

所以,如果想既开启selinux又能让网站访问正常!!!

SELinux 布尔值

Managing Boole(管理 SElinux 布尔值):SEliux 布尔值就相当于一个开关,精确控制 SElinux 对某 个服务的某个选项的保护,比如 samba 服务

getsebool -a # 命令列出系统中可用的 SELinux 布尔值。 
setsebool # 命令用来改变 SELinux 布尔值
setsebool –p samba_enable_home_dirs=1 # 开启家目录是否能访问的控制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值