标签: firewalld

在centos 7中使用Firewall-cmd创建地址特定限制

如何使用 firewall-cmd 工具(新的 firewalld)创建防火墙规则,以便限制特定网络仅访问一项服务,并允许一个区域中的所有服务。

例如:

我只有一个接口 eno1,它与公共区域相关联。该区域启用了 Http 和 https 服务。我想在该区域启用 ssh 访问,但我想限制对网络的 ssh 访问(例如 100.0.0.0/8)

做这个的最好方式是什么?

linux fedora linux-networking firewalld centos7

5
推荐指数
1
解决办法
5577
查看次数

FirewallD:仅允许来自特定 IP 地址的连接

我正在尝试使用 FirewallD 来限制网络上其他机器对 CentOS 服务器的访问。它有一个单一的网络接口,并且在公共区域中运行。假设此服务器的 IP 地址为 10.10.1.20。

我想要做的是只允许 IP 地址为 10.10.1.125 和 10.10.1.126 的机器能够连接(ssh 和 https)到该服务器。其他任何 ip 地址都不应该能够连接到该服务器(甚至知道它存在)。

我尝试使用 FirewallD 的丰富规则如下(10.10.1.20)

sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.0/24" drop'

sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.125" accept'

sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.126" accept'
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。我无法从 10.10.1.125 或 10.10.1.126 建立到 10.10.1.20 的 ssh 连接。

我尝试以相反的顺序输入规则,但它仍然不起作用。

有人可以帮我吗?在应用我上面写的规则之前,我是否需要将区域从公共区域更改为更严格的区域,例如 drop ?

firewalld centos7 firewalld-zone

5
推荐指数
2
解决办法
6万
查看次数

在 FirewallD (CentOS 7) 中允许被动 FTP 连接

在 FirewallD 附带的 CentOS 7 中,启用 HTTP 访问很容易:

firewall-cmd --permanent --zone=public --add-service=http
Run Code Online (Sandbox Code Playgroud)

然而,

firewall-cmd --permanent --zone=public --add-service=ftp
Run Code Online (Sandbox Code Playgroud)

不起作用:规则适用,但除禁用 FirewallD 外,我无法通过任何方式访问 FTP。

一些诊断信息:

  • 我检查了服务定义文件 (ftp.xml),它使用了 nf_conntrack_ftp 模块。
  • 在我的 VPS 上,模块被编译到内核中(不是单独的),所以它不存在通过 lsmod,但我可以通过以下方式确认它在那里:


zgrep FTP /proc/config.gz
Run Code Online (Sandbox Code Playgroud)

CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_NAT_FTP=y
CONFIG_NF_NAT_TFTP=y
Run Code Online (Sandbox Code Playgroud)

centos ftp firewalld

4
推荐指数
1
解决办法
2万
查看次数

多个防火墙区域可以在任何给定时间处于活动状态吗?

我一直在努力解决一些奇怪的(对我来说)防火墙错误,但现在看到了我想要的防火墙行为。但是,令我困惑的是,有效的似乎是区域drop和区域的混合。trusted

[root@douglasii ~]#  firewall-cmd --get-active-zones
drop
  interfaces: eth0 veth879317c vethaff7c39 vethb2fec6e
trusted
  sources: 192.168.0.0/16
[root@douglasii ~]# firewall-cmd --zone=drop --list-all
drop (default, active)
  interfaces: eth0 veth879317c vethaff7c39 vethb2fec6e
  sources: 
  services: ssh
  ports: 443/tcp 80/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

[root@douglasii ~]# firewall-cmd --zone=trusted --list-all
trusted
  interfaces: 
  sources: 192.168.0.0/16
  services: ssh
  ports: 443/tcp 80/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
Run Code Online (Sandbox Code Playgroud)

我的印象是您使用 一次设置一个区域set-default-zone。我发现无论我为哪一个这样做,都会获得“活跃”标签。难道不是这样吗?多个防火墙区域可以在任何给定时间处于活动状态吗?都是同时申请吗?什么是默认区域?通过阅读FirewallD 上的文档,我并不清楚。

iptables centos firewalld centos7

4
推荐指数
1
解决办法
1万
查看次数

Fedora 21:Firewalld (firewall-cmd) 不会将接口永久分配给区域?

我在这台机器上安装了 Fedora,它完全是一个网关/防火墙系统。

安装后,我运行了 ' yum upgrade',所以它应该是最新的 Fedora 21 - 我故意有点落后(不是 Fedora 22),所以任何问题都有望得到解决(现在意识到可能我应该有去 Fedora 20 了吗?!)...

一启动,我就用它们各自的 IP 地址配置了盒子中的两个 NIC,重新启动,确认它们没问题,然后开始“防火墙”设置。首先,我跑了:

# firewall-cmd --list-all-zones
Run Code Online (Sandbox Code Playgroud)

