通过API动态更新Cloudflare的DNS记录

准备相关信息

在cloudflare上面获取相关的Key ID,包括Zone ID 、Accout ID、DNS Record ID,以及API KEY ID;
https://dash.cloudflare.com/
在页面最下边的右面。

Openwrt配置修改

在Openwrt路由器上创建两个文件。

file1:/etc/hotplug.d/iface/90-ddns

## /etc/hotplug.d/iface/90-ddns
#!/bin/sh 
[ "$ACTION" = ifup ] || exit 0
[ "$INTERFACE" = wan ] || exit 0
/usr/lib/ddns/new_cloudflare_v4.sh

file2:/usr/lib/ddns/new_cloudflare_v4.sh

!/bin/ash
 CHANGE THESE
 auth_email="you@domain.com"
 auth_key="This is you Key" # found in cloudflare account settings
 zone_name="youdomain.com"
 record_name="gw-private.ghdog.com"
 bauth_key=You API KEY
 zone_identifier=You Zone ID
 record_identifier=You Record ID
 MAYBE CHANGE THESE
 ip=$(curl -s http://ipv4.icanhazip.com)
 ip=$(ip address show dev pppoe-wan | grep inet | sed 's/^[ \t]*//g' | cut -d ' ' -f2)
 ip_file="ip.txt"
 id_file="cloudflare.ids"
 log_file="/var/log/ddns_gw-private.ghdog.com.cloudflare.log"
 LOGGER
 log() {
     if [ "$1" ]; then
         echo -e "[$(date)] - $1" >> $log_file
     fi
 }
 SCRIPT START
 log "Check Initiated"
 if [ -f $ip_file ]; then
 old_ip=$(cat $ip_file)
 if [ $ip == $old_ip ]; then
 echo "IP has not changed."
 exit 0
 fi
 fi
 if [ -f $id_file ] && [ $(wc -l $id_file | cut -d " " -f 1) == 2 ]; then
 zone_identifier=$(head -1 $id_file)
 record_identifier=$(tail -1 $id_file)
 else
 zone_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1 )
 record_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json"  | grep -Po '(?<="id":")[^"]*')
 echo "$zone_identifier" > $id_file
 echo "$record_identifier" >> $id_file
 fi
 update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$ip\"}")
 update=$(curl -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "Authorization: Bearer $bauth_key" -H "Content-Type: application/json" --data "{\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$ip\",\"ttl\":1,\"proxied\":false}")
 if [[ $update == "\"success\":false" ]]; then
     message="API UPDATE FAILED. DUMPING RESULTS:\n$update"
     log "$message"
     echo -e "$message"
     exit 1 
 else
     message="IP changed to: $ip"
     echo "$ip" > $ip_file
     log "$message"
     echo "$message"
 fi
 !/bin/sh
 [ "$ACTION" = ifup ] || exit 0
 [ "$INTERFACE" = wan ] || exit 0
 /usr/lib/ddns/new_cloudflare_v4.sh

这样每当路由器重新获取了IP后,系统就会自动修改该域名的IP。

锐捷一体化网关EG680-P对外通信分析-私自建立对外隧道连接

一、网络环境介绍

在互联网时代,我想没有一个人家庭没有接入互联网。
现在人手一个手机的时代,无线WIFI是必不可少的一个重要支撑组件。
在新房装修的时候,采用了锐捷的一体化网关+AP的方式进行的组网。网络拓扑图如下(草图)

3e4977ef98d295a2d2b7860073776d37.png

锐捷一体化网关设备的型号为:EG680-P
该设备的当前软件版本为:已安装软件版本:EG_RGOS 11.9(2)B11P2

在家庭网络中,接入了各种智能家庭终端、家庭文件共享中心、多媒体娱乐等;

在网络部署中,将EG680-P设备的IP地址设置为192.168.77.2。

  • 一、网络环境介绍
  • 二、锐捷EG680-P对外通信:大量DNS请求
  • 三、未启用云服务,锐捷EG网关私自与cloud.ruijie.com.cn通信注册。
  • 四、EG680-P一体化网关私自建立外部隧道CLASSIS-STUN
  • 五、锐捷EG680-P网关与外界通信的合计
  • 六、《中华人民共和国网络安全法》

继续阅读“锐捷一体化网关EG680-P对外通信分析-私自建立对外隧道连接”

搭建自己的权威NS服务器

NS-Route.png

本文仅用于折腾。

手上域名一多就有一种折腾的欲望。
多年以前曾用过Bind搭建自己的NS服务器。但是那时候是直接在一台公网的服务器上,安装Bind,并写了一个域名的文件,就对外发布了,但是没过两天,该服务器就被封禁了。 查询后得知,流量太大了。….. 大部分人都利用我搭建的NS,去请求一些非法的域名。导致流量过大,被封禁。

