应对安全检查,服务器启用防火墙,关闭端口访问,以IP白名单方式对内开发
在Linux系统中设置防火墙端口通常涉及到以下步骤。这里以常用的firewalld服务为例进行说明,适用于大多数现代Linux发行版如RHEL、CentOS、Fedora等。如果您使用的是较旧的系统或配置了其他防火墙软件(如iptables),操作可能会有所不同。以下是针对firewalld的端口设置流程。
一、检查并启动防火墙服务
确保防火墙服务(firewalld)正在运行,并根据需要进行启动或设置为开机自启。
1、查看防火墙状态:
firewall-cmd --state
如果输出为running,则防火墙已启动;若为not running,则需启动防火墙。
2、启动防火墙(如未运行):
systemctl start firewalld
3、设置防火墙开机自启(如尚未设置):
systemctl enable firewalld
二、开放特定端口
要允许外部访问特定端口(例如,这里以开放TCP端口8080为例),执行以下命令:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
解释:
--zone=public 指定作用域为公共区域(默认区域)。根据您的网络配置,可能需要选择其他区域,如internal、dmz等。
--add-port=8080/tcp 表示添加一个允许访问的端口,此处为TCP协议的8080端口。
--permanent 参数表示该规则应持久化保存,即在系统重启后仍然生效。
三、重新加载防火墙配置
更改防火墙规则后,需要重新加载配置以使改动生效:
firewall-cmd --reload
四、验证端口是否已开放
1、查看防火墙中已开放的端口列表:
firewall-cmd --zone=public --list-ports
输出应包含您刚刚添加的端口(如8080/tcp)。
2、使用netstat命令确认端口监听状态:
netstat -tuln
在输出中查找与目标端口(如8080)相关联的行,确认其处于监听(LISTEN)状态。
五、关闭特定端口
如果需要关闭已开放的端口,可以使用类似命令移除端口规则:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
注意事项
对于生产环境,请谨慎管理防火墙规则,仅开放必要的端口以保证系统安全。
如果您的应用程序依赖其他协议(如UDP),请将上述命令中的tcp替换为udp。
如果系统使用的是SELinux,确保相应的端口和应用程序在SELinux上下文中也被正确配置和授权,否则即使防火墙允许,也可能因为SELinux限制而无法访问。
遵循以上步骤,您应该能够成功地在Linux系统中使用firewalld防火墙管理端口设置。
六、IP白名单
1、为端口新增白名单
iptables -I INPUT -m iprange --src-range 10.94.2.0-10.94.2.255 -p tcp --dport 3306 -j ACCEPT
该iptables命令是用来在INPUT链的开始插入一条新的规则,用于允许指定IP范围内的主机通过TCP协议访问3306端口。命令详细解释如下:
-
iptables -I INPUT
: 使用-I
参数表示在INPUT链的头部插入一条新规则。 -
-m iprange
: 使用iprange
模块来处理IP范围。 -
--src-range 10.94.2.0-10.94.2.255
: 指定源IP地址范围从10.94.2.0到10.94.2.255。这意味着所有在这个范围内IP地址的主机都将受到此规则的影响。 -
-p tcp
: 指定使用的协议为TCP。 -
--dport 3306
: 表示目标端口号为3306,即只允许访问此端口的流量。 -
-j ACCEPT
:-j
参数后面跟的是动作(target),这里设为ACCEPT,表示对满足上述条件的流量予以放行。
综上所述,这条命令的作用是:允许IP地址在10.94.2.0至10.94.2.255范围内的主机通过TCP协议访问本机的3306端口。
2、查看当前白名单
iptables -L --line-numbers
iptables -nL --line-numbers
上述命令将会显示所有的iptables规则,包括INPUT、OUTPUT、FORWARD链的规则,并且不解析IP地址到主机名(-n 参数)。通过查看输出结果,你可以找到类似这样的规则,它们指示了白名单中的IP地址。
3、删除当前白名单
1、删除已知规则编号的规则:
如果你已经通过iptables -L --line-numbers
命令查看规则并得知了规则的编号,可以直接通过编号删除它:
其中 <rule_number>
是你想删除规则的行号。
sudo iptables -D INPUT <rule_number>
例子:删除第二行
# 例子:删除第二行
sudo iptables -D INPUT 2
2、根据规则内容删除:
如果只知道规则的一部分内容,比如允许特定IP地址访问,可以尝试按条件删除:
# 删除允许特定IP地址访问的规则
sudo iptables -D INPUT -s <specific_ip_address> -j ACCEPT
例如,删除允许10.0.0.1访问所有端口的规则:
sudo iptables -D INPUT -s 10.0.0.1 -j ACCEPT
或者删除允许一个IP地址段访问特定端口的规则:
sudo iptables -D INPUT -s 10.0.0.0/24 -p tcp --dport 80 -j ACCEPT
注意:
- 在执行删除操作前,请确保你完全理解你正在删除的规则,以免误删其他重要规则。
- 删除规则后,为了使更改永久生效,尤其是在系统重启后仍然生效,需要保存规则到配置文件(如在Red Hat/CentOS系统中):
sudo iptables-save > /etc/sysconfig/iptables
对于使用firewalld管理防火墙的系统,删除白名单规则的方法有所不同:
# 删除rich规则(假设已有对应的rich rule)
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="<specific_ip_address>" accept'
sudo firewall-cmd --reload
记得替换 <specific_ip_address>
为实际的IP地址。