iptables 是 Linux 系统中的一个功能强大的防火墙工具,它可以对进出系统的 IP 数据包进行过滤和修改。iptables 本身并不直接支持基于域名的过滤,因为它主要工作在网络层(IP 层)和传输层(TCP/UDP 层),而域名解析发生在应用层。不过,可以通过结合 DNS 解析和 iptables 来实现基于域名的过滤。
要实现基于域名的过滤,通常需要以下几个步骤:
以下是一个简单的 Bash 脚本示例,用于从 DNS 获取域名的 IP 地址,并更新 iptables 规则:
#!/bin/bash
# 需要过滤的域名列表
DOMAINS=("example.com" "malicious.net")
# 清空现有的规则
iptables -F
# 允许本地流量
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 遍历域名列表,添加规则
for DOMAIN in "${DOMAINS[@]}"; do
# 获取域名的 IP 地址
IPS=$(dig +short $DOMAIN)
for IP in $IPS; do
# 拒绝来自这些 IP 的流量
iptables -A INPUT -s $IP -j DROP
done
done
# 保存规则
iptables-save > /etc/iptables/rules.v4
请注意,以上示例代码仅供参考,实际应用中需要根据具体情况进行调整和完善。
领取专属 10元无门槛券
手把手带您无忧上云