现在考虑到安全因素,计划搭建一个权威(Master和Slave分离)的NS服务器来玩玩。

大致网络结构如下:

用户-----(internet)--->Public DNS Server  ------------> 公网NS(Slave)---(VPN网络)----->内网NS(Slave)----->内网NS(Master)

继续阅读“搭建自己的权威NS服务器”

在交换机上定时执行任务

http://www.h3c.com/cn/d_201411/845120_30005_0.htm

在H3C交换机上定时执行命令。

scheduler job shutdown_interafce_1-0_7
 command 0 system-view
 command 1 interface GigabitEthernet1/0/7
 command 2 shutdown
#
scheduler schedule shutdown_interface
 user-role network-operator
 user-role network-admin
 job shutdown_interafce_1-0_7
 time repeating at 06:51
#
[XYAD_POE_1]display  scheduler logfile
Logfile Size: 413 Bytes.
Job name        : shutdown_interafce_1-0_7
Schedule name   : shutdown_interface
Execution time  : Wed May  1 06:51:00 2013
Completion time : Wed May  1 06:51:05 2013
--------------------------------- Job output -----------------------------------
<XYAD_POE_1>system-view
System View: return to User View with Ctrl+Z.
[XYAD_POE_1]interface GigabitEthernet1/0/7
[XYAD_POE_1-GigabitEthernet1/0/7]shutdown

Firewalld防火墙与ICMP攻击

原文地址:http://www.excelib.com/article/293/show

提到ICMP大家应该都很熟悉,可能有人会说:不就是ping吗?但是说到ICMP攻击以及相关防御措施可能就有的人不是非常清楚了。

ICMP的概念
要想理解ICMP攻击以及防范我们还得从ICMP的概念说起,ICMP是“Internet Control Message Protocol”的缩写,意思是“Internet控制消息协议”,他主要用于在不同主机、路由器等设备之间传递控制消息,比如网络是否可以联通、路由 设备地址的发现、路由路径是否合理等内容。

ICMP攻击
ICMP协议被攻击的方法有很多种,比如的“Ping of Death”、使用ICMP数据包发起DDOS攻击、redirect攻击等等,下面学生简单给大家介绍一下。

“Ping of Death”的原理是当发送的数据包大小超过64KB(规定最大64KB)后接收信息的主机就会出现内存分配错误,进一步会导致TCP/IP堆栈崩溃,甚至主机死机!不过这一漏洞在新版的操作系统中已经解决了。

ICMP 的DDOS简单来说就是一直不停地发送ICMP数据包从而占满被攻击主机的带宽,当然,更进一步还可以使用一些手段将流量进行放大,比如将源地址设置为被 攻击主机的“echo-request”类型报文广播给很多第三方主机,这时这些接收到报文的主机就会给被攻击目标主机返回“echo-replay”报 文,这样流量就被放大了。

要理解redirect攻击,首先要明白redirect的作用,学生给大家举个例子大家就明白了,比如有个快递 需要从北京发往广州,结果北京发到沈阳的中转站了,这时候沈阳就觉得不对呀,要往广州发应该往南边发才对怎么能往北边发呢?所以沈阳站就会跟北京站联系, 告诉他:你发的不对,你应该往南边的XXX站发送才对。ICMP中的redirect就是起这个作用的,当路由设备发现某个数据包经过自己不是最优路径时 就会给源地址发一个redirect数据包,告诉对方发的路径不合适,并且指出应该发往的地址。这个功能是很有用的,不过如果被攻击者使用情况就完全不一 样了,他们可以使用这一功能将正常(合理)的路由地址给修改为一个不合理的甚至不存在的地址,这样就会给通讯造成问题,另外,有一些还会将目标地址设置为 他们自己可以控制的主机的地址,这样就可以截获数据了!跟redirect相关的还有router-advertisement、router- solicitation等类型的ICMP数据包。

当然,除了这三种还有很多攻击的类型,比如我们下面会说到的destination-unreachable、source-quench、time-exceeded等类型的攻击。

可能看到这里有的读者就觉得不容易理解了:echo-request、redirect、destination-unreachable等等到底是什么东西呢?其实这都是ICMP的类型,下面学生就来给大家介绍ICMP的类型。

ICMP的类型
ICMP 数据包主要包含三部分内容:类型、代码和附加数据,其中的类型和代码属于包头,代码(code)相当于类型(type)下的细分子类型,我们也可以理解为 他们共同来决定一个ICMP包的类型,比如学生上面给大家讲的redirect的type为5,不过5这个type下面还有4个code——0,、1、 2、3,他们所表示的含义如下表所示

表1:ICMP包Redirect类型表

