找回密码
 加入我们
搜索
      
查看: 8650|回复: 37

[软件] CentOS 7防火墙添加开放指定端口是否就可以使某网络应用程序不受限制的访问互联网?

[复制链接]
发表于 2023-9-4 17:11 | 显示全部楼层 |阅读模式
最近在CentOS 7系统上成功部署了Docker Engine,并拉取安装了一个代理客户端软件,但是在默认开启firewalld防火墙的状态下,该软件的Web UI无法访问使用,禁用防火墙就一切正常。现在的问题是,我不想简单粗暴的systemctl disable firewalld禁用防火墙,希望既兼顾网络安全又能使这个代理客户端程序不受限制的访问网络,最佳方案是不是把它所使用的端口都firewall-cmd --zone=public --add-port=xxxxx/tcp --permanent添加进防火墙规则里就行了?
发表于 2023-9-4 17:20 | 显示全部楼层
与你相反,我之前是centos7上安装docker,docker的端口不受firewalld控制,绕过firewalld直接写入最底层的iptables规则,困扰了我很久才找到办法
发表于 2023-9-4 17:25 | 显示全部楼层
我更懒,直接外面防火墙上开端口,里面服务器裸奔
发表于 2023-9-4 17:32 | 显示全部楼层
本帖最后由 Xp47 于 2023-9-4 17:36 编辑

对的,透明代理还加上tproxy比如,如果不用透明代理的话用module 写个文件也每次load
发表于 2023-9-4 17:38 | 显示全部楼层
nn1122 发表于 2023-9-4 17:20
与你相反,我之前是centos7上安装docker,docker的端口不受firewalld控制,绕过firewalld直接写入最底层的i ...

你俩这头像...  我还以为楼主自问自答...
发表于 2023-9-4 17:52 来自手机 | 显示全部楼层
nn1122 发表于 2023-9-4 17:20
与你相反,我之前是centos7上安装docker,docker的端口不受firewalld控制,绕过firewalld直接写入最底层的i ...

怎么加的?我也发现docker里的端口不受控制
 楼主| 发表于 2023-9-4 20:54 | 显示全部楼层
nn1122 发表于 2023-9-4 17:20
与你相反,我之前是centos7上安装docker,docker的端口不受firewalld控制,绕过firewalld直接写入最底层的i ...

这办法香,但iptables是centos6才有的底层内核模块吧,到了centos7就改成firewalld接管了,有相关攻略教程吗?
 楼主| 发表于 2023-9-4 21:02 | 显示全部楼层
dcl2009 发表于 2023-9-4 17:25
我更懒,直接外面防火墙上开端口,里面服务器裸奔

我目前还未配飞塔硬件防火墙,暂时只能用操作系统自带的防火墙。
 楼主| 发表于 2023-9-4 21:08 | 显示全部楼层
Xp47 发表于 2023-9-4 17:32
对的,透明代理还加上tproxy比如,如果不用透明代理的话用module 写个文件也每次load ...

是的,透明代理实现方式我就是选的tproxy,这应该就是所谓的旁路由模式吧,感觉运行在虚拟化docker容器中的代理性能非常高,可以秒开网页,延迟体验很满意。
发表于 2023-9-4 21:39 | 显示全部楼层
红色狂想 发表于 2023-9-4 20:54
这办法香,但iptables是centos6才有的底层内核模块吧,到了centos7就改成firewalld接管了,有相关攻略教 ...

centos7的底层仍然是iptables的规则链,只不过firewalld成了管理工具,也可以禁用firewalld再安装iptables服务进行管理控制,使用firewalld控制docker端口参照文章:https://zhuanlan.zhihu.com/p/371683318
发表于 2023-9-4 21:41 | 显示全部楼层
labyrin 发表于 2023-9-4 17:52
怎么加的?我也发现docker里的端口不受控制

https://zhuanlan.zhihu.com/p/371683318
 楼主| 发表于 2023-9-4 22:27 | 显示全部楼层
nn1122 发表于 2023-9-4 21:39
centos7的底层仍然是iptables的规则链,只不过firewalld成了管理工具,也可以禁用firewalld再安装iptable ...

这篇文章讲的是保护Docker端口,只允许特定IP的外部主机访问,和我顶帖中想要实现的firewalld开放tproxy客户端端口使其能正常使用是两回事儿吧,也就是说还是得先完成firewall-cmd --zone=public --add-port=xxxxx/tcp --permanent添加开放的端口规则?
发表于 2023-9-5 08:20 | 显示全部楼层
红色狂想 发表于 2023-9-4 22:27
这篇文章讲的是保护Docker端口,只允许特定IP的外部主机访问,和我顶帖中想要实现的firewalld开放tproxy ...

