CentOS7防火墙配置仅允许特定IP访问,需使用firewalld管理,首先启用防火墙:systemctl start firewalld && systemctl enable firewalld,添加允许的IP规则,如仅允许192.168.1.100访问SSH端口22:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept',设置默认拒绝策略:firewall-cmd --set-default-zone=drop,重载防火墙使规则生效:firewall-cmd --reload,最后检查规则:firewall-cmd --list-rich-rules,确保配置后测试访问限制,保障安全。
在服务器管理中,限制特定IP访问是保障安全的重要手段,CentOS7默认使用firewalld防火墙管理工具,本文将详细介绍如何通过firewalld配置规则,仅允许单个IP地址访问服务器的特定端口(如SSH、HTTP等),同时拒绝其他所有IP的访问。
环境准备
- 系统要求:CentOS7及以上版本(已安装
firewalld服务)。 - 权限要求:需使用
root用户或具有sudo权限的用户执行命令。 - 目标IP:明确需要允许访问的IP地址(
168.1.100)。
检查防火墙状态
首先确认firewalld服务是否正在运行,若未运行,需先启动并设置为开机自启:
# 检查firewalld服务状态 systemctl status firewalld # 若未启动,执行以下命令启动并开机自启 systemctl start firewalld systemctl enable firewalld
配置仅允许特定IP访问
以允许IP 168.1.100 访问SSH(默认端口22)为例,以下是具体步骤:

添加富规则(Rich Rule)
firewalld的“富规则”支持复杂的条件匹配,可通过--add-rich-rule参数添加允许特定IP访问的规则,语法如下:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="允许的IP地址" port protocol="TCP" port="端口号" accept'
示例(允许168.1.100访问SSH端口22):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
参数说明:
--permanent:规则永久生效(重启后不丢失),若临时测试可去掉此参数(重启后失效)。family="ipv4":指定IPv4协议(若需IPv6,改为family="ipv6")。source address="IP地址":允许访问的源IP。port protocol="tcp" port="端口号":允许访问的端口及协议(如tcp或udp)。accept:允许通过(若需拒绝,改为drop或reject)。
重新加载防火墙
添加规则后,需重新加载防火墙使规则生效:
firewall-cmd --reload
验证规则是否生效
(1)查看富规则列表
firewall-cmd --list-rich-rules
若成功添加,会显示类似以下内容:
rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept
(2)检查端口开放状态
firewall-cmd --list-ports
若规则生效,可能不会直接显示端口(因富规则优先级高于普通端口规则),可通过测试连接验证(见下文)。
(3)测试连接
-
从允许的IP(
168.1.100)访问:ssh root@服务器IP
应能正常连接。
-
从其他IP访问:
ssh root@服务器IP
应被拒绝(提示“Connection refused”或“Permission denied”)。
常见场景扩展
允许访问多个端口
若需允许同一IP访问多个端口(如SSH22和HTTP80),可添加多条规则或合并为一个规则:
# 合并规则(允许IP访问22和80端口) firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="80" accept'
或使用service参数(适用于标准服务,如ssh、http):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="http" accept'
允许访问所有端口(谨慎使用)
若需允许特定IP访问所有端口,可使用accept且不限制端口:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
删除已添加的规则
若需撤销允许的IP规则,可通过--remove-rich-rule删除:
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' firewall-cmd --reload
注意事项
- 默认拒绝策略:
firewalld默认采用“拒绝所有,允许匹配”的策略,因此只要添加了允许特定IP的规则,未匹配的IP会被自动拒绝。 - Zone优先级:规则默认添加到
public区域(默认区域),若需指定其他区域(如internal),可通过--zone=区域名参数指定,firewall-cmd --zone=internal --permanent --add-rich-rule='rule family="ipv4
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

