chore: интерфесы бота
This commit is contained in:
1 parent
5f53cadf89
commit
6d322f36a9
42 files changed
+1731
-111
No files matched your search
@@ -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}"
|
||||
@@ -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 }}"
|
||||
@@ -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,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 {
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user