linux dig域名DNS 查询与iptables域名ip访问流量限制;PTR 反向解析从 IP 地址到域名的映射

一、域名 dns查询

在 Linux 系统中,你可以使用多种工具和技术来进行 DNS 查询和 IP 限制。以下是一些常用的方法和工具:

DNS 查询

  1. dig 命令
    dig 是一个强大的命令行工具,用于查询 DNS 信息。

    dig example.com
    

    你可以指定查询类型,例如 A 记录、MX 记录等:

    dig example.com A
    dig example.com MX
    

直接输出ip信息

dig +short example.com

在这里插入图片描述
指定dns域名服务商

dig @114.114.114.114 example.com

8.8.8.8 谷歌
在这里插入图片描述
在这里插入图片描述

  1. nslookup 命令
    nslookup 是另一个常用的 DNS 查询工具。

    nslookup example.com
    
  2. host 命令
    host 命令也可以用于 DNS 查询。

    host example.com
    

在这里插入图片描述

二、域名IP 访问限制

在 Linux 系统中,你可以使用 iptablesnftables 来限制 IP 地址的访问。

1)使用 iptables

阻止特定 IP 地址

sudo iptables -A INPUT -s 192.168.1.100 -j DROP

这条命令会阻止来自 192.168.1.100 的入站流量。

iptables 是一个强大的命令行工具,用于配置 Linux 内核内置的防火墙,即 Netfilter。以下是一些常用参数的说明,以及如何使用 iptables 进行域名字符串匹配限制。

常用参数说明

  1. -I(插入规则)
    将规则插入到链的顶部(即第一个位置)。

    sudo iptables -I INPUT -s 192.168.1.100 -j DROP
    

    这条命令会将阻止来自 192.168.1.100 的入站流量的规则插入到 INPUT 链的顶部。

  2. -D(删除规则)
    从链中删除指定的规则。

    sudo iptables -D INPUT -s 192.168.1.100 -j DROP
    

    这条命令会删除 INPUT 链中阻止来自 192.168.1.100 的入站流量的规则。

  3. -A(追加规则)
    将规则追加到链的末尾。

    sudo iptables -A INPUT -s 192.168.1.100 -j DROP
    

    这条命令会将阻止来自 192.168.1.100 的入站流量的规则追加到 INPUT 链的末尾。

  4. -p(协议)
    指定要匹配的协议(如 tcpudpicmp 等)。

    sudo iptables -A INPUT -p tcp --dport 22 -j DROP
    

    这条命令会阻止所有到端口 22(SSH)的 TCP 入站流量。

  5. -s(源地址)
    指定要匹配的源 IP 地址或网络。

    sudo iptables -A INPUT -s 192.168.1.0/24 -j DROP
    

    这条命令会阻止来自 192.168.1.0/24 网络的所有入站流量。

  6. -d(目标地址)
    指定要匹配的目标 IP 地址或网络。

    sudo iptables -A OUTPUT -d 192.168.1.100 -j DROP
    

    这条命令会阻止所有到 192.168.1.100 的出站流量。

  7. --dport(目标端口)
    指定要匹配的目标端口。

    sudo iptables -A INPUT -p tcp --dport 80 -j DROP
    

    这条命令会阻止所有到端口 80(HTTP)的 TCP 入站流量。

  8. -j(跳转目标)
    指定匹配规则时要执行的操作(如 ACCEPTDROPREJECT 等)。

    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:匹配到的数据包将被丢弃。

删除重复屏蔽规则
sudo iptables -nL OUTPUT --line-numbers ##查询规则索引显示

按索引号删除,注意要从最后往前索引号删除