我开头给你说了,我情况跟你相反,开放端口是这个命令没错
发表于 2023-9-5 11:47 | 显示全部楼层
本帖最后由 yugu91 于 2023-9-5 11:49 编辑

开指定端口就行,不要在公网关了防火墙
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd -s reload
发表于 2023-9-5 12:20 | 显示全部楼层
yugu91 发表于 2023-9-5 11:47
开指定端口就行,不要在公网关了防火墙
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
...

centos下不用sudo,防火墙重载命令是firewall-cmd --reload
发表于 2023-9-5 12:53 | 显示全部楼层
nn1122 发表于 2023-9-4 17:20
与你相反,我之前是centos7上安装docker,docker的端口不受firewalld控制,绕过firewalld直接写入最底层的i ...

可以用podman
发表于 2023-9-5 13:58 | 显示全部楼层
本帖最后由 yugu91 于 2023-9-5 14:00 编辑
nn1122 发表于 2023-9-5 12:20
centos下不用sudo,防火墙重载命令是firewall-cmd --reload


不是不用,是你用了root登陆,正常安全应该创建一个sudo账户,然后禁了root的ssh登陆
发表于 2023-9-5 14:13 | 显示全部楼层
本帖最后由 nn1122 于 2023-9-5 14:18 编辑
yugu91 发表于 2023-9-5 13:58
不是不用,是你用了root登陆,正常安全应该创建一个sudo账户,然后禁了root的ssh登陆 ...


一般安装centos不会强制引导创建普通用户而是直接设置root密码安装就完成了,只有ubuntu安装时创建的用户才是普通用户,所以你这用法是特例,楼主家里也无需这样安全。另外保障安全的还有证书登陆,TOTP登陆,限制SSH端口来源IP等等措施
 楼主| 发表于 2023-9-5 16:36 | 显示全部楼层
yugu91 发表于 2023-9-5 11:47
开指定端口就行,不要在公网关了防火墙
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
...

我开放了相关的端口,现在tproxy代理客户端的WEB UI管理界面可以访问了,但却无法访问互联网,在github官方网站上有一篇相关文章,是以UFW(Uncomplicated FireWall)Arch Linux、Debian或Ubuntu中管理防火墙规则的前端工具来举例解答这个问题的:
无法使用的原因

ufw 防火墙会默认添加下面两条规则
# diff disable.txt enable.txt
1,2c1,2
< -P INPUT ACCEPT
< -P FORWARD ACCEPT
---
> -P INPUT DROP
> -P FORWARD DROP

所以会导致默认启用防火墙之后就会触发规则导致无法正常使用
Jul 05 17:15:12 pi4 kernel: [UFW BLOCK] IN=eth0 OUT=eth0 MAC=**** SRC=192.168.1.106 DST=**** LEN=1378 TOS=0x00 PREC=0x00 TTL=127 ID=28087 DF PROTO=UDP SPT=64120 DPT=443 LEN=1358
Jul 05 17:15:12 pi4 kernel: [UFW BLOCK] IN=eth0 OUT=eth0 MAC=**** SRC=192.168.1.106 DST=**** LEN=1378 TOS=0x00 PREC=0x00 TTL=127 ID=28088 DF PROTO=UDP SPT=64120 DPT=443 LEN=1358

解决方法

添加相应的网段需要的输入链规则与转发链规则
# 允许输入链
sudo ufw allow from 192.168.1.0/24
# 允许转发链
sudo ufw route allow in on eth0 out  on eth0 to any from 192.168.1.0/24
# 重载规则
sudo ufw reload

最后查看规则应该有类似的两条规则
# iptables --list-rules
-A ufw-user-forward -s 192.168.0.0/23 -i eth0 -o eth0 -j ACCEPT
-A ufw-user-input -s 192.168.0.0/23 -j ACCEPT

如果是CentOS 7的firewalld防火墙环境下,以上这个示例的命令行该怎么写呢?
 楼主| 发表于 2023-9-5 16:49 | 显示全部楼层
nn1122 发表于 2023-9-5 08:20
我开头给你说了,我情况跟你相反,开放端口是这个命令没错

嗯,你的需求就好比是内网建了个Web服务器,只需要内部访问,但该服务器又需要接入外网,出于安全考虑,必须添加iptables规则只允许特定IP可以访问Web服务器,以他全部禁止访问。
发表于 2023-9-6 09:24 | 显示全部楼层
红色狂想 发表于 2023-9-5 16:36
我开放了相关的端口,现在tproxy代理客户端的WEB UI管理界面可以访问了,但却无法访问互联网,在github官 ...


