linux dig域名DNS 查询与iptables域名ip访问流量限制
一、域名 dns查询
在 Linux 系统中,你可以使用多种工具和技术来进行 DNS 查询和 IP 限制。以下是一些常用的方法和工具:
DNS 查询
-
dig
命令:
dig
是一个强大的命令行工具,用于查询 DNS 信息。dig example.com
你可以指定查询类型,例如 A 记录、MX 记录等:
dig example.com A dig example.com MX
直接输出ip信息
dig +short example.com
-
nslookup
命令:
nslookup
是另一个常用的 DNS 查询工具。nslookup example.com
-
host
命令:
host
命令也可以用于 DNS 查询。host example.com
二、域名IP 访问限制
在 Linux 系统中,你可以使用 iptables
或 nftables
来限制 IP 地址的访问。
1)使用 iptables
阻止特定 IP 地址:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
这条命令会阻止来自 192.168.1.100
的入站流量。
iptables
是一个强大的命令行工具,用于配置 Linux 内核内置的防火墙,即 Netfilter。以下是一些常用参数的说明,以及如何使用 iptables
进行域名字符串匹配限制。
常用参数说明
-
-I
(插入规则):
将规则插入到链的顶部(即第一个位置)。sudo iptables -I INPUT -s 192.168.1.100 -j DROP
这条命令会将阻止来自
192.168.1.100
的入站流量的规则插入到INPUT
链的顶部。 -
-D
(删除规则):
从链中删除指定的规则。sudo iptables -D INPUT -s 192.168.1.100 -j DROP
这条命令会删除
INPUT
链中阻止来自192.168.1.100
的入站流量的规则。 -
-A
(追加规则):
将规则追加到链的末尾。sudo iptables -A INPUT -s 192.168.1.100 -j DROP
这条命令会将阻止来自
192.168.1.100
的入站流量的规则追加到INPUT
链的末尾。 -
-p
(协议):
指定要匹配的协议(如tcp
、udp
、icmp
等)。sudo iptables -A INPUT -p tcp --dport 22 -j DROP
这条命令会阻止所有到端口 22(SSH)的 TCP 入站流量。
-
-s
(源地址):
指定要匹配的源 IP 地址或网络。sudo iptables -A INPUT -s 192.168.1.0/24 -j DROP
这条命令会阻止来自
192.168.1.0/24
网络的所有入站流量。 -
-d
(目标地址):
指定要匹配的目标 IP 地址或网络。sudo iptables -A OUTPUT -d 192.168.1.100 -j DROP
这条命令会阻止所有到
192.168.1.100
的出站流量。 -
--dport
(目标端口):
指定要匹配的目标端口。sudo iptables -A INPUT -p tcp --dport 80 -j DROP
这条命令会阻止所有到端口 80(HTTP)的 TCP 入站流量。
-
-j
(跳转目标):
指定匹配规则时要执行的操作(如ACCEPT
、DROP
、REJECT
等)。sudo iptables -A INPUT -s 192.168.1.100 -j DROP
这条命令会阻止来自
192.168.1.100
的所有入站流量。
域名字符串匹配
你的命令是使用iptables
来阻止从源 IP 地址192.168.2.9
发出的数据包,如果这些数据包中包含字符串"qq.com"
。以下是命令的详细解释:
sudo iptables -I OUTPUT -s 192.168.2.9 -m string --string "qq.com" --algo kmp -j DROP
-I OUTPUT
:将规则插入到OUTPUT
链的顶部。-s 192.168.2.9
:匹配源 IP 地址为192.168.2.9
的数据包。-m string
:加载string
模块。--string "qq.com"
:匹配数据包中包含字符串"qq.com"
的内容。--algo kmp
:指定字符串匹配算法为kmp
(Knuth-Morris-Pratt 算法)。-j DROP
:匹配到的数据包将被丢弃。
使用场景
这个命令通常用于阻止特定 IP 地址发出的包含特定字符串的数据包。例如,如果你有一个 HTTP 请求从 192.168.2.9
发出,并且请求中包含 "qq.com"
字符串,这个命令会阻止该请求。
注意事项
- 应用层协议:这个命令主要用于应用层协议(如 HTTP、SMTP 等),因为这些协议的数据包中可能包含字符串内容。
- 协议匹配:你可能需要指定协议(如
-p tcp
)来匹配特定的协议。
完整示例
假设你想阻止从 192.168.2.9
发出的 HTTP 请求中包含 "qq.com"
字符串的数据包,可以使用以下命令:
sudo iptables -I OUTPUT -s 192.168.2.9 -p tcp --dport 80 -m string --string "qq.com" --algo kmp -j DROP
这个命令会阻止从 192.168.2.9
发出的目标端口为 80(HTTP)的 TCP 数据包,如果这些数据包中包含 "qq.com"
字符串。
2)使用 nftables
nftables
是 iptables
的继任者,提供了更灵活和高效的规则管理。
-
安装
nftables
:sudo apt-get install nftables
-
阻止特定 IP 地址:
sudo nft add rule ip filter input ip saddr 192.168.1.100 drop
-
允许特定 IP 地址:
sudo nft add rule ip filter input ip saddr 192.168.1.100 accept
-
阻止特定端口:
sudo nft add rule ip filter input tcp dport 22 drop
-
保存和恢复规则:
保存规则:
sudo nft list ruleset > /etc/nftables.conf
恢复规则:
sudo nft -f /etc/nftables.conf
结合 DNS 查询和 IP 限制
你可以结合 DNS 查询和 IP 限制来实现更复杂的策略。例如,你可以先查询域名的 IP 地址,然后根据这些 IP 地址设置防火墙规则。
-
查询域名的 IP 地址:
dig +short example.com
-
根据查询结果设置防火墙规则:
假设查询结果为
192.168.1.100
,你可以使用以下命令阻止该 IP 地址:sudo iptables -A INPUT -s 192.168.1.100 -j DROP
通过这些方法,你可以在 Linux 系统中实现灵活的 DNS 查询和 IP 限制策略。