VPS / VDSでサイトセキュリティを構成する

専用または仮想サーバーを購入したか、自宅で自分のサーバーを盲目にしました。 そして、サイトのセキュリティについて考える時が来ました。サイトの1つにギャップがあると、他の人を危険にさらす可能性があるからです。



ホスティングでは、ホスティング事業者がこれらの問題を解決しますが、独自のサーバーではこれはすでに管理者のタスクです。 また、プリインストールを備えたホスティングを使用している場合でも、各ユーザーおよびサイトの権限が制限されている可能性はほとんどありません。 ほとんどの場合、プロバイダーは、vsftpd、Apache、nginx、php、mysqlなどの標準アプリケーションのインストールに限定されています。



サイトに必要なキットがインストールされており、セキュリティを管理する時間であると想定しています。 そうでない場合は、「apginのフロントエンドとしてnginxをセットアップする」ための適切な指示を見つけて、セキュリティの問題に戻ります。



次の原則からセキュリティを構築します。



1つ目は、vsftpdおよびproftpdの例を使用して、/ bin / falseシェルでユーザーを作成することです。 これにより、独自のディレクトリ内でのスクリプトの実行が制限されます。



サイトのユーザーの2番目の部門。 異なるユーザーに代わってサイトを立ち上げることができ、それらの1つへのアクセスが他のユーザーを危険にさらすことは決してありません。



また、私が知っている他のいくつかの安全性の問題も指摘します。何か見落とした場合は、記事を補足させていただきます。 また、インターネット上で必要なすべてのセキュリティ問題を示す記事が1つも見つからなかったため、この記事は非常に役立つと思います。



実際、私はこのメモをインストールの最終段階として既存の稼働中のサーバーに基づいて作成したので、この記事はサーバーをインストールするだけの人や、PHPインタープリターを少しだけ高速化したい場合に適しています。このトピックにも触れなければならないので。







proftpdをセットアップすることから始めましょう。 これを行うには、構成ファイルProFTPd /etc/proftpd/proftpd.confを開きます



#     . DefaultRoot ~ #     root RootLogin off #   shell RequireValidShell off #    MaxInstances 10 #     MaxLoginAttempts 5
      
      







proftpdを再起動します。



次に、vsftpdの例を検討します。 Vsftpd構成ファイル/etc/vsftpd.conf



 #    local_enable=YES #   write_enable=YES #     . chroot_local_user=YES #    local_umask=022
      
      







/ etc / shellsファイルにシェルを追加します



 /bin/false
      
      







/ etc / skelフォルダーに、ユーザーフォルダーに作成される対応する属性を持つ必要なファイルとフォルダーを書き込みます。 私自身は、少なくともサイトのフォルダー(public_html)と一時ファイルを保存するフォルダー(tmp)を設定します。 これでスタートに十分だと思います。



vsftpdを再起動します。



shell / bin / falseでユーザーを追加し、ユーザーの追加と同時に-mスイッチを使用してホームディレクトリを作成し、必要なすべてのディレクトリとファイルが上記の/ etc / skelに書き込まれるため、すぐにルートディレクトリへの書き込みを禁止します



 useradd -m -s /bin/false login passwd login chmod 555 /home/login
      
      







ユーザーの分離とfast-cgiのインストール





ユーザー分離には少なくとも2つの実装があります:suexecとapache2-mpm-itk。 suexecを使用するには、mod_phpを介してすべてのプロセスに対して1回起動されるapache2-mpm-itkとは異なり、各ユーザーに対して個別にphpアプリケーションを実行する必要があります。 それにもかかわらず、単一のプロセスを開始しても十分な柔軟性が得られないため、特に個別のphp.iniを開始するため、Apache2-mpm-itkの設定を見逃してしまいます。 もちろん、php_modが与えるその速度は失敗しますが、システムリソースを節約することは可能です。



まず、必要なモジュールをインストールします。 サーバーはすでにインストールおよび構成されていることが前提です。



Ubuntuの例



 aptitude install apache2-suexec libapache2-mod-fcgid php5-cgi
      
      







Apache2がPHP5とともにApacheモジュールとしてインストールされている場合は、無効にします。



 a2dismod php5
      
      







含まれていない場合は、次のモジュールを有効にします



 a2enmod rewrite a2enmod suexec a2enmod include a2enmod fcgid
      
      







PHPを実行するためのスクリプトは、Suexecのルートディレクトリ(デフォルトでは/ var / www)にありますが、次のコマンドはこれを確認するのに役立ちます



 /usr/lib/apache2/suexec -V
      
      







その中で、fcgiディレクトリを作成します。このディレクトリには、各ユーザーのスクリプトとphp設定が保存され、所有者のサブフォルダーを直接決定します。



 mkdir -p /var/www/fcgi/login
      
      







内部で、php5ファイルを作成します。ここで、phpを実行するスクリプトを記述します



 chown login:login /var/www/fcgi/login/php5
      
      







/ var / www / fcgi / login / php5にエントリを追加します



 #!/bin/sh PHPRC=/var/www/fcgi/login/php.ini export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/lib/cgi-bin/php
      
      