def delete_iptables_rules(match_content):
    try:
        # 列出 INPUT 链中的所有规则及其行号
        result = subprocess.run(['sudo', 'iptables', '-nL', 'OUTPUT', '--line-numbers'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        lines = result.stdout.replace('"',"").split('\n')
        
        # 提取所有规则的行号
        line_numbers = []
        for line in lines:
            if line and not line.startswith('Chain'):
                line_number = line.split()
                if len(match_content)==2:
                    if match_content[0] in line_number and match_content[1] in line_number:
                        line_numbers.append(int(line_number[0]))
                if len(match_content)==1:
                    if match_content[0] in line_number:
                        line_numbers.append(int(line_number[0]))
        
        # 从最后一行开始逐条删除规则
        for line_number in sorted(line_numbers, reverse=True):
            subprocess.run(['sudo', 'iptables', '-D', 'OUTPUT', str(line_number)], check=True)

## orgin_ip 是 -s源头ip,url 是字符串匹配的域名,d_url是访问服务器ip
delete_iptables_rules([orgin_ip,url])
delete_iptables_rules([orgin_ip,d_url])

在这里插入图片描述

使用场景

这个命令通常用于阻止特定 IP 地址发出的包含特定字符串的数据包。例如,如果你有一个 HTTP 请求从 192.168.2.9 发出,并且请求中包含 "qq.com" 字符串,这个命令会阻止该请求。

注意事项

  1. 应用层协议:这个命令主要用于应用层协议(如 HTTP、SMTP 等),因为这些协议的数据包中可能包含字符串内容。
  2. 协议匹配:你可能需要指定协议(如 -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

nftablesiptables 的继任者,提供了更灵活和高效的规则管理。

  1. 安装 nftables

    sudo apt-get install nftables
    
  2. 阻止特定 IP 地址

    sudo nft add rule ip filter input ip saddr 192.168.1.100 drop
    
  3. 允许特定 IP 地址

    sudo nft add rule ip filter input ip saddr 192.168.1.100 accept
    
  4. 阻止特定端口

    sudo nft add rule ip filter input tcp dport 22 drop
    
  5. 保存和恢复规则

    保存规则:

    sudo nft list ruleset > /etc/nftables.conf
    

    恢复规则:

    sudo nft -f /etc/nftables.conf
    

结合 DNS 查询和 IP 限制

你可以结合 DNS 查询和 IP 限制来实现更复杂的策略。例如,你可以先查询域名的 IP 地址,然后根据这些 IP 地址设置防火墙规则。

  1. 查询域名的 IP 地址

    dig +short example.com
    
  2. 根据查询结果设置防火墙规则

    假设查询结果为 192.168.1.100,你可以使用以下命令阻止该 IP 地址:

    sudo iptables -A INPUT -s 192.168.1.100 -j DROP
    

通过这些方法,你可以在 Linux 系统中实现灵活的 DNS 查询和 IP 限制策略。

三、PTR 反向解析从 IP 地址到域名的映射

参考:https://worktile.com/kb/ask/1850738.html
PTR记录(Pointer Record)是DNS(Domain Name System)中的一种资源记录,用于将IP地址映射到域名。与A记录(Address Record)和CNAME记录(Canonical Name Record)将域名映射到IP地址不同,PTR记录用于反向DNS查询,即从IP地址查找对应的域名。

PTR记录的作用

  1. 验证身份:在电子邮件系统中,PTR记录用于验证发送方的身份。许多邮件服务器会检查发送方的IP地址是否有对应的PTR记录,以判断邮件是否来自合法的域名。
  2. 提高邮件传递率:拥有有效的PTR记录可以提高电子邮件的传递率,因为许多邮件服务提供商会将没有PTR记录的IP地址标记为潜在的垃圾邮件发送者。
  3. 网络安全:PTR记录可以帮助识别和追踪网络攻击源,通过反向查找IP地址对应的域名,可以更好地了解攻击者的来源。

检查PTR记录

你可以使用以下命令来检查某个IP地址的PTR记录:

  • Linux/Unix

    host IP_ADDRESS
    

    例如:

    host 8.8.8.8
    
  • Windows

    nslookup -type=PTR IP_ADDRESS
    

    例如:

    nslookup -type=PTR 8.8.8.8
    

ubuntu
在这里插入图片描述
windows
在这里插入图片描述

示例

假设你有一个IP地址为192.0.2.1,你希望为其创建一个PTR记录,指向域名example.com。你需要联系你的ISP或IP管理机构,请求创建如下PTR记录:

1.2.0.192.in-addr.arpa.  IN  PTR  example.com.

注意事项

  • PTR记录的域名必须是有效的,并且指向的域名必须有对应的A记录或CNAME记录。
  • PTR记录的创建和修改可能需要一些时间来传播到全球的DNS服务器,通常需要几个小时到几天的时间。
  • 确保你提供的域名是正确的,并且你有权使用该域名,否则可能会导致邮件传递问题或其他安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loong_XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值