找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 5523|回复: 10

【安全警告】注意,所有在openwrt中使用docker的小伙伴请关闭dockerd编辑iptables选项

[复制链接]
发表于 2022-9-11 21:56 | 显示全部楼层 |阅读模式
最近给家里路由器升级时决定使用docker来部署一些常用软件,今天编译出来了一个带docker的固件就开始测试了。

一开始的功能测试都没问题,结果安全测试时我才发现一个深坑:
因为我知道docker在暴露端口时,会将容器内的端口暴露给所有的网卡,比如你在用 docker run .... -p 9000:9000 时,就是说在所有的网卡收到的目标端口为9000的入站数据都转发进容器。
然而openwrt作为路由器,肯定是不能接受所有网卡的入站数据的,至少你得吧wan口的入站数据给屏蔽掉,而这一部分是通过防火墙读取iptables规则来实现的。
但是万万没想到,docker暴露端口也是操作iptables,我测试时发现只要docker镜像暴露的端口全都暴露到公网上去了。
然后我上网上查了各种办法,也许是我搜索技巧问题,大多数的答案都指向了在暴露端口时手动指定ip,比如 -p 192.168.1.1:9000:9000
这不开玩笑呢吗?假如我要暴露给两张网卡怎么办(虽然一般来说只可能暴露给一个lan ip)
最后我去看dockerd的配置文件才发现,一切的一切都是默认配置在搞鬼,不知道为什么,openwrt的默认配置竟然允许了dockerd操作iptables
  1. # The following settings require a restart of docker to take full effect, A reload will only have partial or no effect:
  2. # bip
  3. # blocked_interfaces
  4. # extra_iptables_args
  5. # device

  6. config globals 'globals'
  7. #       option alt_config_file '/etc/docker/daemon.json'
  8.         option data_root '/opt/docker/'
  9.         option log_level 'warn'
  10.         option iptables '1'
  11. #       list hosts 'unix:///var/run/docker.sock'
  12. #       option bip '172.18.0.1/24'
  13. #       option fixed_cidr '172.17.0.0/16'
  14. #       option fixed_cidr_v6 'fc00:1::/80'
  15. #       option ipv6 '1'
  16. #       option ip '::ffff:0.0.0.0'
  17. #       list dns '172.17.0.1'
  18. #       list registry_mirrors 'https://<my-docker-mirror-host>'
  19. #       list registry_mirrors 'https://hub.docker.com'

  20. # Docker ignores fw3 rules and by default all external source IPs are allowed to connect to the Docker host.
  21. # See https://docs.docker.com/network/iptables/ for more details.
  22. # firewall config changes are only additive i.e firewall will need to be restarted first to clear old changes,
  23. # then docker restarted to load in new changes.
  24. config firewall 'firewall'
  25.         option device 'docker0'
  26.         list blocked_interfaces 'wan'
  27. #       option extra_iptables_args '--match conntrack ! --ctstate RELATED,ESTABLISHED' # allow outbound connections
复制代码

只要把 option iptables '1' 改成 0 再重启dockerd就好了

感觉这是一个非常大的安全隐患啊,不知道openwrt维护者是出于什么心态设置的这个选项。
发表于 2022-9-11 23:20 | 显示全部楼层
大佬 有公网IP了,端口应该怎么规划啊,有没有可以容易简单看懂的教程
回复 支持 反对

使用道具 举报

发表于 2022-9-11 23:43 | 显示全部楼层
确实有点危险
回复 支持 反对

使用道具 举报

发表于 2022-9-11 23:50 | 显示全部楼层
我记得luci上本来有这个选项,而且默认是不开启的,还特别有文字说明开启有危险。
编写脚本的人有很多我们常人理解不了的奇葩地方,比如:
默认禁用wireless,绝大多数人刷了都是想要做无线路由的,偏偏默认是禁用的(为此我砸掉过一台上好的CPE,WAN口好LAN口坏,想通过wifi配置行不通,想通过ssh又行不通,为什么?下一条)
默认打开wan口ssh访问,这个坑比你说的docker还深,而且绝大多数人根本不懂,几乎每一台刷的都开。而wan口访问需要密码,而openwrt默认没有密码,所以为什么我要砸了上面那台,因为我实在不想为一台坏机编译一个系统去默认打开wifi。
这两条都是因为极少数人的需求而给绝大多数人造成麻烦。openwrt不经过自己二次开发根本没什么好用的。

