iptables如何限制宿主机跟Docker IP和端口访问(安全整改)

 更新时间:2024年10月10日 11:14:29   作者:Leon_start  
本文详细介绍了如何通过iptables对网络访问进行限制,包括限制特定IP或网段访问特定服务,以及在Docker环境下,如何设置DOCKER-USER链限制IP和端口访问,确保网络安全

一、常用命令

查看版本:
[root@iptables-server ~]# iptables -V 
iptables v1.4.21
配置文件:
 /etc/sysconfig/iptables-config 
 /etc/sysconfig/iptables   #记录规则文件	

#查看防火墙规则,显示规则行号
[root@iptables-server ~]# iptables -nL --line-number  
##指定行号删除,需要注意删除第一条规则后原来的第二条规则行号就会变成1,多次执行切勿删错
[root@iptables-server ~]# iptables -D INPUT 1   
# 规则保存
[root@iptables-server ~]# iptables-save
# service iptables save
# iptables-save > /etc/sysconfig/iptables
# iptables-restore < /etc/sysconfig/iptables
--参数解释
-L:列出一个链或所有链中的规则信息
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号(方便之处,通过需要删除规则-D INPUT 1
-F:清空所有的规则(-X是清理自定义的链,用的少;-Z清零规则序号)
-D:删除链内指定序号(或内容)的一条规则
-P:为指定的链设置默认规则
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则
-t: 指定表名,默认filter表
.... 更多参数可通过--help查看

二、宿主机网络限制

背景:

漏洞扫描发现任意用户对目标服务通过访问URL获取内容或者单纯的想要限制/允许某个Ip或者某个网段进行访问

1、任意用户对目标服务通过访问URL获取内容

目标服务存在未授权访问漏洞,通过访问URL:http://192.168.180.140:8081/swagger-resources,获取内容如下
[root@xiaoliu ~]# curl -iv http://192.168.180.140:8081/swagger-resources
[root@xiaoliu ~]# curl -I 192.168.180.140:8081
:[{"name":"default","location":"/v2/api-docs","swaggerVersion":"2.0"}]

整改:对端口做限制,只允许平台服务器的网段对该端口进行访问,其余都拒绝

#注意拒绝其他所有IP地址进行访问,此规则因该在其他规则之前执行,以确保其生效

#192.168.180.140
[root@xiaoliu ~]# iptables -I INPUT -p tcp --dport 8081 -j DROP   #这种规则需要先执行
[root@xiaoliu ~]# iptables -I INPUT -s 10.146.57.0/24 -p tcp --dport 8081 -j ACCEPT
[root@xiaoliu ~]# iptables -I INPUT -s 10.146.60.0/24 -p tcp --dport 8081 -j ACCEPT
[root@xiaoliu ~]# iptables -I INPUT -s 10.146.119.0/24 -p tcp --dport 8081 -j ACCEPT

2、允许某个Ip或者某个网段进行访问

[root@xiaoliu ~]# iptables -I INPUT -p tcp --dport 2375 -j DROP
[root@xiaoliu ~]# iptables -I INPUT -s 10.146.119.0/24 -p tcp --dport 2375 -j ACCEPT

三、限制Docker 网络IP和端口访问

背景:

整改安全加固时,使用iptabels限制docker端口不生效,限制非docker容器端口可生效。

经查阅大量资料,发现Docker容器创建时会自动创建iptables策略,Docker使用的i规则链是DOCKER-USER,所以需使用iptables对DOCKER-USER链做限制。

1、同网段只允许负载均衡机器跟控制主机机器访问算法服务器

iptables -I INPUT -p tcp --dport 48002 -j DROP
iptables -I INPUT -s 192.168.180.204 -p tcp --dport 48002 -j ACCEPT
iptables -I INPUT -s 192.168.180.215 -p tcp --dport 48002 -j ACCEPT
##此刻只执行上面命令发现同网段其余机器还是可以访问该算法的调用端口,此时需要对容器做限制
iptables -I INPUT -s 192.168.180.0/24 -j DROP
iptables -I INPUT -s 192.168.180.215 -j ACCEPT
iptables -I INPUT -s 192.168.180.204 -j ACCEPT
iptables -I DOCKER-USER -i eno1 -s 192.168.180.215 -p tcp  --dport  48002 -j ACCEPT
iptables -I DOCKER-USER -i eno1 -s 192.168.180.204 -p tcp  --dport  48002 -j ACCEPT

2、限制与Docker主机的连接

默认情况下,允许所有外部源IP连接到Docker主机。

要仅允许特定的IP或网络访问容器,请在DOCKER-USER过滤器链的顶部插入一个否定的规则。

#限制除192.168.1.1地址外的其他地址访问
$ iptables -I DOCKER-USER -i eno1 ! -s 192.168.1.1 -j DROP

#注意:eno1网卡需要按照你的实际情况填写

#限制除192.168.1.0/24网段外的其他地址访问
$ iptables -I DOCKER-USER -i eno1 ! -s 192.168.1.0/24 -j DROP

最后,您可以指定要接受的IP地址范围--src-range (请记住-m iprange在使用--src-range或时也要添加--dst-range):

#限制除192.168.1.1-192.168.1.3外的其他地址访问
$ iptables -I DOCKER-USER -m iprange -i eno1 ! --src-range 192.168.1.1-192.168.1.3 -j DROP

您可以结合使用-s或--src-range与-d或--dst-range一起控制连续源地址和连续目标地址。

例如,如果Docker守护程序同时监听 192.168.1.99和10.1.2.3,则可以制定特定于10.1.2.3并保持 192.168.1.99打开的规则。

3、限制docker指定端口访问策略

禁止所有IP访问docker的389端口
iptables -I DOCKER-USER -i eth0 -p tcp --dport 389 -j DROP
允许172.27.30.92地址访问docker的389端口
iptables -I DOCKER-USER -i eth0  -s 172.27.30.92 -p tcp --dport 389 -j ACCEPT

4、DOCKER-USER常用命令

# 查询DOCKER-USER策略
[root@test ~]# iptables --line -nvL  DOCKER-USER 
Chain DOCKER-USER (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        8   432 ACCEPT     tcp  --  eth0   *       172.27.30.92         0.0.0.0/0            tcp dpt:389
2       13   740 DROP       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:389
3      188 12524 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0  

# 删除DOCKER-USER策略
# 删除DOCKER-USER链第一条(num)规则
[root@test ~]# iptables -D DOCKER-USER 1

# 保存DOCKER-USER策略,默认临时生效
[root@test ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]

telnet访问测试:
[root@zabbix_server ~]# telnet 127.0.0.1 8075
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection timed out

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Dockerfile脚本定制镜像的方法

    使用Dockerfile脚本定制镜像的方法

    Dockerfile 是⼀个⽂本⽂件,其内包含了⼀条条的指令(Instruction),每⼀条指令构建⼀层,因此每⼀条指令的内容,就是描述该层应当如何构建,这篇文章主要介绍了使用Dockerfile脚本定制镜像,需要的朋友可以参考下
    2022-07-07
  • 使用portainer连接远程docker的教程

    使用portainer连接远程docker的教程

    Portainer是一个轻量级的docker环境管理UI,可以用来管理docker宿主机和docker swarm集群,这篇文章主要介绍了使用portainer连接远程docker的方法,需要的朋友可以参考下
    2020-03-03
  • 详解如何用docker安装laravel开发环境

    详解如何用docker安装laravel开发环境

    本篇文章主要介绍了详解如何用docker安装laravel开发环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 修改Docker镜像仓库为阿里云镜像或163镜像的实现

    修改Docker镜像仓库为阿里云镜像或163镜像的实现

    docker本身的仓库非常慢,但是国内有阿里云的镜像仓库非常快,本文主要介绍了修改Docker镜像仓库为阿里云镜像或163镜像的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • docker-compose启动mysql双机热备互为主从的方法实现

    docker-compose启动mysql双机热备互为主从的方法实现

    本文主要介绍了docker-compose启动mysql双机热备互为主从的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Docker使用nodejs镜像构建express服务的方法

    Docker使用nodejs镜像构建express服务的方法

    这篇文章主要介绍了Docker使用nodejs镜像构建express服务,主要包括nodejs容器的启动,安装nodejs第三方依赖模块及启动nodejs服务的相关操作,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 使用Docker快速搭建你的Gitbook

    使用Docker快速搭建你的Gitbook

    这篇文章主要介绍了使用Docker快速搭建你的Gitbook的相关资料,需要的朋友可以参考下
    2023-11-11
  • docker 容器自定义 hosts 网络访问操作

    docker 容器自定义 hosts 网络访问操作

    这篇文章主要介绍了docker 容器自定义 hosts 网络访问操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 30分钟带你了解Docker(推荐)

    30分钟带你了解Docker(推荐)

    这篇文章是针对Java开发人员的,但Docker的使用场景绝不仅限于此。最后,灵敏意味着可能有一些开发方式需要调整,到底如何利用Docker应该是当你了解它之后需要认真思考的问题
    2018-08-08
  • Docker network自定义网络方式

    Docker network自定义网络方式

    这篇文章主要介绍了Docker network自定义网络方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论