• 使用IP集创建基于主机名的iptables规则


    IPTables是在Linux系统上创建防火墙的非常强大的工具。但是,所有规则均基于IP地址。例如,您可以打开一个到特定源IP地址的端口。
    如果您的客户端需要连接到没有静态IP地址的服务怎么办?客户端需要监视其IP地址的更改,向您发送新IP,然后您必须手动更新iptables规则以允许他们访问。一定有更好的方法。
    这是我想到的,当时我有一个客户需要从家里通过SSH访问其服务器。他的有线互联网连接每月至少一次(有时每周一次)更改其公共IP地址。我可以向所有人打开SSH并允许他连接,但这不是很安全。我们制定的解决方案是使用动态DNS将其IP地址绑定到主机名,然后使用IP集和简单的Bash脚本自动更新iptables。
    注意:配置Dyamic DNS的客户端不在本教程的范围内。有几种方法可以完成此操作。如果您需要帮助,请在评论中告诉我们。
    使用iptables配置IP集
    IP集是一个框架,可让您创建IP地址,MAC地址,网络,端口号等的“集合”。然后可以在iptables规则中使用这些集。这似乎很复杂,但是非常简单。仅需几个命令,您就可以配置IP Set。然后,我们将创建一个简单的bash脚本来更新该集合。
    对于此示例,假设客户端具有以下动态DNS名称设置:
    client1.example.com
    创建您的IP集
    第一步是创建IP集以保存客户端的IP地址。
    $ sudo ipset create ssh-allowed hash:ip
    在这里,我们告诉ipset实用程序创建一个类型为“ hash:ip”的名为“ ssh-allowed”的集合。这将用于存储允许通过SSH进入我们服务器的系统的IP地址。
    现在,我们可以查看此IP集,看到它没有成员。这是预期的,因为我们尚未添加任何IP地址。在接下来的步骤中,我们将配置iptables以使用此IP集。然后创建一个Bash脚本,以根据客户端的动态DNS名称添加其IP地址。
    $ sudo ipset list ssh-allowed
    您可以手动将IP地址添加到该集中进行测试。
    $ sudo ipset add ssh-allowed 192.168.100.197
    现在,如果我们列出了“ssh-allowed”的IP集,我们将看到我们只有一个成员。
    $ sudo ipset list ssh-allowed
    使用IP集创建iptables规则
    现在我们已经创建了IP集,让我们在iptables中创建一个规则,告诉它允许来自该IP集内地址的SSH流量。
    sudo iptables -I INPUT -p tcp --dport 22 -m set --match-set ssh-allowed src -j ACCEPT
    现在,将iptables配置为检查“ssh-allowed” IP设置的传入SSH连接的源IP地址。
    $ sudo iptables -L -vn
    现在允许属于“ ssh-allowed” IP集成员的任何IP地址连接到目标端口22上的SSH。
    创建一个Bash脚本以按主机名自动更新IP表
    我们的客户已将动态DNS配置为client1.example.com自动使用其IP地址更新主机名。剩下的就是设置脚本以使用该主机名的IP地址更新“ ssh-allow” IP集。
    注意:您必须安装dig实用程序。
    下面的脚本将使用dig实用程序来查找的IP地址client1.example.com并ip为其设置变量。然后它将刷新IP集以删除所有旧IP地址,然后插入新IP地址以允许其通过SSH访问服务器。
    #!/bin/bash
    # Find IP address and store it in $ip
    ip=`dig +short client1.example.com`
    # Flush old IP addresses from ssh-allowed IP Set
    ipset flush ssh-allowed
    # Add new IP address to ssh-allowed IP Set
    ipset add ssh-allowed $ip
    我们可以将此脚本放置在/etc/cron.daily中以每天运行,或者创建一个基本的cron作业以根据需要运行它。当客户端自动更新动态DNS时,此脚本将确保它们仍然可以访问服务器。
    结论
    使用IP集可以使您创建易于管理的IP地址列表,iptables可以在其规则中使用该IP地址。正如我们所展示的,当与简单的Bash脚本配对时,它还可以帮助从主机名或域名创建规则。

    A5互联https://www.a5idc.net/

  • 相关阅读:
    LearnMoreStudyLess《如何高效学习》斯科特.杨
    Asp.net 生成多个Excel打包zip进行下载(建立在Aspose.Cells.dll生成Excel,建立在ICSharpCode.SharpZipLib.dll打包zip)
    【面经】美团测试1,2,3面,一起来聊聊?
    【python】面试高频:浅拷贝 vs 深拷贝、'==' vs 'is'
    【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
    【图解Http 学习摘要】四、HTTP 缺点
    【图解Http 学习摘要】三、HTTP 协议基础、四次挥手
    【图解Http 学习摘要】二、IP,TCP 和 DNS、三次握手
    【图解Http 学习摘要】一、http介绍、TCP/IP 协议族
    【杂谈】关于常见架构的整理,单应用、微服务、SOA、分布式和集群
  • 原文地址:https://www.cnblogs.com/a5idc/p/13395942.html
Copyright © 2020-2023  润新知