Linux系统通过firewall限制或开放IP及端口

优快云博客转载示例
本文为一篇从优快云博客平台转载的示例文章,详细内容请访问原文链接获取更全面的信息。
<think>我们正在配置Linux防火墙(firewalld)以仅允许特定IP访问特定端口。根据提供的引用信息,我们可以使用`firewall-cmd`命令添加富规则(richrule)来实现。步骤:1.添加一条富规则,允许指定源IP地址访问特定端口。2.使规则永久生效(使用`--permanent`选项)。3.重新加载防火墙配置,使更改立即生效。具体命令如下(以允许IP地址192.168.1.100访问TCP端口3307为例):```bashsudofirewall-cmd--permanent--add-rich-rule='rulefamily="ipv4"sourceaddress="192.168.1.100"portprotocol="tcp"port="3307"accept'sudofirewall-cmd--reload```解释:-`--permanent`:使规则永久有效,否则重启后会失效。-`--add-rich-rule`:添加富规则。-`rulefamily="ipv4"`:指定IPv4规则(如果是IPv6则用ipv6)。-`sourceaddress="192.168.1.100"`:指定源IP地址。-`portprotocol="tcp"port="3307"`:指定端口和协议(tcpudp)。-`accept`:允许访问。如果需要允许多个IP,可以重复执行上述命令(每次一个IP使用脚本批量添加。验证规则:```bashsudofirewall-cmd--list-rich-rules```注意:默认情况下,防火墙会阻止所有未明确允许的流量。因此,添加此规则后,只有指定的IP可以访问端口,其他IP访问将被拒绝。如果需要删除规则,可以使用`--remove-rich-rule`选项,例如:```bashsudofirewall-cmd--permanent--remove-rich-rule='rulefamily="ipv4"sourceaddress="192.168.1.100"portprotocol="tcp"port="3307"accept'sudofirewall-cmd--reload```引用中提供了多个类似的例子(引用[1],[4],[5])[^1][^4][^5]。另外,引用[5]还提供了一个脚本示例,可以批量添加IP并删除旧规则[^5]。因此,我们可以根据实际需求,选择逐个添加使用脚本批量处理。重要提示:在配置防火墙时,请确保不要意外封锁自己的访问(例如通过SSH连接时)。建议在操作时保持当前连接允许的IP(如当前SSH连接的IP者通过本地控制台操作。如果配置过程中出现错误,可以使用`firewall-cmd--reload`重新加载之前的永久配置(注意:未使用`--permanent`的临时规则会丢失)者使用`--remove-rich-rule`删除规则。总结:通过添加富规则,我们可以精确控制特定IP对特定端口访问。</think>### 配置防火墙仅允许特定IP访问特定端口Linux 中使用 `firewalld` 配置防火墙仅允许指定 IP 访问特定端口的步骤如下: #### 1. **添加富规则(Rich Rule)** ```bash # 允许单个IP访问特定端口(示例:允许 192.168.1.100 访问 TCP 端口 3307) sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3307" protocol="tcp" accept' ``` #### 2. **批量添加多个IP(可选)** ```bash # 创建IP列表(分号分隔) IP_LIST="192.168.1.100;192.168.1.101;10.0.0.50" # 通过脚本批量添加 for ip in $(echo $IP_LIST | tr ";" "\n"); do sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=$ip port port=3307 protocol=tcp accept" done ``` #### 3. **应用配置并验证** ```bash # 重新加载防火墙使规则生效 sudo firewall-cmd --reload # 查看已配置的富规则 sudo firewall-cmd --list-rich-rules ``` 输出示例: ``` rule family="ipv4" source address="192.168.1.100" port port="3307" protocol="tcp" accept ``` #### 4. **额外安全措施** ```bash # 关闭该端口的默认开放(如果之前已开放) sudo firewall-cmd --permanent --remove-port=3307/tcp # 拒绝所有其他IP访问(通过默认策略隐式实现) # 富规则外的流量会被默认策略拦截 ``` #### 关键参数说明 - `--permanent`:永久生效(重启后保留) - `source address`:指定允许的源IP - `port port`:目标端口- `protocol`:协议类型(tcp/udp) - `accept`:允许访问动作 > **注意事项** > - 操作前确保当前会话IP已被允许,避免被防火墙阻断 > - 生产环境建议通过 `--timeout` 参数先测试临时规则[^1][^4] > - 复杂规则可使用 XML 文件直接编辑 `/etc/firewalld/zones/public.xml`[^5] #### 验证连接 ```bash # 从授权IP测试端口连通性 nc -zv 服务器IP 3307 # 从未授权IP测试(应被拒绝) nc -zv 服务器IP 3307 # 返回"Connection timed out" ``` 通过以上步骤,防火墙将仅允许指定IP访问目标端口,其他所有连接请求会被自动拒绝[^1][^4][^5]。 --- ### 相关问题 1. **如何临时允许某个IP访问端口?** > 去掉 `--permanent` 参数并添加 `--timeout=秒数`,例如: > `sudo firewall-cmd --add-rich-rule='rule...' --timeout=300`(300秒后自动失效)[^4] 2. **如何批量删除已配置的IP白名单?** > 使用脚本清除规则: > ```bash > sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="IP地址" port port="端口" protocol="tcp" accept' > sudo firewall-cmd --reload > ``` 3. **如何允许整个网段访问端口?** > 将 `source address` 改为 CIDR 格式: > ```bash > sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3307" protocol="tcp" accept' > ``` 4. **配置后服务无法访问如何排查?** > 检查顺序: > ① `sudo firewall-cmd --list-all` 确认规则生效 > ② `systemctl status firewalld` 检查防火墙状态 > ③ `journalctl -xe` 查看系统日志[^2][^3] [^1]: Linux只允许特定IP访问特定端口 [^2]: Linux防火墙firewall只允许特定IP访问 [^3]: Linux设置防火墙,只允许特定IP访问指定端口 [^4]: firewall防火墙仅允许某个ip访问主机指定端口 [^5]: 允许指定ip访问指定端口
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值