Compare commits

...

6 commits

Author SHA1 Message Date
menschenfresser
db3db67684
Merge 48fe3c3a64 into 159b85f979 2026-02-27 11:47:10 +00:00
menschenfresser
48fe3c3a64
Update x-ui.sh 2026-02-27 18:47:07 +07:00
menschenfresser
9e669d416e
Update x-ui.sh
deleted 'sudo'
2026-02-27 15:35:37 +07:00
menschenfresser
aea0b38145
Merge branch 'main' into main 2026-02-27 15:12:30 +07:00
delifer
e726bd4a95 add dns changer, add honeypot for server 2026-02-24 11:17:04 +07:00
delifer
7db276b3bb add librespeed 2026-02-23 22:31:02 +07:00
4 changed files with 264 additions and 122 deletions

35
.vscode/launch.json vendored
View file

@ -1,35 +0,0 @@
{
"$schema": "vscode://schemas/launch",
"version": "0.2.0",
"configurations": [
{
"name": "Run 3x-ui (Debug)",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}",
"cwd": "${workspaceFolder}",
"env": {
"XUI_DEBUG": "true"
},
"console": "integratedTerminal"
},
{
"name": "Run 3x-ui (Debug, custom env)",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}",
"cwd": "${workspaceFolder}",
"env": {
// Set to true to serve assets/templates directly from disk for development
"XUI_DEBUG": "true",
// Uncomment to override DB folder location (by default uses working dir on Windows when debug)
// "XUI_DB_FOLDER": "${workspaceFolder}",
// Example: override log level (debug|info|notice|warn|error)
// "XUI_LOG_LEVEL": "debug"
},
"console": "integratedTerminal"
}
]
}

75
.vscode/tasks.json vendored
View file

@ -1,75 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "go: build",
"type": "shell",
"command": "go",
"args": [
"build",
"-o",
"bin/3x-ui.exe",
"./main.go"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$go"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "go: run",
"type": "shell",
"command": "go",
"args": [
"run",
"./main.go"
],
"options": {
"cwd": "${workspaceFolder}",
"env": {
"XUI_DEBUG": "true"
}
},
"problemMatcher": [
"$go"
]
},
{
"label": "go: test",
"type": "shell",
"command": "go",
"args": [
"test",
"./..."
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$go"
],
"group": "test"
},
{
"label": "go: vet",
"type": "shell",
"command": "go",
"args": [
"vet",
"./..."
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$go"
]
}
]
}

View file

