自己的 yourls 已经搭建完毕 ,重要的就是如何高效的用起来了, yourls 自身提供了很不错的快速访问工具,安装完毕之后直接浏览
https://域名/admin/tools.php
可以得到书签栏中的快速访问工具,直接拖拽到浏览器的地址栏就可以快速的将当前的页面地址缩短。这个工具也就不多介绍了,这篇文章主要摸索一下 yourls 的API调用,以及如何在PC,和移动端快速的使用短链接服务。
yourls 提供了丰富的API,使用自身的API可以实现
请求的地址
https://域名/yourls-api.php
通过 GET 或者 POST 请求(GET请求需要URL Encode)
两种方式获得授权,一种是使用 username
/ password
对发送请求,但是这种方式不安全,可能导致用户名密码在传输过程中被截取泄露;另一种方式是使用不需要密码的 token 机制,在 admin/tools.php 页面会产生当前用户的验证 token。
动作 action
参数有很多个选项
shorturl
获取链接的短链接
在使用了值之后,另外两个参数
- `url` 用来缩短的原始链接
- `keyword` 或者 `title` 可选参数,用来自定义短链接
expand
获取短链接的原始长链接
将短链接展开
- `shorturl` 值可以为 `abc` 或者完整的短链接
url-stats
获取短链接的信息
短链接的统计信息
- `shorturl` 值可以为 `abc` 或者完整的短链接
stats
获取链接的信息
获取链接的信息
- `filter` 值可以为 `top`, `bottom`, `rand`, `last`
- `limit` 返回的数量
db-stats
获取全局的链接和点击数
输出格式 format
参数用来指定API输出的格式,有如下值
请求缩短链接
curl -X POST \
https://gtk.pw/yourls-api.php \
-F signature=xxxxxx \
-F action=shorturl \
-F url=https://gtk.pw/readme.html \
-F format=json
返回结果
因为之前已经请求过,所以报了fail,不过结果依然能够从 shorturl
中拿到
{
"status": "fail",
"code": "error:url",
"url": {
"keyword": "OStH3",
"url": "https://gtk.pw/readme.html",
"title": "YOURLS: Your Own URL Shortener",
"date": "2018-05-18 03:27:36",
"ip": "123.123.123.7",
"clicks": "0"
},
"message": "https://gtk.pw/readme.html already exists in database",
"title": "YOURLS: Your Own URL Shortener",
"shorturl": "https://gtk.pw/OStH3",
"statusCode": 200
}
其他几个API同理,返回结果结构稍有差异不过都类似。
iOS 上可以借助 Workflow 快速实现,主要的步骤
然后每一次将链接复制到粘贴板,然后运行该 workflow ,短链接就在 Clipboard 中了。
第二中方法,是直接在浏览器中,在链接前面加上,yourls 的域名,比如
https://blog.einverne.info
加入yourls 的域名是 https://gtk.pw
那么在链接前加上 gtk.pw,yourls 会跳转到 admin 页面并添加该链接
gtk.pw/https://blog.einverne.info
其他平台同理,不过需要登录 admin 略麻烦。
之前安装 Chevereto 时还没有折腾 Docker,后来发现 Docker 安装 实在太方便了,所以现在就将数据迁移到 Docker 中,备份和恢复的方式主要可以参考之前写的文章。
对于 Chevereto 这样的程序主要备份的就是数据库和文件,mysql 备份没啥说的,文件也直接打包即可。
这里主要展开下恢复,一方面在 docker-compose.yml 文件中,我映射列两个 volumes,
volumes:
- chevereto:/var/www/html/images
- chevereto_content:/var/www/html/content
这两个文件路径,images 主要存放的是上传的图片,而 content 目录一开始的时候我们并没有加上,导致一些系统的 logo 还有用户的头像消失了,我对比了下目录中存放的文件,发现 Chevereto 将这些资源文件存放在了 content 目录中,映射出来,然后恢复的时候将之前备份的内容恢复到这两个目录即可。
数据库恢复也比较容易
sudo cat backup.sql | sudo docker exec -i chevereto_db /usr/bin/mysql -u root --password=password chevereto
然后文件恢复时直接恢复到 volumes 的目录,sudo docker volume inspect volume_name
然后查看 volume 的位置,将文件解压到该目录下。
Chevereto 两个挂载的路径是
/var/lib/docker/volumes/chevereto_chevereto/_data
/var/lib/docker/volumes/chevereto_chevereto_content/_data
然后 chown www-data:www-data *
来改变权限即可。
这个备份和恢复的操作同理可以应用到任何类似 WordPress,Chevereto 这样的 PHP 应用上。
HTTP 协议全称 Hyper Text Transfer Protocol 超文本传输协议,基于 TCP/IP 协议用来传递数据。HTTP 面向应用层,HTTP协议是万维网的基石。
HTTP请求由以下部分组成
根据HTTP标准,HTTP请求可以使用多种请求方法。
Referer 头允许客户端指定请求的URI的源地址,服务端通过检查该头信息可以知道客户端请求的资源的原始来源。
HTTP 1.1 中请求和应答头都可能出现 Connection ,表示 client 和 server 通信时对于长连接如何处理。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
看到一篇使用信鸽来解释HTTPS的文章,信息量足够,也很生动的解释了非对称加密以及产生的问题和解法。
通过信鸽传递盒子,解释了HTTPS的非对称加密公私钥的问题
盒子是公钥,而爱丽丝手上的钥匙是私钥
如何信任盒子一节引入泰德这个第三方签名,在HTTPS中是认证机构。而沉重的盒子这一个小节,总结了HTTPS存在的问题,虽然加密的HTTPS要慢,但未来的趋势已经不可避免了。
长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一次完整的长连接。HTTP 1.1 相对于1.0 最重要的新特性就是引入了长连接。
短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,立刻发送FIN消息,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都称为短连接。
注:短连接是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议。
需要频繁交互的场景使用长连接,如即时通信工具(微信/QQ,QQ也有UDP),相反则使用短连接,比如普通的web网站,只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。
维持长连接会有一定的系统开销,用户量少不容易看出系统瓶颈,一旦用户量上去了,就很有可能把服务器资源(内存/CPU/网卡)耗尽,所以使用需谨慎。
HTTP 协议 redirect 有两个状态码 301 和 302,对于这两个状态码协议上是这么写的
浏览器在处理这两个状态码时行为不一样,对于 Chrome / Firefox 会永久的缓存 301 跳转1,浏览器会尽可能的永久保存该跳转,除非手动清除浏览器缓存,或者浏览器缓存将满为新内容腾出空间。如果不想跳转被浏览器缓存,可以使用 Cache-Control
和 Expires
两个头。
关于Chrome中如何清除永久的301跳转可以参考这篇文章
https://stackoverflow.com/a/21396547/1820217 ↩
最近在学习使用 Flask 生成一个短链接服务时看到了 Flask-Migrate 这样一款插件,之前学习 Django 的时候自带数据库迁移工具, Flask 中也有这样一款,不过是以插件的形式出现,Flask Migrate 基于 Alembic ,Alembic 是 SQLAlchemy 作者开发的数据迁移工具。
文档主页:https://flask-migrate.readthedocs.io/en/latest/
执行:
pip install Flask-Migrate
在安装完成之后需要在代码中添加如下代码
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
在添加代码之后需要运行
flask db init
来初始化项目,命令运行之后会在项目中生成 migrations
文件夹,该文件夹需要添加到版本控制。
之后可以使用 migrate
命令来初始化迁移
flask db migrate
迁移脚本不会检测 models 的所有变更, Alembic 目前无法检测表名修改,列名修改,其他限制可以在 Alembic 网站 查看。
之后可以应用该迁移
flask db upgrade
运行该命令来将修改应用到数据库,以后对 model 的每一次修改需要重复 migrate
和 upgrade
命令。如果要在不同机器之间同步数据库结构,只需要同步 migrations 文件夹,并且在另一台机器上运行 flask db upgrade
即可。
Flask Migrate 也支持直接使用脚本的方式运行,具体可参考 官方的文档 ,非常易懂。
Flask-Migrate 还支持降级:
flask db downgrade
(venv) $ flask db
Usage: flask db [OPTIONS] COMMAND [ARGS]...
Perform database migrations.
Options:
--help Show this message and exit.
Commands:
branches Show current branch points
current Display the current revision for each...
downgrade Revert to a previous version
edit Edit a revision file
heads Show current available heads in the script...
history List changeset scripts in chronological...
init Creates a new migration repository.
merge Merge two revisions together, creating a new...
migrate Autogenerate a new revision file (Alias for...
revision Create a new revision file.
show Show the revision denoted by the given...
stamp 'stamp' the revision table with the given...
upgrade Upgrade to a later version
假如已经有数据库表结构了,后期引入了 Flask-Migrate,那么可以通过如下步骤集成 Flask-Migrate 到项目中。
flask db init
创建新的 migrationflask db migrate
来初始化已经存在的 migrationflask db stamp head
这一步会在数据库创建 alembic_version
表,然后保存最新的 migration 版本之后就可以使用 Migration 来管理数据库版本了。
flask db migrate
flask db upgrade
Migrations 总是在开发环境中生成。
生产环境中只会应用变更(upgrade)。
之前在做一次 Vim 演示的时候想要更加直观的在屏幕上实时显示出当前敲击的字母,所以找到了 screencast 这个解决方法。
Debian/Ubuntu:
首先安装依赖:
sudo apt-get install python3-gi gir1.2-gtk-3.0
sudo apt-get install python3-gi-cairo python3-cairo
sudo apt-get install python3-setuptools python3-babel
sudo apt-get install fonts-font-awesome slop
如果使用 GNOME:
sudo apt-get install gir1.2-appindicator3-0.1
安装:
sudo apt-get install screenkey
手动通过源码安装
在GitLab页面 下载安装包
wget "https://github.com/wavexx/screenkey/archive/screenkey-0.9.tar.gz"
tar xvf screenkey-0.9.tar.gz
# 安装依赖
sudo apt-get install python-gtk2 python-setuptools python-setuptools-git python-distutils-extra
然后执行安装
sudo ./setup.py install
然后启动
screenkey
然后可以设置各种参数,延迟时间,字体,大小,颜色,透明度等等
--- layout: post title: "自驾游必备 App" tagline: "" description: "" category: 经验总结 tags: [driving, tour, travel, app, collection, ] last_updated: ---
今年五一开车 2000 多公里,一路上找景点,找路线,找美食,这里记录一些比较好用的 App,当然在记录这写应用的时候,又发现了其他人推荐的应用,虽然之前并没有用上,但可以做一个备份期望可以用上。
PS 部分免责声明,PS 部分我并没有深入的用过,但是口碑还不错。
这个问题早已经应该在心中确定,但如果没有确定,可以浏览马蜂窝 站点,一来对目的地有一个基本的了解,二来可以留心目的地的路况等等。虽然市场上游记类网站和应用也是泛滥的,但是马蜂窝确实多少年来一直兢兢业业专攻旅行的网站。写到这里不免想起,一直萦绕在我脑海里面的一个疑问,其实做内容的网站很容易转型做“工具”,比如马蜂窝就可以很轻松的售卖旅行产品,包括机票火车票,住宿等等,反而携程,去哪儿这一类“工具”类网站要转型做“内容”就要难很多。虽然携程也有游记,但终究只是为买票而生的辅助。
PS. 穷游锦囊,有个叫浪浪的,常有人推荐
说到选车,我只能推荐神州租车了,其他租车行并没有接触过,所以也不好推荐。而针对性的选择一辆舒适的车就成了关键,因为可能需要长时间在车上度过,选择一辆空间大,舒适的 SUV 就比较好。而如果目的地都是平原,可以选择轻便的小汽车
PS. 并没有使用过的租租车
推荐 Google My Maps,使用 Google My Maps 可以快速制定一条大致路线,可以从宏观上对整个路线有个了解。
当然还要推荐另外一个很好用的工具 Trello,然后可以制作出如下的计划
当然真正出行的时候,少不了导航应用,Google Map 看卫星图,高德导航
国内墨迹,国外雅虎天气
大众点评,必不可少。在不熟悉的地方,选择一个品类,往往评价不错的菜肴是不会有什么差错的。
PS. 国外似乎有这俩 Yelp 和 Trip advisor,还有预订位置的 Open Table
强推 Airbnb,虽然很久前注册过 Airbnb 但是一直没怎么使用过,然而突然发现这么好用,每一个房子主人都很友好,房子也都非常新,房子里面各种设置都很不错。但是 Airbnb 可能有一个不好的地方,就是可能有些地方并没有那么多的选择,这个时候就需要携程,马蜂窝等等有旅馆预定的应用了。
如果不嫌弃你可以点击我的邀请链接:https://zh.airbnb.com/c/einv 注册成功后你会得到 175 的优惠券。
PS. Booking 也是个好网站。
绝大部分情况下停车并没有太大问题,可是如果真的到了城市环境,有一个 ETCP 还是需要的。
当然以上大部分只能局限于国内自驾的大部分情况,国外去如果要租车,可能还需要准备驾照翻译件或者国际驾照,不同国家的国情可能都需要调整。
去年年底装上了头条系全系列产品包括新闻,抖音,火山小视频,而半年多过去了,最后留下来的只有抖音。而之前不久也刚刚看到新闻报道抖音日活已经超 1.5 亿了。所以想整理下自己的看法。
全年年底的时候看过一篇文章,其核心思想就是 “头条以产品划分用户群”,虽然并不知道这是不是头条内部有意而为之或者就是产品定位的问题,确实头条内部关于视频的应用报的上名字的就有仨,火山,西瓜,抖音。这三个应用却各有特点,虽然我并没有很深入的使用,但也能快速的感觉到他们的差别,抖音明显要更年轻化,年龄 10+,20+ 主打的产品,而火山则是主打 ugc,各种内容都有,质量参差不齐,西瓜视频,后来者,却继承了头条视频的大量的积淀。而着三款应用能很明显的区分出一部分用户群,如果按照现在 2017 年底的时间来看,明显子女一代用抖音,父母一代更加偏向用火山和西瓜,这是天然的划分。如果要以地域划分,明显大城市是抖音的用户群,而中小城市就是西瓜的天下。
虽然我对这样的产品划分理念并不是那么的“理解”,但确确实实现在移动互联网的发展就是那样的一个趋势,这或许也是有了 Facebook 也还有 Instagram 和 Snapchat 的原因,当随着年龄的变化,一个平台的用户逐渐增多,下一个年龄层的用户自然的就去寻找代替品,或许是为了潮流,或者只是为了凸显不同。就像厌倦了 QQ,逃到了 Wechat,厌倦了 Wechat 的一代,或许又逃回了 QQ。
很多人说拍抖音简单,但我想很多说这个话的人应该没怎么自己拍过。抖音的短视频看起来简单,那是因为他的难度系数正好介于普通用户和专业自媒体拍摄难度系数的中间,抖音大量的视频都只需要用一部手机就能拍摄出来,但是仔细看这短短的十几秒,里面可能包含十几个场景,包括大量的剪辑,而曾经这些剪辑手法我都只在 YouTube 等等平台的长视频或者电影片段中才能看到;另外一点很多人说抖音的成功是将视频引入音乐,可是这难道不是常识吗,电影电视剧 OST,或者 YouTube 去搜一下会看到很多教你如何给视频选择 BGM 的教程,而抖音成功的是让音乐成为了用户拍摄视频的入口,创作相同主题的短视频,一来带动了 BGM 的流行,二来将用户的视频天然的进行了分类。
基于这一点认识,我之前曾经和朋友聊天聊起,抖音流行的歌甚至可能改写音乐的发行历史,如果歌手的歌拿来在抖音发行,或许比拿去发专辑,或者拿去音乐平台要流传更广,毕竟好的音乐只有被人知道,歌才有他的价值,中国目前最缺乏的就是一个有效的渠道让有价值的内容让人知道,抖音或者头条的出现正是弥补了这一空缺。或许有人要说以前也出现过优酷土豆还有 bilibili 等等的网站,还有门户网站推出的新闻客户端为什么无法做到,其实道理很简单,对于优酷等等他们太慢以至于跟不上快速发展的移动互联网,而且对于长视频其实无形中过滤了很大一批的入门却能制作出很有趣内容的作者。而门户网站往往都是自上而下的内容输出,很多用户其实并不关心那些国家大事,而更关心和我们一样的普通人,并且门户网站的写作者和庞大的互联网用户贡献的内容来看几乎就是沧海一粟,Web2.0 带来的就是源源不断的内容输出。
不可否认的一点就是运营在产品中的重要地位,抖音这样一款产品我相信以任何一家大公司的实力就能够在几个月的时间内轻松的复制,但是大家都做不到抖音的一点就是大家仅仅认为抄袭一个同样的产品就能够刮分一片市场,这个想法是多么的天真。虽然我也并没有那么关注抖音产品的发展历史,但是作为一个普通用户能够感受到抖音玩法的变化,这无疑是有引导性质的,抛出一个亮点,大家跟风也好,抛砖引玉也好,对任何一个内容型产品都是帮助。而现在大部分场内的玩家能够复制他的系统却抓不到他们的精神内核。
抖音这样一个产品的出现是好是坏?很多人都在想这个问题,其实完全不需要担心,你说他消耗时间也好,让人沉迷也好,如果它能够在流行文化中烙下自己的印记就已经是他产品的胜利。至于他所带来的话题效应,好坏,留待后人判别吧。
7 天的旅程已经结束,更加准确的说应该是完整的 6 天,还有一天时间在路上。这一次经历很多第一次,第一次使用 Trello 规划出行,第一次长时间驾驶超过 2000 公里,第一次使用 Airbnb 来计划住宿,第一次上 3000 多米的高原,这许许多多的第一次让我感受了很多也收获了很多。
大环线的路程相较于短短 6 天,时间非常赶,但是尤其是从大柴旦到敦煌,以及从张掖到西宁的路上,会路过无数的山脉和平原,别那么赶,看看两边风景。在很大一段时间内,你会看到两边延伸到天边的大漠,以及面前一直通向天边的公路,还有远处层叠的群山。当我们从张掖沿着 G227 穿过祁连山的时候,山上的积雪还没有化尽,从远处看云雾缭绕,太壮观了。
如果说对行程有什么遗憾的话,那么就是没有提前预定好住宿,虽然其实并没有那么的失望,但是如果提前制定好落脚点,那么行程会完美很多。这一次的行程让我爱上了 Airbnb ,虽然很早就已经注册,却一直呆在无数的应用中没有体现出他的价值,我可以说这是我使用至今体验最好的应用了,不管是界面友好程度,还是下单预定,或是之后联系房东,没有人我这个第一次使用的他的人感受到一点点阻碍,而且在绝大部分情况下过滤结果的前几个都是能够满足我的要求的,正因为时间赶,所以预定也很赶,但是却都超出意外,尤其是在西宁和敦煌,家中设施齐全,更甚至敦煌的房东也给我们准备了葡萄干、杏仁干等等特色干果,我最关心的电视也是资源充足。且不说住宿条件,虽然也预订到了一些不那么满意的房子,但是 Airbnb 总体给我的感觉都还是不错的。
使用 Trello 的时间并没有那么的长,但却一点一点慢慢地适应了 Trello 并且喜欢上了 Trello 独特的设计。“看板” 的概念接触没多久,甚至之前一直拿他当做 todo list,但现在我是知道我小看了这个概念,看板可以让很多工作得到有效的管理,甚至可以提前规划,他提供的图片,附件,checklist 等等功能可以让计划有条不紊的执行,并且界面非常美观。
过去西北最多被提及的就是这两个容易弄混的名词。
雅丹地貌,或者称为风蚀脊(Yardang)是典型的风蚀性地貌。“雅丹”在维吾尔语中的意思是“具有陡壁的小山包”。由于风的磨蚀作用,小山包的下部往往遭受较强的剥蚀作用,并逐渐形成向里凹的形态。如果小山包上部的岩层比较松散,在重力作用下就容易垮塌形成陡壁,形成雅丹地貌,有些地貌外观如同古城堡,俗称魔鬼城。
丹霞地貌的定义为“有陡崖的陆上红层地貌”,形成丹霞地貌的是一种沉积在内陆盆地的红色岩层,这种岩层在千百万年的地质变化过程中,被水切割侵蚀,形成了红色山块群。
张掖丹霞因其与众不同的岩石色彩而举世闻名。这些岩石光滑而险峻,高数百米,是砂岩和其他矿物经过 2400 万年的沉淀堆积而成。
横向比较一下 BitTorrent 客户端。
开源地址:
特性:
Transmission 在日常中使用完全没有问题,不过唯一的不足就是 Transmission 是无法制作 torrent 的。
Transmission 的扩展,包括 Android 开源的 Remote control Transdroid, RSS Tool FlexGet 等等。2
docker create \
--name=transmission \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Europe/London \
-e TRANSMISSION_WEB_HOME=/combustion-release/ `#optional` \
-e USER=username `#optional` \
-e PASS=password `#optional` \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
-v path to data:/config \
-v path to downloads:/downloads \
-v path to watch folder:/watch \
--restart unless-stopped \
linuxserver/transmission
更多参考这里
[[rTorrent]] 是一个用 C++ 编写的纯文本 BitTorrent 客户端。rTorrent 适合在 Tmux, screen, dtach 中使用,配和 ruTorrent 作为 GUI。
docker create \
--name=rutorrent \
-e PUID=1000 \
-e PGID=1000 \
-p 80:80 \
-p 5000:5000 \
-p 51413:51413 \
-p 6881:6881/udp \
-v /path/to/rutorrent/config:/config \
-v /path/to/rutorrent/downloads:/downloads \
--restart unless-stopped \
linuxserver/rutorrent
更多参考这里
ruTorrent 是一款 PHP 写的 rTorrent 的 Web UI
Flood 是 rTorrent 的一个 UI 界面,用 [[Node.js]] 实现。
官网:
特性:
docker create \
--name=qbittorrent \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e UMASK_SET=022 \
-e WEBUI_PORT=8080 \
-p 6881:6881 \
-p 6881:6881/udp \
-p 8080:8080 \
-v /path/to/appdata/config:/config \
-v /path/to/downloads:/downloads \
--restart unless-stopped \
linuxserver/qbittorrent
更多参考这里
官网:
Deluge 比较优秀的一点是支持 Plugin,官网上有非常丰富的插件可供选择。
docker create \
--name=deluge \
--net=host \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=timezone \
-e UMASK_SET=022 `#optional` \
-e DELUGE_LOGLEVEL=error `#optional` \
-v /path/to/deluge/config:/config \
-v /path/to/your/downloads:/downloads \
--restart unless-stopped \
linuxserver/deluge
更多参考这里
支持平台:Windows, macOS, Android。
不支持 Linux, 不开源,就不说了。
Vuze 是一款使用 Java 编写的 BT 客户端,支持三大主流桌面平台。
BiglyBT 是一款开源的,跨平台的 BT 客户端。BiglyBT 是 Vuze 开源项目的延续,由 Vuze/Azureus 开发,由两个原始开发人员和社区成员维护,从 2003 年至今已经维护超过 20 年
特性
Motrix 是一款全能的下载管理器,跨平台,支持 HTTP,FTP,BT,磁力链接等等。
Motrix 使用 Vue 以及 Electron 技术构建。
之前的文章里面也总结过一些 fail2ban 的简单使用,这里就扩展开来,把一些常见的使用方式记录一下,以便后面回顾。
今天想起这件事情主要是看到日志发现新建的服务(非标准端口)也有人不断的扫描,尝试登录,虽然已经设置过 SSH,nginx 端口的 fail2ban,但是没有考虑到所有的服务端口。
sudo apt install fail2ban
fail2ban 的主要配置都集中在 /etc/fail2ban/
目录下
fail2ban 的功能可以分散在不同的文件中进行管理,配置优先顺序是:
jail.conf
jail.d/*.conf
jail.local
jail.d/*.local
在 jail.local
中配置
[ssh]
enabled = true
port = ssh, 10022
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
修改配置后可以使用如下方法来重新加载配置:
fail2ban-client reload
用上面的方法配置 ssh 后查看 Nginx access 日志还依然有非常多的 IP 再不停的扫描,所以想办法如果能把 fail2ban 的日志过滤出来然后再给 fail2ban 就可以把 fail2ban 中发现的 IP 再 block 掉。
参考该链接 中内容新增 filter,然后配置:
[fail2ban]
enabled = true
filter = fail2ban
action = iptables-allports[name=fail2ban]
logpath = /var/log/fail2ban.log
# findtime: 1 day
findtime = 86400
# bantime: 1 year
bantime = 31536000
解决方法来自 stackoverflow
查看状态:
fail2ban-client status
测试筛选规则设否匹配当前的日志格式 auth.log
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
用 iptables 来查看:
sudo iptables -L -v -n
[mysqld]
port = 3306
logpath = /var/log/mysql/error.log
log_warnings = 2
maxretry = 5