月度归档:2022年08月

使用ipset来增强你的防火墙

这几天陆续白嫖了几台甲骨文服务器,替你们薅了几把资本主义羊毛。然后就开始着手折腾服务器防火墙的事宜,主要目的是防GWF毕竟访问的人多越容易被察觉。

安装ipset

yum -y install ipset

创建ipset库

ipset create blanklist hash:ip timeout 86400

上面语句表示创建了一个blanklist库,插入到该库的ip将在86400秒后自动删除。

至于更加深入研究需要自行去探索,搜索关键词:iptables ipset 自动过期 解封

创建防火墙规则

iptables -I INPUT -m comment --comment "黑名单" -m set --match-set blanklist src -j DROP
service iptables save
systemctl reload iptables

上面的语句表示入站方向命中黑名单则丢弃数据包,紧跟其后的语句表示持久化当前iptables规则然后重新加载iptables规则。

iptables视乎对规则有着严格的顺序要求,iptables有着非常复杂的语法规则老徐玩的也不是非常溜,目前只在自己的服务器上能保证命中黑名单就阻断。

老徐在自己的国内服务器部署了Hfish蜜罐系统,结合蜜罐系统提供的数据接口使用Python脚本将IP写入ipset黑名单库即可实现自动拦截恶意端口扫描、若口令攻击等简单的安全需求。

当然老徐只建议一般的个人开发者或者小站长自己拿来玩儿的服务器可以这么干,我们大中华局域网IPv4资源有限,封禁一个公网IP也许一个小区都访问不了你的企业网站,如果你是某企业的运维或安全我权当你没来过。

Python脚本

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import datetime
import json
import os
import time

import requests


def main():
    ip_list = get_ip_list()
    # 创建ipset
    shell("ipset create hfish hash:ip timeout %s -exist" % 86400)
    for ip in ip_list:
        # 将IP添加到ipset
        shell("ipset add hfish -exist %s 2>&1" % ip)


def get_ip_list():
    """
    获取外网攻击IP列表

    :return: IP列表
    """
    url = "https://hfish.tool.xuchengen.cn/api/v1/attack/ip?" \
          "api_key=UperCSJpoxLqGvLCFqbbkNUEuwaLAGTdJKHtMtjLchpaxNoJfoYDPpdrUUKyVqni"

    payload = json.dumps({
        "start_time": get_start_time(),
        "end_time": get_end_time(),
        "intranet": 0
    })

    headers = {
        'Content-Type': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    obj = json.loads(response.text)

    if obj["response_code"] == 0:
        return obj["data"]["attack_ip"]

    return list()


def shell(cmd: str) -> str:
    """
    执行shell脚本

    :param cmd: 命令字符串
    :return: 命令执行后响应的字符串
    """

    stdout = os.popen(cmd)
    with stdout as stdout_:
        result: str = str().join(stdout_.readlines())

    return result


def get_start_time():
    """
    获取开始时间戳

    :return: 开始时间戳
    """
    today = datetime.date.today()
    return int(time.mktime(time.strptime(str(today), '%Y-%m-%d'))) - 1


def get_end_time():
    """
    获取结束时间戳

    :return: 结束时间戳
    """
    today = datetime.date.today()
    tomorrow = today + datetime.timedelta(days=1)
    return int(time.mktime(time.strptime(str(tomorrow), '%Y-%m-%d'))) - 1


if __name__ == '__main__':
    main()

上面的Python脚本内置了老徐自己搭建的Hfish蜜罐系统接口,如果你跟老徐一样都是腾讯云北京机房恰巧跟我处于同一IP段那不防试一试,也许能防范不少恶意端口扫描以及弱口令攻击。

对了别忘了把Python脚本加入crontable,建议一分钟一次。

Docker快速搭建RocketMQ

老徐用业余时间维护了一个RocketMQ Docker镜像,内置Dashboard管理面板,可一键部署,开箱即用。

拉取镜像

docker pull xuchengen/rocketmq:latest

创建卷

docker volume create rocketmq_data

部署镜像

# Linux 或 Mac
docker run -itd \
 --name=rocketmq \
 --hostname rocketmq \
 --restart=always \
 -p 8080:8080 \
 -p 9876:9876 \
 -p 10909:10909 \
 -p 10911:10911 \
 -p 10912:10912 \
 -v rocketmq_data:/home/app/data \
 -v /etc/localtime:/etc/localtime \
 -v /var/run/docker.sock:/var/run/docker.sock \
 --net=host \
 xuchengen/rocketmq:latest
 
 # Windows
 docker run -itd `
 --name=rocketmq `
 --hostname rocketmq `
 --restart=always `
 -p 8080:8080 `
 -p 9876:9876 `
 -p 10909:10909 `
 -p 10911:10911 `
 -p 10912:10912 `
 -v rocketmq_data:/home/app/data `
 -v /etc/localtime:/etc/localtime `
 -v /var/run/docker.sock:/var/run/docker.sock `
 --net=host `
 xuchengen/rocketmq:latest

控制台

管理员
帐号:admin
密码:admin

普通用户
帐号:normal
密码:normal

环境变量

本镜像内置了下段中指定的环境变量,您可以结合该环境变量进行微调。

# nameserver最小堆内存,默认1024m
NAMESRV_XMS=1024m
# nameserver最大堆内存,默认1024m
NAMESRV_XMX=1024m
# nameserver年轻代内存,默认256m
NAMESRV_XMN=256m
# broker最小堆内存,默认1024m
BROKER_XMS=1024m
# broker最大堆内存,默认1024m
BROKER_XMX=1024m
# broker年轻代内存,默认256m
BROKER_XMN=256m
# broker堆外内存,默认1024m
BROKER_MDM=1024m
# 控制台nameserver地址,默认localhost:9876
NAMESRV_ADDR=localhost:9876

查看日志

docker logs rocketmq

进入容器

docker exec -it rocketmq /bin/bash

问题

由于Docker容器网络环境问题,造成应用环境获取到的Broker地址为容器IP地址,可能导致网络连接不上。故采用host模式。后续有空我会优化该问题。

最后

开源版RocketMQ虽然没有阿里云商业版那么香,但作为入门学习RocketMQ还是非常有必要,所以我非常推荐大家使用老徐构建的Docker版RocketMQ。

Trojan一键脚本修复证书申请

Trojan是啥?Trojan就是Trojan呀,用了都说好,大家都在用,用了都说爽。不废话上链接。

https://raw.githubusercontent.com/Xuchengen/static/master/gwf/trojan_install.sh

该脚本为一键部署脚本,自动安装Nginx、Trojan、Let’s证书、伪装站点。同时附赠BBR以及服务器参数优化脚本。