当前位置:   article > 正文

Linux之安全最佳做法(未完成)_通过 bash 绑定远程命令执行漏洞

通过 bash 绑定远程命令执行漏洞

一、前言

一直跟Linux打交道,但是凡事多扰,一直未专门针对系统安全做过针对性总结,基于此,本文将记录总结一些Linux 安全配置过程中的常用实践,最后梳理成为安全最佳实践。

在这里插入图片描述
Linux以其稳定,高并发,甚至免费等特点,经过多年的应用发展,如今,互联网很多的应用已在 Linux 操作系统上使用,国内BAT等互联网巨头也已建设成千上万台服务器,分布全国的数据及灾备中心,95%以上使用的都是Linux系统。而随着Linux大规模的应用带来的安全问题也越来越多,下面是一些给安全人员带来巨大挑战的知名漏洞:

Struts2 远程代码执行漏洞通告(CVE-2017-5638);
Linux 内核提权漏洞(Dirty Cow) (CVE-2016-5195);
ElasticSearch 远程执行代码安全漏洞(CVE-2014-3120);
Bash 远程执行命令漏洞(Bash破壳) (CVE-2014-6271);
Nginx 远程执行代码安全漏洞(CVE-2014-0088);
MongoDB 匿名登录漏洞;
心脏流血漏洞;
Linux内核漏洞:“Phoenix Talon”(高危:CVE-2017-8890、CVE-2017-9075、CVE-2017-9076、CVE-2017-9077,影响几乎所有Linux kernel 2.5.69 - Linux kernel 4.11的内核版本,Linux 4.12-rc1中被修复);

二、防火墙配置

Linux防火墙是由Netfilter组件/安全框架提供的,Netfilter工作在内核空间,Netfilter是Linux操作系统核心层内部的一个数据包处理模块,集成在linux内核中,Netfilter 是Linux2.4.x之后集成进的新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,可提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈可无缝契合,允许对数据报进行过滤、地址转换、处理等操作,而Linux终端通过软件包iptables提供的命令行工具,工作在用户空间,用来与用户交互已管理编写规则,之后这些规则被送往netfilter,告诉内核如何去处理通过Netfilter信息包,更多参看Netfilter官网文档

在这里插入图片描述

在Linux 7 版开始引入了新的前端管理工具,即firewall,程序包:firewalld和firewalld-config,命令行工具:firewall-cmd 命令行工具和firewall-config 图形工具;

CentOS 8 中,引入Nftables;它在2013年末合并到Linux内核中,自2014年以来已在内核3.13中可用。它重用了netfilter框架的许多部分,例如连接跟踪和NAT功能。它还保留了命名法和基本iptables设计的几个部分,例如表,链和规则。就像iptables一样,表充当链的容器,并且链包含单独的规则,这些规则可以执行操作,例如丢弃数据包,移至下一个规则或跳至新链。nftables添加了一个名为nft的新工具,该工具替代了iptables,arptables和ebtables中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据包过滤规则集运行时评估的那些部分。检查:rpm -qi nftables;systemctl status nftables.service ;因此,centos8中支持3种防火墙: iptables、firewalld和nftables。Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则,由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上;从 Linux kernel 4.2 版以后,Netfilter 在prerouting 前加了一个 ingress 勾子函数。可以使用这个新的入口挂钩来过滤来自第2层的流量,这个新挂钩比预路由要早,基本上是 tc 命令(流量控制工具)的替代品。

在这里插入图片描述

防火墙按网络协议可划分为:

网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:代理网关,OSI模型七层

2.1、包过滤防火墙Iptables

● Linux 防火墙的过滤框架:
在这里插入图片描述
在这里插入图片描述

● iptables四表:

filter(实现实现数据过滤,内核模块:iptables_filter):三个链:INPUT,OUTPUT,FORWARD
nat (实现实现网络地址转换,三个链,内核模块:iptable_nat):PREROUTING,OUTPUT,POSTROUTING
mangle(为数据打标记,五个链,修改数据包的服务类型、TTL、并且可以配置路由实现QOS;内核模块:iptable_mangle):INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING;拆解报文 做出修改 并重新封装
raw(数据跟踪的,两个链)PREROUTING,OUTPUT;关闭nat表上启用的连接追踪机制,决定数据包是否被状态跟踪机制处理

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1)添加规则

