一、使用 firewalld设置和控制 IP 集
要查看 firewalld 支持的 IP 设置类型列表,以 root 用户身份输入以下命令。
# firewall-cmd --get-ipset-types
hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net
二、使用命令行客户端配置 IP 设置选项
可以在 firewalld 区域中使用 IP 集作为源,也可以用作富规则的来源。在 Red Hat Enterprise Linux 7 中,首选的方法是在直接规则中使用通过 firewalld 创建的 IP 集。
要列出永久环境中 firewalld 已知的 IP 集,以 root 用户身份运行以下命令:
# firewall-cmd --permanent --get-ipsets
要添加新 IP 集,以 root 用户身份使用永久环境运行以下命令:
# firewall-cmd --permanent --new-ipset=honey-pot-net --type=hash:net
# firewall-cmd --permanent --new-ipset=honey-pot-ip --type=hash:ip
上一命令为 IPv4 创建了名称 test 和 hash:net 类型的新 IP 设置。要创建用于 IPv6 的 IP 集,请添加 --option=family=inet6 选项。要使新设置在运行时环境中有效,请重新加载 firewalld。使用以下命令以 root 用户身份列出新 IP 设置:
# firewall-cmd --permanent --get-ipsets
honey-pot-ip honey-pot-net
要获取有关 IP 集的更多信息,以 root 用户身份运行以下命令:
# firewall-cmd --permanent --info-ipset=honey-pot-ip
honey-pot-ip
type: hash:ip
options:
entries:
请注意,IP 集目前没有任何条目。要在 test IP 集中添加一个条目,以 root 用户身份运行以下命令:
# firewall-cmd --permanent --ipset=honey-pot-ip --add-entry=192.168.0.1
success
以上命令将 IP 地址 192.168.0.1 添加到 IP 集合中。要获取 IP 集合中当前条目列表,以 root 用户身份运行以下命令:
# firewall-cmd --permanent --ipset=honey-pot-ip --get-entries
192.168.0.1
生成包含 IP 地址列表的文件,例如:
# cat > iplist.txt <<EOL
192.168.0.2
192.168.0.3
192.168.1.0/24
192.168.2.254
EOL
包含 IP 集合 IP 地址列表的文件应该每行包含一个条目。以 hash、分号或空行开头的行将被忽略。
要添加 iplist.txt 文件中的地址,以 root 用户身份运行以下命令:
# firewall-cmd --permanent --ipset=honey-pot-ip --add-entries-from-file=iplist.txt
success
要查看 IP 集合的扩展条目列表,以 root 用户身份运行以下命令:
# firewall-cmd --permanent --ipset=honey-pot-ip --get-entries
192.168.0.1
192.168.0.2
192.168.0.3
192.168.1.0/24
192.168.2.254
要从 IP 集合中删除地址并检查更新的条目列表,以 root 用户身份运行以下命令:
# firewall-cmd --permanent --ipset=honey-pot-ip --remove-entries-from-file=iplist.txt
success
# firewall-cmd --permanent --ipset=honey-pot-ip --get-entries
192.168.0.1
# firewall-cmd --permanent --ipset=honey-pot-ip --get-entries
192.168.0.1
您可以将 IP 集合作为一个源添加到区,以便处理所有来自 IP 集合中列出的任意地址的网络流量。例如,要将 test IP 集作为源添加到 drop 区域,以丢弃来自测试 IP 集合中列出的所有条目的所有数据包,以 root 用户身份运行以下命令 :
# firewall-cmd --permanent --zone=drop --add-source=ipset:honey-pot-ip
success
源中的 ipset: 前缀显示 firewalld 表明源是 IP 集,而不是 IP 地址或地址范围。
只有 IP 集的创建和删除仅限于永久环境,所有其他 IP 设置选项也可以在运行时环境中使用,而无需 --permanent 选项。
三、实例:firewalld ipset 封禁ip
3.1 创建ipset
# firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:net
执行完命令可在/etc/firewalld/ipsets路径下看到生成的blacklist.xml文件。
# ls /etc/firewalld/ipsets
blacklist.xml honey-pot-ip.xml honey-pot-net.xml
3.2 添加/删除要禁止的ip或ip段
#添加ip
firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=192.168.101.60
#添加ip段
firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=192.168.100.0/24
#删除ip
firewall-cmd --permanent --zone=public --ipset=blacklist --remove-entry=192.168.101.60
#删除ip段
firewall-cmd --permanent --zone=public --ipset=blacklist --remove-entry=192.168.100.0/24
3.3 封禁ipset
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source ipset=blacklist drop"
3.4 允许访问ipset
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="permit_22_input" port port=22 protocol=tcp accept'
3.5 firewalld ipset维护命令
列出所有ipset
firewall-cmd --get-ipsets
列出set下所有的entry
firewall-cmd --ipset=blacklist --get-entries
打印set的路径
firewall-cmd --permanent --path-ipset=blacklist
删除set
firewall-cmd --permanent --delete-ipset=blacklist
要从 iplist.txt 文件中添加地址
firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=iplist.txt
firewall-cmd --permanent --ipset=blacklist --remove-entries-from-file=iplist.txt
从iplist.txt文件中批量删除地址
firewall-cmd --permanent --ipset=blacklist --remove-entries-from-file=iplist.txt
四、实例:Linux系统firewalld防火墙的应用实操(禁止屏蔽海外国外IP访问)
4.1 ipset的增删查
#新建一个ip集合,--type=hash:ip 指定类型为 hash:ip,不允许重复ip
firewall-cmd --permanent --new-ipset=china_ip --type=hash:ip
#删除一个ip集合
firewall-cmd --permanent --delete-ipset=china_ip
#查询所有ip集合
firewall-cmd --permanent --get-ipsets
4.2 ipset的ip地址修改
#ipset添加ip
firewall-cmd --permanent --ipset=china_ip --add-entry=121.122.123.105
#从文件中添加ip到ipset
firewall-cmd --permanent --ipset=china_ip --add-entries-from-file=china_ip_list.txt
#ipset删除ip
firewall-cmd --permanent --ipset=china_ip --remove-entry=121.122.123.105
#判断ip是否存在ipset中
firewall-cmd --permanent --ipset=china_ip --query-entry=121.122.123.105
firewall-cmd --reload
4.3 ipset的其他查询
more /etc/firewalld/ipsets/china_ip.xml
#打印ipset的路径
firewall-cmd --path-ipset=china_ip --permanent
#打印ipset的内容
firewall-cmd --info-ipset=china_ip --permanent
#打印ipset的所有entry
firewall-cmd --ipset=china_ip --get-entries --permanent
4.4 下载国内ip网段
https://github.com/oneoy/iplist?tab=readme-ov-file
wget https://raw.githubusercontent.com/metowolf/iplist/master/data/country/CN.txt
wget https://raw.githubusercontent.com/metowolf/iplist/master/data/special/china.txt
4.5 新建ip集合
firewall-cmd --permanent --new-ipset=china_ip --type=hash:net
firewall-cmd --permanent --ipset=china_ip --add-entries-from-file=china.txt
4.6 添加规则
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip" port port=80 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip" port port=22 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip" port port=8080 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip" port port=443 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip" port port=8443 protocol=tcp accept'
firewall-cmd --reload
4.7 从国外VPS主机测试一下防火墙规则是否生效:
(py3) [root@vultr ~]# ssh 101.42.5.97
ssh: connect to host 101.42.5.97 port 22: No route to host
(py3) [root@vultr ~]# curl http://101.42.5.97/users/sign_in
curl: (7) Failed connect to 101.42.5.97:80; 没有到主机的路由
(py3) [root@vultr ~]#
文章评论