Welcome to the JaguarPC Community
JaguarPC
Sales: (888) 338-5261
Support: (888)-551-3050
Page 1 of 6 12345 ... LastLast
Results 1 to 15 of 86

This is a discussion on Securing and Optimizing your server in the VPS & Dedicated forum
Thise guide is composed of material found from various other web hosting, control panel, and script forums related to using mysql. ======================================== = Checking for ...

  1. #1
    Darth Admin (aka Jag) JPC-Greg's Avatar
    Join Date
    Sep 1998
    Posts
    5,201

    Jpc Icon Securing and Optimizing your server

    Thise guide is composed of material found from various other web hosting, control panel, and script forums related to using mysql.

    ======================================== =
    Checking for formmail
    ======================================== =


    Form mail is used by hackers to send out spam email, by relay and injection methods. If you are using matts script or a version of it, you may be in jeopardy.


    Command to find pesky form mails:
    find / -name "[Ff]orm[mM]ai*"

    CGIemail is also a security risk:
    find / -name "[Cc]giemai*"

    Command to disable form mails:
    chmod a-rwx /path/to/filename
    (a-rwx translates to all types, no read, write or execute permissions).

    (this disables all form mail)

    If a client or someone on your vps installs form mail, you will have to let them know you are disabling their script and give them an alternative.


    ======================================== =
    Root kit checker - http://www.chkrootkit.org/
    ======================================== =


    Check for root kits and even set a root kit on a cron job. This will show you if anyone has compromised your root. Always update chrootkit to get the latest root kit checker. Hackers and spammers will try to find insecure upload forms on your box and then with injection methods, try to upload the root kit on your server. If he can run it, it will modify *alot* of files, possibly causing you to have to reinstall.


    To install chrootkit, SSH into server and login as root.
    At command prompt type:

    cd /root/
    wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
    tar xvzf chkrootkit.tar.gz
    cd chkrootkit-0.44
    make sense


    To run chkrootkit

    At command prompt type:
    /root/chkrootkit-0.44/chkrootkit

    Make sure you run it on a regular basis, perhaps including it in a cron job.

    Execution

    I use these three commands the most.
    ./chkrootkit
    ./chkrootkit -q
    ./chkrootkit -x | more


    ======================================== =
    Install a root breach DETECTOR and EMAIL WARNING
    ======================================== =


    If someone does happen to get root, be warned quickly by installing a detector and warning at your box. You will at least get the hackers/spammers ip address and be warned someone is in there.


    Server e-mail everytime someone logs in as root

    To have the server e-mail you everytime someone logs in as root, SSH into server and login as root.


    At command prompt type:
    pico .bash_profile

    Scroll down to the end of the file and add the following line:

    echo 'ALERT - Root Shell Access on:' `date` `who` | mail -s "Alert: Root Access from `who | awk '{print $6}'`" your@email.com

    Save and exit.


    Set an SSH Legal Message

    To an SSH legal message, SSH into server and login as root.

    At command prompt type:
    pico /etc/motd

    Enter your message, save and exit.
    Note: I use the following message...

    ALERT! You are entering a secured area! Your IP and login information
    have been recorded. System administration has been notified.
    This system is restricted to authorized access only. All activities on
    this system are recorded and logged. Unauthorized access will be fully
    investigated and reported to the appropriate law enforcement agencies.



    ======================================== =
    Web Host manager and CPANEL mods.
    ======================================== =


    These are items inside of WHM/Cpanel that should be changed to secure your server.

    Goto Server Setup =>> Tweak Settings
    Check the following items...

    Under Domains
    Prevent users from parking/adding on common internet domains. (ie hotmail.com, aol.com)

    Under Mail
    Attempt to prevent pop3 connection floods
    Default catch-all/default address behavior for new accounts - blackhole
    ( - set this to FAIL to reduce server load)

    Under System
    Use jailshell as the default shell for all new accounts and modified accounts

    Goto Server Setup =>> Tweak Security
    Enable php open_basedir Protection
    Enable mod_userdir Protection
    Disabled Compilers for unprivileged users.

    Goto Server Setup =>> Manage Wheel Group Users
    Remove all users except for root and your main account from the wheel group.

    Goto Server Setup =>> Shell Fork Bomb Protection
    Enable Shell Fork Bomb/Memory Protection

    When setting up Feature Limits for resellers in Resellers =>> Reseller Center, under Privileges always disable Allow Creation of Packages with Shell Access and enable Never allow creation of accounts with shell access; under Root Access disable All Features.

    Goto Service Configuration =>> FTP Configuration
    Disable Anonymous FTP

    Goto Account Functions =>> Manage Shell Access
    Disable Shell Access for all users (except yourself)

    Goto Mysql =>> MySQL Root Password
    Change root password for MySQL

    Goto Security and run Quick Security Scan and Scan for Trojan Horses often. The following and similar items are not Trojans:
    /sbin/depmod
    /sbin/insmod
    /sbin/insmod.static
    /sbin/modinfo
    /sbin/modprobe
    /sbin/rmmod

    ======================================== =
    More Security Measures
    ======================================== =


    These are measures that can be taken to secure your server, with SSH access.

    Update OS, Apache and CPanel to the latest stable versions.
    This can be done from WHM/CPanel.


    Restrict SSH Access
    To restrict and secure SSH access, bind sshd to a single IP that is different than the main IP to the server, and on a different port than port 22.

    SSH into server and login as root.
    Note: You can download Putty by Clicking Here (http://www.chiark.greenend.org.uk/~s.../download.html). It's a clean running application that will not require installation on Windows-boxes.

    At command prompt type:
    pico /etc/ssh/sshd_config

    Scroll down to the section of the file that looks like this:
    #Port 22
    #Protocol 2, 1
    #ListenAddress 0.0.0.0
    #ListenAddress ::

    Uncomment and change
    #Port 22
    to look like
    Port 5678 (choose your own 4 to 5 digit port number (49151 is the highest port number AND do not use 5678 lol )

    Warning: If you change your SSH port please update your Firewall configuration or you will not be able to login.

    Uncomment and change
    #Protocol 2, 1
    to look like
    Protocol 2

    Uncomment and change
    #ListenAddress 0.0.0.0
    to look like
    ListenAddress 123.123.123.15 (use one of your own IP Addresses that has been assigned to your server)

    Note 1: If you would like to disable direct Root Login, scroll down until you find
    #PermitRootLogin yes
    and uncomment it and make it look like
    PermitRootLogin no

    Save by pressing Ctrl o on your keyboard, and then exit by pressing Ctrl x on your keyboard.


    Note 2: You can also create a custome nameserver specifically for your new SSH IP address. Just create one called something like ssh.xyz.com or whatever. Be sure to add an A address to your zone file for the new nameserver.

    Now restart SSH
    At command prompt type:
    /etc/rc.d/init.d/sshd restart

    Exit out of SSH, and then re-login to SSH using the new IP or nameserver, and the new port.

    Note: If you should have any problems, just Telnet into your server, fix the problem, then SSH in again. Telnet is a very unsecure protocol, so change your root password after you use it.

    After SSH has been redirected, disable telnet.

    Disable Telnet
    To disable telnet, SSH into server and login as root.
    At command prompt type: pico -w /etc/xinetd.d/telnet
    change disable = no to disable = yes
    Save and Exit
    At command prompt type: /etc/init.d/xinetd restart


    Disable Shell Accounts
    To disable any shell accounts hosted on your server SSH into server and login as root.
    At command prompt type: locate shell.php
    Also check for:
    locate irc
    locate eggdrop
    locate bnc
    locate BNC
    locate ptlink
    locate BitchX
    locate guardservices
    locate psyBNC
    locate .rhosts

    Note: There will be several listings that will be OS/CPanel related. Examples are
    /home/cpapachebuild/buildapache/php-4.3.1/ext/ircg
    /usr/local/cpanel/etc/sym/eggdrop.sym
    /usr/local/cpanel/etc/sym/bnc.sym
    /usr/local/cpanel/etc/sym/psyBNC.sym
    /usr/local/cpanel/etc/sym/ptlink.sym
    /usr/lib/libncurses.so
    /usr/lib/libncurses.a
    etc.


    Disable identification output for Apache

    (do this to hide version numbers from potentional hackers)

    To disable the version output for proftp, SSH into server and login as root.
    At command prompt type: pico /etc/httpd/conf/httpd.conf

    Scroll (way) down and change the following line to
    ServerSignature Off

    Restart Apache
    At command prompt type: /etc/rc.d/init.d/httpd restart

    ======================================== =
    Install BFD (Brute Force Detection - optional)
    ======================================== =


    To install BFD, SSH into server and login as root.

    At command prompt type:
    cd /root/
    wget http://www.rfxnetworks.com/downloads/bfd-current.tar.gz
    tar -xvzf bfd-current.tar.gz
    cd bfd-0.4
    ./install.sh

    After BFD has been installed, you need to edit the configuration file.

    At command prompt type:
    pico /usr/local/bfd/conf.bfd

    Under Enable brute force hack attempt alerts:
    Find
    ALERT_USR="0"
    and change it to
    ALERT_USR="1"

    Find
    EMAIL_USR="root"
    and change it to
    EMAIL_USR="your@email.com"

    Save the changes then exit.

    To start BFD

    At command prompt type:
    /usr/local/sbin/bfd -s


    Modify LogWatch
    Logwatch is a customizable log analysis system. It parses through your system's logs for a given period of time and creates a report analyzing areas that you specify, in as much detail as you require. Logwatch is already installed on most CPanel servers.

    To modify LogWatch, SSH into server and login as root.

    At command prompt type:
    pico -w /etc/log.d/conf/logwatch.conf

    Scroll down to
    MailTo = root
    and change to
    Mailto = your@email.com
    Note: Set the e-mail address to an offsite account incase you get hacked.

    Now scroll down to
    Detail = Low
    Change that to Medium, or High...
    Detail = 5 or Detail = 10
    Note: High will give you more detailed logs with all actions.

    Save and exit.

    A number of suggestions to improve system security. Some of this is specific to CPanel, but much can be applied to most Linux systems.
    --------------------------------------------------
    Use The Latest Software
    Keep the OS and 3rd party software up to date. Always!
    CPanel itself can be updated from the root WHM.
    --------------------------------------------------
    Change Passwords
    Change the root passwords at least once a month and try to make them hard to guess. Yes it's a pain to have to keep remembering them, but it's better than being hacked.

    --------------------------------------------------
    Set Up A More Secure SSH Environment As described here.
    --------------------------------------------------
    Disable Telnet
    1. Type: pico -w /etc/xinetd.d/telnet
    2. Change the disable = no line to disable = yes.
    3. Hit CTRL+X press y and then enter to save the file.
    4. Restart xinted with: /etc/rc.d/init.d/xinetd restart
    Also, add the following line to /etc/deny.hosts to flag Telnet access attempts as 'emergency' messages.

    in.telnetd : ALL : severity emerg

    --------------------------------------------------
    Disable Unnecessary Ports (optional)
    First backup the file that contains your list of ports with:
    cp /etc/services /etc/services.original
    Now configure /etc/services so that it only has the ports you need in it. This will match the ports enabled in your firewall.
    On a typical CPanel system it would look something like this:
    <?php
    tcpmux 1/tcp # TCP port service multiplexer
    echo 7/tcp
    echo 7/udp
    ftp-data 20/tcp
    ftp 21/tcp
    ssh 22/tcp # SSH Remote Login Protocol
    smtp 25/tcp mail
    domain 53/tcp # name-domain server
    domain 53/udp
    http 80/tcp www www-http # WorldWideWeb HTTP
    pop3 110/tcp pop-3 # POP version 3
    imap 143/tcp imap2 # Interim Mail Access Proto v2
    https 443/tcp # MCom
    smtps 465/tcp # SMTP over SSL (TLS)
    syslog 514/udp
    rndc 953/tcp # rndc control sockets (BIND 9)
    rndc 953/udp # rndc control sockets (BIND 9)
    imaps 993/tcp # IMAP over SSL
    pop3s 995/tcp # POP-3 over SSL
    cpanel 2082/tcp
    cpanels 2083/tcp
    whm 2086/tcp
    whms 2087/tcp
    webmail 2095/tcp
    webmails 2096/tcp
    mysql 3306/tcp # MySQL
    ?>
    Additional ports are controlled by /etc/rpc. These aren't generally needed, so get shot of that file with: mv /etc/rpc /etc/rpc-moved
    --------------------------------------------------
    Watch The Logs
    Install something like logwatch to keep an eye on your system logs. This will extract anything 'interesting' from the logs and e-mail to you on a daily basis.
    Logwatch can be found at: http://www.logwatch.org
    Install instructions here.
    --------------------------------------------------
    Avoid CPanel Demo Mode
    Switch it off via WHM Account Functions => Disable or Enable Demo Mode.
    --------------------------------------------------
    Jail All Users
    Via WHM Account Functions => Manage Shell Access => Jail All Users.
    Better still never allow shell access to anyone - no exceptions.
    --------------------------------------------------
    Immediate Notification Of Specific Attackers
    If you need immediate notification of a specific attacker (TCPWrapped services only), add the following to /etc/hosts.deny

    ALL : nnn.nnn.nnn.nnn : spawn /bin/ 'date' %c %d | mail -s"Access attempt by nnn.nnn.nnn.nnn on for hostname" notify@mydomain.com
    Replacing nnn.nnn.nnn.nnn with the attacker's IP address.
    Replacing hostname with your hostname.
    Replacing notify@mydomain.com with your e-mail address.
    This will deny access to the attacker and e-mail the sysadmin about the access attempt.
    --------------------------------------------------
    Check Open Ports
    From time to time it's worth checking which ports are open to the outside world. This can be done with:
    nmap -sT -O localhost
    If nmap isn't installed, it can be selected from root WHM's Install an RPM option.
    --------------------------------------------------
    Set The MySQL Root Password
    This can be done in CPanel from the root WHM Server Setup -> Set MySQL Root Password.
    Make it different to your root password!
    --------------------------------------------------
    Tweak Security (CPanel)
    From the root WHM, Server Setup -> Tweak Security, you will most likely want to enable:
    - php open_basedir Tweak.
    - SMTP tweak.
    You may want to enable:
    - mod_userdir Tweak. But that will disable domain preview.
    --------------------------------------------------
    Use SuExec (CPanel)
    From root WHM, Server Setup -> Enable/Disable SuExec. This is CPanel's decription of what it does:
    "suexec allows cgi scripts to run with the user's id. It will also make it easier to track which user has sent out an email. If suexec is not enabled, all cgi scripts will run as nobody. "
    Even if you don't use phpsuexec (which often causes more problems), SuExec should be considered.
    --------------------------------------------------
    Use PHPSuExec (CPanel)
    This needs to built into Apache (Software -> Update Apache from the root WHM) and does the same as SuExec but for PHP scripts.
    Wisth PHPSuExec enabled, you users will have to make sure that all their PHP files have permissions no greater than 0755 and that their htaccess files contain no PHP directives.
    --------------------------------------------------
    Disable Compilers
    This will prevent hackers from compiling worms, root kits and the like on your machine.
    To disable them, do the following:

    chmod 000 /usr/bin/perlcc
    chmod 000 /usr/bin/byacc
    chmod 000 /usr/bin/yacc
    chmod 000 /usr/bin/bcc
    chmod 000 /usr/bin/kgcc
    chmod 000 /usr/bin/cc
    chmod 000 /usr/bin/gcc
    chmod 000 /usr/bin/i386*cc
    chmod 000 /usr/bin/*c++
    chmod 000 /usr/bin/*g++
    chmod 000 /usr/lib/bcc /usr/lib/bcc/bcc-cc1
    chmod 000 /usr/i386-glibc21-linux/lib/gcc-lib/i386-redhat-linux/2.96/cc1

    You will need to enable them again when you need to perform system updates. To do this, run:

    chmod 755 /usr/bin/perlcc
    chmod 755 /usr/bin/byacc
    chmod 755 /usr/bin/yacc
    chmod 755 /usr/bin/bcc
    chmod 755 /usr/bin/kgcc
    chmod 755 /usr/bin/cc
    chmod 755 /usr/bin/gcc
    chmod 755 /usr/bin/i386*cc
    chmod 755 /usr/bin/*c++
    chmod 755 /usr/bin/*g++
    chmod 755 /usr/lib/bcc /usr/lib/bcc/bcc-cc1
    chmod 755 /usr/i386-glibc21-linux/lib/gcc-lib/i386-redhat-linux/2.96/cc1

    --------------------------------------------------
    Obfuscate The Apache Version Number
    1. Type: pico /etc/httpd/conf/httpd.conf
    2. Change the line that begins ServerSignature to:

    ServerSignature Off

    3. Add a line underneath that which reads:

    ServerTokens ProductOnly

    4. Hit CTRL+X, they y, the enter to save the file.
    5. Restart Apache with: /etc/rc.d/init.d/httpd restart
    --------------------


    Optimizing your server for efficiency

    *** MySQL Optimization***
    This will help you to understand how it is possible to optimize MYSQL to fit your needs, hardaware , and mysql current usage.

    Here are suggested settings for the my.cnf file. on a server 256mb + ram. You can and should customize these settings specifically for your VPS's usage. . DO NOT change your setting without understanding what it does. Make a backup of your my.cnf before editing the /etc/my.cnf .

    [mysqld]
    max_connections = 400
    key_buffer = 64M
    join_buffer_size = 1M
    read_buffer_size = 1M
    sort_buffer_size = 2M
    table_cache = 1024
    thread_cache_size = 286
    interactive_timeout = 25
    wait_timeout = 1000
    connect_timeout = 10
    max_heap_table_size = 128M
    max_allowed_packet = 16M
    max_connect_errors = 10
    read_rnd_buffer_size = 524288
    query_cache_limit = 1M
    query_cache_size = 16M
    query_cache_type = 1
    query_prealloc_size = 163840
    tmp_table_size = 32M
    myisam_sort_buffer_size = 32M
    query_alloc_block_size = 32768
    bulk_insert_buffer_size = 16M
    skip-innodb

    [mysqld_safe]
    open_files_limit = 8192

    [mysqldump]
    quick
    max_allowed_packet = 16M

    [myisamchk]
    key_buffer = 32M
    sort_buffer = 32M
    read_buffer = 16M
    write_buffer = 16M

    [mysqlhotcopy]
    interactive-timeout


    ===================
    How to find your mysql variables?
    from mysql :
    show variables;

    or from command line :
    mysqladmin variables
    How to find your mysql usage?
    from Mysql :
    show status;

    or from command line
    mysqladmin –i10 processlist extended-status


    STEPS:
    Run mysqladmin processlist extended-status as mentionned above.


    variables : Table_cache and Key_buffer_size
    -----------
    If Opened_tables is big, then your table_cache variable is probably
    too small.
    table_cache 64
    Open_tables 64
    Opened_tables 544468

    "The table_cache is the number of open tables for all threads. MySQL, being multi-threaded, may be running many queries on the table at one time, and each of these will open a table." Therefore, even though we only have a few tables, we will need many more open_tables. If Opened_tables value is high and shows the number of cache misses. Getting the table_cache size correct is one of the best things you can do to improve performance.
    -----------
    If Key_reads is big, then your key_buffer_size variable is probably
    too small. The cache hit rate can be calculated with
    Key_reads/Key_read_requests.
    key_buffer_size 16M
    Key_read_requests 2973620399
    Key_reads 8490571
    (cache hit rate = 0.0028)

    “The key_buffer_size affects the size of the index buffers and the speed
    of index handling, particularly reading." The MySQL manual (and other sources) say that
    "Key_reads/Key_read_request ratio should normally be < 0.01." This is the
    other most important thing to get correct. Here the value seems to be correct (< 0.01)

    Also check key_write_requests and key_writes.
    The key_writes/key_writes_request should normally be < 1 (near 0.5 seems to be fine)
    -----------


    variables : Wait_timeout, max_connexion, thread_cache
    -----------
    Generaly you have a lot of mysql process that are sleeping because wait_timeout are not set low. Make sure that the wait_timeout is set to a very low value: 15 seconds (for example) . That means MySQL would close any connection that was idle for more than 15 seconds.

    The problem is you also have to increment your max_connexion (for example 300) to be sure there is not a lot of idle clients holding connections and blocking out new clients from connecting and getting real work done.
    The box has to create new threads (MySQL is a multi-threaded server) at a very high rate. That may require a measurable amount of CPU time.

    The solution is to use the Thread_cache.

    If Threads_created is big, you may want to increase the
    thread_cache_size variable. The cache hit rate can be calculated with
    Threads_created/Connections.
    thread_cache_size 0
    Threads_created 150022
    Connections 150023

    You may try this formula : table_cache = opened table / max_used_connection
    -----------


    variables : tmp_table_size and Handler_read_rnd / Handler_read_rnd_next
    -----------
    If Created_tmp_disk_tables is big, you may want to increase the
    tmp_table_size variable to get the temporary tables memory-based instead
    of disk based.

    tmp_table_size 32M
    Created_tmp_disk_tables 3227
    Created_tmp_tables 159832
    Created_tmp_files 4444

    Created_tmp_disk_tables are the "number of implicit temporary tables on
    disk created while executing statements" and Created_tmp_tables are
    memory-based. Obviously it is bad if you have to go to disk instead of
    memory. About 2% of temp tables go to disk, which doesn't seem too bad
    but increasing the tmp_table_size probably couldn't hurt either.
    -----------
    If Handler_read_rnd is big, then you probably have a lot of queries
    that require MySQL to scan whole tables or you have joins that don't use
    keys properly.
    Handler_read_rnd 27712353
    Handler_read_rnd_next 283536234

    These values are high and could probably stand to improve the indexes and queries.
    -----------


    variables : tmp_table_size and Handler_read_rnd / Handler_read_rnd_next
    -----------
    Used MySQL memory = key_buffer + max_connections * (join_buffer + record_buffer + sort_buffer + thread_stack + tmp_table_size)

    Notice the max_connexion and the multiplier.
    connexion increase = memory usage increase too.

    Notice key_buffer
    for a given memory :
    more you add mem to key buffer, less connexion is
    less is key buffer, more connexion is

    If you change one of these settings for a high value, you system may swap.
    If you system swap, try lot decrease these values

    Also, about table_cache :
    Increasing the size of the table cache may really help you. But you must be careful not to make the value too large. All operating systems have a limit on the number open file pointers a single process may have.
    If MySQL tries to open a lot of files, the OS may refuse it and MySQL will generate error message in the error log.
    -----------

    We recommend installing mytop to help you monitor your usage.

    wget http://dll.elix.us/mytop-1.4.tar.gz
    tar -zxvf mytop-1.4.tar.gz
    cd mytop-1.4
    perl Makefile.PL
    make
    make test
    make install


    ***PHP & Apache Optimization***

    For httpd.conf we suggest:
    Timeout 200
    KeepAlive On
    maxKeepAliveRequests 100
    KeepAliveTimeout 3
    MinSpareServers 10
    MaxSpareServers 20
    StartServers 15
    MaxClients 250
    MaxRequestsPerChild 0
    HostnameLookups Off

    You can use ab to benchmark your Apache before and after you make changes.

    ab -c 5 -n 20 some_php_site_on_your_server.com/file.php

    I suggest doing 2 or 3 tests like that to get an average.

    If you want to check the Apache error log, try this -->
    cat /usr/local/apache/logs/error_log

    You can find the amount of connections to Apache with this command:
    netstat -nt | grep :80 | wc -l

    To find the amount of Apache processes use this command:
    ps -A | grep httpd | wc -l (this will show the process count)
    ps -aux | grep httpd (this will show the actual processes)

    To find the amount of MySQL processes use this command:
    ps -A | grep mysql | wc -l (this will show the process count)
    ps -aux | grep mysql (this will show the actual processes)

    Just simply using top (standard view) or top -c (will show the actual command being used and/or location of each process as opposed to just the name) can help you monitor your VPS usage very wel.

    To see your disk space usage, try using this command --> df -h

    Mitigating (D)DOS
    If you're being DDOS'd or DOS'd you can use this command:
    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

    That will help you see how many connections each IP address has in total to your server.



    ***WHM/cPanel Optimization***

    Spam Assassin
    Spam Assassin can take up a lot of memory and make it really hard to host just a few sites on a VPS, but there is a way around this...

    Login to WHM as root, scroll down to "cPanel 10.8.1-R15" (it may be slightly different depending on what version you are using) then goto "Addon Modules" and install "spamdconf". Once it's done, refresh the WHM page, scroll down to "Add-ons" on the nav bar and then click on 'Setup Spamd Startup Configuration". Set "Maximum Children" to "2". Then hit Submit. Wait a few seconds (15-30, but usually less) for exim to restart and you're done .

    cPanel Tweak Setings
    Login to WHM as root, and under "Server Configuration" on the nav bar hit "Tweak Settings".

    Here are some suggested settings:
    Default catch-all/default address behavior for new accounts. fail will generally save the most CPU time.
    - Use "FAIL". If you already have some accounts setup not to use "FAIL" (by default it will not) then run this command to convert to FAIL from BLACKHOLE --> perl -pi -e "s/:blackhole:/:fail:/g;" /etc/valiases/*

    Mailman
    - Mailman tends to use a lot of resources, so if you don't need cpanel mailing lists then uncheck this.

    Number of minutes between mail server queue runs (default is 60).:
    - You may want to set this to 180 to reduce load.

    Track the origin of messages sent though the mail server by adding the X-Source headers (exim 4.34+ required)
    - This is just generally a good idea. So check this.

    Analog Stats
    - I find this useless, so uncheck this. If you want to delete the existing analog stats files just run this command --> rm -rf /home/*/tmp/analog/*

    Awstats Reverse Dns Resolution
    - Make sure this is unchecked, I find it pretty much useless for most users.

    Awstats Stats
    - You can check this if you need a robust stats software that integrates with cPanel, if you don't need it, then don't check it. *Note most hosting clients will want to use this. If you want to delete the existing awstats stats files just run this command --> rm -rf /home/*/tmp/awstats/*

    Webalizer Stats
    - Not many hosting clients will want to use this so, you can uncheck this to reduce load. If you want to delete the existing webalizer stats files just run this command --> rm -rf /home/*/tmp/webalizer/*

    Delete each domain's access logs after stats run
    - Make sure this is checked, otherwise disk space usage can really rack up!
    Last edited by JPC-NickO; 12-28-2008 at 04:31 PM.
    Greg L. | Chief Executive Officer
    JaguarPC.com

    Helpful Links
    Knowledge Base | Network Status

    Need a Manager?
    (pm) | (email) David, Customer Service Manager
    (pm) | (email) Zach, Community Liason, Sales manager
    (pm) | (email) Masood, Chief Technical Officer
    (pm) | (email) Les, Chief Operations Officer

  2. #2
    Darth Admin (aka Jag) JPC-Greg's Avatar
    Join Date
    Sep 1998
    Posts
    5,201

    Exclamation Securing and Optimizing your server

    Thise guide is composed of material found from various other web hosting, control panel, and script forums related to using mysql.

    ======================================== =
    Checking for formmail
    ======================================== =


    Form mail is used by hackers to send out spam email, by relay and injection methods. If you are using matts script or a version of it, you may be in jeopardy.


    Command to find pesky form mails:
    find / -name "[Ff]orm[mM]ai*"

    CGIemail is also a security risk:
    find / -name "[Cc]giemai*"

    Command to disable form mails:
    chmod a-rwx /path/to/filename
    (a-rwx translates to all types, no read, write or execute permissions).

    (this disables all form mail)

    If a client or someone on your vps installs form mail, you will have to let them know you are disabling their script and give them an alternative.


    ======================================== =
    Root kit checker - http://www.chkrootkit.org/
    ======================================== =


    Check for root kits and even set a root kit on a cron job. This will show you if anyone has compromised your root. Always update chrootkit to get the latest root kit checker. Hackers and spammers will try to find insecure upload forms on your box and then with injection methods, try to upload the root kit on your server. If he can run it, it will modify *alot* of files, possibly causing you to have to reinstall.


    To install chrootkit, SSH into server and login as root.
    At command prompt type:

    cd /root/
    wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
    tar xvzf chkrootkit.tar.gz
    cd chkrootkit-0.44
    make sense


    To run chkrootkit

    At command prompt type:
    /root/chkrootkit-0.44/chkrootkit

    Make sure you run it on a regular basis, perhaps including it in a cron job.

    Execution

    I use these three commands the most.
    ./chkrootkit
    ./chkrootkit -q
    ./chkrootkit -x | more


    ======================================== =
    Install a root breach DETECTOR and EMAIL WARNING
    ======================================== =


    If someone does happen to get root, be warned quickly by installing a detector and warning at your box. You will at least get the hackers/spammers ip address and be warned someone is in there.


    Server e-mail everytime someone logs in as root

    To have the server e-mail you everytime someone logs in as root, SSH into server and login as root.


    At command prompt type:
    pico .bash_profile

    Scroll down to the end of the file and add the following line:

    echo 'ALERT - Root Shell Access on:' `date` `who` | mail -s "Alert: Root Access from `who | awk '{print $6}'`" your@email.com

    Save and exit.


    Set an SSH Legal Message

    To an SSH legal message, SSH into server and login as root.

    At command prompt type:
    pico /etc/motd

    Enter your message, save and exit.
    Note: I use the following message...

    ALERT! You are entering a secured area! Your IP and login information
    have been recorded. System administration has been notified.
    This system is restricted to authorized access only. All activities on
    this system are recorded and logged. Unauthorized access will be fully
    investigated and reported to the appropriate law enforcement agencies.



    ======================================== =
    Web Host manager and CPANEL mods.
    ======================================== =


    These are items inside of WHM/Cpanel that should be changed to secure your server.

    Goto Server Setup =>> Tweak Settings
    Check the following items...

    Under Domains
    Prevent users from parking/adding on common internet domains. (ie hotmail.com, aol.com)

    Under Mail
    Attempt to prevent pop3 connection floods
    Default catch-all/default address behavior for new accounts - blackhole
    ( - set this to FAIL to reduce server load)

    Under System
    Use jailshell as the default shell for all new accounts and modified accounts

    Goto Server Setup =>> Tweak Security
    Enable php open_basedir Protection
    Enable mod_userdir Protection
    Disabled Compilers for unprivileged users.

    Goto Server Setup =>> Manage Wheel Group Users
    Remove all users except for root and your main account from the wheel group.

    Goto Server Setup =>> Shell Fork Bomb Protection
    Enable Shell Fork Bomb/Memory Protection

    When setting up Feature Limits for resellers in Resellers =>> Reseller Center, under Privileges always disable Allow Creation of Packages with Shell Access and enable Never allow creation of accounts with shell access; under Root Access disable All Features.

    Goto Service Configuration =>> FTP Configuration
    Disable Anonymous FTP

    Goto Account Functions =>> Manage Shell Access
    Disable Shell Access for all users (except yourself)

    Goto Mysql =>> MySQL Root Password
    Change root password for MySQL

    Goto Security and run Quick Security Scan and Scan for Trojan Horses often. The following and similar items are not Trojans:
    /sbin/depmod
    /sbin/insmod
    /sbin/insmod.static
    /sbin/modinfo
    /sbin/modprobe
    /sbin/rmmod

    ======================================== =
    More Security Measures
    ======================================== =


    These are measures that can be taken to secure your server, with SSH access.

    Update OS, Apache and CPanel to the latest stable versions.
    This can be done from WHM/CPanel.


    Restrict SSH Access
    To restrict and secure SSH access, bind sshd to a single IP that is different than the main IP to the server, and on a different port than port 22.

    SSH into server and login as root.
    Note: You can download Putty by Clicking Here (http://www.chiark.greenend.org.uk/~s.../download.html). It's a clean running application that will not require installation on Windows-boxes.

    At command prompt type:
    pico /etc/ssh/sshd_config

    Scroll down to the section of the file that looks like this:
    #Port 22
    #Protocol 2, 1
    #ListenAddress 0.0.0.0
    #ListenAddress ::

    Uncomment and change
    #Port 22
    to look like
    Port 5678 (choose your own 4 to 5 digit port number (49151 is the highest port number AND do not use 5678 lol )

    Uncomment and change
    #Protocol 2, 1
    to look like
    Protocol 2

    Uncomment and change
    #ListenAddress 0.0.0.0
    to look like
    ListenAddress 123.123.123.15 (use one of your own IP Addresses that has been assigned to your server)

    Note 1: If you would like to disable direct Root Login, scroll down until you find
    #PermitRootLogin yes
    and uncomment it and make it look like
    PermitRootLogin no

    Save by pressing Ctrl o on your keyboard, and then exit by pressing Ctrl x on your keyboard.


    Note 2: You can also create a custome nameserver specifically for your new SSH IP address. Just create one called something like ssh.xyz.com or whatever. Be sure to add an A address to your zone file for the new nameserver.

    Now restart SSH
    At command prompt type:
    /etc/rc.d/init.d/sshd restart

    Exit out of SSH, and then re-login to SSH using the new IP or nameserver, and the new port.

    Note: If you should have any problems, just Telnet into your server, fix the problem, then SSH in again. Telnet is a very unsecure protocol, so change your root password after you use it.

    After SSH has been redirected, disable telnet.

    Disable Telnet
    To disable telnet, SSH into server and login as root.
    At command prompt type: pico -w /etc/xinetd.d/telnet
    change disable = no to disable = yes
    Save and Exit
    At command prompt type: /etc/init.d/xinetd restart


    Disable Shell Accounts
    To disable any shell accounts hosted on your server SSH into server and login as root.
    At command prompt type: locate shell.php
    Also check for:
    locate irc
    locate eggdrop
    locate bnc
    locate BNC
    locate ptlink
    locate BitchX
    locate guardservices
    locate psyBNC
    locate .rhosts

    Note: There will be several listings that will be OS/CPanel related. Examples are
    /home/cpapachebuild/buildapache/php-4.3.1/ext/ircg
    /usr/local/cpanel/etc/sym/eggdrop.sym
    /usr/local/cpanel/etc/sym/bnc.sym
    /usr/local/cpanel/etc/sym/psyBNC.sym
    /usr/local/cpanel/etc/sym/ptlink.sym
    /usr/lib/libncurses.so
    /usr/lib/libncurses.a
    etc.


    Disable identification output for Apache

    (do this to hide version numbers from potentional hackers)

    To disable the version output for proftp, SSH into server and login as root.
    At command prompt type: pico /etc/httpd/conf/httpd.conf

    Scroll (way) down and change the following line to
    ServerSignature Off

    Restart Apache
    At command prompt type: /etc/rc.d/init.d/httpd restart

    ======================================== =
    Install BFD (Brute Force Detection - optional)
    ======================================== =


    To install BFD, SSH into server and login as root.

    At command prompt type:
    cd /root/
    wget http://www.rfxnetworks.com/downloads/bfd-current.tar.gz
    tar -xvzf bfd-current.tar.gz
    cd bfd-0.4
    ./install.sh

    After BFD has been installed, you need to edit the configuration file.

    At command prompt type:
    pico /usr/local/bfd/conf.bfd

    Under Enable brute force hack attempt alerts:
    Find
    ALERT_USR="0"
    and change it to
    ALERT_USR="1"

    Find
    EMAIL_USR="root"
    and change it to
    EMAIL_USR="your@email.com"

    Save the changes then exit.

    To start BFD

    At command prompt type:
    /usr/local/sbin/bfd -s


    Modify LogWatch
    Logwatch is a customizable log analysis system. It parses through your system's logs for a given period of time and creates a report analyzing areas that you specify, in as much detail as you require. Logwatch is already installed on most CPanel servers.

    To modify LogWatch, SSH into server and login as root.

    At command prompt type:
    pico -w /etc/log.d/conf/logwatch.conf

    Scroll down to
    MailTo = root
    and change to
    Mailto = your@email.com
    Note: Set the e-mail address to an offsite account incase you get hacked.

    Now scroll down to
    Detail = Low
    Change that to Medium, or High...
    Detail = 5 or Detail = 10
    Note: High will give you more detailed logs with all actions.

    Save and exit.

    A number of suggestions to improve system security. Some of this is specific to CPanel, but much can be applied to most Linux systems.
    --------------------------------------------------
    Use The Latest Software
    Keep the OS and 3rd party software up to date. Always!
    CPanel itself can be updated from the root WHM.
    --------------------------------------------------
    Change Passwords
    Change the root passwords at least once a month and try to make them hard to guess. Yes it's a pain to have to keep remembering them, but it's better than being hacked.

    --------------------------------------------------
    Set Up A More Secure SSH Environment As described here.
    --------------------------------------------------
    Disable Telnet
    1. Type: pico -w /etc/xinetd.d/telnet
    2. Change the disable = no line to disable = yes.
    3. Hit CTRL+X press y and then enter to save the file.
    4. Restart xinted with: /etc/rc.d/init.d/xinetd restart
    Also, add the following line to /etc/deny.hosts to flag Telnet access attempts as 'emergency' messages.

    in.telnetd : ALL : severity emerg

    --------------------------------------------------
    Disable Unnecessary Ports (optional)
    First backup the file that contains your list of ports with:
    cp /etc/services /etc/services.original
    Now configure /etc/services so that it only has the ports you need in it. This will match the ports enabled in your firewall.
    On a typical CPanel system it would look something like this:
    <?php
    tcpmux 1/tcp # TCP port service multiplexer
    echo 7/tcp
    echo 7/udp
    ftp-data 20/tcp
    ftp 21/tcp
    ssh 22/tcp # SSH Remote Login Protocol
    smtp 25/tcp mail
    domain 53/tcp # name-domain server
    domain 53/udp
    http 80/tcp www www-http # WorldWideWeb HTTP
    pop3 110/tcp pop-3 # POP version 3
    imap 143/tcp imap2 # Interim Mail Access Proto v2
    https 443/tcp # MCom
    smtps 465/tcp # SMTP over SSL (TLS)
    syslog 514/udp
    rndc 953/tcp # rndc control sockets (BIND 9)
    rndc 953/udp # rndc control sockets (BIND 9)
    imaps 993/tcp # IMAP over SSL
    pop3s 995/tcp # POP-3 over SSL
    cpanel 2082/tcp
    cpanels 2083/tcp
    whm 2086/tcp
    whms 2087/tcp
    webmail 2095/tcp
    webmails 2096/tcp
    mysql 3306/tcp # MySQL
    ?>
    Additional ports are controlled by /etc/rpc. These aren't generally needed, so get shot of that file with: mv /etc/rpc /etc/rpc-moved
    --------------------------------------------------
    Watch The Logs
    Install something like logwatch to keep an eye on your system logs. This will extract anything 'interesting' from the logs and e-mail to you on a daily basis.
    Logwatch can be found at: http://www.logwatch.org
    Install instructions here.
    --------------------------------------------------
    Avoid CPanel Demo Mode
    Switch it off via WHM Account Functions => Disable or Enable Demo Mode.
    --------------------------------------------------
    Jail All Users
    Via WHM Account Functions => Manage Shell Access => Jail All Users.
    Better still never allow shell access to anyone - no exceptions.
    --------------------------------------------------
    Immediate Notification Of Specific Attackers
    If you need immediate notification of a specific attacker (TCPWrapped services only), add the following to /etc/hosts.deny

    ALL : nnn.nnn.nnn.nnn : spawn /bin/ 'date' %c %d | mail -s"Access attempt by nnn.nnn.nnn.nnn on for hostname" notify@mydomain.com
    Replacing nnn.nnn.nnn.nnn with the attacker's IP address.
    Replacing hostname with your hostname.
    Replacing notify@mydomain.com with your e-mail address.
    This will deny access to the attacker and e-mail the sysadmin about the access attempt.
    --------------------------------------------------
    Check Open Ports
    From time to time it's worth checking which ports are open to the outside world. This can be done with:
    nmap -sT -O localhost
    If nmap isn't installed, it can be selected from root WHM's Install an RPM option.
    --------------------------------------------------
    Set The MySQL Root Password
    This can be done in CPanel from the root WHM Server Setup -> Set MySQL Root Password.
    Make it different to your root password!
    --------------------------------------------------
    Tweak Security (CPanel)
    From the root WHM, Server Setup -> Tweak Security, you will most likely want to enable:
    - php open_basedir Tweak.
    - SMTP tweak.
    You may want to enable:
    - mod_userdir Tweak. But that will disable domain preview.
    --------------------------------------------------
    Use SuExec (CPanel)
    From root WHM, Server Setup -> Enable/Disable SuExec. This is CPanel's decription of what it does:
    "suexec allows cgi scripts to run with the user's id. It will also make it easier to track which user has sent out an email. If suexec is not enabled, all cgi scripts will run as nobody. "
    Even if you don't use phpsuexec (which often causes more problems), SuExec should be considered.
    --------------------------------------------------
    Use PHPSuExec (CPanel)
    This needs to built into Apache (Software -> Update Apache from the root WHM) and does the same as SuExec but for PHP scripts.
    Wisth PHPSuExec enabled, you users will have to make sure that all their PHP files have permissions no greater than 0755 and that their htaccess files contain no PHP directives.
    --------------------------------------------------
    Disable Compilers
    This will prevent hackers from compiling worms, root kits and the like on your machine.
    To disable them, do the following:

    chmod 000 /usr/bin/perlcc
    chmod 000 /usr/bin/byacc
    chmod 000 /usr/bin/yacc
    chmod 000 /usr/bin/bcc
    chmod 000 /usr/bin/kgcc
    chmod 000 /usr/bin/cc
    chmod 000 /usr/bin/gcc
    chmod 000 /usr/bin/i386*cc
    chmod 000 /usr/bin/*c++
    chmod 000 /usr/bin/*g++
    chmod 000 /usr/lib/bcc /usr/lib/bcc/bcc-cc1
    chmod 000 /usr/i386-glibc21-linux/lib/gcc-lib/i386-redhat-linux/2.96/cc1

    You will need to enable them again when you need to perform system updates. To do this, run:

    chmod 755 /usr/bin/perlcc
    chmod 755 /usr/bin/byacc
    chmod 755 /usr/bin/yacc
    chmod 755 /usr/bin/bcc
    chmod 755 /usr/bin/kgcc
    chmod 755 /usr/bin/cc
    chmod 755 /usr/bin/gcc
    chmod 755 /usr/bin/i386*cc
    chmod 755 /usr/bin/*c++
    chmod 755 /usr/bin/*g++
    chmod 755 /usr/lib/bcc /usr/lib/bcc/bcc-cc1
    chmod 755 /usr/i386-glibc21-linux/lib/gcc-lib/i386-redhat-linux/2.96/cc1

    --------------------------------------------------
    Obfuscate The Apache Version Number
    1. Type: pico /etc/httpd/conf/httpd.conf
    2. Change the line that begins ServerSignature to:

    ServerSignature Off

    3. Add a line underneath that which reads:

    ServerTokens ProductOnly

    4. Hit CTRL+X, they y, the enter to save the file.
    5. Restart Apache with: /etc/rc.d/init.d/httpd restart
    --------------------


    Optimizing your server for efficiency

    *** MySQL Optimization***
    This will help you to understand how it is possible to optimize MYSQL to fit your needs, hardaware , and mysql current usage.

    Here are suggested settings for the my.cnf file. on a server 256mb + ram. You can and should customize these settings specifically for your VPS's usage. . DO NOT change your setting without understanding what it does. Make a backup of your my.cnf before editing the /etc/my.cnf .

    [mysqld]
    max_connections = 400
    key_buffer = 64M
    myisam_sort_buffer_size = 32M
    join_buffer_size = 1M
    read_buffer_size = 1M
    sort_buffer_size = 2M
    table_cache = 1024
    thread_cache_size = 286
    interactive_timeout = 25
    wait_timeout = 1000
    connect_timeout = 10
    max_heap_table_size = 128M
    max_allowed_packet = 16M
    max_connect_errors = 10
    read_rnd_buffer_size = 524288
    bulk_insert_buffer_size = 16M
    query_cache_limit = 1M
    query_cache_size = 16M
    query_cache_type = 1
    query_prealloc_size = 163840
    query_alloc_block_size = 32768
    tmp_table_size = 32M
    skip-innodb

    [mysqld_safe]
    open_files_limit = 8192

    [mysqldump]
    quick
    max_allowed_packet = 16M

    [myisamchk]
    key_buffer = 32M
    sort_buffer = 32M
    read_buffer = 16M
    write_buffer = 16M

    [mysqlhotcopy]
    interactive-timeout


    ===================
    How to find your mysql variables?
    from mysql :
    show variables;

    or from command line :
    mysqladmin variables
    How to find your mysql usage?
    from Mysql :
    show status;

    or from command line
    mysqladmin –i10 processlist extended-status


    STEPS:
    Run mysqladmin processlist extended-status as mentionned above.


    variables : Table_cache and Key_buffer_size
    -----------
    If Opened_tables is big, then your table_cache variable is probably
    too small.
    table_cache 64
    Open_tables 64
    Opened_tables 544468

    "The table_cache is the number of open tables for all threads. MySQL, being multi-threaded, may be running many queries on the table at one time, and each of these will open a table." Therefore, even though we only have a few tables, we will need many more open_tables. If Opened_tables value is high and shows the number of cache misses. Getting the table_cache size correct is one of the best things you can do to improve performance.
    -----------
    If Key_reads is big, then your key_buffer_size variable is probably
    too small. The cache hit rate can be calculated with
    Key_reads/Key_read_requests.
    key_buffer_size 16M
    Key_read_requests 2973620399
    Key_reads 8490571
    (cache hit rate = 0.0028)

    “The key_buffer_size affects the size of the index buffers and the speed
    of index handling, particularly reading." The MySQL manual (and other sources) say that
    "Key_reads/Key_read_request ratio should normally be < 0.01." This is the
    other most important thing to get correct. Here the value seems to be correct (< 0.01)

    Also check key_write_requests and key_writes.
    The key_writes/key_writes_request should normally be < 1 (near 0.5 seems to be fine)
    -----------


    variables : Wait_timeout, max_connexion, thread_cache
    -----------
    Generaly you have a lot of mysql process that are sleeping because wait_timeout are not set low. Make sure that the wait_timeout is set to a very low value: 15 seconds (for example) . That means MySQL would close any connection that was idle for more than 15 seconds.

    The problem is you also have to increment your max_connexion (for example 300) to be sure there is not a lot of idle clients holding connections and blocking out new clients from connecting and getting real work done.
    The box has to create new threads (MySQL is a multi-threaded server) at a very high rate. That may require a measurable amount of CPU time.

    The solution is to use the Thread_cache.

    If Threads_created is big, you may want to increase the
    thread_cache_size variable. The cache hit rate can be calculated with
    Threads_created/Connections.
    thread_cache_size 0
    Threads_created 150022
    Connections 150023

    You may try this formula : table_cache = opened table / max_used_connection
    -----------


    variables : tmp_table_size and Handler_read_rnd / Handler_read_rnd_next
    -----------
    If Created_tmp_disk_tables is big, you may want to increase the
    tmp_table_size variable to get the temporary tables memory-based instead
    of disk based.

    tmp_table_size 32M
    Created_tmp_disk_tables 3227
    Created_tmp_tables 159832
    Created_tmp_files 4444

    Created_tmp_disk_tables are the "number of implicit temporary tables on
    disk created while executing statements" and Created_tmp_tables are
    memory-based. Obviously it is bad if you have to go to disk instead of
    memory. About 2% of temp tables go to disk, which doesn't seem too bad
    but increasing the tmp_table_size probably couldn't hurt either.
    -----------
    If Handler_read_rnd is big, then you probably have a lot of queries
    that require MySQL to scan whole tables or you have joins that don't use
    keys properly.
    Handler_read_rnd 27712353
    Handler_read_rnd_next 283536234

    These values are high and could probably stand to improve the indexes and queries.
    -----------


    variables : tmp_table_size and Handler_read_rnd / Handler_read_rnd_next
    -----------
    Used MySQL memory = key_buffer + max_connections * (join_buffer + record_buffer + sort_buffer + thread_stack + tmp_table_size)

    Notice the max_connexion and the multiplier.
    connexion increase = memory usage increase too.

    Notice key_buffer
    for a given memory :
    more you add mem to key buffer, less connexion is
    less is key buffer, more connexion is

    If you change one of these settings for a high value, you system may swap.
    If you system swap, try lot decrease these values

    Also, about table_cache :
    Increasing the size of the table cache may really help you. But you must be careful not to make the value too large. All operating systems have a limit on the number open file pointers a single process may have.
    If MySQL tries to open a lot of files, the OS may refuse it and MySQL will generate error message in the error log.
    -----------

    We recommend installing mytop to help you monitor your usage.

    wget http://dll.elix.us/mytop-1.4.tar.gz
    tar -zxvf mytop-1.4.tar.gz
    cd mytop-1.4
    perl Makefile.PL
    make
    make test
    make install


    ***PHP & Apache Optimization***

    For httpd.conf we suggest:
    Timeout 200
    KeepAlive On
    maxKeepAliveRequests 100
    KeepAliveTimeout 3
    MinSpareServers 10
    MaxSpareServers 20
    StartServers 15
    MaxClients 250
    MaxRequestsPerChild 0
    HostnameLookups Off

    You can use ab to benchmark your Apache before and after you make changes.

    ab -c 5 -n 20 some_php_site_on_your_server.com/file.php

    I suggest doing 2 or 3 tests like that to get an average.

    If you want to check the Apache error log, try this -->
    cat /usr/local/apache/logs/error_log

    You can find the amount of connections to Apache with this command:
    netstat -nt | grep :80 | wc -l

    To find the amount of Apache processes use this command:
    ps -A | grep httpd | wc -l (this will show the process count)
    ps -aux | grep httpd (this will show the actual processes)

    To find the amount of MySQL processes use this command:
    ps -A | grep mysql | wc -l (this will show the process count)
    ps -aux | grep mysql (this will show the actual processes)

    Just simply using top (standard view) or top -c (will show the actual command being used and/or location of each process as opposed to just the name) can help you monitor your VPS usage very wel.

    To see your disk space usage, try using this command --> df -h

    Mitigating (D)DOS
    If you're being DDOS'd or DOS'd you can use this command:
    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

    That will help you see how many connections each IP address has in total to your server.



    ***WHM/cPanel Optimization***

    Spam Assassin
    Spam Assassin can take up a lot of memory and make it really hard to host just a few sites on a VPS, but there is a way around this...

    Login to WHM as root, scroll down to "cPanel 10.8.1-R15" (it may be slightly different depending on what version you are using) then goto "Addon Modules" and install "spamdconf". Once it's done, refresh the WHM page, scroll down to "Add-ons" on the nav bar and then click on 'Setup Spamd Startup Configuration". Set "Maximum Children" to "2". Then hit Submit. Wait a few seconds (15-30, but usually less) for exim to restart and you're done .

    cPanel Tweak Setings
    Login to WHM as root, and under "Server Configuration" on the nav bar hit "Tweak Settings".

    Here are some suggested settings:
    Default catch-all/default address behavior for new accounts. fail will generally save the most CPU time.
    - Use "FAIL". If you already have some accounts setup not to use "FAIL" (by default it will not) then run this command to convert to FAIL from BLACKHOLE --> perl -pi -e "s/:blackhole:/:fail:/g;" /etc/valiases/*

    Mailman
    - Mailman tends to use a lot of resources, so if you don't need cpanel mailing lists then uncheck this.

    Number of minutes between mail server queue runs (default is 60).:
    - You may want to set this to 180 to reduce load.

    Track the origin of messages sent though the mail server by adding the X-Source headers (exim 4.34+ required)
    - This is just generally a good idea. So check this.

    Analog Stats
    - I find this useless, so uncheck this. If you want to delete the existing analog stats files just run this command --> rm -rf /home/*/tmp/analog/*

    Awstats Reverse Dns Resolution
    - Make sure this is unchecked, I find it pretty much useless for most users.

    Awstats Stats
    - You can check this if you need a robust stats software that integrates with cPanel, if you don't need it, then don't check it. *Note most hosting clients will want to use this. If you want to delete the existing awstats stats files just run this command --> rm -rf /home/*/tmp/awstats/*

    Webalizer Stats
    - Not many hosting clients will want to use this so, you can uncheck this to reduce load. If you want to delete the existing webalizer stats files just run this command --> rm -rf /home/*/tmp/webalizer/*

    Delete each domain's access logs after stats run
    - Make sure this is checked, otherwise disk space usage can really rack up!
    Greg L. | Chief Executive Officer
    JaguarPC.com

    Helpful Links
    Knowledge Base | Network Status

    Need a Manager?
    (pm) | (email) David, Customer Service Manager
    (pm) | (email) Zach, Community Liason, Sales manager
    (pm) | (email) Masood, Chief Technical Officer
    (pm) | (email) Les, Chief Operations Officer

  3. #3
    Jag Veteran
    Join Date
    Sep 2002
    Posts
    650
    A quick note:
    Also consider adding noexec attribute to /tmp partition.

  4. #4
    JPC Member
    Join Date
    Feb 2006
    Posts
    12
    how can we arrange these values for 128mb vps?

  5. #5
    JPC Member
    Join Date
    Apr 2006
    Posts
    1
    So does the VPS plans not come secure? Is all of the above needed for having a secure VPS?

  6. #6
    Friendly rainboy's Avatar
    Join Date
    Apr 2006
    Location
    Eindhoven, The Netherlands
    Posts
    546
    Quote Originally Posted by iardon
    So does the VPS plans not come secure? Is all of the above needed for having a secure VPS?
    Without the above the VPS is already secure, this is just hardening the system, a few simple tweaks for i.e. Cpanel to get the most out of it. And some tips and tricks to make sure things are better tweaked for your environment.

    If you do all above and you install a rogue script you may (or may not) limit the damage, but you at least limit the chance that something happens. A 100% secure system does not exist. Anyone telling you otherwise is just bragging about how good they are

    Kind regards,
    Patrick

  7. #7
    JPC Member
    Join Date
    Apr 2006
    Posts
    40
    I strongly suggest that everyone follows all the items in the ssh section. I recently got a hack attempt and wouldn't of even noticed it if I hadn't install logwatch and they may of gotten in had I not at least disabled root logins via ssh (I can still su to root). Now I have followed all the suggestions for securing ssh, enabled the firewall in Interworx, and blocked the offending ip address.

  8. #8
    Friendly rainboy's Avatar
    Join Date
    Apr 2006
    Location
    Eindhoven, The Netherlands
    Posts
    546
    shinji,

    Right you are, but you probably saw an attack from one IP trying dozens of user-id passwords and move on. Looks like me like trojan horses. Not a personal attack (however that's possible too of course).

    Not only do what shinji says, but also make sure you use strong passwords, and under NO circumstances use any word from any dictionary as password. A strong password is case sensitive (capitals and lowercase), special characters and at least a number (not in sequential order).

    We often use a sentence we make up, and take the first characters i.e. (so do not use this!)

    Marry did go to High school today!
    becomes: Mdg2Hs2!

    It makes it a lot better to remember and you create a almost random password.

    Kindes regards,
    Patrick

  9. #9
    JPC Member
    Join Date
    Apr 2006
    Posts
    20
    This will not completely work:

    echo 'ALERT - Root Shell Access on:' `date` `who` | mail -s "Alert: Root Access from `who | awk '{print $6}'`" your@email.com

    because 'who' doesn't work on a VPS...according to support. The warning emails I receive say:

    "Alert: Root Access from"

    It doesn't say where it came from.

  10. #10
    Friendly rainboy's Avatar
    Join Date
    Apr 2006
    Location
    Eindhoven, The Netherlands
    Posts
    546
    Talk with support again, it should work, there might be a problem with the OS you use where i am not aware of, but here it works fine. I also read some other people where complaining about w or who or any service using wtmp/utmp, support should be able to fix this.

    Kind regards,
    Patrick

    update: found the link with a sollution about sshd.conf which needed to be adjusted, read the following:

    vps questions concerning customizing

  11. #11
    JPC Member
    Join Date
    Apr 2006
    Posts
    20
    Great, thanks for the info. I just did what was mentioned in the link you posted and its working now.

  12. #12
    Friendly rainboy's Avatar
    Join Date
    Apr 2006
    Location
    Eindhoven, The Netherlands
    Posts
    546
    You are most welcome,

    Kind regards,
    Patrick

  13. #13
    JPC Member
    Join Date
    Apr 2006
    Posts
    40
    Yes. Thanks. That fixed it over here as well.

  14. #14
    JPC Member
    Join Date
    Apr 2006
    Posts
    20
    I ran chkrootkit on my vps on got the following:

    [root@vps chkrootkit-0.46a]# ./chkrootkit -q

    /usr/lib/perl5/5.8.5/i386-linux-thread-multi/.packlist /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Mail/SpamAssassin/.packlist

    You have 1 process hidden for readdir command
    You have 1 process hidden for ps command
    chkproc: Warning: Possible LKM Trojan installed
    /proc/23717/fd: No such file or directory
    /proc/23719/fd: No such file or directory

    I also ran chkrootkit on two other systems I have (a Fedora and a CentOS box) and didn't get the same working.

    Does any one know if this is really a security problem or just a false positive?

  15. #15
    JPC Member
    Join Date
    Jun 2006
    Posts
    4
    The my.cnf settings here mess with Gallery 2.1.1. Does anyone else run Gallery 2.x also and know which option causes the following error?

    "Error
    Error (ERROR_STORAGE_FAILURE) :
    in modules/core/classes/GalleryStorage.class at line 476 (gallerycoreapi::error)
    in modules/core/classes/Gallery.class at line 223 (mysqlstorage::search)
    in modules/core/classes/GallerySession.class at line 911 (gallery::search)
    in modules/core/classes/GallerySession.class at line 261 (gallerysession::_loadsessiondata)
    in modules/core/classes/Gallery.class at line 315 (gallerysession::init)
    in init.inc at line 125 (gallery::initsession)
    in main.php at line 73"

    Reverting to the default my.cnf fixes it.

    Quote Originally Posted by Jag
    Optimizing your server for efficiency

    *** MySQL Optimization***
    This will help you to understand how it is possible to optimize MYSQL to fit your needs, hardaware , and mysql current usage.

    Here are suggested settings for the my.cnf file. on a server 256mb + ram. You can and should customize these settings specifically for your VPS's usage. . DO NOT change your setting without understanding what it does. Make a backup of your my.cnf before editing the /etc/my.cnf .

    [mysqld]
    max_connections = 400
    key_buffer = 64M
    join_buffer_size = 1M
    read_buffer_size = 1M
    sort_buffer_size = 2M
    table_cache = 1024
    thread_cache_size = 286
    interactive_timeout = 25
    wait_timeout = 1000
    connect_timeout = 10
    max_heap_table_size = 128M
    max_allowed_packet = 16M
    max_connect_errors = 10
    read_rnd_buffer_size = 524288
    query_cache_limit = 1M
    query_cache_size = 16M
    query_cache_type = 1
    query_prealloc_size = 163840
    tmp_table_size = 32M
    myisam_sort_buffer_size = 32M
    query_alloc_block_size = 32768
    bulk_insert_buffer_size = 16M
    skip-innodb

    [mysqld_safe]
    open_files_limit = 8192

    [mysqldump]
    quick
    max_allowed_packet = 16M

    [myisamchk]
    key_buffer = 32M
    sort_buffer = 32M
    read_buffer = 16M
    write_buffer = 16M

    [mysqlhotcopy]
    interactive-timeout

Page 1 of 6 12345 ... LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •