使用docker部署应用出现漏洞不方便升级时封堵方案(更新20240508)

背景

        日常运维工作中会遇到安全扫描,扫描出漏洞后的第一时间是想怎么升级一下应用,但是有时候研发大佬会告诉你 “建议不进行升级”,但是甲方爸爸又要求将漏洞处理了,这时我们可以使用iptables封堵端口或者封堵ip的方式进行屏蔽,本文主要记录如何封堵docker方式部署应用出现漏洞时封堵方法,如有什么地方不足请各位大佬指正。

        通过封堵IP的方式直接将所有应用都进行封堵,为什么不使用firewalld方式来封堵呢,查询了网上很多文章,自己也做了很多实验,结论就是docker run -p暴露的端口实际上类似于在防火墙上打了个洞,防火墙自身无法进行对应端口的封堵,所以选择使用iptables方式,本人也是对iptables不是特别了解,于是乎只记录干活的步骤。

关闭防火墙,生产环境docker运行时请勿重启防火墙,请勿重启防火墙,请勿重启防火墙!!

$ sudo systemctl stop firewalld

$ sudo systemctl disable firewalld

$ sudo mask firewalld

方案一,通过ip方式封堵

添加iptables 规则,docker-ce的话  可以在DOCKER-USER Chain中加iptables规则

##限制容器外所有ip访问策略,禁止所有ip通过ens33网卡访问docker应用

$ iptables -I DOCKER -i ens33  -s 0.0.0.0/0 -j DROP

##放开需要允许通过的IP地址或者IP地址段访问docker容器

$ iptables -I DOCKER -i ens33  -s 192.168.147.136 -j ACCEPT

$iptables -I DOCKER -i ens33  -s 192.168.147.1 -j ACCEPT

## 以上的规则大概意思就是允许192.168.147.136和192.168.147.1两个地址访问docker部署的应用

以下方式有个弊端,当机器重启或者docker重启的时候容器IP会发生变化,规则重新载入会造成服务不通,经过测试可以修改为文末。

##保存iptables规则

$iptables-save > /etc/sysconfig/iptables

##创建crontab定时任务,避免在机器重启后规则未自动加载,频率根据自己需求修改

$crontab -e

*/2 * * * * /usr/sbin/iptables-restore < /etc/sysconfig/iptables 

需要开放的地址较多可以使用iprange,如下

##通过取反的方式放通某些地址访问,以下规则意思是,除了192.168.147.136-147这个范围内的地址,其余的通过ens33访问都拒绝

$iptables -I DOCKER -m iprange -i ens33 ! --src-range 192.168.147.136-192.168.147.147 -j DROP

方案二,通过端口方式封堵(以下端口均为容器内部端口)

##禁止所有地址访问3306端口(本机不影响)

$iptables -I DOCKER -p tcp --dport=3306 -j DROP

##开放需要访问应用的地址

$iptables -I DOCKER -p tcp -s 192.168.147.1 --dport=3306 -j ACCEPT

以上规则服务若是在同一网络命名空间下也是拒绝的所以需要添加对docker网络地址段的允许规则,这样通过容器内部调用”服务名+端口“就不会有影响了

$iptables -I DOCKER -p tcp -s 172.0.0.0/8 --dport=3306 -j ACCEPT

##保存iptables规则

$iptables-save > /etc/sysconfig/iptables

##创建crontab定时任务,避免在机器重启后规则未自动加载,频率根据自己需求修改

$crontab -e

*/2 * * * * /usr/sbin/iptables-restore < /etc/sysconfig/iptables 

通过iptables-restore方式载入iptables规则,在服务器重启或者docker重启后,容器IP发生变化,导致所有服务不通,可以通过编写脚本在服务器重启后添加iptables规则脚本

$vi /root/iptables.sh

#!/bin/bash

sleep 60            ###需要docker服务启动后才能在DOCKER Chain中添加规则

iptables -I DOCKER -p tcp  --dport=3306 -j DROP

iptables -I DOCKER -p tcp -s 192.168.147.1  --dport=3306 -j ACCEPT 

iptables -I DOCKER -p tcp -s 172.0.0.0/8 --dport=3306 -j ACCEPT

###然后再crontab中添加定时任务

$crontab -e

@reboot  /bin/bash +x /root/iptables.sh

###这样在机器重启60s后就会添加相应iptables规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值