type code 描述
5 0 Redirect for network——对网络重定向
5 1 Redirect for host——对主机重定向
5 2 Redirect for TOS and network——对服务类型和网络重定向
5 3 Redirect for TOS and host——对服务类型和主机重定向

具体更多的代码学生就不在这里罗列了,大家很容易就可以找到。在ICMP数据包中type和code就像excel中的两个单元格,只要将相应的数据填入,主机就可以知道这个ICMP包的类型了。

这里的type和code我们当然是不需要记的,在使用的时候只需要用名字就可以了,比如type为8的数据包我们直接写Echo request、type为0的数据包我们直接写Echo Reply就行了,下面学生简单地给大家介绍几个常见的类型

  • Echo request:需要回应的请求,也就是我们常说的ping请求 Echo Reply:对ping的回应报文(pong)
    Destination Unreachable:目标不可达 Source

Quench:源地址资源紧张,正常情况下当我们要发送数据的路由设备请求过多时就会发出这种ICMP包 Time
Exceeded:超时,比如TTL用完后就会产生这种类型的数据包

Firewalld针对ICMP攻击的防御方法
firewalld中有专门针对icmp报文的配置方法,而且使用起来也非常简单,我们只需要将firewalld所支持的icmp类型配置到所使用的zone中就可以了,要查看firewalld所支持的icmp类型可以使用下面的命令

firewall-cmd [--permanent] --get-icmptypes 

默认的返回结果如下

destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

这里的类型前面学生基本都给大家介绍过了,下面来学生来给大家讲怎么使用。跟icmptype相关的命令主要有四个

1 firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks
2 firewall-cmd [--permanent] [--zone=zone] --add-icmp-block=<icmptype>
3 firewall-cmd [--permanent] [--zone=zone] --remove-icmp-block=<icmptype>
4 firewall-cmd [--permanent] [--zone=zone] --query-icmp-block=<icmptype>

他们分别用于列出zone中所阻止的所有icmp类型、添加、删除和查询某个具体的icmp类型,如果指定zone则对具体zone进行操作,否则对当前活动的zone进行操作。

icmp配置文件的结构也非常简单,除了short和description外只有一个destination节点,可以设置对ipv4和ipv6的支持与否。

补充与建议
对于firewalld中的icmp设置大家要特别注意下面三点

1、firewalld只可以阻止指定类型的icmp包,没有其他更多的配置选项

2、如果使用drop、reject这些zone的话,默认所有icmp类型都会阻塞

3、默认情况下firewalld中所配置的icmp类型主要是针对入包的,而对于主机发出的包是不会拦截的。另外,在前面学生跟大家说过firewalld是一款有状态的防火墙,也就是说不同连接之间的关系firewalld在内部是有记录的,所以即使我们将echo-reply设置到zone中之后再去使用本机ping其他主机也是可以收到回复的,这是因为firewalld底层可以识别出那个echo-reply是我们发生去请求的回应。

对于具体哪个类型应该阻止,哪个应该放行大家需要根据自己的实际情况来设定,学生下面给大家提供一些思考的方向和建议。

destination-unreachable:当收到这种类型数据包之后相应地址的连接将会被断开,如果是攻击者伪造的数据包,那么会将我们的很多正常连接断开。当将其设置到zone中后我们本机发送的请求还是可以收到destination-unreachable类型回复的,只是直接发给我们的destination-unreachable数据包进不来了,所以建议大家可以阻止。

echo-request:主要用于接收ping请求,阻塞之后我们的主机将不可被ping,不过打开后又有可能被攻击,有种惯用的做法是设置开通的频率,比如1秒钟只可以被ping一次,不过这种功能直接使用学生上面给大家介绍的方法是无法设置的,不过没关系,当学习了学生下一节将要给大家介绍的firewalld中的direct之后就可以设置了。

echo-reply:这是回应ping信息的包,一般来说我们应该将其阻止,因为他跟destination-unreachable一样,如果是我们本机发出的即使设置了阻止也还是可以接收到的。

parameter-problem:当接收到的报文参数错误,无法解析时会返回这种类型的报文。

redirect:这种报文学生在前面已经给大家详细介绍过,这里就不再重述了。

router-advertisement和router-solicitation:这是一对报文,他们的作用是用来发现路由设备的地址,主机发出router-solicitation类型数据包来查找路由设备,路由设备可以发出router-advertisement类型ICMP数据包来告诉主机自己是路由设备

source-quench:这个学生也给大家介绍过了,当源地址设备(比如路由设备)资源紧张时就会发出这种数据包

time-exceeded:数据包超时。

最后还是那句话,没有最优配置方法(否则就不需要配置了),大家需要根据自己的实际情况进行配置。