我一直在使用 iptables,但直到最近才使用firewalld。我使用以下命令通过 firewalld 启用了端口 3000 TCP:
# firewall-cmd --zone=public --add-port=3000/tcp --permanent
Run Code Online (Sandbox Code Playgroud)
但是我无法访问端口 3000 上的服务器。从外部框:
telnet 178.62.16.244 3000
Trying 178.62.16.244...
telnet: connect to address 178.62.16.244: Connection refused
Run Code Online (Sandbox Code Playgroud)
没有路由问题:对于从端口 80 到端口 8000 的端口转发,我有一个单独的规则,它在外部工作正常。我的应用程序肯定也在监听端口:
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 99 36797 18662/node
Run Code Online (Sandbox Code Playgroud)
firewall-cmd似乎也没有显示端口 -看看如何ports是空的。你可以看到我前面提到的转发规则。
# firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports: port=80:proto=tcp:toport=8000:toaddr=
icmp-blocks:
rich …Run Code Online (Sandbox Code Playgroud) 我知道我可以使用以下命令来阻止单个 IP:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='115.239.228.12' reject"
Run Code Online (Sandbox Code Playgroud)
但我需要阻止从 115.239.xx 开始的所有 ip
我有 Cent os 7。
谢谢
我将 ssh 端口更改为任意数字,并注意到 firewalld 不再允许 ssh 登录。我假设端口 22 是在 firewalld 的 ssh 服务定义中硬编码的。如果我允许 TCP 流量的新端口就足够了,还是应该为自定义 ssh 端口定义一个新服务?
我已将 nat 配置为使我的 CentOS 7 成为路由器。我已经使用 firewalld 来做到这一点。但不幸的是它不起作用。我不知道是什么导致了这个问题。我在 Virtual Box 中尝试了相同的配置,它正在工作。如果我在生产服务器中进行了相同的配置,则不会。
Eth0 ip——我的静态ip
掩码-255.255.252.0
网关-我的 ISP 网关
eth1
ip-192.168.1.30
掩码-255.255.255.0
1) 启用数据包转发
vi /etc/sysctl.conf
added “net.ipv4.ip_forward=1”
sysctl –p
Run Code Online (Sandbox Code Playgroud)
2)在firewalld中配置NAT
i) 将接口“eth1”集成到内部区域
Firewall-cmd --change-interface=eth1 --zone=internal --permanent
Run Code Online (Sandbox Code Playgroud)
• 伪装默认为“关闭”
ii) 将接口“eth0”集成到外部区域
Firewall-cmd --change-interface=eth0 --zone=external --permanent
Run Code Online (Sandbox Code Playgroud)
iii) 将“内部区域”更改为默认区域
Firewall-cmd --set-default-sone=internal --permanent
Run Code Online (Sandbox Code Playgroud)
iv) 添加 DNS 以通过“内部区域”
Firewall-cmd --zone=internal --add-service=dns –-permanent
Run Code Online (Sandbox Code Playgroud)
3) 保存防火墙配置
Firewall-cmd --reload
Firewall-cmd --complete-reload
Run Code Online (Sandbox Code Playgroud)
4)也在iptables里试过
Iptables –t nat –A POSTROUTING –o eth0 –j MASQUERADE
Iptables –A FORWARD –i eth1 –j ACCEPT
Echo …Run Code Online (Sandbox Code Playgroud) 正如我在该主题的评论中所问的那样:使用 firewalld 阻止除少数 ips 之外的所有 ips
我正在寻找一种方法来拒绝所有公共 IP,但我在 firewalld 的公共区域中除外。
目前,我的公共区域只有 ssh/http/https 服务,并且我指定了整个互联网所需的源 IP。
问题是我不明白为什么 firewalld 没有按要求过滤源 IP?
通常,根据我的理解,将源 IP 指定给区域,要求 Firewalld 丢弃除来自指定 IP 的请求之外的所有请求。
但是在我的机器上它不起作用,因为我可以在家中连接到不是指定源 IP 之一的机器。
有人建议创建一个名为“内部/其他”的新区域,因为服务器不在私有局域网上,所以我只有一个公共接口,所以我为什么要创建/使用另一个区域,因为公共区域应该删除所有 IP来源清单上指定的除外。
Firewalld 公共区域是否会自动向世界开放添加在其上的服务?
如果我创建第二个名为 internal 的区域,只有 ssh 服务和源 IP,然后将此区域链接到我的 eth0,firewalld 会阻止所有非“源”IP 吗?
当然,执行这样的过程会假设我从公共区域服务的服务中删除 ssh 服务。
我的防火墙是:
[root@groot ~]# firewall-cmd --list-all-zones
block
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
dmz
interfaces:
sources:
services: ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
drop (default)
interfaces:
sources:
services:
ports:
masquerade: …Run Code Online (Sandbox Code Playgroud) 我的 CentOS-7 VPS 中有两个接口。我想允许所有访问一个接口(eth1,这是我的专用网络)。我将 eth1 的区域更改为 home 如何添加规则以允许该接口上的所有内容?
我正在尝试用 3 台机器配置一个简单的测试环境:
环境的一个小表示:
|Kali|------------------(ens160) |Firewalld| (ens192)------------------- |Web Server|
10.99.0.2 10.99.0.1 | 10.4.1.1 10.4.1.2
Run Code Online (Sandbox Code Playgroud)
我可以从 10.99.0.2 ping 10.4.1.2,但是,只有当防火墙激活时,我无法从 10.99.0.2 获取 10.4.1.2 上的默认网页。
我尝试在固件上执行 tcpdump,我可以看到从 kali 到firewalld 的 http 请求,但随后firewalld 用 ICMP 数据包进行响应:ICMP host 10.4.1.2 unreachable - admin prohibited。据我所知,如果请求被阻止,则此 icmp 消息是从防火墙发送的。
这是两个区域的配置:public 和 dmz
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: http https
ports: 443/tcp 80/tcp
protocols:
masquerade: yes
forward-ports:
sourceports: …Run Code Online (Sandbox Code Playgroud) 我有一台运行 firewalld 的 Centos 7 服务器,以允许公共服务访问单独 VLAN(双 NIC)上的内部服务。我导入了一个 Windows VM,但我不知道需要设置什么规则来允许 GRE 通过 firewalld,而不是打开 1723。我在网上找到的所有问题和指南都没有在 Centos 7 机器上设置 PPTP 本身,而不是将其传递到路由 IP(在本例中为 Windows 服务器)。
我有几个 VM 运行在服务器(虚拟机管理器,VMM)之上。我想将服务器上的端口 80 转发到我的一台虚拟机的端口 80。主机运行 CentOS7,因此 firewalld 负责。显然,VMM 也使用 firewalld 来处理虚拟连接,所以我不能把它扔出窗口。
我基本上没有成功地复制了这个线程中的所有命令,归结为:
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.122.224
Run Code Online (Sandbox Code Playgroud)
或者
firewall-cmd --permanent --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=80 to-addr=192.168.122.224'
Run Code Online (Sandbox Code Playgroud)
firewalld 目前的状态如下:
[root@my-machine ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp8s0
sources:
services: ssh dhcpv6-client samba smtp http
ports: 25/tcp
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" forward-port port="80" protocol="tcp" to-port="80" to-addr="192.168.xxx.xxx"
Run Code Online (Sandbox Code Playgroud)
这是输出
iptables -L -n -v
Chain FORWARD (policy ACCEPT 0 packets, …Run Code Online (Sandbox Code Playgroud) 是否可以在 linux firewalld 中添加规则来拒绝整个主机(不是 ip 或 ip 范围)?
例如,我希望拒绝来自 my133y.org 的所有连接。
使用防火墙丰富的语言我可以删除 ip,但手册页中没有提供主机拒绝。
拒绝ip的例子
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.100.4/24" drop'
Run Code Online (Sandbox Code Playgroud)
当修改为:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="my133t.org" drop'
Run Code Online (Sandbox Code Playgroud)
我得到了错误:
Error: INVALID_ADDR: my133t.org
Run Code Online (Sandbox Code Playgroud) 我之前问过如何在运行wireguard服务的VPS上转发端口,以ufw和iptables作为管理。
我必须这样做:
(56000是我选择的随机端口)(10.66.66.2是wireguard的内部ip)
ufw route allow proto tcp to 10.66.66.2 port 56000
Run Code Online (Sandbox Code Playgroud)
然后我会这样做来实际使用 iptables 转发端口:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 56000 -j DNAT --to-destination 10.66.66.2
Run Code Online (Sandbox Code Playgroud)
我有办法实现这一firewalld目标吗?这样我就不必将转发分成两个地方?
这里是否使用伪装/是否需要?因为我不知道它有什么作用,也不知道它有什么用。
VPSwireguardwg0conf供参考:
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 49503
PrivateKey = ***
[Peer]
PublicKey = ***
PresharedKey = ***
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
Run Code Online (Sandbox Code Playgroud) 我已经在我公司局域网内的服务器上设置了基本的 tomcat 网站(tomcat 8.0.3)。在我的工作计算机上,如果我尝试通过在 google chrome 中键入来访问该网站,则它无法正常工作。
运行Tomcat服务器的计算机IP为192.1xx.132.125:8080. 我的工作电脑的 IP 是192.1xx.129.75.
我能够将我的工作 PC ping 到服务器。如果我http://192.1xx.132.125:8080在 PC 上的 google chrome 浏览器上输入,则会出现以下错误。

有人可以指出为什么会这样吗?另外我的网络服务器是无头的。我可以使用 .I 访问该服务器上的网页curl。由于这是一个非常规端口号,我是否需要更新服务器上的 IP 表?
我已经运行了这个命令
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT -m comment --comment "Tomcat Server port"
Run Code Online (Sandbox Code Playgroud)
如中所述 http://serverfault.com/questions/341804/opening-up-port-8080-in-centos