点评

防火墙默认没开经WAN 又没影响  详情 回复 发表于 2022-9-12 10:15
官方源码的op ssh默认没有开放SSH给WAN 因为坛子里最多的就是第三方编译的X64版本,而这个确实没法保证质量。  详情 回复 发表于 2022-9-12 10:10
openwrt官方固件默认打开wan口ssh访问??? 别说这么确定!!! 建议你去openwrt官方论坛发帖,别在国内乱放屁。  详情 回复 发表于 2022-9-12 01:15
回复 支持 反对

使用道具 举报

发表于 2022-9-12 00:33 来自手机 | 显示全部楼层
官方op防火墙默认关闭入站主动连接的,所以ssh这个问题应该不大。docker是靠iptables进行ip伪装和端口映射的(-p 2000:3000这种),没用过op的docker,好奇禁用iptables后容器怎么通信的?方便的话iptables -S ;iptables -tnat -S看看
回复 支持 反对

使用道具 举报

发表于 2022-9-12 01:15 | 显示全部楼层
wulishui 发表于 2022-9-11 23:50
我记得luci上本来有这个选项,而且默认是不开启的,还特别有文字说明开启有危险。
编写脚本的人有很多我们 ...

openwrt官方固件默认打开wan口ssh访问???

别说这么确定!!!
建议你去openwrt官方论坛发帖,别在国内乱放屁。
回复 支持 反对

使用道具 举报

发表于 2022-9-12 09:02 来自手机 | 显示全部楼层
多谢提醒,刚看了下我的,默认也是1,这种操作在一台防火墙网关机器上确实很危险。不过试了下我开的docker服务,公网打不开,可能因为我还手动设置了默认禁止所有入站连接和wan2lan的转发,并且把优先级放到最高的
回复 支持 反对

使用道具 举报

发表于 2022-9-12 10:10 | 显示全部楼层
wulishui 发表于 2022-9-11 23:50
我记得luci上本来有这个选项,而且默认是不开启的,还特别有文字说明开启有危险。
编写脚本的人有很多我们 ...

官方源码的op ssh默认没有开放SSH给WAN
因为坛子里最多的就是第三方编译的X64版本,而这个确实没法保证质量。
回复 支持 反对

使用道具 举报

发表于 2022-9-12 10:15 | 显示全部楼层
wulishui 发表于 2022-9-11 23:50
我记得luci上本来有这个选项,而且默认是不开启的,还特别有文字说明开启有危险。
编写脚本的人有很多我们 ...

防火墙默认没开经WAN 又没影响
回复 支持 反对

使用道具 举报

发表于 2024-4-14 17:05 | 显示全部楼层
https://forum.openwrt.org/t/inte ... -container/160826/8

看到這個帖子,
最後一句
        list blocked_interfaces 'wan'
#       option extra_iptables_args '--match conntrack ! --ctstate RELATED,ESTABLISHED' # allow outbound connections

是會決絕所有 wan 的連接
所以,導致容器不能訪問 internet
下面一句 是容許 容器訪問外網

但,又有另一個問題: 最新版 op 的iptables, nft之間的問題,又導致另一個斷鏈:
https://forum.openwrt.org/t/nftables-vs-dockerd/132588/6

点评

所以我目前用新版 op 都是直接禁止 docker 操作防火墙,然后手动写了几条防火墙规则  详情 回复 发表于 2024-4-22 09:58
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-22 09:58 | 显示全部楼层
本帖最后由 迷路的羽先生 于 2024-4-22 09:59 编辑

所以我目前用新版 op 都是直接禁止 docker 操作防火墙,然后手动写了几条防火墙规则
因为 op 上的 docker 就几个,然后都是一个网段,也不会频繁增减,所以手写就够了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-7-4 15:20

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表