使用ArchiveBox + Pocket + Fess,随时随地创建我的网页快照(带有全文搜索功能)

这篇文章是NTT通信Advent Calendar 2019第11天的文章。
昨天是@koki-sato的工作步骤书使用docsify来创建的。

首先

在分析安全威胁时,有时会使用一种称为OSINT(开放源情报)的方法。OSINT是指使用公开的信息来源进行信息收集和分析活动,其主要信息来源包括公开的互联网文章、社交媒体以及威胁源输入等。

OSINT的应用例子包括,根据通过OSINT收集到的迹象信息,在事件响应时判断发现的URL或文件是否恶意。

每天进行信息收集时会面临以下类似的问题。

    • 元情報がどこにあったか分からなくなる

 

    溜め込んだ情報が多すぎて見つけられなくなる

我试着制作了一张网页快照。

因此,为了解决这个问题,我创建了一个私人档案库(称为“我的鱼拓”)。

我的目标要求包括以下三个点。

    • 有料ツール/サービスを使わないこと

 

    • 特定の端末に依存せずにいつでもどこでもアーカイブできること(端末非依存)

 

    アーカイブしたコンテンツの中身まで検索できること(全文検索)

为了满足这些要求,我们将ArchiveBox、Pocket和Fess进行了组合。

ArchiveBox
Fess

菜谱

启动网页存档服务器

我们选择了开源的Web存档工具ArchiveBox作为鱼拓服务器使用。
它不仅可以以HTML的形式进行存档,还可以存档为PDF、屏幕截图(PNG)、WARC等多种格式。
ConoHa也提供了安装了ArchiveBox的模板镜像。

前提条件 tí

Docker与Docker Compose可以运行的最小要求

准备

唯一需要的是docker-compose.yml和nginx.conf文件。
所有的Docker镜像都将使用DockerHub上的官方镜像。

./
├ docker-compose.yml
└ nginx.conf
    docker-compose.yml
version: '3'

volumes:
    archivebox-data:
    elasticsearch-data01:
    elasticsearch-dictionary01:
    elasticsearch-data02:
    elasticsearch-dictionary02:

services:
    archivebox:
        image: nikisweeting/archivebox:latest
        stdin_open: true
        tty: true
        environment:
            - TZ=Asia/Tokyo
            - SUBMIT_ARCHIVE_DOT_ORG=False
            - FETCH_MEDIA=False
        volumes:
            - archivebox-data:/data
        shm_size: 256m
        restart: always
        command: bash -c '[[ -f /data/index.html ]] || ( echo "https://github.com/pirate/ArchiveBox" | /bin/archive ); tail -f /dev/null'

    nginx:
        image: nginx
        ports:
            - '8098:80'
        environment:
            - TZ=Asia/Tokyo
        volumes:
            - ./nginx.conf:/etc/nginx/nginx.conf:ro
            - archivebox-data:/var/www
        restart: always

    fess:
        image: codelibs/fess:13.4.0
        ports:
            - "8080:8080"
        depends_on:
            - elasticsearch01
            - elasticsearch02
        environment:
            - TZ=Asia/Tokyo
            - RUN_ELASTICSEARCH=false
            - "ES_HTTP_URL=http://elasticsearch01:9200"
            - "FESS_DICTIONARY_PATH=/usr/share/elasticsearch/config/dictionary/"
        restart: always

    elasticsearch01:
        image: codelibs/fess-elasticsearch:7.4.0
        environment:
            - TZ=Asia/Tokyo
            - node.name=elasticsearch01
            - discovery.seed_hosts=elasticsearch02
            - cluster.initial_master_nodes=elasticsearch01,elasticsearch02
            - cluster.name=fess-elasticsearch
            - bootstrap.memory_lock=true
            - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
            - "FESS_DICTIONARY_PATH=/usr/share/elasticsearch/config/dictionary"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        volumes:
            - elasticsearch-data01:/var/lib/elasticsearch
            - elasticsearch-dictionary01:/usr/share/elasticsearch/config/dictionary
        restart: always

    elasticsearch02:
        image: codelibs/fess-elasticsearch:7.4.0
        environment:
            - TZ=Asia/Tokyo
            - node.name=elasticsearch02
            - discovery.seed_hosts=elasticsearch01
            - cluster.initial_master_nodes=elasticsearch01,elasticsearch02
            - cluster.name=fess-elasticsearch
            - bootstrap.memory_lock=true
            - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
            - "FESS_DICTIONARY_PATH=/usr/share/elasticsearch/config/dictionary"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        volumes:
            - elasticsearch-data02:/var/lib/elasticsearch
            - elasticsearch-dictionary02:/usr/share/elasticsearch/config/dictionary
        restart: always

