我是新来的,所以如果我问一些愚蠢的事情,请原谅我。
我在 CentOS 8 上创建了一个 DO droplet。安装 firewalld 后,我检查了它的状态并给出了警告。
4 月 24 日 05:56:31 centos-s-1vcpu-1gb-blr1-01 firewalld[2956]:警告:AllowZoneDrifting 已启用。这被认为是不安全的配置选项。它将在将来的版本中删除。
我有一些 Linux 的基本知识,但我对 firewalld 一无所知。如果有人能向我解释什么AllowZoneDrifiting是,那就太好了。
谢谢!
在nginx-proxyDocker容器内部(下面有更多信息),我总是看到每个连接都有相同的IP地址:( 172.18.0.1这是nginx-proxy网络网关).例如:
nginx.1 | www.my-site.tld 172.18.0.1 - - [28/Nov/2017:17:22:21 +0000] "GET /some/path HTTP/2.0" 200 46576 "https://www.my-site.tld/some/path" "Mozilla/5.0 (Linux; Android 4.4.2; PSP5507DUO Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 YaBrowser/17.10.0.446.00 Mobile Safari/537.36"
Run Code Online (Sandbox Code Playgroud)
无论我是从外部网络,本地机器,还是从服务器(主机)本身发出请求,IP地址始终是172.18.0.1.
我需要的是看到真正的客户端IP.
我搜索了很多,并尝试了不同的解决方案,但没有一个适合我.我尝试了以下方法:
--userland-proxy=false(没有运气);--net=host(根本不是解决方案,也不起作用).相关链接:
那么,有什么想法吗?似乎是iptables路由问题或内部Docker错误.无论如何,它肯定与Docker有关,因为以下显示正确的远程用户IP:
[root@server]# nc -lv 12345
[user@remote-client]$ nc -vz MY.IP.ADDRESS.HERE 12345
Run Code Online (Sandbox Code Playgroud)
很奇怪!
现在我将提供有关系统的完整信息,请耐心等待.:)
我安装了Centos 7.4和Docker:
# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
# uname -r
3.10.0-693.5.2.el7.x86_64
# …Run Code Online (Sandbox Code Playgroud) networking docker docker-networking firewalld jwilder-nginx-proxy
我已经设置了一个 pi-hole docker 容器并在 CentOS7 上公开了 dns 端口和端口 80。然而,这些端口现在可用于所有来源,这不是很方便,因为它在 VPS 上运行。
所以我试图让 firewallD 过滤到我的 docker 容器的流量。
所以我的 docker 容器运行如下:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18881454da0c pihole/pihole:latest "/s6-init" 24 hours ago Up About an hour (healthy) 0.0.0.0:53->53/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:53->53/udp pihole
Run Code Online (Sandbox Code Playgroud)
在 firewallD 上,我设置了以下 acl(通过此过滤器可以很好地过滤到 CentOS 的流量):
sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: docker0
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="<home ip>/32" accept
Run Code Online (Sandbox Code Playgroud)
我已经将 docker0 …
我使用 ansible 在 centos 7 中向 firewalld 添加了一些规则。但我必须重新加载 firewalld 守护进程,这样服务才能正常工作。有什么想法吗?
这是我的ansible代码:
- name: Add port to firewalld
firewalld:
port: "{{ item }}"
permanent: yes
state: enabled
when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux'
loop:
- 8080/tcp
- 8000/tcp
- 8090/tcp
- 8040/tcp
Run Code Online (Sandbox Code Playgroud) 我有一个 CentOS 7 服务器,它运行了 600 多天,直到最近重新启动,之后传入的 Web 请求接收到 HTTP523(源无法访问)错误代码(通过 Cloudflare,如果这有区别?)除非我停止了 firewalld服务。没有firewalld,事情运行良好,但我不想让它被禁用!
我试过以各种顺序停止docker和firewalld重新启动它们,但523除非我停止,否则会发生相同的错误firewalld。
/var/log/firewalld 包含一些可能有帮助的警告:
WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i br-8acb606a3b50 -o br-8acb606a3b50 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).WARNING: AllowZoneDrifting is enabled. This is considered …我试图将以下内容添加到 Ansible 剧本中:
firewall-cmd --permanent --new-zone dockerc
firewall-cmd --permanent --zone dockerc --add-source 172.17.0.0/16
firewall-cmd --permanent --zone dockerc --add-port 8443/tcp
firewall-cmd --permanent --zone dockerc --add-port 53/udp
Run Code Online (Sandbox Code Playgroud)
但根据http://docs.ansible.com/ansible/firewalld_module.html区域没有添加新区域的选项。
有谁知道是否可以dockerc使用 Ansible添加为新区域?
我在 centos7 docker 容器上安装了 nginx。
端口 80 可从外部使用,尽管该端口未在防火墙中打开。公共区域规则如下:
# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eno3
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
Run Code Online (Sandbox Code Playgroud)
但是 DOCKER 链中这个端口有一条自动规则:
# iptables -L DOCKER
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http
Run Code Online (Sandbox Code Playgroud)
如何从外部关闭此端口?我已经运行了该命令,但没有帮助:
# firewall-cmd --zone=public --remove-port=80/tcp --permanent
Warning: NOT_ENABLED: 80:tcp
success
Run Code Online (Sandbox Code Playgroud)
我已阅读文档 - https://docs.docker.com/engine/userguide/networking/ 但仍然不明白..实际上我只需要为我指定的网络 1.2.3.4/24 打开此端口 80。
来自firewalld手册页:
\n\n\n\n\n\xe2\x80\x93permanent [\xe2\x80\x93zone=zone] --set-target=target\n 设置永久区域的目标。目标是以下之一:默认、接受、删除、拒绝
\n
默认目标是 REJECT。是否可以将默认目标更改为 DROP?如果不是,为什么总是存在 REJECT 的默认选项?
\n\n我使用的是CentOS 7.4
\n\n我知道我可以以任何我想要的方式配置防火墙,而无法更改默认目标,但我想知道如何更改它(如果可能)。
\n我买了一个 VPS 并在其上构建了一个 shadowsocks 服务器。它运行良好大约 2 个月,突然无法工作,即我无法使用它来克服 GFW。所以我检查了服务器,重新安装了所有东西,检查了防火墙,但仍然无法解决问题。请帮我解决这个难题!
首先,我可以通过 ssh 连接到服务器。我使用的是 mac,服务器操作系统是 CentOS7。
我试图从 mac ping 服务器,它连接了。
PING vultr (108.61.215.163): 56 data bytes
64 bytes from 108.61.215.163: icmp_seq=0 ttl=50 time=485.473 ms
64 bytes from 108.61.215.163: icmp_seq=1 ttl=50 time=407.054 ms
64 bytes from 108.61.215.163: icmp_seq=2 ttl=50 time=429.089 ms
64 bytes from 108.61.215.163: icmp_seq=3 ttl=50 time=552.046 ms
^C
--- vultr ping statistics ---
5 packets transmitted, 4 packets received, 20.0% packet loss
round-trip min/avg/max/stddev = 407.054/468.416/552.046/56.118 ms
Run Code Online (Sandbox Code Playgroud)
然后我用我在 shadowsocks 中定义的特定端口 telnet 它,但它无法连接。 …
我意识到最近 docker 添加了与 firewalld 的集成,我只想使用 firewalld 而不是 iptables 无聊的规则和链来设置我的服务器。
这是我的 docker zone 输出:
root@test:~# sudo firewall-cmd --zone=docker --list-all
docker (active)
target: DROP
icmp-block-inversion: no
interfaces: br-0a659f93a5b6 br-be2e44b2b069 docker0
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Run Code Online (Sandbox Code Playgroud)
我使用上述配置运行了多个服务,包括 Laravel(nginx 端口绑定 80 -> 5050)、mysql 等。我希望任何人都无法访问端口 5050、3306(mysql),但不幸的是防火墙不起作用,一切都是开放的,可以从外部访问。
现在如何真正配置 firewalld 以丢弃除允许端口之外的每个请求?