Linux 98.203.178.68.host.secureserver.net 4.18.0-553.164.1.el8_10.x86_64 #1 SMP Thu Sep 17 04:21:10 EDT 2026 x86_64
Apache
Server IP : 68.178.203.98 & Your IP : 216.73.217.130
Domains : 108 Domain
User : lostrivercommuni
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
local /
cpanel /
scripts /
Delete
Unzip
Name
Size
Permission
Date
Action
cpan_sandbox
[ DIR ]
drwxr-xr-x
2025-06-02 23:40
php_sandbox
[ DIR ]
drwxr-xr-x
2025-06-02 23:40
MirrorSearch_pingtest
2.38
KB
-rwxr-xr-x
2022-02-09 18:45
activesync-invite-reply
1.69
KB
-rwxr-xr-x
2022-02-09 18:45
add_dns
3.13
KB
-rwxr-xr-x
2026-09-22 02:49
adddns
3.13
KB
-rwxr-xr-x
2026-09-22 02:49
addpop
6.08
KB
-rwxr-xr-x
2022-02-09 18:45
addsystemuser
3.27
KB
-rwxr-xr-x
2022-02-09 18:45
adduser
92
B
-rwxr-xr-x
2015-02-11 17:35
agent360.sh
16.03
KB
-rwx------
2026-04-13 20:58
apachelimits
5.04
KB
-rwxr-xr-x
2026-09-22 02:49
archive_sync_zones
3.05
KB
-rwxr-xr-x
2025-02-11 05:08
auto-adjust-mysql-limits
1.81
KB
-rwxr-xr-x
2022-02-09 18:45
autorepair
1.24
KB
-rwxr-xr-x
2022-02-09 18:45
backup_jobs_helper
10.88
KB
-rwxr-xr-x
2026-07-14 13:34
backups_clean_metadata_for_missing_backups
1.57
KB
-rwxr-xr-x
2022-02-09 18:45
backups_create_metadata
15.75
KB
-rwxr-xr-x
2022-02-09 18:45
backups_list_user_files
4.56
KB
-rwxr-xr-x
2022-02-09 18:45
balance_linked_node_quotas
2.58
KB
-rwxr-xr-x
2022-02-09 18:45
biglogcheck
1.69
KB
-rwxr-xr-x
2022-02-09 18:45
build_bandwidthdb_root_cache_in_background
1.52
KB
-rwxr-xr-x
2022-02-09 18:45
build_cpnat
3.41
KB
-rwxr-xr-x
2022-02-09 18:45
build_mail_sni
3.87
KB
-rwxr-xr-x
2022-07-28 00:22
build_maxemails_config
1.14
KB
-rwxr-xr-x
2022-02-09 18:45
builddovecotconf
9.64
KB
-rwxr-xr-x
2026-01-13 02:50
buildeximconf
7
KB
-rwxr-xr-x
2025-02-11 05:08
buildhttpdconf
2.6
KB
-rwxr-xr-x
2022-02-09 18:45
buildpureftproot
539
B
-rwxr-xr-x
2022-02-09 18:45
call_pkgacct
2.25
KB
-rwxr-xr-x
2026-07-14 13:34
ccs-check
4.91
KB
-rwxr-xr-x
2022-02-09 18:45
check_cpanel_pkgs
10.6
KB
-rwxr-xr-x
2026-08-07 02:49
check_domain_recommendations_store
2.65
KB
-rwxr-xr-x
2026-09-22 02:49
check_domain_tls_service_domains.pl
6.68
KB
-rwxr-xr-x
2022-02-09 18:45
check_immutable_files
5.49
KB
-rwxr-xr-x
2022-02-09 18:45
check_mail_spamassassin_compiledregexps_body_0
187
B
-rwxr-xr-x
2016-04-13 18:55
check_maxmem_against_domains_count
3.57
KB
-rwxr-xr-x
2022-02-09 18:45
check_mount_procfs
2.02
KB
-rwxr-xr-x
2022-02-09 18:45
check_mysql
5.56
KB
-rwxr-xr-x
2025-02-11 05:08
check_plugin_pkgs
2.45
KB
-rwxr-xr-x
2025-02-11 05:08
check_security_advice_changes
8.28
KB
-rwxr-xr-x
2025-02-11 05:08
check_unmonitored_enabled_services
4.56
KB
-rwxr-xr-x
2022-07-28 00:22
check_unreliable_resolvers
3.59
KB
-rwxr-xr-x
2022-02-09 18:45
check_users_my_cnf
6.05
KB
-rwxr-xr-x
2022-02-09 18:45
check_valid_server_hostname
7.66
KB
-rwxr-xr-x
2022-07-28 00:22
checkalldomainsmxs
2.4
KB
-rwxr-xr-x
2022-02-09 18:45
checkbashshell
1.18
KB
-rwxr-xr-x
2022-02-09 18:45
checkccompiler
1.22
KB
-rwxr-xr-x
2022-02-09 18:45
checkexim.pl
3.1
KB
-rwxr-xr-x
2022-02-09 18:45
checklink
1.29
KB
-rwxr-xr-x
2022-02-09 18:45
checkusers
856
B
-rwxr-xr-x
2022-02-09 18:45
chkpaths
141
B
-rwxr-xr-x
2015-02-11 17:35
chpass
416
B
-rwxr-xr-x
2022-02-09 18:45
ckillall
1.11
KB
-rwxr-xr-x
2022-02-09 18:45
clean_dead_mailman_locks
2.09
KB
-rwxr-xr-x
2022-02-09 18:45
clean_up_temp_wheel_users
2.44
KB
-rwxr-xr-x
2022-02-09 18:45
clean_user_php_sessions
4.76
KB
-rwxr-xr-x
2022-07-28 00:22
cleandns
13.11
KB
-rwxr-xr-x
2025-02-11 05:08
cleandns8
417
B
-rwxr-xr-x
2022-02-09 18:45
cleanmsglog
735
B
-rwxr-xr-x
2015-02-11 17:35
cleanphpsessions
932
B
-rwxr-xr-x
2022-02-09 18:45
cleanphpsessions.php
658
B
-rw-r--r--
2022-08-31 17:28
cleanquotas
1.61
KB
-rwxr-xr-x
2022-02-09 18:45
cleansessions
6.77
KB
-rwxr-xr-x
2026-09-22 02:49
cleanupinterchange
2.64
KB
-rwxr-xr-x
2022-02-09 18:45
cleanupmysqlprivs
773
B
-rwxr-xr-x
2025-02-25 16:12
clear_orphaned_virtfs_mounts
3.56
KB
-rwxr-xr-x
2022-02-09 18:45
comet_license_registration_sync
1.67
KB
-rwxr-xr-x
2026-07-14 13:34
comet_protected_item_maintenance
20.78
KB
-rwxr-xr-x
2026-07-14 13:34
comparecdb
1.52
KB
-rwxr-xr-x
2022-02-09 18:45
compilers
2.86
KB
-rwxr-xr-x
2022-02-09 18:45
compilerscheck
999
B
-rwxr-xr-x
2022-02-09 18:45
configure_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-02-09 18:45
configure_rh_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-02-09 18:45
configure_rh_ipv6_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-02-09 18:45
convert2dovecot
682
B
-rwxr-xr-x
2022-02-09 18:45
convert_accesshash_to_token
4.07
KB
-rwxr-xr-x
2022-02-09 18:45
convert_and_migrate_from_legacy_backup
1.97
KB
-rwxr-xr-x
2022-02-09 18:45
convert_maildir_to_mdbox
1.66
KB
-rwxr-xr-x
2022-02-09 18:45
convert_mdbox_to_maildir
1.66
KB
-rwxr-xr-x
2022-02-09 18:45
convert_roundcube_mysql2sqlite
26.12
KB
-rwxr-xr-x
2025-03-07 15:31
convert_to_dovecot_delivery
4.33
KB
-rwxr-xr-x
2022-02-09 18:45
convert_whmxfer_to_sqlite
1.46
KB
-rwxr-xr-x
2022-02-09 18:45
copy_user_mail_as_root
1.25
KB
-rwxr-xr-x
2022-02-09 18:45
copy_user_mail_as_user
1.34
KB
-rwxr-xr-x
2022-02-09 18:45
cpan_config
2.8
KB
-rwxr-xr-x
2022-02-09 18:45
cpanel_initial_install
68.01
KB
-rwxr-xr-x
2026-09-22 02:49
cpanelsync
28.31
KB
-rwxr-xr-x
2022-02-09 18:45
cpanelsync_postprocessor
1.62
KB
-rwxr-xr-x
2022-02-09 18:45
cpanpingtest
965
B
-rwxr-xr-x
2022-02-09 18:45
cpbackup
44.79
KB
-rwxr-xr-x
2025-02-11 05:08
cpbackup_transport_file
5.65
KB
-rwxr-xr-x
2022-07-28 00:22
cpdig
2.81
KB
-rwxr-xr-x
2026-06-10 02:50
cpfetch
1.23
KB
-rwxr-xr-x
2022-02-09 18:45
cphulkdblacklist
433
B
-rwxr-xr-x
2022-02-09 18:45
cphulkdwhitelist
1.3
KB
-rwxr-xr-x
2022-02-09 18:45
cpservice
2.87
KB
-rwxr-xr-x
2022-02-09 18:45
cpuser_port_authority
19.29
KB
-rwxr-xr-x
2022-02-09 18:45
cpuser_service_manager
10.85
KB
-rwxr-xr-x
2022-07-28 00:22
create_default_featurelist
11.62
KB
-rwx------
2026-09-24 21:30
createacct
30.6
MB
-rwx------
2026-09-24 02:49
custom_backup_destination.pl.sample
5.06
KB
-rwxr-xr-x
2022-07-28 00:22
custom_backup_destination.pl.skeleton
2.84
KB
-rwxr-xr-x
2022-02-09 18:45
dcpumon-wrapper
850
B
-rwxr-xr-x
2022-02-09 18:45
delpop
6.2
KB
-rwxr-xr-x
2022-02-09 18:45
detect_env_capabilities
508
B
-rwxr-xr-x
2022-02-09 18:45
disable_prelink
2.77
KB
-rwxr-xr-x
2022-02-09 18:45
disablefileprotect
2.19
KB
-rwxr-xr-x
2025-02-11 05:08
distro_changed_hook
1.16
KB
-rwxr-xr-x
2022-02-09 18:45
dnscluster
4.44
KB
-rwxr-xr-x
2022-02-09 18:45
dnsqueuecron
1.29
KB
-rwxr-xr-x
2022-02-09 18:45
dnssec-cluster-keys
3.75
KB
-rwxr-xr-x
2022-02-09 18:45
dovecot_maintenance
7.66
KB
-rwxr-xr-x
2025-02-11 05:08
dovecot_set_defaults.pl
984
B
-rwxr-xr-x
2022-02-09 18:45
dumpcdb
866
B
-rwxr-xr-x
2022-02-09 18:45
dumpinodes
687
B
-rwxr-xr-x
2022-02-09 18:45
dumpquotas
616
B
-rwxr-xr-x
2022-02-09 18:45
dumpstor
913
B
-rwxr-xr-x
2022-02-09 18:45
ea-nginx
93.45
KB
-rwxr-xr-x
2026-07-29 18:13
ea-nginx-userdata
9.62
KB
-rwxr-xr-x
2020-05-12 17:29
ea-podman
8.01
MB
-rwxr-xr-x
2026-09-28 02:56
ea4_fresh_install
2.64
KB
-rwxr-xr-x
2022-02-09 18:45
edit_cpanelsync_exclude_list
2.58
KB
-rwxr-xr-x
2022-02-09 18:45
editquota
3.43
KB
-rwxr-xr-x
2025-02-11 05:08
elevate-cpanel
417.95
KB
-rwx------
2026-09-28 02:55
email_archive_maintenance
6.15
KB
-rwxr-xr-x
2022-02-09 18:45
email_hold_maintenance
1.46
KB
-rwxr-xr-x
2022-02-09 18:45
enable_spf_dkim_globally
8.83
KB
-rwxr-xr-x
2022-02-09 18:45
enablefileprotect
2.1
KB
-rwxr-xr-x
2022-02-09 18:45
ensure_autoenabled_features
3.17
MB
-rwx------
2026-09-24 02:49
ensure_conf_dir_crt_key
4.82
KB
-rwxr-xr-x
2022-02-09 18:45
ensure_cpuser_file_ip
2.55
KB
-rwxr-xr-x
2022-02-09 18:45
ensure_crontab_permissions
1.08
KB
-rwxr-xr-x
2022-02-09 18:45
ensure_dovecot_memory_limits_meet_minimum
3.13
KB
-rwxr-xr-x
2022-02-09 18:45
ensure_hostname_resolves
2.51
KB
-rwxr-xr-x
2025-04-01 22:57
ensure_includes
601
B
-rwxr-xr-x
2022-02-09 18:45
ensure_vhost_includes
13.53
KB
-rwxr-xr-x
2022-02-09 18:45
exim_tidydb
2.96
KB
-rwxr-xr-x
2022-02-09 18:45
eximconfgen
1.32
KB
-rwxr-xr-x
2022-02-09 18:45
eximstats_spam_check
867
B
-rwxr-xr-x
2022-02-09 18:45
expunge_expired_certificates_from_sslstorage
3.56
KB
-rwxr-xr-x
2022-02-09 18:45
expunge_expired_pkgacct_sessions
852
B
-rwxr-xr-x
2022-02-09 18:45
expunge_expired_transfer_sessions
1.06
KB
-rwxr-xr-x
2022-02-09 18:45
fastmail
5.16
KB
-rwxr-xr-x
2022-02-09 18:45
featuremod
1.92
KB
-rwxr-xr-x
2022-02-09 18:45
fetchfile
422
B
-rwxr-xr-x
2022-02-09 18:45
find_and_fix_rpm_issues
6.99
KB
-rwxr-xr-x
2025-02-11 05:08
find_outdated_services
6.47
KB
-rwxr-xr-x
2026-06-10 02:50
find_pids_with_inotify_watch_on_path
3.66
KB
-rwxr-xr-x
2022-02-09 18:45
fix-cpanel-perl
28.43
KB
-rwxr-xr-x
2026-08-18 02:49
fix-listen-on-localhost
3.94
KB
-rwxr-xr-x
2026-06-02 02:50
fix-web-vhost-configuration
6.15
KB
-rwxr-xr-x
2022-02-09 18:45
fix_dns_zone_ttls
1.34
KB
-rwxr-xr-x
2022-02-09 18:45
fix_innodb_tables
4.05
KB
-rwxr-xr-x
2022-02-09 18:45
fix_reseller_acls
10.7
KB
-rwxr-xr-x
2025-06-02 23:37
fixetchosts
4.32
KB
-rwxr-xr-x
2022-02-09 18:45
fixheaders
572
B
-rwxr-xr-x
2022-02-09 18:45
fixmailinglistperms
1008
B
-rwxr-xr-x
2022-02-09 18:45
fixmailman
2.09
KB
-rwxr-xr-x
2022-02-09 18:45
fixnamedviews
1.22
KB
-rwxr-xr-x
2022-02-09 18:45
fixndc
413
B
-rwxr-xr-x
2022-02-09 18:45
fixquotas
18.39
KB
-rwxr-xr-x
2025-02-11 05:08
fixrelayd
1.74
KB
-rwxr-xr-x
2022-02-09 18:45
fixrndc
16.39
KB
-rwxr-xr-x
2025-02-11 05:08
fixtar
503
B
-rwxr-xr-x
2022-02-09 18:45
fixtlsversions
4.7
KB
-rwxr-xr-x
2022-02-09 18:45
fixvaliases
2
KB
-rwxr-xr-x
2022-02-09 18:45
fixwebalizer
966
B
-rwxr-xr-x
2022-02-09 18:45
forcelocaldomain
895
B
-rwxr-xr-x
2022-02-09 18:45
ftpfetch
2.2
KB
-rwxr-xr-x
2019-12-06 17:06
ftpquotacheck
8.31
KB
-rwxr-xr-x
2022-02-09 18:45
ftpsfetch
2.36
KB
-rwxr-xr-x
2019-12-06 17:06
ftpupdate
261
B
-rwxr-xr-x
2020-01-10 19:19
gather_update_log_stats
5.02
KB
-rwx------
2026-09-23 21:50
gather_update_logs_setupcrontab
5.45
KB
-rwx------
2026-09-23 21:50
gemwrapper
1.74
KB
-rwxr-xr-x
2022-02-09 18:45
gencrt
6.26
KB
-rwxr-xr-x
2022-02-09 18:45
generate_account_suspension_include
5.7
KB
-rwxr-xr-x
2022-02-09 18:45
generate_google_drive_credentials
1.11
KB
-rwxr-xr-x
2022-02-09 18:45
generate_google_drive_oauth_uri
984
B
-rwxr-xr-x
2022-02-09 18:45
generate_maildirsize
14.56
KB
-rwxr-xr-x
2026-07-02 02:50
gensysinfo
1.16
KB
-rwxr-xr-x
2022-02-09 18:45
get_locale_from_legacy_name_info
1.99
KB
-rwxr-xr-x
2022-02-09 18:45
getremotecpmove
22.54
KB
-rwxr-xr-x
2026-09-01 02:49
grpck
1.19
KB
-rwxr-xr-x
2022-02-09 18:45
hackcheck
3.02
KB
-rwxr-xr-x
2022-02-09 18:45
hook
1.45
KB
-rwxr-xr-x
2022-02-09 18:45
httpspamdetect
2.82
KB
-rwxr-xr-x
2026-06-10 02:50
hulk-unban-ip
4.11
MB
-rwx------
2026-09-24 02:49
import_exim_data
8.39
KB
-rwxr-xr-x
2022-07-28 00:22
increase_filesystem_limits
891
B
-rwxr-xr-x
2022-02-09 18:45
initacls
4.99
KB
-rwxr-xr-x
2022-02-09 18:45
initfpsuexec
444
B
-rwxr-xr-x
2022-02-09 18:45
initialize_360monitoring
2.76
KB
-rwx------
2026-06-25 13:40
initquotas
19.35
KB
-rwxr-xr-x
2026-02-26 02:50
initsuexec
4.03
KB
-rwxr-xr-x
2022-02-09 18:45
install_cpanel_analytics
1.93
KB
-rwxr-xr-x
2022-12-02 16:41
install_dovecot_fts
1.57
KB
-rwxr-xr-x
2022-02-09 18:45
install_plugin
2.8
KB
-rwxr-xr-x
2022-07-28 00:22
install_tuxcare_els_php
1.84
KB
-rwxr-xr-x
2025-12-20 02:50
installpkg
575
B
-rwxr-xr-x
2022-02-09 18:45
installpostgres
6.56
KB
-rwxr-xr-x
2025-12-15 02:50
installsqlite3
1.82
KB
-rwxr-xr-x
2022-02-09 18:45
ipcheck
3.93
KB
-rwxr-xr-x
2022-02-09 18:45
ipusage
7.45
KB
-rwxr-xr-x
2022-02-09 18:45
is_update_available
3.26
KB
-rwxr-xr-x
2026-05-20 02:50
isdedicatedip
602
B
-rwxr-xr-x
2022-02-09 18:45
jetbackup-check
3.69
KB
-rwxr-xr-x
2022-02-09 18:45
killdns
422
B
-rwxr-xr-x
2022-02-09 18:45
killdns-dnsadmin
2.25
KB
-rwxr-xr-x
2026-09-22 02:49
killmysqluserprivs
433
B
-rwxr-xr-x
2022-02-09 18:45
killmysqlwildcard
1.15
KB
-rwxr-xr-x
2022-02-09 18:45
killpvhost
853
B
-rwxr-xr-x
2022-02-09 18:45
killspamkeys
937
B
-rwxr-xr-x
2022-02-09 18:45
link_3rdparty_binaries
1.24
KB
-rwxr-xr-x
2022-03-11 15:43
linksubemailtomainacct
3.17
KB
-rwxr-xr-x
2022-02-09 18:45
listcheck
538
B
-rwxr-xr-x
2022-02-09 18:45
listsubdomains
1.05
KB
-rwxr-xr-x
2022-02-09 18:45
litespeed-check
3.86
KB
-rwxr-xr-x
2022-02-09 18:45
locale_export
5.21
KB
-rwxr-xr-x
2025-02-11 05:08
locale_import
4.69
KB
-rwxr-xr-x
2026-07-29 16:56
locale_info
3.99
KB
-rwxr-xr-x
2022-02-09 18:45
log_retention
21.28
KB
-rwxr-xr-x
2026-02-24 02:50
logo.dat
205
B
-rw-r--r--
2015-02-11 17:35
magicloader
1.94
KB
-rwxr-xr-x
2022-02-09 18:45
maildir_converter
6.08
KB
-rwxr-xr-x
2022-02-09 18:45
mailperm
16.53
KB
-rwxr-xr-x
2025-02-11 05:08
mailscannerupdate
2.42
KB
-rwxr-xr-x
2022-02-09 18:45
mainipcheck
10
KB
-rwxr-xr-x
2022-02-09 18:45
maintenance
53.03
KB
-rwxr-xr-x
2026-09-24 02:49
make_config
407
B
-rw-r--r--
2015-02-11 17:35
make_hostname_unowned
1.16
KB
-rwxr-xr-x
2022-02-09 18:45
manage_extra_marketing
12.76
KB
-rwx------
2026-09-24 21:30
manage_greylisting
16.33
KB
-rwxr-xr-x
2026-06-11 02:50
manage_mysql_profiles
16.33
KB
-rwxr-xr-x
2025-02-11 05:08
mass_change_php_setting
10.65
KB
-rwxr-xr-x
2026-06-10 02:50
migrate_ccs_to_cpdavd
47.06
KB
-rwxr-xr-x
2025-02-11 05:08
migrate_local_ini_to_php_ini
7.41
KB
-rwxr-xr-x
2022-02-09 18:45
migrate_whmtheme_file_to_userdata
2.95
KB
-rwxr-xr-x
2022-02-09 18:45
mkwwwacctconf
2.33
KB
-rwxr-xr-x
2022-08-31 17:28
modify_accounts
4.07
KB
-rwxr-xr-x
2025-02-11 05:08
modify_featurelist
16.16
KB
-rwx------
2026-09-24 21:30
modify_packages
3.64
KB
-rwxr-xr-x
2025-02-11 05:08
modsec_vendor
15.63
KB
-rwxr-xr-x
2022-02-09 18:45
mysqlconnectioncheck
6.72
KB
-rwxr-xr-x
2025-02-11 05:08
mysqlpasswd
4.14
KB
-rwxr-xr-x
2025-02-11 05:08
named.ca
1.57
KB
-rw-r--r--
2015-02-11 17:35
named.rfc1912.zones
774
B
-rw-r--r--
2017-09-22 16:06
notify_expiring_certificates
9.37
KB
-rwxr-xr-x
2022-03-11 15:43
notify_expiring_certificates_on_linked_nodes
1.33
KB
-rwxr-xr-x
2022-07-28 00:22
oopscheck
1.12
KB
-rwxr-xr-x
2022-02-09 18:45
optimize_eximstats
3.88
KB
-rwxr-xr-x
2022-02-09 18:45
panel_ini
4.11
KB
-rwxr-xr-x
2026-06-02 02:50
patch_mail_spamassassin_compiledregexps_body_0
2.39
KB
-rwxr-xr-x
2022-02-09 18:45
patchfdsetsize
2.72
KB
-rwxr-xr-x
2022-02-09 18:45
pedquota
2.26
KB
-rwxr-xr-x
2022-02-09 18:45
perform_sqlite_auto_rebuild_db_maintenance
1.98
KB
-rwxr-xr-x
2025-02-11 05:08
perlinstaller
528
B
-rwxr-xr-x
2022-02-09 18:45
perlmods
1.18
KB
-rwxr-xr-x
2022-02-09 18:45
php_fpm_config
9.73
KB
-rwxr-xr-x
2022-02-09 18:45
phpini_tidy
687
B
-rwxr-xr-x
2022-02-09 18:45
pkgacct
89.91
KB
-rwxr-xr-x
2026-06-10 02:50
post_snapshot
2.09
KB
-rwxr-xr-x
2025-02-11 05:08
post_sync_cleanup
5.83
KB
-rwxr-xr-x
2026-06-11 02:50
premodifyacct
62
B
-rwxr-xr-x
2025-06-06 11:56
primary_virtual_host_migration
2.44
KB
-rwxr-xr-x
2022-02-09 18:45
process_cpmove
4.32
KB
-rwxr-xr-x
2026-07-14 13:34
process_pending_cpanel_php_pear_registration
2.73
KB
-rwxr-xr-x
2025-06-02 23:37
proxydomains
9.59
KB
-rwxr-xr-x
2025-12-15 02:50
ptycheck
724
B
-rwxr-xr-x
2022-02-09 18:45
purge_modsec_log
1.53
KB
-rwxr-xr-x
2022-02-09 18:45
purge_old_config_caches
2.08
KB
-rwxr-xr-x
2022-02-09 18:45
pwck
708
B
-rwxr-xr-x
2022-02-09 18:45
quickdnslookup
1.13
KB
-rwxr-xr-x
2022-02-09 18:45
quickwhoisips
2.29
KB
-rwxr-xr-x
2022-07-28 00:22
quota_auto_fix
1.41
KB
-rwxr-xr-x
2022-02-09 18:45
quotacheck
22.36
KB
-rwxr-xr-x
2022-07-28 00:22
rawchpass
460
B
-rwxr-xr-x
2022-02-09 18:45
rdate
4.8
KB
-rwxr-xr-x
2022-07-28 00:22
realadduser
5.61
KB
-rwxr-xr-x
2022-02-09 18:45
realchpass
3.26
KB
-rwxr-xr-x
2022-02-09 18:45
realperlinstaller
5.67
KB
-rwxr-xr-x
2022-02-09 18:45
realrawchpass
425
B
-rwxr-xr-x
2022-02-09 18:45
rebuild_api_readonly_cache
2.51
KB
-rwxr-xr-x
2026-09-22 02:49
rebuild_bandwidthdb_root_cache
1.45
KB
-rwxr-xr-x
2022-02-09 18:45
rebuild_dbmap
5.8
KB
-rwxr-xr-x
2022-02-09 18:45
rebuild_provider_openid_connect_links_db
1.01
KB
-rwxr-xr-x
2022-02-09 18:45
rebuild_whm_chrome
2.22
KB
-rwxr-xr-x
2022-02-09 18:45
rebuilddnsconfig
25.5
KB
-rwxr-xr-x
2025-03-07 15:31
rebuildhttpdconf
2.6
KB
-rwxr-xr-x
2022-02-09 18:45
rebuildinstalledssldb
2.85
KB
-rwxr-xr-x
2022-02-09 18:45
rebuildippool
509
B
-rwxr-xr-x
2022-02-09 18:45
rebuilduserssldb
948
B
-rwxr-xr-x
2022-02-09 18:45
refresh-dkim-validity-cache
5.97
KB
-rwxr-xr-x
2022-02-09 18:45
regenerate_tokens
2.18
KB
-rwxr-xr-x
2022-04-20 19:26
remote_log_transfer
11.6
KB
-rwxr-xr-x
2022-08-31 17:28
remove_dovecot_index_files
5.89
KB
-rwxr-xr-x
2022-02-09 18:45
removeacct
28.62
MB
-rwx------
2026-09-24 02:49
rescan_user_dovecot_fts
2.98
KB
-rwxr-xr-x
2022-02-09 18:45
reset_mail_quotas_to_sane_values
6.82
KB
-rwxr-xr-x
2022-02-09 18:45
resetmailmanurls
2.03
KB
-rwxr-xr-x
2022-02-09 18:45
resetquotas
4.61
KB
-rwxr-xr-x
2025-02-11 05:08
restartsrv
3.19
KB
-rwxr-xr-x
2025-02-11 05:08
restartsrv_apache
422
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_apache_php_fpm
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_base
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_bind
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_chkservd
427
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_clamd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_cpanel_php_fpm
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_cpanellogd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_cpdavd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_cpgreylistd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_cphulkd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_cpipv6
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_cpsrvd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_crond
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_dnsadmin
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_dovecot
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_exim
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_eximstats
504
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_ftpd
426
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_ftpserver
911
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_httpd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_imap
437
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_inetd
2.47
KB
-rwxr-xr-x
2022-04-20 19:26
restartsrv_ipaliases
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_lmtp
437
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_mailman
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_mysql
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_named
579
B
-rwxr-xr-x
2025-02-11 05:08
restartsrv_nginx
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_nscd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_p0f
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_pdns
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_pop3
437
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_postgres
427
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_postgresql
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_powerdns
442
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_proftpd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_pureftpd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_queueprocd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_rsyslog
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_rsyslogd
437
B
-rwxr-xr-x
2022-02-09 18:45
restartsrv_spamd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_sshd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_syslogd
2.4
KB
-rwxr-xr-x
2022-03-11 15:43
restartsrv_tailwatchd
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_unknown
11.04
MB
-rwxr-xr-x
2026-09-24 02:49
restartsrv_xinetd
422
B
-rwxr-xr-x
2022-02-09 18:45
restorecpuserfromcache
1.96
KB
-rwxr-xr-x
2022-02-09 18:45
restorepkg
49.78
MB
-rwx------
2026-09-24 02:49
rfc1912_zones.tar
10
KB
-rw-r--r--
2015-02-11 17:35
rpmup
5.07
KB
-rwxr-xr-x
2025-02-11 05:08
rsync-user-homedir.pl
5.76
KB
-rwxr-xr-x
2022-02-09 18:45
run_if_exists
512
B
-rwxr-xr-x
2022-02-09 18:45
run_plugin_lifecycle
3.96
KB
-rwx------
2026-09-24 21:30
runstatsonce
440
B
-rwxr-xr-x
2022-02-09 18:45
runweblogs
1.02
KB
-rwxr-xr-x
2022-02-09 18:45
sa-update_wrapper
3.34
KB
-rwxr-xr-x
2022-02-09 18:45
safetybits.pl
844
B
-rwxr-xr-x
2022-02-09 18:45
secureit
4.72
KB
-rwxr-xr-x
2022-02-09 18:45
securemysql
4.4
KB
-rwxr-xr-x
2025-02-11 05:08
securerailsapps
3.58
KB
-rwxr-xr-x
2022-02-09 18:45
securetmp
16.76
KB
-rwxr-xr-x
2025-08-11 02:52
sendicq
474
B
-rwxr-xr-x
2022-02-09 18:45
servicedomains
9.59
KB
-rwxr-xr-x
2025-12-15 02:50
set_mailman_archive_perms
1.75
KB
-rwxr-xr-x
2022-02-09 18:45
setpostgresconfig
6.04
KB
-rwxr-xr-x
2022-02-09 18:45
setup_greylist_db
16.33
KB
-rwxr-xr-x
2026-06-11 02:50
setup_modsec_db
1.3
KB
-rwxr-xr-x
2022-02-09 18:45
setup_systemd_timer_for_plugins
3.92
KB
-rwx------
2026-09-24 21:30
setupftpserver
10.47
KB
-rwxr-xr-x
2022-02-09 18:45
setupmailserver
9.39
KB
-rwxr-xr-x
2025-03-07 15:31
setupnameserver
12.6
KB
-rwxr-xr-x
2025-12-15 02:50
show_php_settings
3.67
KB
-rwxr-xr-x
2026-06-10 02:50
shrink_modsec_ip_database
12.97
KB
-rwxr-xr-x
2022-02-09 18:45
simpleps
3.05
KB
-rwxr-xr-x
2022-02-09 18:45
slurp_exim_mainlog
5.78
KB
-rwxr-xr-x
2022-02-09 18:45
smartcheck
15.13
KB
-rwxr-xr-x
2025-06-02 23:37
smtpmailgidonly
16.17
KB
-rwxr-xr-x
2026-09-24 02:49
snapshot_prep
5.88
KB
-rwxr-xr-x
2025-02-11 05:08
spamassassin_dbm_cleaner
5.85
KB
-rwxr-xr-x
2022-07-28 00:22
spamassassindisable
3.74
KB
-rwxr-xr-x
2022-06-10 15:47
spamboxdisable
2.27
KB
-rwxr-xr-x
2022-06-10 15:47
sshcontrol
14.38
KB
-rwxr-xr-x
2022-02-09 18:45
ssl_crt_status
3.84
KB
-rwxr-xr-x
2022-02-09 18:45
suspendacct
18.08
KB
-rwxr-xr-x
2025-12-15 02:50
suspendmysqlusers
4.78
KB
-rwxr-xr-x
2025-02-11 05:08
swapip
3.82
KB
-rwxr-xr-x
2022-02-09 18:45
sync-mysql-users-from-grants
1.2
KB
-rwxr-xr-x
2022-02-09 18:45
sync_child_accounts
1.77
KB
-rwxr-xr-x
2022-02-09 18:45
sync_contact_emails_to_cpanel_users_files
1.14
KB
-rwxr-xr-x
2022-06-10 15:47
synctransfers
1.92
KB
-rwxr-xr-x
2022-02-09 18:45
syslog_check
1.36
KB
-rwxr-xr-x
2022-02-09 18:45
sysup
645
B
-rwxr-xr-x
2022-02-09 18:45
test_sa_compiled
1.07
KB
-rwxr-xr-x
2022-02-09 18:45
transfer_account_as_user
2.34
KB
-rwxr-xr-x
2022-02-09 18:45
transfer_accounts_as_root
4.76
KB
-rwxr-xr-x
2022-02-09 18:45
transfer_in_progress
3.08
KB
-rwxr-xr-x
2022-02-09 18:45
transfer_in_progress.pod
312
B
-rw-r--r--
2016-11-17 01:07
transfermysqlusers
10.16
MB
-rwx------
2026-09-24 02:49
try-later
7.95
KB
-rwxr-xr-x
2022-02-09 18:45
unblockip
667
B
-rwxr-xr-x
2022-02-09 18:45
uninstall_cpanel_analytics
1.2
KB
-rwxr-xr-x
2022-02-09 18:45
uninstall_dovecot_fts
562
B
-rwxr-xr-x
2022-02-09 18:45
uninstall_plugin
2.84
KB
-rwxr-xr-x
2022-07-28 00:22
unlink_service_account
2.62
KB
-rwxr-xr-x
2022-02-09 18:45
unpkgacct
4.6
KB
-rwxr-xr-x
2022-02-09 18:45
unslavenamedconf
863
B
-rwxr-xr-x
2022-02-09 18:45
unsuspendacct
18.46
KB
-rwxr-xr-x
2026-09-11 02:49
unsuspendmysqlusers
7.1
KB
-rwxr-xr-x
2025-02-11 05:08
upcp
43.61
KB
-rwxr-xr-x
2026-09-24 02:49
upcp-running
2.7
KB
-rwxr-xr-x
2022-02-09 18:45
upcp.static
962.02
KB
-rwxr-xr-x
2026-09-24 02:49
update-packages
5.07
KB
-rwxr-xr-x
2025-02-11 05:08
update_apachectl
480
B
-rwxr-xr-x
2022-02-09 18:45
update_db_cache
430
B
-rwxr-xr-x
2022-02-09 18:45
update_dkim_keys
1.45
KB
-rwxr-xr-x
2022-02-09 18:45
update_exim_rejects
1.21
KB
-rwxr-xr-x
2022-02-09 18:45
update_existing_mail_quotas_for_account
4.78
KB
-rwxr-xr-x
2022-02-09 18:45
update_feature_flags
957
B
-rwxr-xr-x
2025-02-11 05:08
update_freebusy_data
5.25
KB
-rwxr-xr-x
2025-04-01 22:57
update_known_proxy_ips
1002
B
-rwxr-xr-x
2022-02-09 18:45
update_local_rpm_versions
4.56
KB
-rwxr-xr-x
2022-12-02 16:41
update_mailman_cache
8.34
KB
-rwxr-xr-x
2022-02-09 18:45
update_mysql_systemd_config
1.07
KB
-rwxr-xr-x
2025-03-07 15:31
update_neighbor_netblocks
487
B
-rwxr-xr-x
2022-02-09 18:45
update_sa_config
2.14
KB
-rwxr-xr-x
2022-02-09 18:45
update_spamassassin_config
10.73
KB
-rwxr-xr-x
2022-12-02 16:41
update_users_jail
691
B
-rwxr-xr-x
2022-02-09 18:45
update_users_vhosts
801
B
-rwxr-xr-x
2022-02-09 18:45
updatedomainips
605
B
-rwxr-xr-x
2022-02-09 18:45
updatenameserverips
1.66
KB
-rwxr-xr-x
2022-02-09 18:45
updatenow
5.18
KB
-rwxr-xr-x
2022-07-28 00:22
updatenow.static
2.03
MB
-rwxr-xr-x
2026-09-24 02:49
updatesigningkey
1.95
KB
-rwxr-xr-x
2022-02-09 18:45
updatessldomains
1.81
KB
-rwxr-xr-x
2022-02-09 18:45
updatesupportauthorizations
2.49
KB
-rwxr-xr-x
2022-02-09 18:45
updateuserdatacache
2.47
KB
-rwxr-xr-x
2022-02-09 18:45
updateuserdomains
774
B
-rwxr-xr-x
2022-02-09 18:45
upgrade_bandwidth_dbs
2.22
KB
-rwxr-xr-x
2022-02-09 18:45
upgrade_subaccount_databases
2.73
KB
-rwxr-xr-x
2022-02-09 18:45
userdata_wildcard_cleanup
5.74
KB
-rwxr-xr-x
2022-02-09 18:45
userdirctl
5.01
KB
-rwxr-xr-x
2022-02-09 18:45
validate_sshkey_passphrase
1.21
KB
-rwxr-xr-x
2022-02-09 18:45
verify_api_spec_files
757
B
-rwxr-xr-x
2022-02-09 18:45
verify_pidfile
1.96
KB
-rwxr-xr-x
2022-02-09 18:45
verify_vhost_includes
7.34
KB
-rwxr-xr-x
2022-07-28 00:22
vps_optimizer
7.82
KB
-rwxr-xr-x
2022-02-09 18:45
vzzo-fixer
725
B
-rwxr-xr-x
2022-02-09 18:45
whmlogin
2.33
KB
-rwxr-xr-x
2022-02-09 18:45
whoowns
1.13
KB
-rwxr-xr-x
2016-09-13 16:25
wwwacct
30.6
MB
-rwx------
2026-09-24 02:49
wwwacct2
88
B
-rwxr-xr-x
2015-02-11 17:35
xfer_rcube_schema_migrate.pl
2.4
KB
-rwxr-xr-x
2022-02-09 18:45
xfer_rcube_uid_resolver.pl
1.8
KB
-rwxr-xr-x
2022-02-09 18:45
xferpoint
3.13
KB
-rwxr-xr-x
2022-02-09 18:45
xfertool
16.23
KB
-rwxr-xr-x
2025-02-11 05:08
zoneexists
800
B
-rwxr-xr-x
2022-02-09 18:45
Save
Rename
#!/usr/local/cpanel/3rdparty/bin/perl package scripts::smtpmailgidonly; # Copyright 2026 WebPros International, LLC # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited. use strict; use warnings; use Cpanel::Binaries (); use Cpanel::Chkservd (); use Cpanel::Config::CpConfGuard (); use Cpanel::Exim::Config::Ports (); use Cpanel::FileUtils::TouchFile (); use Cpanel::FileUtils::Write (); use Cpanel::OS (); use Cpanel::PwCache (); use Cpanel::SafeRun::Errors (); use Cpanel::SafeRun::Object (); use Cpanel::Services::Firewall (); use Cpanel::Validate::IP (); use Cpanel::Validate::IP::v4 (); use Cpanel::YAML (); use constant NFT_TABLE => 'cpanel_smtp_restrict'; our @PORTS; our @RULE_TYPES; our @RULES; sub run { my (@argv) = @_; my $version = '2.4'; my $action = lc( ( grep( m/^-*(?:on|off|status|refresh|start|stop)$/i, @argv ) )[0] // '' ) || 0; $action =~ s/^-*//g; my $no_run_header = "$0 version $version - Copyright(C) 2020 cPanel, L.L.C.\nThis may be freely redistributed under the terms of the Artistic License."; if ( !$action ) { print STDERR <<"EOM"; $no_run_header usage: $0 <on|off|status|refresh|start|stop> EOM return 1; } my $cpaneluid = ( Cpanel::PwCache::getpwnam('cpanel') )[2]; my $mailgid = ( Cpanel::PwCache::getpwnam('mail') )[3]; my $mailmangid = ( Cpanel::PwCache::getpwnam('mailman') )[3]; my $exim_alt_port = Cpanel::Chkservd::geteximport(1); #first arg allows fetch more than the first port if ($exim_alt_port) { foreach my $port ( split( m/\s*\,\s*/, $exim_alt_port ) ) { $Cpanel::Exim::Config::Ports::LISTEN_PORTS{$port} = 1 if _valid_port($port); } } @PORTS = sort { $a <=> $b } keys %Cpanel::Exim::Config::Ports::LISTEN_PORTS; @RULE_TYPES = ( { 'table' => 'nat', 'target' => 'RETURN', 'method' => '-I' }, { 'table' => '', 'target' => 'ACCEPT', 'method' => '-I' } ); @RULES = ( { 'type' => 'uid', 'value' => 0, 'name' => 'root' }, #aka root $cpaneluid ? { 'type' => 'uid', 'value' => $cpaneluid, 'name' => 'cpanel', 'args' => [ '-d', '127.0.0.1' ] } : (), $mailgid ? { 'type' => 'gid', 'value' => $mailgid, 'name' => 'mail' } : (), $mailmangid ? { 'type' => 'gid', 'value' => $mailmangid, 'name' => 'mailman' } : () ); # for future expansion if ( -e '/var/cpanel/smtpmailgidonly/conf.yaml' ) { print "Loaded custom smtpmailgidonly/conf.yaml\n"; my $cfg = Cpanel::YAML::LoadFile('/var/cpanel/smtpmailgidonly/conf.yaml'); push @PORTS, grep { _valid_port($_) } @{ $cfg->{'PORTS'} } if ref $cfg->{'PORTS'} eq 'ARRAY'; push @RULES, grep { _valid_rule($_) } @{ $cfg->{'RULES'} } if ref $cfg->{'RULES'} eq 'ARRAY'; } my $enabled = -e '/var/cpanel/smtpgidonlytweak'; if ( $action eq 'status' ) { print "Protection is: " . ( $enabled ? 'on' : 'off' ) . "\n"; return 0; } if ( $action eq 'refresh' ) { $action = ( $enabled ? 'on' : 'off' ); print "Refreshing SMTP Mail protection.\n"; } remove_firewall_rules( $action =~ /^(?:start|stop)$/ ); if ( $action =~ /^(?:on|start)$/ ) { if ( !add_firewall_rules( $action eq 'start' ) ) { return 1; } print "SMTP Mail protection has been enabled.\n"; print "All outbound SMTP connections will be redirected to localhost except:\n"; foreach my $rule (@RULES) { print "\t$rule->{'type'} is $rule->{'name'} (ports: " . join( ',', @PORTS ) . ")\n"; } } else { print "SMTP Mail protection has been disabled. All users may make outbound smtp connections.\n"; } return 0; } sub add_firewall_rules { my ($start_only) = @_; if ( _use_nftables() ) { # Add the nft rules, then persist and reload. # If any of that fails, remove any rules we may have added and bail out. if ( !_add_nft_rules() || !_nft_persist_and_reload() ) { remove_firewall_rules(); print "SMTP Mail protection has been disabled. All users may make smtp connections.\n"; print "There was a problem setting up nftables rules for SMTP restrictions.\n"; return 0; } } else { foreach my $type (@RULE_TYPES) { foreach my $rule (@RULES) { my $result = _iptables( ( $type->{'table'} ? ( '-t', $type->{'table'} ) : () ), $type->{'method'}, 'OUTPUT', '-p', 'tcp', ( ref $rule->{'args'} ? @{ $rule->{'args'} } : () ), '-m', 'multiport', '--dports', join( ',', @PORTS ), '-m', 'owner', '--' . $rule->{'type'} . '-owner', $rule->{'value'}, '-j', $type->{'target'} ); if ( $result =~ m/(?:No\s+chain|target\s+problem|Unknown\s+error|cannot\s+open\s+shared\s+object\s+file)/i ) { remove_firewall_rules(); print "SMTP Mail protection has been disabled. All users may make smtp connections.\n"; print "There was a problem setting up iptables. You either have an older kernel or a broken iptables install, or ipt_owner could not be loaded.\n"; return 0; } } } _iptables( '-t', 'nat', '-A', 'OUTPUT', '-p', 'tcp', '-m', 'multiport', '--dports', join( ',', @PORTS ), '-j', 'REDIRECT' ); } return 1 if $start_only; my $cpconf = Cpanel::Config::CpConfGuard->new(); $cpconf->{data}->{smtpmailgidonly} = 1; $cpconf->save(); Cpanel::FileUtils::TouchFile::touchfile('/var/cpanel/smtpgidonlytweak'); return 1; } sub remove_firewall_rules { my ($stop_only) = @_; debug("Removing old rules"); if ( !-e '/etc/csf' ) { #case 57565: removing these breaks outbound mail if csf has SMTP_BLOCK=1 # Old method needs to be removed foreach my $rule (@RULES) { _iptables( '-D', 'OUTPUT', '--protocol', 'tcp', ( ref $rule->{'args'} ? @{ $rule->{'args'} } : () ), '--dport', '25', '-m', 'owner', '--' . $rule->{'type'} . '-owner', $rule->{'value'}, '-j', 'ACCEPT' ); } _iptables( '-D', 'OUTPUT', '--protocol', 'tcp', '-d', '127.0.0.1', '--dport', '25', '-j', 'ACCEPT' ); _iptables( '-D', 'OUTPUT', '--protocol', 'tcp', '--dport', '25', '-j', 'REJECT' ); } debug("Removing new type rules"); { # New Method foreach my $type (@RULE_TYPES) { foreach my $rule (@RULES) { _iptables( ( $type->{'table'} ? ( '-t', $type->{'table'} ) : () ), '-D', 'OUTPUT', '-p', 'tcp', ( ref $rule->{'args'} ? @{ $rule->{'args'} } : () ), '-m', 'multiport', '--dports', join( ',', @PORTS ), '-m', 'owner', '--' . $rule->{'type'} . '-owner', $rule->{'value'}, '-j', $type->{'target'} ); } } _iptables( '-t', 'nat', '-D', 'OUTPUT', '-p', 'tcp', '-m', 'multiport', '--dports', join( ',', @PORTS ), '-j', 'REDIRECT' ); } debug("Removing multiport rules matching 25..."); { foreach my $type (@RULE_TYPES) { # Remove any remaining port 25 rules my %port_lists; foreach my $line ( split( /\n/, _iptables( ( $type->{'table'} ? ( '-t', $type->{'table'} ) : () ), '-L', '-n' ) ) ) { #RETURN tcp -- 0.0.0.0/0 127.0.0.1 multiport dports 25,26,122,125,232,434,465,587,809,5454 OWNER UID match 32001 if ( $line =~ m/multiport\s+dports\s+(25,[,0-9]+)\s+(?i:OWNER)\s+[UG]ID\s+match/ ) { $port_lists{$1} = 1; } } foreach my $port_list ( keys %port_lists ) { foreach my $rule (@RULES) { _iptables( ( $type->{'table'} ? ( '-t', $type->{'table'} ) : () ), '-D', 'OUTPUT', '-p', 'tcp', ( ref $rule->{'args'} ? @{ $rule->{'args'} } : () ), '-m', 'multiport', '--dports', $port_list, '-m', 'owner', '--' . $rule->{'type'} . '-owner', $rule->{'value'}, '-j', $type->{'target'} ); } if ( $type->{'table'} && $type->{'table'} eq 'nat' ) { _iptables( '-t', 'nat', '-D', 'OUTPUT', '-p', 'tcp', '-m', 'multiport', '--dports', $port_list, '-j', 'REDIRECT' ); } } } } # Remove native nftables SMTP restriction tables if ( _use_nftables() ) { _remove_nft_tables(); _nft_persist_and_reload(); } return if $stop_only; my $cpconf = Cpanel::Config::CpConfGuard->new(); $cpconf->{data}->{smtpmailgidonly} = 0; $cpconf->save(); unlink '/var/cpanel/smtpgidonlytweak'; # For WHM return; } sub debug { print "[$_[0]]\n" if $ENV{'CPANEL_DEBUG'}; return; } sub _use_nftables { return Cpanel::OS::firewall_module() eq 'NFTables' ? 1 : 0; } sub _valid_port { my ($port) = @_; return defined $port && $port =~ /^[0-9]+\z/ && $port > 0 && $port < 65536; } sub _valid_rule { my ($rule) = @_; return 0 unless ref $rule eq 'HASH'; return 0 unless defined $rule->{'type'} && $rule->{'type'} =~ /^(?:uid|gid)\z/; return 0 unless defined $rule->{'value'} && $rule->{'value'} =~ /^[0-9]+\z/; return 0 unless defined $rule->{'name'} && $rule->{'name'} =~ /^[A-Za-z0-9_.-]+\z/; return 0 if exists $rule->{'args'} && defined $rule->{'args'} && ref $rule->{'args'} ne 'ARRAY'; return 1; } sub _nft_cmd { my (@args) = @_; my $nft = Cpanel::Binaries::path('nft'); debug( "EXEC: " . join( ' ', $nft, @args ) ); my $run = Cpanel::SafeRun::Object->new( program => $nft, args => \@args, ); my $stdout = $run->stdout() // ''; my $stderr = $run->stderr() // ''; my $err = $run->CHILD_ERROR(); my $ok = $err == 0 ? 1 : 0; if ( !$ok ) { # Deleting an already-absent table is benign and happens on the # enable/refresh path before the ruleset exists. Don't alarm the user. my $tolerable = join( ' ', @args ) =~ /^delete\s+table\b/ && $stderr =~ /No such file or directory/; print STDERR "Error running $nft " . join( ' ', @args ) . " - Exit code: $err: $stderr\n" unless $tolerable; } debug("EXEC RESULT (ok=$ok): $stdout"); return ( $ok, $stdout ); } sub _add_nft_rules { my $table = NFT_TABLE; # nft accepts comma-separated set literals on its CLI as individual # tokens; building the set as an arg list keeps Perl from doing any # shell-like splitting and lets us interpolate ports safely. my @ports_set = ( '{', ( join ', ', @PORTS ), '}' ); for my $family (qw(ip ip6)) { return 0 unless _nft_ok( 'add', 'table', $family, $table ); # nat hook on OUTPUT must use NF_IP_PRI_NAT_DST (-100); # filter hook uses NF_IP_PRI_FILTER (0). return 0 unless _nft_ok( 'add', 'chain', $family, $table, 'output_nat', qw({ type nat hook output priority -100 ; policy accept ; }) ); return 0 unless _nft_ok( 'add', 'chain', $family, $table, 'output_filter', qw({ type filter hook output priority 0 ; policy accept ; }) ); foreach my $rule (@RULES) { my @owner_match = $rule->{'type'} eq 'uid' ? ( 'meta', 'skuid', $rule->{'value'} ) : ( 'meta', 'skgid', $rule->{'value'} ); my ( $daddr_ref, $skip_family ) = _nft_translate_rule_args( $rule->{'args'}, $family ); return 0 unless defined $daddr_ref; next if $skip_family; my @daddr = @$daddr_ref; return 0 unless _nft_ok( 'add', 'rule', $family, $table, 'output_nat', 'tcp', 'dport', @ports_set, @daddr, @owner_match, 'return' ); return 0 unless _nft_ok( 'add', 'rule', $family, $table, 'output_filter', 'tcp', 'dport', @ports_set, @daddr, @owner_match, 'accept' ); } return 0 unless _nft_ok( 'add', 'rule', $family, $table, 'output_nat', 'tcp', 'dport', @ports_set, 'redirect' ); } return 1; } sub _nft_ok { my ($ok) = _nft_cmd(@_); return $ok; } # Translate the iptables-style $rule->{'args'} (e.g. [ '-d', '127.0.0.1' ]) # into the equivalent nftables match tokens for the given $family ('ip' or # 'ip6'). # # Returns ( \@nft_tokens, $skip_family ) on success: # - \@nft_tokens is the list of nft match args to splice into the rule # (empty list ref when $args is undef/empty) # - $skip_family is true when the rule targets a different address family # and should be skipped on this pass. # # Returns ( undef, undef ) on unsupported / invalid args. The caller should # treat this as a hard failure and fall back to remove_firewall_rules(). sub _nft_translate_rule_args { my ( $args, $family ) = @_; return ( [], 0 ) unless ref $args eq 'ARRAY' && @$args; my @tokens = @$args; my @nft; while (@tokens) { my $opt = shift @tokens; if ( $opt eq '-d' || $opt eq '--destination' ) { my $dest = shift @tokens; if ( !defined $dest || $dest eq '' ) { print STDERR "smtpmailgidonly: rule arg '$opt' is missing its value; refusing to add nftables rule.\n"; return ( undef, undef ); } my $is_v4 = Cpanel::Validate::IP::v4::is_valid_ipv4($dest) ? 1 : 0; my $is_v6 = !$is_v4 && Cpanel::Validate::IP::is_valid_ipv6($dest) ? 1 : 0; if ( !$is_v4 && !$is_v6 ) { print STDERR "smtpmailgidonly: rule arg '$opt $dest' is not a valid IP address; refusing to add nftables rule.\n"; return ( undef, undef ); } # Skip the rule on a family it doesn't belong to so that an # IPv4-only destination doesn't generate a broken ip6 rule. return ( [], 1 ) if ( $is_v4 && $family ne 'ip' ) || ( $is_v6 && $family ne 'ip6' ); push @nft, $family, 'daddr', $dest; } else { print STDERR "smtpmailgidonly: rule arg '$opt' is not supported by the nftables backend; refusing to add nftables rule.\n"; return ( undef, undef ); } } return ( \@nft, 0 ); } sub _remove_nft_tables { my $table = NFT_TABLE; for my $family (qw(ip ip6)) { _nft_cmd( 'delete', 'table', $family, $table ); } return; } sub _nft_persist_and_reload { my ( $ok, $ruleset ) = _nft_cmd( 'list', 'ruleset' ); return 0 unless $ok; chomp($ruleset); my $config_file = Cpanel::OS::nftables_config_file(); local $@; eval { Cpanel::FileUtils::Write::overwrite( $config_file, $ruleset ); 1 } or do { print STDERR "smtpmailgidonly: failed to persist nftables ruleset to $config_file: $@"; return 0; }; # The nft rules were already added and are live. Reload the ruleset through # firewalld when it manages the firewall; restarting nftables.service there # would stop firewalld via its systemd Conflicts= and flush its rules. if ( Cpanel::Services::Firewall::is_firewalld() ) { my $reload = Cpanel::SafeRun::Object->new( program => Cpanel::Binaries::path('firewall-cmd'), args => ['--reload'] ); return $reload->CHILD_ERROR() == 0 ? 1 : 0; } my $restart = Cpanel::SafeRun::Object->new( program => Cpanel::Binaries::path('systemctl'), args => [ 'restart', 'nftables' ] ); if ( $restart->CHILD_ERROR() != 0 ) { print STDERR "smtpmailgidonly: failed to restart nftables: " . ( $restart->stderr() // '' ); return 0; } return 1; } sub _iptables { my @rule_content = @_; if ( -x '/sbin/ip6tables' ) { my @rule6_content = @rule_content; foreach my $part (@rule6_content) { $part =~ s/127\.0\.0\.1/\:\:1\/128/g; # change local host to ipv6 equiv } debug( "EXEC: " . join( ' ', '/sbin/ip6tables', @rule6_content ) ); my $result6 = Cpanel::SafeRun::Errors::saferunallerrors( '/sbin/ip6tables', @rule6_content ) . "\n"; debug("EXEC RESULT: $result6"); } debug( "EXEC: " . join( ' ', '/sbin/iptables', @rule_content ) ); my $result = Cpanel::SafeRun::Errors::saferunallerrors( '/sbin/iptables', @rule_content ) . "\n"; debug("EXEC RESULT: $result"); return $result; } exit( run(@ARGV) // 0 ) unless caller; 1;