専用または仮想サーバーを購入したか、自宅で自分のサーバーを盲目にしました。 そして、サイトのセキュリティについて考える時が来ました。サイトの1つにギャップがあると、他の人を危険にさらす可能性があるからです。
ホスティングでは、ホスティング事業者がこれらの問題を解決しますが、独自のサーバーではこれはすでに管理者のタスクです。 また、プリインストールを備えたホスティングを使用している場合でも、各ユーザーおよびサイトの権限が制限されている可能性はほとんどありません。 ほとんどの場合、プロバイダーは、vsftpd、Apache、nginx、php、mysqlなどの標準アプリケーションのインストールに限定されています。
サイトに必要なキットがインストールされており、セキュリティを管理する時間であると想定しています。 そうでない場合は、「apginのフロントエンドとしてnginxをセットアップする」ための適切な指示を見つけて、セキュリティの問題に戻ります。
次の原則からセキュリティを構築します。
1つ目は、vsftpdおよびproftpdの例を使用して、/ bin / falseシェルでユーザーを作成することです。 これにより、独自のディレクトリ内でのスクリプトの実行が制限されます。
サイトのユーザーの2番目の部門。 異なるユーザーに代わってサイトを立ち上げることができ、それらの1つへのアクセスが他のユーザーを危険にさらすことは決してありません。
また、私が知っている他のいくつかの安全性の問題も指摘します。何か見落とした場合は、記事を補足させていただきます。 また、インターネット上で必要なすべてのセキュリティ問題を示す記事が1つも見つからなかったため、この記事は非常に役立つと思います。
実際、私はこのメモをインストールの最終段階として既存の稼働中のサーバーに基づいて作成したので、この記事はサーバーをインストールするだけの人や、PHPインタープリターを少しだけ高速化したい場合に適しています。このトピックにも触れなければならないので。
proftpdをセットアップすることから始めましょう。 これを行うには、構成ファイルProFTPd /etc/proftpd/proftpd.confを開きます
proftpdを再起動します。
次に、vsftpdの例を検討します。 Vsftpd構成ファイル/etc/vsftpd.conf
 
/ 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にエントリを追加します
 
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,} 
開いて設定を変更します
 
/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>  
パスワードの推測を防ぐには、Fail2banをインストールします
 aptitude install fail2ban 
Apache、nginx、memcachedを再起動します
mod_evasive構成ProFTPDモジュールmod_authFail2banFTPサーバーVSFTPD.CONFmodsecurityユーザーとグループスローリード攻撃およびその他の標的型攻撃からApache Webサーバーを保護するDEBIANおよびUBUNTUのAPACHEでのMOD_SECURITYのインストールと設定