iptables防火墙屏蔽指定ip的端口

本文介绍了如何使用iptables在Hadoop服务器上屏蔽特定IP并逐步放开端口以允许客户端程序进行通信。通过查看和编辑INPUT和OUTPUT链的规则,允许SSH的22端口,然后逐步放开8020(Namenode)和1004(Datanode)等端口,以实现客户端的正常下载。在测试完成后,需谨慎删除规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为需要测试客户端程序与hadoop服务器之间正常通信需要开通的端口, 所以在hadoop各服务器上使用iptables防火墙屏蔽了测试客户端程序的ip和所有端口。然后,根据报错信息提示的端口号来逐步放开直到能正常通信下载文件。

  1. 在服务器端屏蔽指定ip访问所有端口
    在这里插入图片描述
    在这里插入图片描述
#查看防火墙状态,没启动的要启动
service iptables status
service iptables start

#查看已有规则和规则号,iptables的链是从上到下匹配到就结束
iptables -nL --line-number
# ssh用的22端口不要限制
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --dport 22 -j ACCEPT

#尾部插入一条记录,拒绝ip访问除了22端口以外的所有端口
iptables -A INPUT -s 192.1.217.54 -p tcp -m tcp ! --dport 22  -j REJECT

  1. 测试客户端程序报错端口,然后再放开单个端口
    报错无法和namenode通信,需要放开8020端口
    在这里插入图片描述
#iptables -nL --line-number 查看规则在第几行
# 在第1行插入一条放行的端口,一定要插入在上面那个REJECT屏蔽ip的上面,因为iptables的链是从上到下匹配到就结束
iptables -I INPUT 1 -s 192.1.217.54 -p tcp -m tcp --dport 8020  -j ACCEPT
# 命令说明, 
# -I代表插入规则
# INPUT代表是INPUT进入来的链路
# -s 是匹配源,这里是指定了ip
# -p tcp 协议类型,指定了匹配tcp的
# 

可以读取目录了,继续测试get下载文件,报错1004端, 继续放开1004端口,和上面放开端口的方法一样,iptables -I INPUT 1 -s 192.1.217.54 -p tcp -m tcp --dport 1004 -j ACCEPT。这个端口是datanode的服务端口,需要把hadoop集群的所有datanode机器防火墙上1004端都做处理,因为你也不知道文件会在哪个datanode上保存着。

#iptables -nL --line-number 查看规则在第几行
#在第1行插入一条放行的端口,一定要插入在上面那个REJECT屏蔽ip的上面,因为iptables的链是从上到下匹配到就结束
iptables -I INPUT 1 -s 192.1.217.54 -p tcp -m tcp --dport 1004  -j ACCEPT

开放namenode的8020和datanode的1004端口后,可以下载hdfs文件了。
测试完成后删除规则

#删除规则,谨慎操作, iptables -nL --line-number查看规则前的编号
iptables -D INPUT 规则编号

在这里插入图片描述

简单介绍下防火墙的使用:
#根据网络的进出链路,有几个可以增加规则进行控制的地方,一般只会用到INPUT和OUTPUT。
#可以对规则进行指定行号插入-I,修改-R也可以新增-A
#规则内有匹配规则,
#规则匹配后的处理是ACCEPT放行还是REJECT拒绝还是DROP直接抛弃
#在一个链路内,是匹配到规则就结束

  1. 参考
    [1]https://blog.csdn.net/wxh0000mm/article/details/106239509
    [2]https://blog.csdn.net/weixin_53139887/article/details/122418822
    [3]https://blog.csdn.net/choukuad381324/article/details/100945546
    [4]https://blog.csdn.net/shy_snow/article/details/129020171
    [5]https://blog.csdn.net/waghaiping/article/details/118048947
    [6]https://blog.51cto.com/benny27/1952689
    [7]https://blog.csdn.net/m0_59432158/article/details/120369973
### 使用 IPTABLES 配置特定 IP访问端口 为了实现通过 IPTABLES 允许特定 IP访问某个端口的功能,可以按照以下方法操作: #### 1. 创建规则以允许指定IP访问目标端口 可以通过 `-s` 参数来定义源地址范围,并结合 `--dport` 来限定目标端口号。例如,如果要允许来自 IP 范围 `192.168.1.0/24` 的设备访问端口 `3306`,则可执行如下命令: ```bash iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT ``` 此命令的作用是接受来自子网 `192.168.1.0/24` 中的所有主机对端口 `3306` 的 TCP 连接请求[^1]。 #### 2. 禁止其他所有 IP 访问端口 为了让上述规则生效并确保安全性,还需要阻止除指定 IP 段外的所有流量尝试连接到这个端口。这一步骤通常放在最后一条匹配规则之后完成: ```bash iptables -A INPUT -p tcp --dport 3306 -j DROP ``` 这条指令会丢弃任何未被前面规则显式许可的数据包到达端口 `3306` 上[^2]。 #### 完整脚本实例 下面给出一个完整的例子用于演示如何设置 MySQL 数据库服务器(默认监听于 3306 端口),使其仅仅能够由本地网络内的客户端机器进行远程管理而拒绝外部世界的未经邀请者接入: ```bash #!/bin/bash # 清理现有规则 (谨慎使用, 可能中断当前会话) iptables -F # 开放 SSH(22号端口),防止断开SSH连接 iptables -I INPUT -p tcp --dport 22 -j ACCEPT # 授权局域网中的计算机访问数据库服务 iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT # 屏蔽其余一切针对3306端口的入站请求 iptables -A INPUT -p tcp --dport 3306 -j DROP # 启用回环接口通信以及已建立或相关联的链接保持畅通无阻状态 iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 默认策略设为DROP以防万一遗漏某些潜在威胁项 iptables -P INPUT DROP ``` 以上脚本首先清除了现有的防火墙规则;接着开放了必要的 SSH 和 MySQL 数据库服务入口;再设定好内外部防护屏障后才最终确立起整个系统的安全基线架构体系结构[^3]。 ### 注意事项 - 在实际部署前务必测试新加入的过滤条件不会误伤合法业务流程。 - 如果操作系统重启可能会丢失临时性的 iptables 修改成果,因此建议保存配置文件或者利用工具如 `service iptables save` 命令永久保留更改记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值