ホスティングでは、ホスティング事業者がこれらの問題を解決しますが、独自のサーバーではこれはすでに管理者のタスクです。 また、プリインストールを備えたホスティングを使用している場合でも、各ユーザーおよびサイトの権限が制限されている可能性はほとんどありません。 ほとんどの場合、プロバイダーは、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のインストールと設定