因为ArchiveBox的官方Docker镜像只有latest标签,所以不太明确,但本次使用的是截至12/1的ArchiveBox版本。

此外,您可以根据个人喜好参考官方文档来设置ArchiveBox的环境变量。
在上面的例子中,分别禁用了向Archive.org上传(SUBMIT_ARCHIVE_DOT_ORG)和获取媒体文件(FETCH_MEDIA)这两个功能。

    nginx.conf

nginx.conf只是获取ArchiveBox官方设置文件。

服务器启动

docker-compose up -d

确认操作(查看我的鱼拓)

ArchiveBox

将数据输入到鱼拓

虽然在ArchiveBox的官方文档中写明了使用docker命令的方法,但并未提及使用docker-compose命令的方法。
以下是使用docker-compose实现与官方文档相同功能的命令:

echo 'https://example.com' | docker-compose exec -T archivebox /bin/archive
# or
cat bookmarks.html | docker-compose exec -T archivebox /bin/archive
# or
docker-compose exec archivebox /bin/archive 'https://example.com/some/rss/feed.xml'

实现“随时随地”(与Pocket的合作)。

如果不在正在运行ArchiveBox的终端上执行命令,就无法获取鱼拓,这样非常不方便。
人类是会忘记的生物,所以即使在移动中的空闲时间中进行调查,也希望能立即获取鱼拓。

因此,我們將與外部服務Pocket進行整合。
Pocket是一個用於保存互聯網上文章等內容列表以供稍後閱讀的服務。
由於Pocket具有通過RSS公開保存列表的功能,我們將利用這一點。

    1. Pocket RSS公開设置

 

    1. 在创建免费账户后,在账户选项的隐私设置中取消RSS订阅的密码保护。3

 

    1. 这样,Pocket的准备工作就完成了。

 

    1. 定期获取RSS

 

    1. 只需在ArchiveBox端设置cron,定期获取和存档RSS即可完成协作。

 

    具体而言,执行以下类似命令的cron即可。4
docker-compose exec archivebox /bin/archive 'http://getpocket.com/users/PATH-TO-MY-FEED/feed/all'

Pocket可以作为主要浏览器的扩展功能使用,并且还有Android和iPhone应用程序。如果您在多台设备上使用相同的Pocket帐户随时保存您感兴趣的页面,它将自动为您获取鱼的拓片,因此您随时随地都可以访问。

实现全文搜索(Fess配置).

虽然到目前为止,我们可以随时随地创建网页快照,但实际上,ArchiveBox的标准搜索功能只能搜索标题。这样一来,我们无法在需要时回顾和利用信息。

最後出場的是Fess。
Fess是一种自称为“能够在5分钟内轻松构建的全文搜索服务器”的开源全文搜索服务器。
它功能丰富,可以通过Web、文件系统、Windows共享文件夹、数据库等多种方式进行爬取,并支持多种文件格式,例如MS Office(Word/Excel/PowerPoint)和PDF等。

Fessトップ画面

要设置 Fess,请使用管理员身份登录到管理界面(http://localhost:8080/admin)。
默认的用户名和密码如官方文档中所述,都是admin。

进行网页快照搜索所需的设置最低限度包括以下两个要点。

    1. 爬虫设置

 

    路径映射设置

爬虫设置

クローラ設定

路径映射设置 zhì)

パスマッピング設定

行动确认(手动爬行)

Default Crawlerの手動実行
ジョブログの確認

一旦建立无事索引,便能够进行包括内容在内的全文搜索。

最后

为了实现更高效的OSINT,我创建了我的魚拓。虽然在某些网站上,存档显示可能会出错,或者未带扩展名的图像文件可能会出现在搜索索引中,还有一些我在细节方面有所疑虑的地方,但个人认为已经达到了足够的质量,我很满意。接下来,我计划使用OCR将图像内的文字进行搜索索引化。

希望大家都过上美好的OSINT生活!

明天是 @nitky 先生。期待与您度过愉快的时光!

我已在macOS(Catalina, 10.15.1)/ Docker Desktop for Mac(2.1.0.5)上进行了测试。ì

为了方便起见,我使用HTTP访问localhost。您可能需要进行HTTPS和域名设置。ì

请注意,此设置更改将导致RSS在没有密码的情况下公开,第三方也可以查看。ì

请在Pocket的隐私设置页面上确认实际URL。ì

同样,为了方便起见,我使用HTTP访问localhost。您可能需要进行HTTPS和域名设置。

广告
将在 10 秒后关闭
bannerAds