ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

安全防御

2021-03-14 20:01:40  阅读:220  来源: 互联网

标签:iptables centos -- 安全 防御 INPUT icmp root


文章目录

一、安全防御概述

1.1 常见的攻击手段

拒绝服务(DOS): 通过大量访问请求使服务器资源耗尽,无法向正常用户处理请求连接。常见解决 手段使用云服务商的流量清洗功能

口令破解: 常用攻击手法俗称“跑字典”,常用解决方案设置登录错误次数限制

已知漏洞: 通过已知漏洞进行数据获取或提权,常见解决手段定时更新防御性补丁

欺骗权限用户: 又称社会工程学,通过欺骗权限用户得到授权资格的方式

1.2 常见的安全防御设备

基础类防火墙: 主要实现包过滤防火墙

IDS 类防火墙: 入侵检测系统,提供报告和事后监督为主

IPS 类防火墙: 入侵防御系统,分析数据包内容,根据模式匹配去阻断非法访问

主动安全类防火墙: 对特定服务类型进行专项防御,常见设备有 waf、daf

二、基础类防火墙

2.1 何为防火墙?

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

2.2 防火墙的分类

结构

软件:iptables
硬件:深信服 、 网御 、 华为

工作机制

包过滤防火墙:源地址 目的地址 源端口 目标端口 连接状态
应用层防火墙:URL

模块

内核态:netfilter
用户态:iptables

2.3 iptables 工作结构

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

在这里插入图片描述

2.4 iptables 历经的构造变化

在这里插入图片描述

2.5 iptables 相关原理

四表五链功能性介绍

iptables是(4张)表的集合:filter、nat、mangle、raw

表是(5条)链的集合:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING

规则链:承载防火墙规则

  1. 入站:INPUT
  2. 出站:OUTPUT
  3. 转发:FORWARD
  4. 路由前应用规则:修改目标地址 PREROUTING
  5. 路由后应用规则:修改源地址 POSTROUTING

规则表:承载防火墙链

  1. raw:状态跟踪
  2. mangle:标记 TTL
  3. nat:实现地址转换
  4. filter:过滤

防火墙链表结构

在这里插入图片描述

防火墙相关顺序

规则匹配顺序: 由上至下,匹配即停止

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

链应用顺序
入站:PREROUTING>INPUT
出站:OUTPUT>POSTROUTING
转发:PREROUTING>FORWARD>POSTROUTING

在这里插入图片描述

2.6 iptables 语法规则

书写规则

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

几个注意事项

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

常见动作类型及选项

动作

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

选项

参数		作用
-P			设置默认策略:iptables -P INPUT (DROP
-F			清空规则链
-L			查看规则链
-A			在规则链的末尾加入新规则
-I num		在规则链的头部加入新规则
-D num		删除某一条规则
-s			匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d			匹配目标地址
-i			网卡名称 匹配从这块网卡流入的数据
-o			网卡名称 匹配从这块网卡流出的数据
-p			匹配协议,如tcp,udp,icmp
–dport num	匹配目标端口号
–sport num	匹配来源端口号

通用匹配

通用匹配

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

常见的通用匹配条件

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

示例

# iptables -A FORWARD -s 10.1.1.12 -j REJECT 
拒绝 10.1.1.12 从我这里转发
# iptables -I INPUT -s 10.20.30.0/24 -j DROP 
丢弃 10.20.30.0/24 网段的入站数据包
# iptables -I INPUT -p icmp -j DROP
丢弃 icmp 协议的入站包 
# iptables -A FORWARD -p ! icmp -j ACCEPT
 放行所有不是 icmp 协议的数据包
# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
丢弃 172.16.0.0/12 网段的入站数据包

隐含匹配

隐含匹配

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

常用的隐含匹配条件

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

示例
别人 ping 我不通,我 ping 别人通实验

[root@centos ~]$ iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT 
[root@centos ~]$ iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT 
#放行 tcp 的 20和21 端口
[root@centos ~]$ iptables -A INPUT -p icmp --icmp-type 8 -j DROP 
#丢弃回显请求 ping 
[root@centos ~]$ iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 
#放行icmp 协议的回显应答
[root@centos ~]$ iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
#放行 icmp 协议的 目的主机、端口、等不可达
[root@centos ~]$ iptables -A INPUT -p icmp -j DROP
#丢弃 icmp 协议的所有数据包

icmp-type code 对应表

显式匹配

显式匹配

要求以“-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@centos ~]$ iptables -A INPUT -p tcp -m multiport --dport 22,80,110,143 -j ACCEPT 
#允许 22 80 110 143 段口入站并写在一条规则上
[root@centos ~]$ iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT 
#允许 21-28 IP地址的入站请求
[root@centos ~]$ iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP 
#丢弃指定 mac 地址的主机入站请求
[root@centos ~]$ iptables -P INPUT DROP  #入站规则默认丢弃
[root@centos ~]$ iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT  #不可用
[root@centos ~]$ iptables -I INPUT -p icmp -m state --state NEW,ESTABLISHED,RELATE -j ACCEPT/REJECT/DROP
															  #新的、建立的 、有关联的、   通过 或 拒绝 或 丢弃

