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

摘要:
如果您的客户端需要连接到没有静态IP地址的服务,该怎么办?我们的解决方案是使用动态DNS将其IP地址绑定到主机名,主机名将用于存储允许通过SSH进入服务器的系统的IP地址。

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/

免责声明:文章转载自《使用IP集创建基于主机名的iptables规则》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[.NET] GC垃圾回收机制记一次centos7挂在nas盘的踩坑经过下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于webStrom-11.1配置less且自动生成.css和自动压缩为.min.css/.min.js

网上看过很多配置思路,自己总结了以下, 就把我个人配置的顺序以及材料分享下,webstrom以下简称WB 1、配置less需要安装nodejs,自行安装。因为要用到npm.我是直接把npm解压到C盘根目录的,先下载解压好待用   npm解压包百度云下载地址:http://pan.baidu.com/s/1bpdnmGZ   (yuicompressor-2...

统计一个版本代码变化行数

项目总结时,我们常常需要统计代码行数,来查看每个项目开发者的代码总量,提交次数和变更文件数。 这里介绍一下statsvn工具统计代码行数的方法。   1、安装tortoise svn 下载tortoise svn,下载地址:https://tortoisesvn.net/downloads.html,附件给出了64位的版本。 点击运行,按照提示安装完成。...

Redis 下载与安装(Windows版)

1、Github下载地址:https://github.com/MicrosoftArchive/redis/releases 2、百度网盘下载地址:Redis-x64-3.2.100.zip   密码:kdfq 1、打开一个命令窗口,通过 cd 命令进入到你解压的目录 2、输入命令:redis-server redis.windows.conf ,启动...

App自动化测试

1.App自动化测试的技术体系 2.Android SDK环境搭建与常用命令 Anddroid自动化测试前提条件是系统中有JDK环境,并且已经安装好Android SDK Tools。此外,通常情况下,都是基于模拟器的自动化测试(除非做兼容性测试使用真机环境),所以还需要配置或者安装安卓模拟器,这里不推荐使用Android Studio自带的模拟器,因为...

12.bss段的初始化

12.bss段的初始化 在C代码:有初始化全局的数据段,局部的栈,malloc部分的堆,未初始化的全局的bss段。 从上面的编译的信息知道: Bss段的起始地址:0001052c Bss段的结束地址:00010534 我们的hello变量的地址:00010530是落在bss段里的地址的。所以是存在bss段的。这就是未初始化的全局变量存放在bss段...

[虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(五)

目的: 1. 了解PCI的基本知识,为完成watchdog的设备做准备。 准备知识: 简单的说,PCI 设备分3个空间。 配置空间,IO空间,内存地址空间。 PCI设备厂家决定了外设是使用IO空间还是IO内存空间。 我们通过读取配置空间的bar寄存器的最低位bit0来决定是该设备使用的是IO空间还是内存地址空间。 计算机一启动,bois或者linux会根据...