iptables -A 链名 -p 协议 --dport 端口号 -j ACCEPT        //端口对外开放
iptables -A 链名 -p 协议 --dport 端口号 -j DROP          //拒绝端口对外开放
iptables -A 链名 -p 协议 --dport 端口号 -j REJECT        //拒绝端口对外开放,响应时间短
iptables -A 链名 -s IP/网段 -p 协议 --dport 端口号 -j ACCEPT        //开放固定IP或者网段对端口的访问权限
#修改规则
iptables -R INPUT 7 -d 192.168.10.1 -p icmp --icmp-type 0 -j ACCEPT  #修改规则7可ping
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2)查看规则

iptables [-t filter] -NV [chain_name] --line-number    //查看指定链规则信息,不写链名查看全部规则
  • 1

参数说明:

-t:指定包经过安全过滤器要匹配的规则集/链表;filter默认可忽略,nat,mangle,raw,security(用于强制访问控制(MAC)网络规则;强制访问控制由Linux安全模块(如SELinux)实现。安全表被调用在筛选表之后,允许筛选表中的任意任意访问控制(DAC)规则在MAC之前生效规则。该表提供了以下内置链:INPUT(用于进入盒子本身的数据包)、OUTPUT(用于更改路由之前本地生成的分组)和FORWARD(用于改变通过盒子路由的分组)。)
-A(append):在规则链末尾追加安全规则;
-C(check):检查所选链中是否存在与规范匹配的规则。
-R(replace):替换指定规则链中的某条规则,需指定规则号,从1开始;
-Z(zero):置零指定规则链里规则中记录的包和字节数
-N(new-chain):用户自定义新的规则链
-X(delete-chain):删除规则链,前提该链中的规则需空,且不能被其他规则链引用
-P(policy):对内建规则链配置策略规则
-E:重命名规则链
-m(match):一条规则先匹配match规则,如果匹配再匹配后面的参数,否则阻断
-g(goto):定义跳转到继续处理的其他规则链
-I:选项添加的防火墙规则则会默认插入到链中作为第一条规则
使用“!”可以将条件取反
3)删除规则

iptables -F [chain_name]   //清空指定链规则,链名不写则清空所有链规则
iptables [-t filter] -X [chain_name] //不写链名时,则清空指定表下自定义链,默认filter表,删除前需要清空规则
iptables -D INPUT 3
  • 1
  • 2
  • 3

4)规则导出导入

iptables-save > /opt/iptables 		//保存至指定路径 后期可以使用保存文件恢复配置信息
iptables-restore < /opt/iptables  //使用保存文件恢复配置信息
#持久保存规则
#CentOS 7,8
iptables-save  >  /PATH/TO/SOME_RULES_FILE
#CentOS 6,将规则覆盖保存至/etc/sysconfig/iptables文件中
service  iptables  save
yum install iptables-services
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5)修改配置文件

vi /etc/sysconfig/iptables  #如下所示

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT    //允许80端口通过防火墙
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT	//允许3306端口通过防火墙
-A INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT		//允许21端口通过防火墙
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443  -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A INPUT -m state --state ESTABLISHED,RELATED -jACCEPT  //允许所有已建立连接的、RELATED主动建立连接的 流量通过防火墙INPUT链,进允许进入;注意:iptables内有个名称为ip_conntrack_ftp的helper,可以针对连入与连外目的
port为21 的 ftp协定命令沟通进行拦截,执行modprobe ip_conntrack_ftp ports=21,30000,就是允许ftp服务分别在port 21与30000上,让ip_conntrack_ftp 这个ftp helper 能够正常提供 ftp 用户端使用passive mode存取而不会产生问题。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
#临时加载
modprobe  ip_tables
modprobe  iptable_filter
modprobe  iptable_nat
modprobe  ip_conntrack
modprobe  ip_conntrack_ftp
modprobe  ip_nat_ftp
modprobe  ipt_state

#永久加载
cat >> /etc/rc.local <<EOF
modprobe  ip_tables
modprobe  iptable_filter
modprobe  iptable_nat
modprobe  ip_conntrack
modprobe  ip_conntrack_ftp
modprobe  ip_nat_ftp
modprobe  ipt_state
EOF

lsmod|egrep 'filter|nat|ipt'

cat /etc/sysctl.conf

net.ipv4.icmp_echo_ignore_all = 1