@ -580,7 +580,7 @@ prompt_and_setup_ssl() {
# 3.1 Request Domain to compose Panel URL later
read -rp "Please enter domain name certificate issued for: " custom_domain
custom_domain="${custom_domain// /}" # Убираем пробелы
custom_domain="${custom_domain// /}" # Delete spaces
# 3.2 Loop for Certificate Path
while true; do

274
x-ui.sh
View file

@ -1671,7 +1671,251 @@ run_speedtest() {
speedtest
}
run_librespeed() {
#Test GO
if command -v go &>/dev/null; then
echo -e "${green}${plain} GO installed!"
else
#Intalling GO
echo echo -e "${yellow}${plain} Installing GO..."
VERSION=$(curl -s https://go.dev/dl/?mode=json | grep -m 1 'version' | cut -d'"' -f4)
wget https://go.dev/dl/$VERSION.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf $VERSION.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
echo -e "${green}${plain} GO installed!"
fi
found=$(find / -type d -name "speedtest-cli" 2>/dev/null)
if [ -n "$found" ]; then
echo "Test speed..."
$found/out/librespeed-cli-linux-amd64
else
echo -e "${yellow}${plain}Installing Librespeed..."
git clone https://github.com/librespeed/speedtest-cli
cd speedtest-cli/ && ./build.sh
echo -e "${green}${plain}Start this option again!"
fi
}
create_honeypot() {
local server_ip=$(curl -s --max-time 3 https://4.ident.me)
echo -e "${plain}Do you want to use: ${green}Apache ${plain}or ${green}Nginx"
read -p "Apache or Nginx: " nginx_or_apache
echo -e "${yellow}Downloading sources and Utilites..."
if [ "$nginx_or_apache" = "Apache" ]; then
case "${release}" in
ubuntu)
apt-get update
apt-get install apache2 -y
;;
debian)
apt-get update
apt-get install -y apache2
;;
armbian)
apt-get update && apt-get install apache2 -y
;;
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
dnf -y update && dnf -y install httpd
;;
centos)
yum -y install apache2
;;
arch | manjaro | parch)
pacman -Syu --noconfirm apache
;;
*)
echo -e "${red}Unsupported operating system. Please check the script and install the necessary packages manually.${plain}\n"
exit 1
;;
esac
# Start apache server for HoneyPot
case "${release}" in
ubuntu)
systemctl enable apache2
systemctl start apache2
;;
debian)
systemctl enable apache2
systemctl start apache2
;;
armbian)
systemctl enable apache2
systemctl start apache2
;;
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
systemctl enable httpd
systemctl start httpd
;;
centos)
systemctl enable httpd
systemctl start httpd
;;
arch | manjaro | parch)
systemctl enable apache
systemctl start apache
;;
*)
echo -e "${red}Cannot start apache service.${plain}\n"
exit 1
;;
esac
echo -e "${yellow}Installing HoneyPot..."
git clone https://github.com/d3l1f3r/SpaceSaver.git
mv SpaceSaver/ /var/www/html/
# Config for apache2
echo """
<VirtualHost *:80>
ServerName SpaceSaver
DocumentRoot /var/www/html/SpaceSaver
<Directory /var/www/html/SpaceSaver>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>""" >> /etc/apache2/sites-available/spacesaver.conf
ln -sf /etc/apache2/sites-available/spacesaver.conf /etc/apache2/sites-enabled/
# Restarting apache server
case "${release}" in
ubuntu)
systemctl reload apache2
;;
debian)
systemctl reload apache2
;;
armbian)
systemctl reload apache2
;;
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
systemctl reload httpd
;;
centos)
systemctl reload httpd
;;
arch | manjaro | parch)
systemctl reload httpd
;;
*)
echo -e "${red}Cannot reload apache service.${plain}\n"
exit 1
;;
esac
# Access rights to HoneyPot's files
chown -R www-data:www-data /var/www/html/SpaceSaver
chmod -R 755 /var/www/html/SpaceSaver
chmod 644 /var/www/html/SpaceSaver/index.html
echo -e "${plain}Done!"
echo -e "${green}Available here -> http://$server_ip:80"
elif [ "$nginx_or_apache" = "Nginx" ]; then
case "${release}" in
ubuntu)
apt-get update
apt-get install nginx -y
;;
debian)
apt-get update
apt-get install -y nginx
;;
armbian)
apt-get update && apt-get install nginx -y
;;
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
dnf -y update && dnf -y install nginx
;;
centos)
yum -y install nginx
;;
arch | manjaro | parch)
pacman -Syu --noconfirm nginx
;;
*)
echo -e "${red}Unsupported operating system. Please check the script and install the necessary packages manually.${plain}\n"
exit 1
;;
esac
# Start nginx server for HoneyPot
systemctl enable nginx
systemctl start nginx
#Downloading HoneyPot's files
git clone https://github.com/d3l1f3r/SpaceSaver.git
mv SpaceSaver/ /var/www/html/
# Config for nginx
tee /etc/nginx/sites-available/spacesaver.conf >/dev/null << 'EOF'
server {
listen 80 default_server; # ← важно для локального доступа
server_name 127.0.0.1 localhost SpaceSaver _;
root /var/www/html/SpaceSaver;
index index.html;
# Security Headers
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
add_header Permissions-Policy "interest-cohort=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
server_tokens off;
location / {
try_files $uri $uri/ /index.html;
}
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
access_log /var/log/nginx/spacesaver.access.log;
error_log /var/log/nginx/spacesaver.error.log;
}
EOF
rm -f /etc/nginx/sites-enabled/default
ln -sf /etc/nginx/sites-available/spacesaver.conf /etc/nginx/sites-enabled/
systemctl reload nginx
echo -e "${plain}Done!"
echo -e "${green}Available here -> http://$server_ip:80"
fi
}
change_dns() {
echo -e "${yellow}${plain}Changing DNS resolver"
echo -e "${plain}Enter resolver (default: 9.9.9.9): "
read resolver
if [ -n "$resolver" ]; then
echo "nameserver $resolver" > /etc/resolv.conf
else
echo "nameserver 9.9.9.9" > /etc/resolv.conf
fi
echo -e "${green}${plain}Done!"
}
ip_validation() {
ipv6_regex="^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$"
@ -2164,7 +2408,6 @@ show_usage() {
${blue}x-ui start${plain} - Start │
${blue}x-ui stop${plain} - Stop │
${blue}x-ui restart${plain} - Restart │
| ${blue}x-ui restart-xray${plain} - Restart Xray │
${blue}x-ui status${plain} - Current Status │
${blue}x-ui settings${plain} - Current Settings │
${blue}x-ui enable${plain} - Enable Autostart on OS Startup │
@ -2212,14 +2455,17 @@ show_menu() {
${green}21.${plain} IP Limit Management │
${green}22.${plain} Firewall Management │
${green}23.${plain} SSH Port Forwarding Management │
${green}24.${plain} HoneyPot (Fakesite)
${green}25.${plain} Change DNS resolver │
│────────────────────────────────────────────────│
${green}24.${plain} Enable BBR │
${green}25.${plain} Update Geo Files │
${green}26.${plain} Speedtest by Ookla │
${green}26.${plain} Enable BBR │
${green}27.${plain} Update Geo Files │
${green}28.${plain} Speedtest by Ookla │
${green}29.${plain} Librespeed │
╚────────────────────────────────────────────────╝
"
show_status
echo && read -rp "Please enter your selection [0-26]: " num
echo && read -rp "Please enter your selection [0-29]: " num
case "${num}" in
0)
@ -2295,16 +2541,25 @@ show_menu() {
SSH_port_forwarding
;;
24)
bbr_menu
create_honeypot
;;
25)
update_geo
change_dns
;;
26)
bbr_menu
;;
27)
update_geo
;;
28)
run_speedtest
;;
29)
run_librespeed
;;
*)
LOGE "Please enter the correct number [0-26]"
LOGE "Please enter the correct number [0-29]"
;;
esac
}
@ -2320,9 +2575,6 @@ if [[ $# > 0 ]]; then
"restart")
check_install 0 && restart 0
;;
"restart-xray")
check_install 0 && restart_xray 0
;;
"status")
check_install 0 && status 0
;;