nginx+lua를 위한 멋진 가로채기, 로드 밸런싱 및 세션 관리 라이브러리

9348 단어 ssh2nginxtnslua
저는 분석, 가로채기, 로드 밸런싱 및 세션 관리를 위한 멋진 이벤트 기반 Lua 프록시 라이브러리를 작업하고 있습니다.

github의 소스 및 문서 주소
https://github.com/yizhu2000/suproxy

다음에 대한 API를 제공합니다.
  • 인증 가로채기: 인증 중에 자격 증명을 읽거나 변경하거나 자체 정의 인증자를 도입합니다.
  • 명령 입력 가로채기: 명령 입력을 모니터링, 필터링 또는 변경합니다.
  • 명령 출력 가로채기: 명령 응답을 모니터링, 필터링 또는 변경합니다.
  • 컨텍스트 수집: IP, 포트, 버전 등과 같은 네트워크, 사용자, 클라이언트 및 서버 정보를 가져옵니다.
  • 세션 관리: Redis에 세션을 저장하고 목록, 종료 및 검색 세션에 대한 API를 제공합니다.
  • 프로토콜 파서: 프로토콜 패킷을 파싱하고 인코딩합니다.
  • 로드 밸런스: 내결함성이 있는 다중 업스트림 밸런싱.

  • 다음은 짧은 화면입니다.
    Oracle용 SQL 필터링

    Linux/Unix용 필터 명령

    SSH2에 대한 로그 작업

    SQL에 대한 로그 작업

    Linux/Unix에 대한 환영 정보 변경

    현재 지원되는 프로토콜에는 SSH2, ORACLE TNS, SQLSERVER TDS, LDAP가 포함됩니다.



    SSH
    SQL 서버
    신탁
    LDAP


    사용자 이름 얻기
    Y[^1]
    Y[^2]
    와이
    Y[^6]

    비밀번호 받기
    Y[^1]
    Y[^2]
    N
    Y[^6]

    사용자 이름 변경
    와이
    와이
    Y[^4]
    와이

    비밀번호 변경
    와이
    와이
    N
    와이

    타사 인증
    와이
    와이
    Y[^5]
    와이

    명령 받기
    와이
    와이
    와이
    Y[^7]

    답장 받기
    와이
    와이
    N
    Y[^7]

    변경 명령
    와이
    Y[^3]
    Y[^3]
    N

    네트워크 컨텍스트(IP, 포트 등)를 가져옵니다.
    와이
    와이
    와이
    와이

    클라이언트 컨텍스트 가져오기(클라이언트/서버 프로그램 이름 및 버전 등)
    와이
    와이
    와이
    N


  • [^1]: 비밀번호 인증 전용
  • [^2]: SQL 서버에 대한 사용자 이름 및 암호 가져오기는 SSL 암호화를 비활성화합니다.
  • [^3]: SQL 변경 명령이 완전히 테스트되지 않았습니다. 변경 선택 명령에서 삭제 명령과 같은 일부 변경이 성공하지 못할 수 있습니다.
  • [^4]: oracle10의 사용자 이름 변경이 지원되지 않습니다.
  • [^5]: 사용자 이름 기반 인증만 지원됨
  • [^6]: SSL이 지원되지 않음
  • [^7]: 검색 요청 및 응답만 지원됩니다.

  • SuProxy는 순수한 Lua로 작성되었으며 이벤트 기반 패턴으로 설계되었습니다. SuProxy 라이브러리의 사용 및 확장은 간단합니다. 리스너 채널을 시작하고 이벤트를 처리합니다. 이 예는 SSH2 수신기를 시작하고 SSH 연결의 인증 성공 이벤트를 처리하는 방법을 보여줍니다.

    server {
        listen 22;
        content_by_lua_block {
            local ssh=require("suproxy.ssh2"):new()
            local channel=require("suproxy.channel"):new({{ip="192.168.1.135",port=22}},tds)
            channel:run()
            ssh.AuthSuccessEvent:addHandler(ssh,logAuth)
        }
    }
    


    SuProxy는 기본 로드 밸런싱 기능을 제공합니다. 아래 예는 채널에 여러 업스트림을 전달하는 방법을 보여줍니다.

    package.loaded.my_SSHB=package.loaded.my_SSHB or
    require ("suproxy.balancer.balancer"):new{
        {ip="127.0.0.1",port=2222,id="local",gid="linuxServer"},
        {ip="192.168.46.128",port=22,id="remote",gid="linuxServer"},
        {ip="192.168.1.121",port=22,id="UBUNTU14",gid="testServer"}
    }
    local channel=require("suproxy.channel"):new(package.loaded.my_SSHB,ssh)
    


    SuProxy는 메모리 또는 redis에서 세션 컨텍스트를 수집하고 유지할 수 있습니다. 아래는 ssh 연결에서 SuProxy가 수집한 정보입니다.

    {
        "sid": "xxxxxxxxxxxx",
        "uid": "xxxx",
        "stype": "ssh2",
        "uptime": 1600831353.066,
        "ctime": 1600831353.066,
        "ctx": {
            "srvIP": "127.0.0.1",
            "client": "SSH-2.0-PuTTY_Release_0.74",
            "clientIP": "127.0.0.1",
            "clientPort": "56127",
            "username": "xxxx",
            "srvPort": 2222,
            "server": "SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.1"
        }
    }
    

    좋은 웹페이지 즐겨찾기