如果你的公司很多数据都是涉密的,你已经把USB等传输数据的端口已经禁止了,机箱上锁了,但肯定不想员工把公司很多内部文件传输到互联网上去,那么你该怎么做呢?我觉得有如下几个选择:
- 如果你的文件涉及等级较高,保密性极强,那么我推荐你让这部分涉密的员工的办公电脑严格切断外部网络,要查资料的话,统统用单台公共电脑查找,公共电脑和办公电脑没有任何物理连接,并有相应的审计软件审计用户的行为。记住,真正涉密的单位,你应该严格的做到禁止“一机两用”
- 购买X信服,X康的网络行为管理设备,禁止对外文件的上传。但通常这类设备都比较昂贵,一般根据文件类型来判断上传行为,如果用户使用https加密的方式上传文件,它们一般就不管用了。并且,有些弱智的行为管理设备,居然是根据文件后缀来判断文件是否可以上传的,真个就有点搞笑了。
- 把公司网络划分成不同的vlan,有些段能上网,有些不能上网,把能上网段的某台机器,作为大家共享上网的跳板机使用,然后做路由允许内网的某些机器访问此网段的某台机器,来上网查资料,有些文档需要下载下来的,只允许单向从外网到内网传输,不允许传输出去。我们这里讲的就是在这个场景下的应用。
下面是这个场景简单的架构图,我们这里省去了网络设备划分vlan,做路由等细节。
图中,除了上网跳板机能上网外,其他所有设备都只能访问内网。员工电脑账号通过samba PDC做域控进行管理(参考文章)。PDC会定期把系统的passwd,shadow文件,samba的private等文件夹同步到备用的samba服务器中去,备用的samba服务器通过lsyncd来同步外网下载的资料到内网samba PDC中,员工通过自己的办公电脑,在pdc中读取文件。
需要注意的是,我们的跳板机需要禁用剪切板等一系列共享,如何设备远程的跳板机请参考此文章。
这里主要讲的是,如何通过lsyncd这个软件(这里是它的软件主页),把备用samba上的文件,同步到我们主要的文件服务器samba PDC上。
两台samba操作系统是centos6(理论上centos7的配置应该是一样的),它们的IP地址在192.168.1.0/24段中。同步文件夹分两台机器都是/srv/tongbu目录。我们把接收文件的samba pdc称为服务端(192.168.1.2),发送文件的备用samba称为客户端(192.168.1.3)。下面讲下两个设置。
服务端:
安装rsync和xinetd,启动相应的rsync服务
yum install rsync xinetd
创建xinetd配置文件:
vim /etc/xinetd.d/rsync内容如下:
service rsync { disable = no only_from = 192.168.1.0/24 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
启动守护进程:
service xinetd start
加入开机启动:
chkconfig xinetd on
查看rsync服务是否已经启动:
netstat -tnlp | grep 873
防火墙放行端口:
iptables -I INPUT -p tcp –dport 873 -j ACCEPT
service iptables save
service iptables restart
同步目录的selinux设置:
如果工作目录是单纯的rsync同步目录,则把同步的/srv/tongbu文件夹设置成rsync_data_t这个上下文即可。此处,我们这个文件夹不仅仅是rsync工作目录,还是samba工作目录,所以,我们应该设置成public_content,此处,我们的这个文件夹不仅需要读取,还需要写入,因此要这样设置上下文:
semanage fcontext -a -t public_content_rw_t “/srv/tongbu(/.*)?”
restorecon -Rv /srv/tongbu
另外,我们还需要开启一些布尔值:
setsebool -P allow_rsync_anon_write 1
如果要改变rsync的默认端口,需要用semanage port 更改rsync_port_t的值,具体方案见这篇更改ssh默认端口的文章。你可以安装selinux-policy-doc这个包后,用man 8 rsync_selinux查看对于rsync来说,selinux具体的配置方法。
配置rsync文件:
vim /etc/rsyncd.conf 内容如下:
[tongbu] path = /srv/tongbu/ comment = lsyncd test uid = root gid = root read only = no auth users = lsyncd secrets file = /etc/rsyncd/rsyncd.secret
配置上面的密码文件:
vim /etc/rsyncd/rsyncd.secret 内容如下:
lsyncd:passmima
设置密码文件权限:
chmod 600 /etc/rsyncd/rsyncd.secret
此时重启下xinetd服务,我们的服务端大致就已经工作完成了。
客户端配置:
安装rsync和lsyncd软件:
yum install rsync epel-release
yum install lsyncd
配置同步密码:
vim /etc/rsyncd/rsyncd.secret 内容如下
passmima
更改密码文件权限:
chmod 600 /etc/rsyncd/rsyncd.secret
配置lsyncd:
vim /etc/lsyncd.conf 内容如下:
settings { logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/tmp/lsyncd.status", maxProcesses = 8, } sync { default.rsync, source = "/srv/tongbu", target = "lsyncd@192.168.1.2::tongbu", delete="running", exclude = { ".*", ".tmp" }, delay = 30, init = false, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, whole_file = false, verbose = true, password_file = "/etc/rsyncd/rsyncd.secret", _extra = {"--bwlimit=200"} } }
lsyncd默认使用的inotifyMode是CloseWrite,这里就使用默认值,故没有配置,如果有需要,可以再settings里面配置下。
启动lsyncd服务并设置开机启动:
service lsyncd start
chkconfig lsyncd on
此时,我们在客户端下的/srv/tongbu文件夹中新增文件,在服务端的/srv/tongbu文件夹应该会看到变化。日志的提示:
Wed Sep 7 16:56:42 2016 Normal: Calling rsync with filter-list of new/modified files/dirs
/test/4913
/test/
/
/test/hjkl.txt
/test/hjkl.txt~
sending incremental file list
test/
test/hjkl.txtsent 202 bytes received 31 bytes 22.19 bytes/sec
total size is 48 speedup is 0.21
Wed Sep 7 16:56:52 2016 Normal: Finished a list after exitcode: 0
在文件特别多的时候,有报道显示会出现丢失文件的现象,我们需要把服务端的/etc/xinetd.conf文件中改下:
cps = 500 30 instances = UNLIMITED per_source = UNLIMITED
具体配置含义可以man xinetd.conf看一下。
lsyncd的配置可以参考官方文档。英文不好的看下这个也不错。