我确认 firewalld 使用的接口名称与其他工具一致(与 Fedora 的过去版本不同,例如 19 - 请参阅请求的 FC19 FirewallD 调试帮助:端口不转发

为了将接口放入正确的区域,我然后运行:

firewall-cmd --permanent --zone=external --change-interface=enp2s0
firewall-cmd --permanent --zone=internal --change-interface=enp5s4
Run Code Online (Sandbox Code Playgroud)

..然后继续尝试设置端口转发等。有几个步骤,例如打开端口,然后转发它。然而,这些都没有奏效。经过一番挖掘,我找到了这篇文章,日期仅在几天前,所以我认为它是最新的 - http://www.certdepot.net/rhel7-get-started-firewalld/ - 并按照其建议进行编辑/etc/sysctl.conf和添加一行阅读net.ipv4.ip_forward=1并用 激活它# sysctl -p,然而,不幸的是,事情实际上“倒退了”......

以前,尝试与转发端口的连接挂起,但现在它们正在返回:

ssh: connect to host 167.101.97.2 port 6543: No route to host
Run Code Online (Sandbox Code Playgroud)

所以,我试图通过取消端口转发和对 sysctl.conf 的编辑来恢复正常,但事情并没有回到“原始”!

令人难以置信的是,我重新启动了,一切都设置为默认值,只是尽可能地安装条件 - 除了那些区域更改;他们会造成什么伤害?!但是当系统恢复时,接口已经回到默认区域!

然后我又重新尝试了一遍。不!无论我做什么,重新启动后接口都停留在“FedoraServer”区域。我已经在命令行中的几个不同位置尝试了 --permanent 。每次响应都是“成功”,然而,每次结果都是它在重新启动后无法生存,即使这是重新启动之间在系统上所做的唯一事情。 …

fedora interface firewalld firewall-cmd firewalld-zone

4
推荐指数
1
解决办法
4259
查看次数

如何使用 firewall-cmd 创建高级规则?

我想使用 firewalld 创建一个规则,该规则使用标准用户名或用户 ID 以及一个其他模块标准。

在 iptables 中,我认为你可以做这样的事情

iptables -A OUTPUT -m owner --uid-owner <UID> -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

(并且您可以将其他 -m 模块或 -p 协议添加到同一命令中)

但是我阅读了firewall-cmd联机帮助页,但找不到如何制定相同类型的规则。即使是“丰富的规则”似乎也没有这种支持。我必须使用“直接”功能吗?我不太明白它的语法。尤其让我担心的是这些没有任何回报!

firewall-cmd --direct --get-chains ipv4 filter
firewall-cmd --direct --get-rules ipv4 filter OUTPUT
firewall-cmd --direct --get-rules ipv4 filter INPUT
Run Code Online (Sandbox Code Playgroud)

当然iptables -L显示我有这些表、链和规则。

那么我如何使用firewalld为所有者添加一个永久规则,也许还有一个标准?

firewall iptables firewalld

4
推荐指数
1
解决办法
5517
查看次数

AWS MarketPlace Centos7 映像中缺少防火墙

我正在使用来自 AWS MarketPlace 的这张图片。问题是 centos 7 应该附带firewalld而不是 iptables。但是firewalld不是安装在上面而是iptables安装了。这是为什么。centos 提供的这个特定图像还有哪些其他变化,这些图像应该是常规的 centos 7 图像。

centos amazon-ami amazon-web-services firewalld centos7

4
推荐指数
1
解决办法
2798
查看次数

为什么 Firewalld 不过滤在我的 Docker 容器中运行的服务?

从 iptables 迁移到firewalld 并使用firewall-cmd 更新规则后,我的服务被正确过滤。然后我使用 Docker 将所有服务移至容器,并使用 docker-compose 运行所有内容。

我的默认区域是“公共”。我已手动将 docker0、我的外部(以太网)接口以及 Docker 容器似乎通过 (br-304604a31e79) 与外界通信的接口添加到“公共”区域。我已运行命令将带或不带标志的接口移至“公共”区域--permanent

当我用来nmap扫描我的服务器时,Docker 容器中运行的服务仍然可以访问(仍然是“开放”,而不是“过滤”)。

为什么 Firewalld 不过滤在我的 Docker 容器中运行的服务?

firewalld docker docker-compose

4
推荐指数
1
解决办法
1008
查看次数

Fedora 的 firewall-cmd 显示可用服务多于配置

所以是的,配置 Fedora 20 的 firewall-cmd。试图将入站流量限制为仅 http、https 和 ssh。但是,机器仍然响应 ping,并且 --get-service 命令显示了我不使用的东西的清单。

为什么会断线?

--get-service 命令是否准确,或者 --list-services 命令是否准确?

如果是后者,为什么ping通?

[root@build-node httpd]# firewall-cmd --get-service
amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
[root@build-node httpd]# firewall-cmd --get-active-zone
public
  interfaces: eth0 eth1 eth2
[root@build-node httpd]# firewall-cmd …
Run Code Online (Sandbox Code Playgroud)

fedora firewalld fedora-20

3
推荐指数
1
解决办法
2万
查看次数

firewalld 启用了 443 但它拒绝连接

我在使用 firewalld 的 centos 7 上。

我已经配置了 firewalld,所以 443 是打开的:

$ sudo firewall-cmd --zone=public --permanent --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: couchdb2 dhcpv6-client http https ssh
  ports: 443/tcp 5984/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 

$ sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
Warning: ALREADY_ENABLED: 443:tcp
success
Run Code Online (Sandbox Code Playgroud)

显然端口 443 是开放的,但是......

$ curl https://127.0.0.1:443
curl: (7) Failed connect to 127.0.0.1:443; Connection refused
Run Code Online (Sandbox Code Playgroud)

我还使用http://www.yougetsignal.com/tools/open-ports/ 上的网络工具对其进行了测试

我输入我的 IP 地址和端口 443 并得到: Closed Port 443 is closed on {my-ip} …

firewalld centos7

3
推荐指数
1
解决办法
2万
查看次数