如果希望看到类似旧版本的核心内嵌初始化调试日志,可以编辑模块对应的 mod_iguard5.conf 配置文件,在其中加入第7-第10行的“log”:{...}, 段落。编辑JSON格式文件,千万不要忽略第5和第10行最后的","逗号。
x1"cache": {
2"enable": true,
3"ttl": 60,
4"scale": "large"
5},
6
7"log":{
8"level":"debug",
9"dir":"C:/Tercel/iGuard5/igdagent/logs"
10},
11
12"name":"Apache24-x86",
13"type":"AP24",
14"desc":"Apache24的32位防护模块"
添加以上“log”:{...}, 段落后,还需要重启Web服务,就能在igdagent日志目录下,看到名为 webmod-yyyymmdd.log的调试日志。
注意:在定位和解决完问题后,请务必把"level":"debug",
这段去掉!或者改为 "level":"error"
,否则会导致大量的调试日志输出!改完后,需要重启相关的Web服务。
如果是发布服务器,首先到【管理工具】->【服务】里,停止【stagingd5】服务。再执行cmd,返回命令方式下,执行以下命令:
cd C:\Tercel\iGuard5\StagingServer
stagingd.exe -x 2>null
如果是同步服务器,首先到【管理工具】->【服务】里,停止【igdagent】服务。再执行cmd,返回命令方式下,执行以下命令:
cd C:\Tercel\iGuard5\igdagent
igdagent.exe -x 2>null
如果需要退出命令行状态,只要输入“Ctrl-c”即可。
如果加载了某个插件,在控制台里,会出现该插件初始化成功的提示。如:
C:\Tercel\iGuard5\StagingServer>stagingd.exe -x >&2 2>null
Post_sync lua filter inited!{"status":0}Post_sync lua filter inited!
这种模式便于调试插件里的lua脚本。
如果是发布服务器,编辑 /usr/local/iguard5/stagingd/admtool 启动脚本,在如下第127行的启动命令里:
xxxxxxxxxx
21if "$MY_PROG_BIN" -d "$MY_PROG_SERVER_ROOT" ; then
2echo "server started"
在“-d”前面加入-x,变为以下内容:
xxxxxxxxxx
21if "$MY_PROG_BIN" -x -d "$MY_PROG_SERVER_ROOT" ; then
2echo "server started"
保存并退出。再执行./admtool start 2>/dev/null ,将以命令行方式执行,能看到更多的控制台信息。
[root@64 stagingd]# ./admtool start 2>/dev/null
Postsync lua filter inited!
如果是同步服务器,也是类似地修改 /usr/local/iguard5/igdagent/admtool 脚本的第127行,如上所示,加入 -x 参数(注意位置,在这一行的 -d 参数前)。保存并退出。再执行./admtool start 2>/dev/null ,将以命令行方式执行,能看到更多的控制台信息。
[root@64 igdagent]# ./admtool start 2>/dev/null
Presync lua filter inited!
如果需要退出命令行状态,只要输入“Ctrl-c”即可。
编辑同步服务器安装目录下的 conf/managed.conf配置文件,如 /usr/local/iguard5/igdagent/conf/managed.conf 或 C:\Tercel\iGuard5\igdagent\conf\managed.conf,按JSON格式,在其中加入自己需要的Web模块对应 mod_iguard5.conf 文件路径。
例如需要加入一个64位Apache 2.4模块,编辑 conf/managed.conf ,在原基础上,加入下面示例中的第4行(另外千万不要忽略第三行结尾处的","逗号!):
xxxxxxxxxx
61{
2"modules":[
3"C:/Tercel/iGuard5/igdagent/modules/iis7_64/mod_iguard5.conf",
4"C:/Tercel/iGuard5/igdagent/modules/ap24_64/mod_iguard5.conf"
5]
6}
可以,但需要编辑配置文件。如以Linux下的发布服务器举例,在conf/stagingd.conf配置文件里,加入以下第9-12行,即可指定日志放到/tmp/logs目录下。这个写法了,千万不要忘了第7行结尾的","逗号!(没有加"log":段落之前,原配置文件里并没有这个逗号)
xxxxxxxxxx
131{
2"default_worker_thread_number_per_host":1,
3"listen":{
4"port":39999,
5"certnickname":"stagingd.iguard5",
6"use_ssl":1
7},
8
9"log":{
10"level":"info",
11"dir":"/tmp/logs"
12}
13}
其他平台和同步服务器也是同样的处理。
在同步服务器安装目录下的conf目录下,新增一个alert.conf 配置文件,如 /usr/local/iguard5/igdagent/conf/alert.conf 或 C:\Tercel\iGuard5\igdagent\conf\alert.conf,alert.conf 里内容如下:
xxxxxxxxxx
31{
2"dir":"/tmp/alert"
3}
在第二行的dir里,指定任意目录为报警文件存放目录。保存后,需要同时重启igdagent和安装了核心内嵌模块的Web服务。
请注意:如果不需要对报警文件的路径做调整,要彻底删除这个文件( /usr/local/iguard5/igdagent/conf/alert.conf)。
如果发现传输有异常,需要先排查常见的几种可能:网络连接是否正常,同步端是否有写权限,剩余空间是否足够等。如果这些都没有问题,可以查看“实时日志”->"失败任务",如果发现在失败任务里,发现如下图大量出错代码为“14:115”的提示,应该是水印库文件被毁坏导致。
图示 5-4-1 水印库错误
可以执行水印修复命令。如果同步端在Windows系统,执行以下命令:
cd C:\Tercel\iGuard5\igdagent
igdagent.exe -e repairdb signdb
如果同步端在Linux系统,执行以下命令:
cd /usr/local/iguard5/igdagent/
./admtool -e repairdb signdb
执行后,会出现以下提示,一定要选择输入“Y”:
Do repair db(s) in DIR:
signdb
Confirm(Y/N) Y
看到以下提示,代表水印库被正确修复:
xxxxxxxxxx
41repair db#01 OK
2repair db#02 OK
3repair db#03 OK
4repair db#04 OK
备注:这个功能从2017年12月1日开始支持。
同步代理服务支持无水印模式。 如果iGuard只使用ilocker防护模式,或者只把iGuard用于同步,不需要产生水印,可以在同步服务器的配置 igdagent.conf 增加如下开关:
xxxxxxxxxx
51{
2...
3"discard_hmac" : true,
4...
5}
正常情况下,如果还有传输任务未完成,在发布服务被重启后,这些之前没有完成的任务并不会丢失,而是自动继续传输。这个处理在大部分时候是我们偏好的选择,因为能保证任务的连续性。但是如果这些未完成任务本身就是由于某种异常导致的,是无法处理的,这种情况下,我们会希望重启发布服务后这些未完成任务就不要再继续传输了。
这时候需要做以下操作:
编辑StagingServer目录下的conf/stagingd.conf配置文件,把以下这句配置:
xxxxxxxxxx
11"do_not_persist_task":false,
改为
xxxxxxxxxx
11"do_not_persist_task":true,
同时,停止发布服务。然后删除 StagingServer目录下的 『data\task.sqlite3』 文件。再重启发布服务即可。
以Linux下iLocker做发布监控机制时,其他一切正常,但发现有部分文件貌似有传输遗漏问题,如vi编辑后的文件没有正常上传,如某些中间件CMS产生的文件,或者sftp上传的文件,产生丢失的现象,可以做的调整是,修改如下这个stagingd安装目录下的conf/fen.conf 文件:
xxxxxxxxxx
171{
2"init-param":[
3{
4"param-name":"dev",
5"param-value":"/dev/ilocker1"
6},
7{
8"param-name":"schemefile",
9"param-value":"/usr/local/iguard5/stagingd/conf/scheme.conf"
10},
11{
12"param-name":"watchfilter",
13"param-value":"CREATE WRITE RENAME MKDIR RMDIR TRUNCATE UNLINK LINK",
14"param-value2":"CREATE WRITE RENAME MKDIR RMDIR TRUNCATE UNLINK LINK OPEN_APPEND OPEN_WRITE",
15}
16]
17}
把其中第13行整行彻底去掉(不要注释,JSON里没有注释这回事),只保留上述的第14行,并把前面的参数名,改为『param-value』,最后效果如下:
xxxxxxxxxx
161{
2"init-param":[
3{
4"param-name":"dev",
5"param-value":"/dev/ilocker1"
6},
7{
8"param-name":"schemefile",
9"param-value":"/usr/local/iguard5/stagingd/conf/scheme.conf"
10},
11{
12"param-name":"watchfilter",
13"param-value":"CREATE WRITE RENAME MKDIR RMDIR TRUNCATE UNLINK LINK OPEN_APPEND OPEN_WRITE",
14}
15]
16}
这两种写法的差异是第二种写法增加了对两种动作『OPEN_APPEND』和『 OPEN_WRITE』的监控。有些编辑器或程序,它们是以写的方式打开文件的。这种消息在上面一种写法的iLocker监控配置下,是『不管』的!为什么我们知道有这两种动作,但默认的处理是『不管』呢。因为这两种动作,一般并不是文件写关闭时触发的,是只要以写方式打开就会触发,如果都管,会导致文件变化消息很多,要合并的任务也很多。我们认为在文件正常写的时候(也就是配置里的『WRITE』动作)才上传文件较为合理。但是!有些应用,如vi/vim和某些CMS,可能确实就是用的『OPEN_WRITE』方式来写的,这样我们就会漏传。所以需要把这两个动作加回去。
如果需要更细致地判断是否这个原因导致的漏传,可以在fen.conf 配置文件里加入第11-第14行的『dumpfile』相关配置项如下:
xxxxxxxxxx
201{
2"init-param": [
3{
4"param-name": "dev",
5"param-value": "/dev/ilocker1"
6},
7{
8"param-name": "schemefile",
9"param-value": "/usr/local/iguard5/stagingd/conf/scheme.conf"
10},
11{
12"param-name": "dumpfile",
13"param-value": "/tmp/ilocker.dump.log"
14},
15{
16"param-name": "watchfilter",
17"param-value": "CREATE WRITE RENAME MKDIR RMDIR TRUNCATE UNLINK LINK OPEN_APPEND OPEN_WRITE"
18}
19]
20}
重启一次iGuard发布程序。
再次执行会导致文件漏传的写操作,然后关掉iGuard发布程序(这步必须做!否则可能不会产生dump文件),再查看指定的dump文件,如本例中的:/tmp/ilocker.dump.log,就可以看到捕获的所有动作(并不是捕获的所有动作,iGuard发布程序都做处理的)。
这个调试步骤,作用是看一下我们可能漏处理了哪些具体的动作。以下是该dump文件大致的样子:
WRITE,0,30440,/usr/bin/lua,/tmp/web-src/obsolete/missed.png,,logonly
CREATE,0,30440,/usr/bin/lua,/tmp/web-src/decide/EXE.jpg,,logonly
OPEN_WRITE,0,30440,/usr/bin/lua,/tmp/web-src/decide/EXE.jpg,,logonly
WRITE,0,30440,/usr/bin/lua,/tmp/web-src/decide/EXE.jpg,,logonly
WRITE,0,30440,/usr/bin/lua,/tmp/web-src/decide/EXE.jpg,,logonly
注意:如果把iLocker监控方式用在NFS服务器端,多个NFS客户端都会过来做文件更新,有微小可能会有消息遗漏的现象,不推荐使用。
建议按照以下步骤,有序检查可能的问题:
1、如果去掉我们的iGuard模块,就能看到修改后的效果,也不会403了,那就是iGuard权限的问题,进入步骤2排查;如果去掉我们的模块,依然403,那就是Apache配置问题,先去掉iGuard模块,调整Apache,保证没有模块的时候,访问是正常的。
2,第二步一定要关注Web控制台上是否有相应的报警日志:如果有报警日志,那可能是目录映射错误问题,或者配置后忘了重启发布服务;如果控制台上就压根没有报警日志,那就多半是alert.log文件的权限问题,进入步骤3。
3,彻底停掉igdagent服务:./admtool stop
——这步一定要执行,不要忽略。然后浏览器里刷新访问被修改的网页,403状态下,看看 /usr/local/iguard5/igdagent/alert/alert.log
报警文件里有没有这个文件的具体的报警日志!如果这个alert.log文件就不存在,或者文件存在但字节为0,都是属于不对的!
如果这个文件压根没有,则创建一个并设置权限:
cd /usr/local/iguard5/igdagent/alert/
touch alert.log
chmod 777 alert.*
再执行步骤3的网页刷新,再看alert.log是否有内容。如果有内容,执行步骤4;如果没有内容,执行步骤5。
4,重启同步服务,看控制台是否收到报警,是否能自动恢复该403文件:./admtool start
5,如果alert.log在步骤3的调整下还是没有内容,执行以下处理(依然保持同步服务停止状态,并关掉selinux):
/usr/local/iguard5/igdagent/admtool stop
setenforce 0
vi /usr/local/iguard5/igdagent/conf/alert.conf
编辑一个全新的 /usr/local/iguard5/igdagent/conf/alert.conf,在里面的dir
里指定报警日志的输出目录,内容如下:
xxxxxxxxxx
31{
2"dir":"/tmp"
3}
重启Apache后,再刷新访问403页面,再到 /tmp 目录下,查看是否有 /tmp/alert.log 文件产生。
如果这时候就有 /tmp/alert.log 文件产生并有内容了,那就是Apache的进程无法写入 /usr/local/iguard5/igdagent/alert 目录,但可以写入 /tmp 目录,以后都需要改用 /tmp 目录。这时候就可以重启igdagent服务,理应就一切正常了。 如果这时候还是没有/tmp/alert.log 产生,那就要用iGuardv5 FAQ [5.4.1 怎样查看核心内嵌模块的调试日志?] 里的调试大法了。
iLocker是天存公司独有的一款Linux文件监控系统。到目前为止,它有两个版本1.0和2.0,两者在配置上不兼容。
iGuard Linux 发布服务器做文件自动更新上传时,可以选择 Fuse、iLocker、NFS等方式作为文件变换监控的方式。但这些方式只能同时选择一种。如果选择iLocker方式,则需要对1.0 或 2.0 版做一定的适配。
总的原则是先查看iGuard Linux发布服务器自身的版本:如果这个发布程序早于20171201版,则这个发布服务器默认支持iLocker1.0;如果这个发布程序晚于(包括)20171201版,则它默认支持iLocker2.0版本。
如果晚于 20171201版的发布程序需要使用 iLocker1.0版,也是可以实现的。具体步骤如下:
1、解压iLocker1.0压缩包,选择合适的ilocker.ko文件。不需要任何配置,直接执行bin/ilocker start
,启动iLocker。以下是示例的步骤,请根据实际情况选择适用的ilocker.ko文件。
tar xzvf ilocker1.0_20180116.tar.gz
cd ilocker/lib
ln -sf ilocker\@2.6.32-573.el6.x86_64\@x86_64\@rhel6.7\@.ko ilocker.ko #这步请根据uname -an的实际情况选择合适模块
cd ..
bin/ilocker start
2、修改发布服务器下的conf/fen.conf里的"schemefile"
配置项(以下第9行),从原来的"/usr/local/iguard5/stagingd/conf/scheme.conf"
,改为 "/usr/local/iguard5/stagingd/conf/scheme1.conf"
,最后内容如下:
xxxxxxxxxx
161{
2"init-param":[
3{
4"param-name":"dev",
5"param-value":"/dev/ilocker1"
6},
7{
8"param-name":"schemefile",
9"param-value":"/usr/local/iguard5/stagingd/conf/scheme1.conf"
10},
11{
12"param-name":"watchfilter",
13... ...
14}
15]
16}
3、再执行 vi /usr/local/iguard5/stagingd/conf/scheme1.conf
,创建和编辑 scheme1.conf 里的内容。该文件内容如下:
{ "options": [
"clear",
"option_write",
"pass"
],
"rule_pattern": "*,*,*,*,%1,log"
}
保存退出。
4、选择iLocker做监控时需要的库文件。
# cd /usr/local/iguard5/stagingd
# mv libfen.so libfen.so.original
# ln -sf liblsmxfen.so libfen.so
完成上述步骤后,才能启动发布程序! 执行 /usr/local/iguard5/stagingd/admtool start
,正常配置源端目录和目标端目录即可。
5、在发布服务器的控制台里,配置好『站点』、『关联服务器』等必要信息并保存后,可以执行以下命令,验证发布服务器和iLocker的配合是否正常(前提是一定要在控制台里配置好正确的站点信息):
# echo print > /dev/ilocker1
# dmesg
如果执行上述两条命令后,在dmesg里,能看到以下内容,则发布程序可以正常监控源目录(以下示例中,监控的源目录为/var/www/html 目录 )的文件变化了。
xxxxxxxxxx
51ilocker: | ----Rules----
2ilocker: |option_write : set
3ilocker: |option_read : not set
4ilocker: |*,*,*,*,/var/www/html/*,log
5ilocker: |----End----
6、配置自启动。编辑自启动文件:vi /etc/rc.local
,写入以下内容:
/usr/local/iguard5/ilocker/bin/ilocker start
/usr/local/iguard5/stagingd/admtool start
请注意涉及的路径要根据实际情况修改,另外顺序不要颠倒。
如果是Redhat7/CentOS7系列操作系统,需要在root管理员权限下,使用firewall-cmd 命令添加开放端口。具体步骤如下:
#查看当前的防火墙设置:
firewall-cmd --list-all
返回结果如下:
public (default, active)
interfaces: eno16780032
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
可以看出,当前的域(zone)为public,我们需要在该域开放37777端口。这时需要执行(去除--zone=public的部分也可以):
firewall-cmd --permanent --zone=public --add-port=37777/tcp
firewall-cmd --reload
firewall-cmd --list-all
输入最后一句查看状态的命令后,能看到37777端口已经放开了:
public (default, active)
interfaces: eno16780032
sources:
services: dhcpv6-client ssh
ports: 37777/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
关于Redhat7/CentOS7的防火墙调整,更多信息请参看官方文档:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls
如果按照【2.4.2 Linux/Unix Apache 核心内嵌】章节的说明,加载Apache模块后,重启Apache服务时报错。具体解决步骤要视乎报错提示的详细信息。
可能一:如果报错信息提示如下
# bin/apachectl restart httpd: Syntax error on line 411 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/iguard5/igdagent/modules/ap22/mod_ap22_iguard5.so into server: libigx5.so: cannot open shared object file: No such file or directory
可以知道根本原因是内嵌模块依赖于【 libigx5.so】通用库。这个【 libigx5.so】位于iGuard同步目录下,但iGuard同步目录不是系统的默认库搜索路径,所以Apache找不到这个依赖库文件。需要给这个 libigx5.so 库文件做一个软链接,把它放到系统库目录(如/lib64/ 下)。执行以下命令:
# ln -s /usr/local/iguard5/igdagent/modules/libigx5/libigx5.so /lib64/libigx5.so
确认在默认状态下,用 ldd 查看Apache iGuardv5 模块不会导致依赖库欠缺即可。
ldd /usr/local/iguard5/igdagent/modules/ap22/mod_ap22_iguard5.so
linux-vdso64.so.1 => (0x00000fff7a620000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00000fff7a5a0000) libigx5.so => /lib64/libigx5.so (0x00000fff7a540000) libc.so.6 => /lib64/libc.so.6 (0x00000fff7a350000) /lib64/ld64.so.1 (0x0000000042990000) libdl.so.2 => /lib64/libdl.so.2 (0x00000fff7a320000) libm.so.6 => /lib64/libm.so.6 (0x00000fff7a220000) librt.so.1 => /lib64/librt.so.1 (0x00000fff7a1f0000)
可能二:检查 LoadModule 和 LoadiGuardConfigFile 两句指令里,涉及的两个文件路径是否正确,可以用 ls 命令验证一下。
可能三:检查 Apache用户(daemon或者nobody)对 /usr/local/iguard5/igdagent/alert 目录下的 alert.* 文件是否读写权限不够。
编辑同步服务器安装目录下的 conf/trustzone.conf 文件,在其中的ip_filter
段里,限定允许的客户端ip地址。
xxxxxxxxxx
51{
2"stagings": "....",
3
4"ip_filter":[IP]
5}
IP字符串的过滤条目,采用文件过滤规则的格式,有以下3种写法:
"ip_filter":["'192.168.100.1'"]
"ip_filter":["-'10.10.10.1'"]
编辑发布服务器安装目录下的 conf\stagingd.conf 文件,在listen
段内,加入 "allow_ips"
属性如下:
xxxxxxxxxx
101{
2......
3"listen": {
4...
5"allow_ips":["127.0.0.1","*::1"],
6...
7},
8......
9
10}
"allow_ips"
是一个字符串数组,每个条目为允许访问控制台的ip地址,可以包含'*'
通配符。
如果未配置任何条目,则没有限制访问,否则以配置的客户端IP为准。
注意:这个功能从20181223版本才开始支持。
要以特定用户运行同步程序有两种方式:一种是直接指定以该用户执行同步程序,另一种是以root启动同步服务,但在配置文件里, 指定以特定用户运行工作进程。两种方式只需要选择其一。
方法一:直接指定某用户执行同步程序。
假定使用者打算以iguard用户执行程序,需要先执行以下操作,这些操作执行一次即可。
xxxxxxxxxx
31#首先把安装目录属主改为实际工作用户属主
2cd /usr/local/iguardv5
3chown -R iguard.iguard *
以后只需要以该用户权限启动同步程序即可,步骤如下:
xxxxxxxxxx
41# 切换为该用户启动同步服务
2su iguard
3cd /usr/local/iguardv5/igdagent/
4./admtool start
同时需要设置自启动时也以该用户进程启动。编辑 /etc/rc.local 文件,写入:
xxxxxxxxxx
11su -c "/usr/local/iguardv5/igdagent/admtool start" iguard
方法二:以root启动发布(或同步)服务,但在配置文件里, 指定以特定用户运行工作进程。
修改同步服务器相应配置文件,如igdagent.conf
,加入以下配置项:
xxxxxxxxxx
61{
2......
3"AsUser": "iguard",
4"AsGroup": "iguard",
5......
6}
如上配置可以切换成 iguard 用户+ iguard 组的身份来运行igdagent的工作进程。
igdagent是双进程(守护进程和工作进程)运行机制,主进程以启动命令的用户身份来执行,工作进程默认同主进程;如果使用以上配置,工作进程会试图切换到指定身份运行。启动命令的用户需要有足够的权限来切换到指定用户,拥有大权限的用户才能成功切换到小权限,反之会失败。
注意事项:igdagent安装目录及目录下内容,确保文件/目录权限已经全部切换到指定用户上!(重要!)
以上机制也可应用到发布服务上。
以下功能从2019/03/21版本开始支持。早于此前的版本,需要使用Lua外挂的形式,详见『5.3.2.1 修改接受端文件的权限(Linux平台)』。
如编辑 conf/igdagent.conf 配置文件,在其中增加如下配置,则可以把所有文件("filename_pattern": "*")的owner/group设置为iguard/iguard,文件的权限为“644”,目录的权限为“755”。
xxxxxxxxxx
111{
2"owners": [
3{
4"filename_pattern": "*",
5"owner": "iguard",
6"group": "iguard",
7"file-pmode": "644",
8"dir-pmode": "755"
9}
10]
11}
如果有两个目录,需要归属不同的owner和group,分别为master1和master2,则可以写为如下数组形式:
xxxxxxxxxx
171{
2"owners": [
3{
4"filename_pattern": "/var/www/host1/*",
5"owner": "master1",
6"group": "web",
7"file-pmode": "644",
8"dir-pmode": "755"
9},
10{
11"filename_pattern": "/var/www/host2/*",
12"owner": "master2",
13"group": "web",
14"file-pmode": "666",
15}
16]
17}
修改保存后,重启同步进程即可。
我们的程序从2018年9月开始支持IPv6,请注意使用的版本。
除了安装程序的系统自身需要支持 IPv6之外,还需要调整发布或者同步服务器的配置文件conf/stagingd.conf和conf/igdagent.conf。把这一句 "listen":{ "address":""
,改为 "listen":{ "address":"::",
,这个写法类似于监听 IPv4的0.0.0.0 地址,最后结果大致如下:
xxxxxxxxxx
61"listen":{
2"address":"::",
3"port":39999,
4"certnickname":"stagingd.iguard5",
5"use_ssl":1
6},
修改完成后,需要重启发布或同步服务。
重启后,请先用netstat 确认 [::] 的IPv6本地地址和端口,确实处于监听状态。
如Windows平台,执行 netstat -an |findstr 39999
(发布服务)或 netstat -an |findstr 37777
(同步服务),能看到以下结果,就是已经在监听IPv6地址了:
C:>netstat -an |findstr 39999
TCP 0.0.0.0:39999 0.0.0.0:0 LISTENING
TCP [::]:39999 [::]:0 LISTENING
如Linux平台,则分别执行 netstat -an |findstr 39999
(发布服务)或 netstat -an |findstr 37777
(同步服务),能看到如下状态。
# netstat -an |grep 39999
tcp 0 0 :::39999 :::* LISTEN
以下为对比,是监听IPv4地址时的场景:
# netstat -an |grep 39999
tcp 0 0 0.0.0.0:39999 0.0.0.0:* LISTEN
另外,Linux下的发布/同步,如果在本地看已经绑定了IPv6的监听地址,但在本地以外的机器却访问不到相应的端口,那很可能是因为防火墙的原因。Linux下IPv4和 IPv6的防火墙时独立的。可以试试看关掉IPv6网络防火墙看看效果如何:service ip6tables stop
如果不能完全关闭防火墙,可以编辑 IPv6 iptables表 /etc/sysconfig/ip6tables
,加入类似这样的一行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 39999 -j ACCEPT
再重启服务即可,service ip6tables restart
。
####== 额外知识点 ==
关于IPv6的地址,有以下三种形式:
截图上不是三个不同的IPv6地址,这三个实际上是一台机器上三种不同IPv6地址写法! 根据实际情况,写其中任意一种即可,都支持!
通过浏览器访问Web管理控制台时,如果用IPv6的方式访问,在浏览器里这么写地址:
https://[fde5:9dba:8800:53ab:2912:712f:5989:66c7]:39999/
如果浏览器和发布在同一台机器上,访问本地IPv6地址,以下地址即可:
https://[::1]:39999/
和非空目录删除有关系的配置项包括两个:1、发布端的 force_rmold_on_rendir
; 2、同步端的 brute_sync_rmdir
。解释分别如下:
force_rmold_on_rendir
从2018年2月开始支持。编辑发布服务器配置文件(conf/stagingd.conf),如果这项设置改为 "force_rmold_on_rendir": true
,会在A目录改名为B目录并自动同步时,强制把目标端的原A目录及其子目录都删掉。配置项如下:
xxxxxxxxxx
51{
2......
3"force_rmold_on_rendir": true,
4......
5}
这个配置项为true
时,目录改名会发起强制删除(递归)旧目录名的动作。这样做的代价是:对于拥有大量文件的目录,一个改名动作会导致大数据量的搬迁。
brute_sync_rmdir
从2018年7月开始支持。编辑同步服务器配置文件(conf/igdagent.conf),如果这项设置改为 "brute_sync_rmdir": true
,对于目录删除动作,强制进行递归删除,缺省情况下不启用该功能。配置项如下:
xxxxxxxxxx
51{
2......
3"brute_sync_rmdir":true,
4......
5}
在不支持上述配置项的环境里,可以选择Lua方案。方法是先把同步服务器安装目录下的 "/plugin/lua/_postsync_forcedel.lua“文件名,改名为postsync.lua,然后重启同步服务。
需要切记的是:如果采用这种方式的同时,网站使用了iLocker防护模式,还需要配合放开 /bin/rm
进程的执行权限。
如果同步时希望忽略所有的删除动作,实现增量的同步,也就是源端的删除动作不需要同步到发布端,可以有以下两种做法,只需要选择其中一种即可。
1,如果是2018年10月以后的版本,可以使用这种方法。编辑同步端的 C:\Tercel\iGuard5\igdagent\conf\trustzone.conf
或 /usr/local/iguard5/igdagent/conf/trustzone.conf
,如下加入 "fs_exports"
一段。把其中"/path/to/public/dir"
修改为自己的实际路径,把"delete"
字段的值,改为 false
,最后重启igdagent
同步服务。请注意,在"fs_exports"
里设置的目录必须是个网站目录名,不能带通配符号。
xxxxxxxxxx
131{
2"stagings": [
3"staging-WIN32-25838ac113ba36503894208fb74ed838"
4],
5"fs_exports": [
6{
7"dir": "/path/to/public/dir",
8"read": true,
9"write": true,
10"delete": false
11}
12]
13}
如果需要对细粒度到文件级别的设置,则需要再加一个字段"fs_perms"
。该字段需要在"fs_exports" 设置的基础上使用,它定义了更细粒度的访问权限控制。如果"fs_exports"
中完全没有条目,表示全开放,此时 "fs_perms" 即使有配置也不会生效。在"fs_perms"
段中的"pattern"
则可以写通配符或具体某个文件路径,具体见以下示例。
xxxxxxxxxx
211{
2"stagings": [
3"staging-WIN32-25838ac113ba36503894208fb74ed838"
4],
5"fs_exports": [
6{
7"dir": "/path/to/public/dir",
8"read": true,
9"write": true,
10"delete": false
11}
12],
13"fs_perms": [
14{
15"pattern": "/path/to/public/dir/*.exe",
16"read": true,
17"write": false,
18"delete": false
19}
20]
21}
2、如果是2018年10月以前的版本,可以使用方法二。修改同步服务器安装目录下的 /plugin/lua/_presync_nodelete.lua
文件名为 presync.lua
。然后重新启动igdagent服务。
这样会忽略所有的文件删除动作,也就是所有发布端的删除任务,接收端都不会执行。这个方法无论哪个阶段的程序都支持。
在某些场景里,可能需要重置用户密码。可以给以下文件 C:\Tercel\iGuard5\StagingServer\auth\usr.db
这个文件或者 /usr/local/iguard5/stagingd/auth/usr/db
改名后,重启发布服务即可。此时用户密码恢复默认值。
正常情况下,发布服务器和同步服务器之间使用的是SSL加密安全通信,绝大多数情况下不需要做改动。只有在非常特殊的场合,比如有些非常受限的网络环境里,如果怀疑由于安全通讯导致连通性问题,可以把发布和同步服务器的通讯模式改为普通明文方式,做对比测试,以协助问题定位。
步骤如下:修改同步端 igdagent/conf/igdagent.conf
配置文件,在其中的 "listen"
把,把其中的"use_ssl":1
改为 "use_ssl":0
。保存修改后,还需要重启igdagent服务。
xxxxxxxxxx
61"listen":{
2 "address":"",
3 "port":37777,
4 "certnickname":"igdagent.iguard5",
5 "use_ssl":0
6},
同时,还需要到iGuardv5控制台,登录后,选择【开始】-【同步管理】-【服务器管理】-【服务器列表】中的具体服务器,然后再点击【编辑】,在服务器的详情里,撤选“启用安全通信”,如下图:
完成后,点击【确定】保存修改。退出该界面后,还选择重启发布服务,才能使该项生效。
注意:这个修改只是设定发布和同步服务器之间不使用SSL通讯,访问Web控制台本身依然需要使用https访问!如果确实连Web控制台也要使用明文协议访问,则需要修改 StagingServer/conf/stagingd.conf
,把"listen"
段设置为 "use_ssl":0
,并重启发布服务即可实现。这个修改和前面的“发布-同步”连接的安全通讯是完全独立的无关的。
某些系统漏洞扫描程序,会对我们安装/发布程序所在系统进行检查。它们可能会报告一些和SSL加密算法相关的问题,如汇报以下安全预警,则需要对程序做以下调整。
1、程序需要升级到 2022/01/20 时间点以后的版本!
2、禁用不满足安全要求的弱算法:发布端请修改 stagingd.conf
配置文件;如果是同步端,则修改 igdagent.conf
配置文件,添加以下"SSLCipherSuites":
段内容。
x
1
2"SSLCipherSuites": {
3 "SSLVer": "tls1.2",
4 "DeniedNames": "_MD5,_RC4_"
5},
6
3、重新启动发布服务或者同步服务。
备注:如果对扫描防护有更严格的需求,可以参见 5.4.14 怎样限制连接同步端的客户端IP地址? 和 5.4.15 怎样限制连接发布端的客户端IP地址? 中的详细步骤,加入对客户端IP来源的限制,可以更有效地阻拦扫描的访问。
我们也提供了stacli
命令行工具,可用作独立的命令行维护管理。这个工具的使用方式请参见:【发布服务命令行工具stacli说明】。
在同步服务器端,需要修改conf/igdagent.conf
配置文件,设置这段里 "use_ssl":0
,然后重启同步服务。
xxxxxxxxxx
61"listen":{
2"address":"",
3"port":37777,
4"certnickname":"igdagent.iguard5",
5"use_ssl":0
6},
如果使用的发布服务器版本比2020/06/02版本更新,并不需要做如下操作。只需要在界面上,调整同步服务器设置里的“启用安全通信”,去除该配置项即可。
但在比2020/06/02之前的版本,就需要一点手工调整了。由于在发布服务器端,具体配置保存在SQLite里,需要手工修改配置。如果发布服务器在Windows端,可以下载SQLiteDatabaseBrowser程序(https://sqlitebrowser.org/),协助编辑修改SQLite里的Host->usessl
字段即可。
如果发布程序在Linux平台,可以执行以下操作修改:
$ cd /usr/local/iguard5/stagingd/conf
$ sqlite3 config.db
sqlite> SELECT id,name,address,usessl FROM host; -- 从host表获得全部服务器列表
sqlite> UPDATE host SET usessl=0 WHERE id=1; --根据实际情况,修改id值,把指定id的服务器连接改为非ssl连接
sqlite> SELECT id,name,address,usessl FROM host WHERE id=1; -- 再执行一遍查询,确认前的修改生效
sqlite> .quit
完成后,还需要重启发布程序生效。