实时更新客户端ip到apache配置文件中允许ip

2017年3月14日 1 条评论 1.43k 次阅读 1 人点赞

需求分析:

apache vhost站点设置了仅允许部分ip访问,如果客户端是动态ip,那么每次更换ip的时候都得手动添加,而且不知道运营商释放更新ip是什么时候,所以打算通过一个固定的客户端每分钟访问服务器提供的一个php页面,然后服务器端的php页面受访之后记录客户端ip到文件,然后通过服务端设置每分钟运行脚本,检测ip文件是否变更,如果变更了就替换apache配置文件中原ip,达到客户端环境一直允许访问vhost站点

代码如下:

服务器php代码:

<?php
$ip=$_SERVER["REMOTE_ADDR"];
$access="20170315";  //设置一个验证,仅仅允许提供了验证的去更改ip
if ($_GET['access'] == $access ) {
$myfile = fopen("ip.txt", "w");
fwrite($myfile, $ip);
fclose($myfile);
}
需要将这个目录以及文件设置成apache所属用户及所属组

服务器 shell 每分钟执行代码:

#!/bin/bash
ippath="/data/www/" #php所在路径
httpconf="/etc/httpd/conf/httpd.conf" #apache配置文件路径
ipoldp=${ippath}/ip.old #原ip文件路径
ipnewp=${ippath}/ip.txt #新提交ip文件路径
ipold=`cat $ipoldp` #原ip
ipnew=`cat $ipnewp` #新ip
linenum="1014" #原ip所在行数,可以不验证行数
AddIP() {
echo sed -i '${linenum}i\"Allow From "$1' $httpconf
}

RepIP() {
echo sed -i '${line}s/Allow From $1/Allow From $2/g' $httpconf
}
if [ -f $ipoldp -a -f $ipnewp ]; then #当ipold和ipnew都存在的时候
	diff $ipoldp $ipnewp #对比两个ip是否相同
	if [ $? == 0 ]; then #当相同的时候
		grep -w $ipold $httpconf #查看http配置文件中是否存在此ip
		if [ $? == 1 ]; then AddIP $ipold #如果不存在就添加允许
	elif [ $? == 1 ]; then #当不同的时候
		grep -w $ipold $httpconf #查看http配置文件中是否存在 旧ip
		if [ $? == 1 ]; then AddIP $ipnew #如果不存在就直接添加 新ip
		elif [ $? == 0 ]; then RepIP $ipnew #如果存在则将 旧ip 替换为 新ip
		fi
		echo $ipnew > $ipoldp #将新ip写入旧ip文件,作为旧ip存在
else #新旧文件丢失
echo `date "+%Y-%m-%d %H:%M:%S 星期%u"` | mail -s "www src ip file lose." [email protected] #文件异常丢失的时候发送邮件提醒
fi
#可以在更改ip成功之后发送邮件提醒,有需要自行添加

客户端每分钟执行shell 代码:

#!/bin/bash
curl http://域名/ip.php?access=20170315
#通过提交access字段验证,服务器get获取验证

 

Sevenfal

这个人太懒什么东西都没留下

文章评论(1)

  • Sevenfal

    需要注意的是,这个页面的访问地址不应该配置在添加ip的那个上面,因为如果ip一变动,那么就访问不到了

    2017年3月14日