只允许特定的IP访问特定的端口
业务需求 , 只允许特定的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 配置
- 允许特定 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 地址
- 允许特定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
- 拒绝其他IPv4地址访问该端口:
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
使用 ip6tables
配置 IPv6 地址
- 允许特定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
- 拒绝其他IPv6地址访问该端口:
sudo ip6tables -A INPUT -p tcp --dport 8080 -j DROP
保存配置
保存iptables
和ip6tables
配置,以确保重启后规则仍然存在:
- Debian/Ubuntu:
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
- CentOS/RHEL:
sudo service iptables save
sudo service ip6tables save