SNAT 规则

SNAT 策略的典型应用环境: 局域网主机共享单个公网 IP 地址接入 Internet

SNAT 策略的原理

源地址转换,Source Network Address Translation
修改数据包的源地址

SNAT 网络拓扑
在这里插入图片描述

启动 SNAT 转换代码记录

实验环境

centos7(网关服务器)
ens33:10.1.1.11 仅主机模式
ens34:192.168.10.100 NAT 模式

centos7 (内网用户)
ens33:10.1.1.12 仅主机模式
GATEWAY:10.1.1.11
DNS1=114.114.114.114

centos7 关闭防火墙与selinux
yum -y install iptables-services

前提条件

局域网各主机正确设置 IP 地址/子网掩码
局域网各主机正确设置默认网关地址
Linux 网关支持 IP 路由转发

服务器操作

路由转发

[root@centos ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#添加

实现方法:编写 SNAT 转换规则

root@centos ~]$ iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o ens34 -j SNAT --to-source 192.168.10.100

MASQUERADE —— 地址伪装

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

实现代码

[root@centos ~]$ iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o ens34 -j MASQUERADE
#自动转换为可用的公网地址

**实验完成后内网用户访问百度等公网**

DNAT 规则

DNAT 策略的典型应用环境: 在 Internet 中发布位于企业局域网内的服务器

DNAT 策略的原理

目标地址转换,Destination Network Address Translation
修改数据包的目标地址

在这里插入图片描述
启动 DNAT 转换代码记录

实验环境

centos7(网关服务器)
ens33:10.1.1.11 仅主机模式
ens34:192.168.10.100 NAT 模式

centos7 (内网 web 服务器)
ens33:10.1.1.12 仅主机模式
GATEWAY:10.1.1.11

centos7 (外网用户)

ens34:192.168.10.104 NAT模式

centos7 关闭防火墙与selinux
yum -y install iptables-services

前提条件

局域网的 Web 服务器能够访问 Internet
网关的外网 IP 地址有正确的 DNS 解析记录
Linux 网关支持 IP 路由转发

内网 web 服务器

[root@web ~]# yum -y install httpd^
[root@web ~]# echo “hello” >> /var/www/html/index.html
[root@web ~]# systemctl start httpd
curl localhost
[root@web ~]# curl localhost
hello

服务器操作

路由转发

[root@centos ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#添加或修改

实现方法:编写 DNAT 转换规则

[root@centos ~]$ iptables -t nat -A PREROUTING -i ens33 -d 192.168.10.104 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.12

192.168.10.104 访问 10.1.1.12 测试

常见 Iptables 相关命令(补充)

持久化保存当前规则service iptables save

导出(备份)规则: iptables-save 工具,可结合重定向输出保存到指定文件
iptables-save > 1.iptables

导入(还原)规则: iptables-restore 工具,可结合重定向输入指定规则来源
iptables-restore < 1.iptables

iptables 服务

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

防火墙规则只在计算机处于开启状态时才有效。如果系统被重新引导,这些规则就会自动被清除并重 设。要保存规则以便今,请使用以下命令:后载入 sbin/service iptables save 保存在 /etc/sysconfig/iptables 文件中的规则会在服务启动或重新启动时(包括机器被重新引导时) 被应用

Centos7 使用 Iptables 为 netfilter 应用层工具

[root@centos ~]$ systemctl stop firewalld && systemctl disable firewalld
[root@centos ~]$ rpm -e --nodeps firewalld #删除 firewalld
[root@centos ~]$ yum -y install iptables-services  #安装 iptables
[root@centos ~]$ systemctl start iptables && systemctl enable iptables

常用 Iptables 配置脚本分享

[root@centos ~]$ 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@centos ~]$ bash 1.iptables

三、SELinux

3.1 SELinux 前世今生

Linux 安全性与 Windows 在不开启防御措施时一致,为 C2 级别

创造者:美国国家安全局(NationalSecurityAgency,简写为 NSA)

Selinux 实现模型

在这里插入图片描述

Selinux 在 Linux 中的地位变化

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

3.2 安全上下文

安全上下文的定义

所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中, 访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进 程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。常常用 下面的格式指定或显示安全上下文:

用户:角色:类型

相关配置命令

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

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

3.3 SELinux 布尔值

解释说明

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

布尔值配置命令

getsebool -a # 命令列出系统中可用的 SELinux 布尔值。
setsebool # 命令用来改变 SELinux 布尔值

案例

setsebool –p samba_enable_home_dirs=1 # 开启家目录是否能访问的控制

标签:iptables,centos,--,安全,防御,INPUT,icmp,root
来源: https://blog.csdn.net/qq_45980518/article/details/114677479

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有