chore: интерфесы бота

This commit is contained in:
protokey committed 2026-09-24 17:33:10 +04:00
1 parent 5f53cadf89
commit 6d322f36a9
42 files changed
+1731 -111

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
# Перенаправляет весь входящий трафик сервера на целевой ресурс.
# Использование: serverus-redirect <target_ip>
# SSH_PORT - порт ssh этого сервера, его перенаправлять нельзя, иначе доступ к серверу будет потерян.
#
# TODO: заглушка. Заменить на настоящий скрипт перенаправления через фаервол.
# Правила должны переживать перезапуск nftables: базовый конфиг /etc/nftables.conf начинается с flush ruleset.
set -eu
TARGET_IP="${1:?usage: $0 <target_ip>}"
SSH_PORT="${SSH_PORT:?SSH_PORT is required}"
echo "redirect stub: all traffic except tcp/${SSH_PORT} -> ${TARGET_IP}"
+33
View File
@@ -0,0 +1,33 @@
# extravars: target_ip
#
# Превращает сервер в прозрачный прокси: весь трафик, кроме ssh, уходит на target_ip.
- name: Redirect traffic to target
hosts: target
gather_facts: false
tasks:
- ansible.builtin.import_tasks: tasks/firewall.yml
vars:
firewall_tcp_ports: [ "{{ ansible_port }}" ]
firewall_forward: true
- name: Enable ip forwarding
ansible.builtin.copy:
dest: /etc/sysctl.d/90-serverus-forward.conf
mode: "0644"
content: |
net.ipv4.ip_forward = 1
- name: Apply sysctl
ansible.builtin.command: sysctl --system
changed_when: false
- name: Install redirect script
ansible.builtin.copy:
src: files/redirect.sh
dest: /usr/local/sbin/serverus-redirect
mode: "0755"
- name: Redirect traffic
ansible.builtin.command: "/usr/local/sbin/serverus-redirect {{ target_ip }}"
environment:
SSH_PORT: "{{ ansible_port }}"
+12
View File
@@ -19,6 +19,18 @@
enabled: false
state: stopped
- name: Remove traffic redirect
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- /usr/local/sbin/serverus-redirect
- /etc/sysctl.d/90-serverus-forward.conf
- name: Reload sysctl
ansible.builtin.command: sysctl --system
changed_when: false
- name: Remove sshd drop-in
ansible.builtin.file:
path: /etc/ssh/sshd_config.d/00-serverus.conf
+1 -1
View File
@@ -1,4 +1,4 @@
# vars: firewall_tcp_ports, firewall_udp_ports (optional)
# vars: firewall_tcp_ports, firewall_udp_ports (optional), firewall_forward (optional, пропускать транзитный трафик)
- name: Install nftables
ansible.builtin.apt:
name: nftables
@@ -19,7 +19,7 @@ table inet filter {
}
chain forward {
type filter hook forward priority filter; policy drop;
type filter hook forward priority filter; policy {{ 'accept' if firewall_forward | default(false) else 'drop' }};
}
chain output {
+62
View File
@@ -0,0 +1,62 @@
# extravars: username, password, panel_port, web_base_path, domain (optional), version (optional)
#
# Ставит 3x-ui скриптом из README проекта в неинтерактивном режиме.
# Сертификат: на домен, если он задан, иначе на ip. Оба варианта требуют открытый 80 порт (acme).
- name: Install 3x-ui panel
hosts: target
gather_facts: false
vars:
xui_bin: /usr/local/x-ui/x-ui
xui_domain: "{{ domain | default('') }}"
tasks:
- ansible.builtin.import_tasks: tasks/firewall.yml
vars:
firewall_tcp_ports: [ "{{ ansible_port }}", 80, 443, "{{ panel_port }}" ]
- name: Download install script
ansible.builtin.get_url:
url: https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh
dest: /root/3x-ui-install.sh
mode: "0700"
force: true
- name: Run install script
ansible.builtin.command:
cmd: "bash /root/3x-ui-install.sh {{ version | default('') }}"
creates: "{{ xui_bin }}"
environment:
XUI_NONINTERACTIVE: "1"
XUI_USERNAME: "{{ username }}"
XUI_PASSWORD: "{{ password }}"
XUI_PANEL_PORT: "{{ panel_port }}"
XUI_WEB_BASE_PATH: "{{ web_base_path }}"
XUI_SSL_MODE: "{{ 'domain' if xui_domain else 'ip' }}"
XUI_DOMAIN: "{{ xui_domain }}"
XUI_SERVER_IP: "{{ ansible_host }}"
no_log: true
# скрипт не перезаписывает настройки уже установленной панели, поэтому задаем их явно
- name: Apply panel settings
ansible.builtin.command: >-
{{ xui_bin }} setting -username {{ username | quote }} -password {{ password | quote }}
-port {{ panel_port }} -webBasePath {{ web_base_path | quote }}
no_log: true
- name: Restart panel
ansible.builtin.systemd_service:
name: x-ui
state: restarted
enabled: true
- name: Read API token
ansible.builtin.shell: "{{ xui_bin }} setting -getApiToken | grep -Eo 'apiToken: .+' | awk '{print $2}'"
register: api_token
changed_when: false
no_log: true
- name: Return panel access
ansible.builtin.set_stats:
aggregate: false
data:
api_token: "{{ api_token.stdout }}"
no_log: true