只允许特定的IP访问特定的端口

邱秋 • 2024年07月05日 • 阅读:106 • linux

业务需求 , 只允许特定的IP访问特定的端口 .

一步到位

1.先要移除已经开放的端口,如443

firewall-cmd --zone=public --remove-port=443/tcp --permanent

2.允许指定的IP或者IP段访问此端口

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="173.245.48.0/20" port protocol="tcp" port="443" accept'

3.重启

firewall-cmd --reload

–permanent永久生效,没有此参数重启后失效

只允许特定的IP 访问Server 特定的端口8080.

查看/开启/关闭防火墙

// 查看防火墙状态
systemctl status firewalld
// 开启防火墙
systemctl start firewalld
// 关闭防火墙
systemctl stop firewalld
// 开机启动
systemctl enable firewalld
// 开机关闭
systemctl disable firewalld

查看/开放/关闭端口

// 查询打开的端口
firewall-cmd --zone=public --list-ports

//开放指定端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent 
//重新载入一下防火墙设置,使设置生效
firewall-cmd --reload

//关闭端口8888
firewall-cmd --zone=public --remove-port=8888/tcp --permanent
//重新载入一下防火墙设置,使设置生效
firewall-cmd --reload

给指定的IP开放/关闭指定的端口

// 允许ip127.0.0.1访问8888端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="8888" accept"
//重新载入一下防火墙设置,使设置生效
firewall-cmd --reload
//查看已设置规则
firewall-cmd --zone=public --list-rich-rules

//限制IP为127.0.0.1的地址禁止访问8888端口即禁止访问机器
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="8888" reject"

//删除已设置规则
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address=" 127.0.0.1" port protocol="tcp" port="8888" accept"

规则的持久化位置

以上配置都会持久化的存储在一个文件里面,使用如下命令查看

vi /etc/firewalld/zones/public.xml

//查看防火墙清单,很详细
firewall-cmd --list-all

//通过如下命令查看8888是否生效
firewall-cmd --zone=public --query-port=8888/tcp

//批量开放或限制端口
//批量开放端口,如从7000到7005这之间的端口我们全部要打开
firewall-cmd --zone=public --add-port=7000-7005/tcp --permanent
firewall-cmd --reload

//批量限制端口为
firewall-cmd --zone=public --remove-port=7000-7005/tcp --permanent
firewall-cmd --reload

使用 firewall-cmd 配置

  1. 允许特定 IPv4 地址访问端口:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.2" port protocol="tcp" port="8080" accept'

2.拒绝其他 IPv4 地址访问该端口:

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" port protocol="tcp" port="8080" drop'

3.允许特定 IPv6 地址访问端口:

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" source address="2001:db8::1" port protocol="tcp" port="8080" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" source address="2001:db8::2" port protocol="tcp" port="8080" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" source address="2001:db8::3" port protocol="tcp" port="8080" accept'

4.拒绝其他 IPv6 地址访问该端口:

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" port protocol="tcp" port="8080" drop'

5.重新加载 firewalld 配置以使更改生效:

sudo firewall-cmd --reload

验证规则

sudo firewall-cmd --list-all --zone=public

使用 iptables 配置

使用 iptables 配置 IPv4 地址

  1. 允许特定IPv4地址访问端口:
sudo iptables -A INPUT -p tcp -s 192.168.1.1 --dport 8080 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 192.168.1.2 --dport 8080 -j ACCEPT
  1. 拒绝其他IPv4地址访问该端口:
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP

使用 ip6tables 配置 IPv6 地址

  1. 允许特定IPv6地址访问端口:
sudo ip6tables -A INPUT -p tcp -s 2001:db8::1 --dport 8080 -j ACCEPT
sudo ip6tables -A INPUT -p tcp -s 2001:db8::2 --dport 8080 -j ACCEPT
  1. 拒绝其他IPv6地址访问该端口:
sudo ip6tables -A INPUT -p tcp --dport 8080 -j DROP

保存配置

保存iptablesip6tables配置,以确保重启后规则仍然存在:

  • Debian/Ubuntu:
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
  • CentOS/RHEL:
sudo service iptables save
sudo service ip6tables save

我,秦始皇,打钱!