@@ -114,6 +114,7 @@ BLOCKLIST_COUNTRIES=""
114114MASKING_ENABLED=" true"
115115MASKING_HOST=" "
116116MASKING_PORT=443
117+ UNKNOWN_SNI_ACTION=" mask"
117118TELEGRAM_ENABLED=" false"
118119TELEGRAM_BOT_TOKEN=" "
119120TELEGRAM_CHAT_ID=" "
@@ -589,6 +590,7 @@ BLOCKLIST_COUNTRIES='${BLOCKLIST_COUNTRIES}'
589590MASKING_ENABLED='${MASKING_ENABLED} '
590591MASKING_HOST='${MASKING_HOST} '
591592MASKING_PORT='${MASKING_PORT} '
593+ UNKNOWN_SNI_ACTION='${UNKNOWN_SNI_ACTION} '
592594
593595# Telegram Integration
594596TELEGRAM_ENABLED='${TELEGRAM_ENABLED} '
@@ -630,7 +632,7 @@ load_settings() {
630632 case " $key " in
631633 PROXY_PORT|PROXY_METRICS_PORT|PROXY_DOMAIN|PROXY_CONCURRENCY|\
632634 PROXY_CPUS|PROXY_MEMORY|CUSTOM_IP|FAKE_CERT_LEN|PROXY_PROTOCOL|PROXY_PROTOCOL_TRUSTED_CIDRS|AD_TAG|GEOBLOCK_MODE|BLOCKLIST_COUNTRIES|\
633- MASKING_ENABLED|MASKING_HOST|MASKING_PORT|\
635+ MASKING_ENABLED|MASKING_HOST|MASKING_PORT|UNKNOWN_SNI_ACTION| \
634636 TELEGRAM_ENABLED|TELEGRAM_BOT_TOKEN|TELEGRAM_CHAT_ID|\
635637 TELEGRAM_INTERVAL|TELEGRAM_ALERTS_ENABLED|TELEGRAM_SERVER_LABEL|\
636638 AUTO_UPDATE_ENABLED)
@@ -647,6 +649,7 @@ load_settings() {
647649 [[ " $PROXY_CONCURRENCY " =~ ^[0-9]+$ ]] || PROXY_CONCURRENCY=8192
648650 [[ " $PROXY_PROTOCOL " == " true" ]] || PROXY_PROTOCOL=" false"
649651 [[ " $GEOBLOCK_MODE " == " whitelist" ]] || GEOBLOCK_MODE=" blacklist"
652+ [[ " $UNKNOWN_SNI_ACTION " == " drop" ]] || UNKNOWN_SNI_ACTION=" mask"
650653 [[ " $TELEGRAM_INTERVAL " =~ ^[0-9]+$ ]] || TELEGRAM_INTERVAL=6
651654 [[ " $TELEGRAM_CHAT_ID " =~ ^-? [0-9]+$ ]] || TELEGRAM_CHAT_ID=" "
652655}
@@ -1082,7 +1085,7 @@ client_ack = 90
10821085
10831086[censorship]
10841087tls_domain = "${domain} "
1085- unknown_sni_action = "mask"
1088+ unknown_sni_action = "${UNKNOWN_SNI_ACTION :- mask} "
10861089mask = ${mask_enabled}
10871090mask_port = ${mask_port}
10881091$( [ " $mask_enabled " = " true" ] && [ -n " $mask_host " ] && echo " mask_host = \" ${mask_host} \" " )
@@ -4970,6 +4973,7 @@ show_cli_help() {
49704973 echo -e " ${GREEN} domain${NC} [get|clear|<host>] Show, clear, or change FakeTLS domain"
49714974 echo -e " ${GREEN} adtag${NC} [set <hex>|remove|view] Manage ad-tag"
49724975 echo -e " ${GREEN} geoblock${NC} [add|remove|list|clear] Manage geo-blocking"
4976+ echo -e " ${GREEN} sni-policy${NC} [mask|drop] Unknown SNI action (mask=permissive, drop=strict)"
49734977 echo " "
49744978 echo -e " ${BOLD} Monitoring:${NC} "
49754979 echo -e " ${GREEN} traffic${NC} Show traffic stats"
@@ -5592,6 +5596,28 @@ cli_main() {
55925596 esac
55935597 ;;
55945598
5599+ sni-policy)
5600+ load_settings
5601+ case " $1 " in
5602+ mask)
5603+ check_root
5604+ UNKNOWN_SNI_ACTION=" mask" ; save_settings; reload_proxy_config
5605+ log_success " Unknown SNI policy set to Mask (permissive)"
5606+ ;;
5607+ drop)
5608+ check_root
5609+ UNKNOWN_SNI_ACTION=" drop" ; save_settings; reload_proxy_config
5610+ log_success " Unknown SNI policy set to Drop (strict)"
5611+ ;;
5612+ " " )
5613+ echo -e " ${BOLD} Unknown SNI policy:${NC} ${UNKNOWN_SNI_ACTION} "
5614+ ;;
5615+ * )
5616+ log_error " Usage: mtproxymax sni-policy [mask|drop]" ; return 1
5617+ ;;
5618+ esac
5619+ ;;
5620+
55955621 traffic)
55965622 load_settings
55975623 load_secrets
@@ -5859,15 +5885,43 @@ show_security_menu() {
58595885 clear_screen
58605886 draw_header " SECURITY & ROUTING"
58615887 echo " "
5888+ local sni_label
5889+ if [ " $UNKNOWN_SNI_ACTION " = " drop" ]; then
5890+ sni_label=" ${RED} Drop${NC} (strict)"
5891+ else
5892+ sni_label=" ${GREEN} Mask${NC} (permissive)"
5893+ fi
58625894 echo -e " ${DIM} [1]${NC} Geo-Blocking"
58635895 echo -e " ${DIM} [2]${NC} Proxy Chaining (Upstreams)"
5896+ echo -e " ${DIM} [3]${NC} Unknown SNI Policy: ${sni_label} "
58645897 echo -e " ${DIM} [0]${NC} Back"
58655898
58665899 local choice
58675900 choice=$( read_choice " Choice" " 0" )
58685901 case " $choice " in
58695902 1) show_geoblock_menu ;;
58705903 2) show_upstream_menu ;;
5904+ 3)
5905+ echo " "
5906+ echo -e " ${BOLD} Unknown SNI Policy${NC} "
5907+ echo -e " Controls how the engine handles TLS connections whose SNI"
5908+ echo -e " doesn't match your configured domain."
5909+ echo " "
5910+ echo -e " ${DIM} [1]${NC} ${GREEN} Mask${NC} — redirect to mask backend (recommended)"
5911+ echo -e " Keeps old proxy links working after domain changes."
5912+ echo -e " ${DIM} [2]${NC} ${RED} Drop${NC} — reject immediately (strict)"
5913+ echo -e " More secure, but old proxy links with a previous"
5914+ echo -e " domain will stop working."
5915+ echo " "
5916+ local sni_choice
5917+ sni_choice=$( read_choice " Choice" " 0" )
5918+ case " $sni_choice " in
5919+ 1) UNKNOWN_SNI_ACTION=" mask" ; save_settings; reload_proxy_config; log_success " Unknown SNI policy set to Mask" ;;
5920+ 2) UNKNOWN_SNI_ACTION=" drop" ; save_settings; reload_proxy_config; log_success " Unknown SNI policy set to Drop" ;;
5921+ * ) ;;
5922+ esac
5923+ press_any_key
5924+ ;;
58715925 0|" " ) return ;;
58725926 * ) ;;
58735927 esac
0 commit comments