你搜索下 tpxxxx centos firewall-cmd,这里也不方便说这些了,我看了下git有教程,
 楼主| 发表于 2023-9-6 12:45 | 显示全部楼层
yugu91 发表于 2023-9-6 09:24
你搜索下 tpxxxx centos firewall-cmd,这里也不方便说这些了,我看了下git有教程, ...

我昨天晚上弄好了,搜到一篇文章,centos7下Firewall使用详解,按照针对一个IP段访问段落的命令行,照猫画虎稍加修改就成功了,具体命令如下:
  1. #针对一个IP段访问
  2. firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" accept'

  3. #重新载入防火墙配置
  4. firewall-cmd --reload

  5. #查看指定区域的所有防火墙配置,应有以下信息:
  6. firewall-cmd --zone=public --list-all
  7. public (active)
  8.   target: default
  9.   icmp-block-inversion: no
  10.   interfaces: ens192
  11.   sources: 192.168.0.0/24
  12.   services: dhcpv6-client ssh
  13.   ports: xxxx/tcp xxxxx/tcp xxxxx/tcp xxxxx/tcp xxxxx/tcp
  14.   protocols:
  15.   masquerade: no
  16.   forward-ports:
  17.   source-ports:
  18.   icmp-blocks:
  19.   rich rules:
  20.         rule family="ipv4" source address="192.168.0.0/24" accept
复制代码

然后重启一下CentOS系统就可以正常访问互联网了,不知这样是不是正确的安全方法
发表于 2023-9-6 14:00 | 显示全部楼层
红色狂想 发表于 2023-9-6 12:45
我昨天晚上弄好了,搜到一篇文章,centos7下Firewall使用详解,按照针对一个IP段访问段落的命令行,照猫 ...


看着像是完全放开192.168.0.0/24网段入口,厉害了
 楼主| 发表于 2023-9-6 16:24 | 显示全部楼层
yugu91 发表于 2023-9-6 14:00
看着像是完全放开192.168.0.0/24网段入口,厉害了

是不是简单省事,等于没开防火墙
发表于 2023-9-6 17:22 | 显示全部楼层
后排提醒一下楼主,别忘了可爱的selinux
发表于 2023-9-6 18:26 | 显示全部楼层
通电的大脑 发表于 2023-9-6 17:22
后排提醒一下楼主,别忘了可爱的selinux

对初学者来说,这个才是最麻烦的。我以前在单位用centos7做一个简单的磁盘共享,挂的是NTFS格式硬盘,方便拆下来随便找个电脑就能维护,为了不关闭selinux,折腾了1周多时间才搞明白。
 楼主| 发表于 2023-9-6 22:12 | 显示全部楼层
通电的大脑 发表于 2023-9-6 17:22
后排提醒一下楼主,别忘了可爱的selinux

linux系统中firewalld防火墙管理工具firewall-config(GUI图形用户界面)
Linux Firewalld防火墙——图形界面及字符管理介绍

CentOS 7的防火墙有GUI图形化管理界面firewall-config,但是我执行yum install firewall-config  -y安装完成后无法运行,提示以下错误信息:
  1. [root@centos-7-server ~]# firewall-config

  2. (firewall-config:2222): Gtk-WARNING **: 21:29:44.848: cannot open display:
复制代码

网上找到解决firewall-config图形界面无法启动问题这篇文章,照上面说的操作还是无效,提示如下信息:
  1. [root@centos-7-server ~]# export DISPLAY=:0.0
  2. [root@centos-7-server ~]# xhost centos-7-server
  3. xhost:  unable to open display ":0.0"
复制代码

不知是哪里的问题
发表于 2023-9-7 00:09 | 显示全部楼层
docker使用的是iptables设定网络,如果要限制服务的端口或ip,按照官方文档是要把规则加到iptables的DOCKER-USER这个链里
发表于 2023-9-7 16:11 | 显示全部楼层
红色狂想 发表于 2023-9-6 22:12
linux系统中firewalld防火墙管理工具firewall-config(GUI图形用户界面)
Linux Firewalld防火墙——图形 ...

你这是在远程桌面跑的吗?
 楼主| 发表于 2023-9-7 17:49 | 显示全部楼层
通电的大脑 发表于 2023-9-7 16:11
你这是在远程桌面跑的吗?

是的,同一个局域网内的一台Windows Server 2019客户机,用SecureCRT 9.0仿真客户端SSH登录的
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-4-27 16:38 , Processed in 0.014615 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

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