sysctl -p  # 刷新
  • 1
  • 2
  • 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

6)iptables 模块

1、multiport 多端口管理:-m multiport、–sports port1,port2,port3、–dports port1,port2,port3

iptables -I INPUT -s 192.168.10.1 -d 192.168.10.3 -p tcp -m multiport --dports 446,6379,22 -j ACCEPT
  • 1

2、iprange 使用:

-m iprange --src-range IP1[-IP2](连续写多个连续的源ip) --dst-range IP1[-IP2](连续写多个连续的目的ip)

iptables -A INPUT -m iprange --src-range 192.168.1.1-192.168.1.10 -d 192.168.10.1-10 -p tcp --dport 80 -j ACCEPT
  • 1

3、state 状态:用与参考连接的状态进行数据过滤

-m state --state <状态> 决定什么样状态接收,什么样状态拒绝,比如有些常用服务,ssh,ftp等,根据端口放行比较麻烦,使用-m state --state模块就简单很多,state状态:

NEW状态:针对某个服务的首次访问,已经或将启动新的连接
ESTABLISHED状态:已建立的连接,1、某服务的后续所有访问状态;2、表示服务器的响应数据;这样就不用每条都写OUTPUT的规则了,有一条ESTABLISHED就能全部能出去(响应)OUTPUT
RELATED状态:相关联的连接,正在启动的新连接,给ftp用的。比如ftp服务器,只有命令连接完成,才能进行建立数据连接
INVALID状态:无效的连接,非法或无法识别的

iptables -I OUTPUT -s 192.168.10.1 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT -d 192.168.10.3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT  #保证首次访问和后续的所有访问都可以正常
iptables -I INPUT -d 192.168.10.3 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  • 1
  • 2
  • 3

7)最佳实践

注意:

1.修改之前先导出备份一份
2.修改的时候小心别把自己关在外面
3.可以现在定时任务里添加一条定时清空的规则,等测试没问题再取消定时任务
4、注意iptables -F不会对默认规则生效,当默认规则设置了拒绝所有,又执行了清除规则的语句-F
那就意味着,所有的请求全部都拒绝了,务必小心;可在测试规则之前,先写个定时任务,每隔5分钟重启一次iptables

#设置默认的 chain 策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

iptables -I INPUT -p icmp -j REJECT  //禁ping
iptables -A FORWARD -p ! icmp -j ACCEPT //转发除ICMP协议以外的所有数据包
iptables -A FORWARD -s 192.168.1.11 -j REJECT  
iptables -A FORWARD -s 192.168.2.0/24 -j ACCEPT  //拒绝转发来自192.168.1.11主机的数据,允许转发来自192.168.2.0/24网段的数据
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP  
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP  //丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I FORWARD -s 10.20.30.0/24 -j DROP  //封堵网段(192.168.1.0/24)
at now 2 hours at> iptables -D INPUT 1 at> iptables -D FORWARD 1  //两小时后解封
iptables -A INPUT -p tcp --dport 22 -s 179.1.0/16 -j ACCEPT  //只允许管理员从179.1.0.0/16使用SSH远程登录防火墙主机
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT  //允许本机开放从TCP端口20-1024提供的应用服务,分别加INPUT和OUTPUT2条
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT  //允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包
iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT
iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP  //禁止外部主机ping本网
iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT

iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP //使用“-m mac –mac-source”来表示数据包的源MAC地址
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT  //开放本机多个端口,用“-m multiport –dport”来指定目的端口及范围
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP //禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP  //禁止转发与正常TCP连接无关的非syn请求数据包,“-m state”表示数据包的连接状态,“NEW”表示与任何连接无关的,后续新的
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT  //拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包,“ESTABLISHED”表示已经响应请求或者已经建立连接的数据包,“RELATED”表示与已建立的连接有相关性的,比如FTP数据连接等
iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT  //非连续多端口
iptables -I INPUT -d 192.168.2.100 -p tcp -m multiport --dport  22,80 -j ACCEPT

iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT  //放行外部主机发往本机的应答数据包
iptables -P INPUT DROP
iptables -A INPUT -s$BLOCK_THIS_IP-j DROP  //阻止某个特定的 IP 地址,配置文件里写BLOCK_THIS_IP
  • 1
  • 2
  • 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
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/608194
推荐阅读
相关标签
  

闽ICP备14008679号