且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

更新时间:2022-09-28 20:51:11

一、拓扑图与简单说明

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

  说明:

1.假设我们在申请了一个外网地址10.238.203.24-25/32,我们的内网服务器的地址为172.16.130.0/24网段;

2.我们要开放web和DNS供外网用户访问,其他的服务都禁止访问;

3.我们的域名为www.wangfeng7399.com,其中互联网用户解析到的为10.238.203.24,内网用户解析到的地址为192.168.1.200,或者是192.168.1.201,DNS为外网用户为10.238.203.24,内网用户使用的为192.168.1.201

二、搭建APACHE,PHP,MYSQL

关于搭建APACHE,PHP,MYSQL的详细步骤,请移步本人相关博客,博客地址为http://wangfeng7399.blog.51cto.com/3518031/1381688

三、基于rsync+inotify实现文件实时同步

由于需要基于inotify的机制实现文件实时同步,那么我们需要将前面的两台web作为服务器端,后台php作为客户端

1.配置web的rsync服务

 ①、由于rsync由超级守护进程,所有必须要先安装xinetd超级守护进程,本处通过yum的方式安装

1
[root@httpweb2 ~]# yum install -y xinetd

 ②、配置rsync的配置文件    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#global settings
#配置全局段
uid = nobody
#运行程序的用户uid
gid = nobody
#运行程序的用户gid
use chroot = no
#是否将用户禁锢在家目录
max connections = 5
#最大的连接数
strict modes = yes
#是否完全检查
pid file = /var/run/rsyncd.pid
#程序的pid文件
log file = /var/log/rsyncd.log
#程序的log日志文件
#directory to be synced
#配置用户段
[webserver]
#共享模块的名称
path = /www/html/wangfeng7399
#共享模块的位置
ignore errors = yes
#是否忽略I/O错误
read only = no
#是否允许用户只读
write only = no
#是否允许用户只写
host allow = 192.168.1.0/24
#允许访问的ip地址
host deny = *
#允许访问的ip地址
list = false
#是否列出列表
uid = root
#传递数据的用户
gid = root
#传递数据的用户组
auth user = webuser
#允许访问的用户
secrets file = /etc/rsync.passwd
#用户密码的存放位置

③、生成用户的密码文件/etc/rsync.passwd  

1
webuser:wangfeng7399

 为了安全起见,请将/etc/rsync.passwd的权限设置成600

④、配置服务能够开机自动启动

1
2
[root@httpweb2 ~]# chkconfig rsync on
[root@httpweb2 ~]# chkconfig xinetd on

⑤、将另外一台服务器也配置成如上所示

⑥、测试看是否能将数据上传到服务器上

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

我们可以看到在1.200上的共享目录中有了文件

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

  2.搭建inotify服务器

    ①、可以配置epel源,进行yum安装,也可以在ftp://mirrors.yun-idc.com/epel/6/x86_64/inotify-tools-3.14-1.el6.x86_64.rpm下载使用

1
[root@php ~]# rpm -ivh inotify-tools-3.14-1.el6.x86_64.rpm

②写脚本实现对/www/html/wangfeng7399/文件夹进行监控,如文本修改,文件删除,新增等

1
2
3
4
5
6
7
8
  #!/bin/bash
src=/www/html/wangfeng7399/
inotifywait -mr -e create,delete,modify,attrib $src \
|while read files;do
rsync -ar --delete $src webuser@192.168.1.200::webserver --password-file=/etc/user.passwd
rsync -ar --delete $src webuser@192.168.1.201::webserver --password-file=/etc/user.passwd
done
~

③、启动inotify    

1
nohup ./inotfiy.sh &

④、创建/etc/user.passwd文件

1
wangfeng7399

 并将权限改为600    

⑤、测试,本处不在给出测试结果

四、结合php和mysql做内网测试

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

五、做DNS解析

①、安装DNS,本处DNS使用的yum的安装方式

1
[root@httpweb2 named]# yum install bind -y

②、修改DNS的主配置文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
options {
    directory       "/var/named";
    rrset-order { order random; };
};
view inuser{
  match-clients { 192.168.1.0/24; };
  zone "." IN {
        type hint;
        file "named.ca";
};
  zone "wangfeng7399.com." IN {
        type master;
        file "wangfeng7399.com.inuser";
};
};
view any{
  match-clients { any; };
  zone "." IN {
        type hint;
        file "named.ca";
};
  zone "wangfeng7399.com." IN {
        type master;
        file "wangfeng7399.com.outuser";
};
};


  ③、修改区域文件。

  wangfeng7399.com.inuser  


1
2
3
4
5
6
7
8
9
10
11
12
13
$TTL 600
@       IN SOA  dns.wangfeng7399.com.   admin.wangfeng7399.com.(
                2014032901
                1H
                5M
                5D
                1D
)
@       IN      NS      dns
dns     IN      A       192.168.1.109
www     IN      A       192.168.1.109
www     IN      A       192.168.1.200
~

    wangfeng7399.com.outuser

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$TTL 600
@       IN SOA  dns.wangfeng7399.com.   admin.wangfeng7399.com.(
                2014032901
                1H
                5M
                5D
                1D
)
@       IN      NS      dns
dns     IN      A       10.238.203.24
www     IN      A       10.238.203.24
www     IN      A       10.238.203.25
~                                                        
~

     ④、内网测试

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

我们可以看到这两个的首解析记录不相同

基于域名访问

基于rsync和inotify实现web网站文件的同步,并基于IPTABLES做用户限制

六、基于防火墙创建规则

  ①、为了服务器的安全,我们应该将所有的规则都设置为DROP

  ②、为了能让服务器做转发,我们应该开启forward功能,修改/etc/sysctl.conf

  net.ipv4.ip_forward = 1

  ③、将内网的web服务器的80端口映射为10.238.203.24-25的80端口  

1
2
[root@httpweb1 ~]# iptables -t nat -I PREROUTING -d 10.238.208.24 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80
[root@httpweb1 ~]# iptables -t nat -I PREROUTING -d 10.238.208.25 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80

  ④、将DNS映射到互联网上  

1
[root@httpweb1 ~]# iptables -t nat -I PREROUTING -d 10.238.208.24 -p udp --dport 53 -j DNAT --to-destination 192.168.1.220:53

 终于搞定了,由于本人水平有限,请各位大神匹配指正!!!谢谢


本文转自wangfeng7399 51CTO博客,原文链接:http://blog.51cto.com/wangfeng7399/1386342,如需转载请自行联系原作者