PHPRC行には、php.iniファイルが置かれているディレクトリが含まれています(たとえば、/ var / www / fcgi / login /は/var/www/fcgi/login/php.iniに変換されます)。 PHP_FCGI_MAX_REQUESTSは、1つのプロセスが処理するリクエストの数を担当します。 PHP_FCGI_CHILDRENは、PHPが着信要求の処理を開始する子プロセスの数を示します。 php5は実行可能である必要があり、それ(およびそのディレクトリ)はWebサイトおよびグループのユーザーが所有している必要があります。



次に、デフォルトのphp.iniファイルをデフォルトのディレクトリ/ etc / php5 / cgi /から/ var / www / fcgi / login / php5に転送し、基本的なパラメーターを設定します。 サイトごとに個別になりますが、主なものはすぐに注意を払う必要があります



 ;   PATH_INFO/PATH_TRANSLATED  CGI cgi.fix_pathinfo=1 ;    <? ?> short_open_tag = on ;     open_basedir = /home/login/docs ; ,        exec,       .        disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_getpriority,pcntl_setpriority,pcntl_exec,exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source,highlight_file,etc ;   register_globals = Off ;    register_long_arrays = Off ;    ,   POST post_max_size = 8M ; ,        upload_tmp_dir = /home/login/tmp ;    upload_max_filesize = 2M ;    allow_url_include = Off ;  e-mail sendmail_path = /usr/sbin/sendmail -t -i ;   X-PHP-Originating-Script mail.add_x_header = Off ;    . -1   memory_limit = 128M ;     max_execution_time = 30
      
      



pcntl_wait、pcntl_wifexited、pcntl_wifstopped、pcntl_wifsignaled、pcntl_wexitstatus、pcntl_wtermsig、pcntl_wstopsig、pcntl_signal、pcntl_signal_dispatch、pcntl_get_last_error、pcntl_strerror、pcntl_sigprocmask、pcntl_sigwaitinfo、pcntl_sigtimedwait、pcntl_getpriority、pcntl_setpriority、pcntl_exec、EXEC、パススルー、もしくはshell_exec、システム、 ; PATH_INFO/PATH_TRANSLATED CGI cgi.fix_pathinfo=1 ; <? ?> short_open_tag = on ; open_basedir = /home/login/docs ; , exec, . disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_getpriority,pcntl_setpriority,pcntl_exec,exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source,highlight_file,etc ; register_globals = Off ; register_long_arrays = Off ; , POST post_max_size = 8M ; , upload_tmp_dir = /home/login/tmp ; upload_max_filesize = 2M ; allow_url_include = Off ; e-mail sendmail_path = /usr/sbin/sendmail -t -i ; X-PHP-Originating-Script mail.add_x_header = Off ; . -1 memory_limit = 128M ; max_execution_time = 30







/etc/apache2/mods-available/fcgid.confファイルのパスを調整するには、次を追加します



 PHP_Fix_Pathinfo_Enable 1
      
      







また、最大リクエストサイズを指定するパラメーターFcgidMaxRequestLenを設定します



 FcgidMaxRequestLen 10737418
      
      







また、memcachedとxcacheにより速度が向上します



 aptitude install memcached aptitude install php5-xcache
      
      







注入保護





セキュリティを強化するには、mod_security拡張機能をインストールします



 aptitude install libapache2-modsecurity
      
      







構成ファイルの名前を変更します



 mv /etc/modsecurity/modsecurity.conf{-recommended,}
      
      







開いて設定を変更します



 #   SecRuleEngine on #    POST,    10 SecRequestBodyLimit 10485760 #    POST   ,    10 SecRequestBodyNoFilesLimit 1048576
      
      







/etc/apache2/mods-enabled/mod-security.confファイルにifModule security2_module>を追加するための基本的なルールをロードします



 Include /usr/share/modsecurity-crs/*.conf Include /usr/share/modsecurity-crs/base_rules/*.conf
      
      







DOS、DDOS、FLUD攻撃、およびパスワードクラッキングに対する保護





Apacheのmod-evasiveをインストールする



 aptitude install libapache2-mod-evasive
      
      







つなぐ



 a2enmod
      
      







/etc/apache2/mods-available/mod-evasive.confファイルの構成を変更します



 <IfModule mod_evasive20.c> #   DOSHashTableSize 3097 #          IP     . DOSPageCount 2 #     , .    50-    -     –   -  . DOSSiteCount 50 #   DOSPageCount ( ) DOSPageInterval 1 #   DOSSiteCount ( ) DOSSiteInterval 1 #   - ( ) DOSBlockingPeriod 10 #Email     DOSEmailNotify mail@gmail.com #  DOSLogDir "/var/log/mod_evasive" #        DOSWhitelist 127.0.0.1 DOSWhitelist 192.168.1.1 </IfModule>
      
      







パスワードの推測を防ぐには、Fail2banをインストールします



 aptitude install fail2ban
      
      







Apache、nginx、memcachedを再起動します



mod_evasive構成

ProFTPDモジュールmod_auth

Fail2ban

FTPサーバー

VSFTPD.CONF

modsecurity

ユーザーとグループ

スローリード攻撃およびその他の標的型攻撃からApache Webサーバーを保護する

DEBIANおよびUBUNTUのAPACHEでのMOD_SECURITYのインストールと設定



All Articles