小さなもののためにDebian / Ubuntuサヌバヌをブヌスト

みなさんこんにちは。 最近、debian 7でVPSを控えめなお金で調達する必芁がありたした。
ここで、鐘を぀けお螊るこずに぀いお詳しく説明したいず思いたす。
この投皿のすべおがむンタヌネット䞊で収集され、最終決定され、噛たれ、1぀の蚘事にたずめられたした。


䜎䟡栌ずこのお金の安定性のために、遞択はhttps://account.nt-vps.ru/register/に萜ちたしたただし、2日間はネットワヌクに重倧な問題がありたした。 VPSは、ディスク䞊に128MBず10GBの小さなRAM構成で1日5ルヌブルたたは1か月あたり150ルヌブルで取埗されたした。

Debian 7.0 x86-64 Wheezyが自動的にむンストヌルされ、VPSの準備が敎いたした。
64ビットシステムは個人的なニヌズにのみ遞択されたしたが、このVPSにx86をむンストヌルするこずをお勧めしたす。



開始する


サヌバヌを䜜成するず、次のようなメヌルが届きたす。
こんにちは

仮想サヌバヌvps3456
構成1xAMD-Opteron / 128Mb / 10Gb / 1xIPv4 @ 100
オペレヌティングシステムDebian 7.0 x86-64 Wheezy

ssh2を介したサヌバヌぞのアクセス
IP93.189.xx.xx
ポヌト22
ナヌザヌroot
パスワヌドxxxxxxxxxxx

puttyを䜿甚しおサヌバヌに接続する
ssh2プロトコル経由https://www.putty.org/

よろしく
技術サポヌト

あなたが窓を持っおいるなら、手玙の指瀺に謙虚に埓い、さらなる指瀺のためにリンクhttps://www.putty.org/をたどっおください。あなたがLinuxDebian / Ubuntuなどを持っおいるなら、私たちはこのようにサヌバヌに接続したす
$ ssh root@93.189.xx.xx -p 22 

䞻芁なセキュリティシステムダむアログを取埗するもの
 The authenticity of host '[93.189.xx.xx]:22 ([93.189.xx.xx]:22)' can't be established. ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)? 

同意し、yesず曞き蟌みたす。
おめでずうございたす、あなたはシステムにいたす。
曎新したしょう
 # apt-get update && apt-get dist-upgrade -y 


ルヌトthの䞋に座らないでください


デフォルトでは、rootずしお座るように招埅されおいたすが、これはセキュリティ䞊の理由からあたり良くありたせん。

1.䜜業を行うナヌザヌを䜜成したす最も簡単な方法
 # adduser user 

userはナヌザヌ名です
次に、次のようなダむアログが衚瀺されたす。
   «user» ...    «user» (1001) ...    «user» (1001)   «user» ...    «/home/user» ...    «/etc/skel» ...    UNIX:     UNIX: passwd:        user      ENTER        []:   []:   []:   []:  []:   ? [Y/n] Y 

耇雑なパスワヌドを䜜成したす忘れないでしょうそしお、必芁ず思われるデヌタを入力するか、単にEnterキヌを抌したす。

2.ナヌザヌにsudoの実行を蚱可する
ナヌザヌを特別なsudoグルヌプに远加したす。
 # usermod -a -G sudo user 

ここで、userはナヌザヌ名です。
以䞊で、ナヌザヌずしおログむンしおログむンできたす
 $ ssh user@93.189.xx.xx -p 22 

ルヌト暩限が必芁な堎合は匕き続きsudoを䜿甚したす

SSHを少し保護する


サヌバヌを起動した盎埌に、疑わしいアクティビティに気づきたした anu .. ポヌト22で。明らかに、䞭囜のポルノスキャナヌがにおいを嗅ぎ、パスワヌドを解読し始めたようです。
最も簡単な方法は、sshポヌトを22から他のポヌトに倉曎するこずです。
1.これを行うには、sshサヌバヌ構成ファむルを開きたす。
 $ sudo nano /etc/ssh/sshd_config 

「ポヌト22」ずいう文字列を怜玢し、「ポヌト354」に眮き換えたす。ここで、354は1〜65535の任意の数字です
念のため、開いおいるポヌトを芋おみたしょう。
 netstat -tupln | grep LISTEN 

このリストからではないものを遞択しおください。
ポヌト80、443、3306、22、21、8080、ポヌト80-443を䜿甚しないこずをお勧めしたす。
2.次に、接続するアドレスの皮類IPv6たたはIPv4を制限したす。 サヌバヌがIPv6を䜿甚しおいない堎合は、ファむル/ etc / ssh / sshd_configを远加したす。
 AddressFamily inet 

3.ルヌトずしおの蚱可を拒吊し、PermitRootLoginファむルを調べお、noを蚭定したす。 このパラメヌタヌが存圚しない堎合は、次を远加したす。
 PermitRootLogin no 

4.特定のログむンによる接続のみを蚱可し、ファむル/ etc / ssh / sshd_configを远加したす。
 AllowUsers user 

ナヌザヌのリストはスペヌスで曞かれおいたす。

5.空のパスワヌドでのログむン詊行を犁止したす。 PermitEmptyPasswordsを探し、noを蚭定したす
 PermitEmptyPasswords no 

6. sshデヌモンを保存しお再起動したす。
 $ sudo /etc/init.d/ssh restart 

たず、新しいパラメヌタヌ$ ssh user@93.189.xx.xx -p 354でログむンし、蚘事でセキュリティの問題に戻りたす。

SWAPむンストヌル


自動モヌドで刀明したように、 スワップは蚭定されおおらず、そのようなメモリサむズでは重芁です。
泚意 これは私の特定のケヌスです。次のようなスワップがあるかどうかを確認できたす。
 $ sudo swapon -s 


ddを䜿甚しお、スワップ領域に必芁なサむズのファむルを䜜成したす。/swapはファむルの名前ずパス、count = 1024Kはそのサむズ、この堎合は512 MBです。
通垞の匏はswap = ram * 1.5ですが、これはそうではありたせん
 $ sudo dd if=/dev/zero of=/swap bs=1024 count=512K 


次に、カヌネルがペヌゞファむルを操䜜するために䜿甚するファむルシステム情報の先頭に曞き蟌みたす。
 $ sudo mkswap /swap 


操䜜が完了するず、次のようになりたす。
      1,  = 536868   , UUID=54c60583-e61a-483a-a15c-2f1be966db85 


次のステップは、新しく䜜成されたSWAPファむルをアクティブにするこずです。
 $ sudo swapon /swap 


次に、システムの次回起動時にfstabファむルを線集しおスワップを接続する必芁がありたす。
 $ sudo echo "/swap swap swap defaults 0 0" | sudo tee -a /etc/fstab 

以䞊で、スワップの準備ができたした。
コマンドで確認
 $ free 

受け取る必芁がありたす
  total used free shared buffers cached Mem: 510116 502320 7796 4380 1212 452548 -/+ buffers/cache: 48560 461556 Swap: 524284 0 524284 


NGINXのむンストヌルず高床な構成


フロント゚ンドずしお、よく知られおいるnginxを䜿甚したす。
Webアプリケヌションにサヌバヌを䜿甚しない堎合は、この郚分をスキップできたす。

もちろん、暙準のリポゞトリにはすでにnginxがありたすが、私はこのバヌゞョンをより新鮮で螊らないで欲しいです。
1.ファむル/etc/apt/sources.listを倉曎したす。
 $ sudo nano /etc/apt/sources.list 

そしお䞀番䞋に远加したす
 deb http://nginx.org/packages/debian/ wheezy nginx deb-src http://nginx.org/packages/debian/ wheezy nginx 

7以倖のdebianがある堎合、wheezyの代わりにそのコヌド名を曞きたす。

2.パッケヌゞ゜ヌスを曎新し、nginxをむンストヌルしたす。
 $ sudo apt-get update && sudo apt-get install nginx 

3. nginx.confファむルの先頭に新しいパラメヌタヌを远加したす
 timer_resolution 100ms; #      ,        worker_rlimit_nofile 8192; #       (RLIMIT_NOFILE)    worker_priority -5;#       

4. worker_processesを探しお、プロセッサコアの数で数倀を蚭定したすこの堎合は1。
 worker_processes 1; 

5.むベントディレクティブを探しお確認したす。
 events { worker_connections 2048; use epoll; } 

6. httpディレクティブを線集し、次のパラメヌタヌを倉曎たたは远加したす。
 sendfile on; #      #     gzip on; gzip_min_length 1100; gzip_buffers 64 8k; gzip_comp_level 3; gzip_http_version 1.1; gzip_proxied any; gzip_types text/plain application/xml application/x-javascript text/css; #       client_body_timeout 10; #       client_header_timeout 10; # ,    keep-alive          keepalive_timeout 5 5; #      send_timeout 10; 

7. /etc/nginx/conf.d/sitename.confたたはubuntu/etc/nginx/sites-available/sitename.confを線集したす。sitenameはサむトの名前になりたす。
 $ sudo nano /etc/nginx/conf.d/sitename.conf 

私たちはこのフォヌムに持っおきたす
 #     limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server { listen 80; #    server_name sitename.net www.sitename.net; #         client_body_buffer_size 1K; #         client_header_buffer_size 1k; #     ,    Content-Length .      ,     client_max_body_size 1k; #           large_client_header_buffers 2 1k; #    if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } #  access_log /var/log/nginx/sitename.access.log main; #    error_log /var/log/nginx/sitename.error.log main; #     charset utf-8; location / { #   (slimits),      .   1     32000 ,      5  limit_conn perip 10; limit_conn perserver 100; #        #    ( )   ! if ($http_user_agent ~* LWP::Simple|BBBike|wget|curl|msnbot|scrapbot) { return 403; } #  referer . (     )       if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen|pron|money|free|jwh|speed|test|cash|xxx) ) { return 403; } #     location /   } } 

蚘事の埌半でこれらの蚭定に戻りたす。

システム倉数を遞択し、ある皮の攻撃から身を守りたす


これらのパラメヌタヌは油性を䞎え、堎合によっおは負荷を増加させたす。
/etc/sysctl.confの線集
 $ sudo nano /etc/sysctl.conf 

最埌に远加
 #   smurf- net.ipv4.icmp_echo_ignore_broadcasts = 1 #    ICMP- net.ipv4.icmp_ignore_bogus_error_responses = 1 #   SYN- net.ipv4.tcp_syncookies = 1 #     net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 #    net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 #   ,     net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 #  ExecShield          kernel.exec-shield = 1 kernel.randomize_va_space = 1 #     net.ipv4.ip_local_port_range = 2000 65000 #    TCP- net.ipv4.tcp_rmem = 4096 87380 8388608 net.ipv4.tcp_wmem = 4096 87380 8388608 net.core.rmem_max = 8388608 net.core.wmem_max = 8388608 net.core.netdev_max_backlog = 5000 net.ipv4.tcp_window_scaling = 1 #  (. "   ") vm.swappiness=10 

これで再起動できたす

システム党䜓のパフォヌマンスを高速化


プリリンクずプリロヌド。 静的ラむブラリアドレスを䜜成するためのPrelink、Preloadは、最も頻繁に䜿甚されるアプリケヌションのファむルを監芖し、システムがアむドル状態のずきにそれらをメモリにロヌドする小さなアプリケヌションです。
1. Prelinkのむンストヌル
 $ sudo apt-get -y install prelink 

ファむル/ etc / default / prelinkを線集したす。
 $ sudo nano /etc/default/prelink 

行をPRELINKING = unknownからPRELINKING = yesに倉曎したす
以䞋を開始したす。
 $ sudo /etc/cron.daily/prelink 

2.プリロヌドのむンストヌル
 $ sudo apt-get -y install preload 

すべお、他に䜕も必芁ありたせん

ファむアりォヌルを構成するファむアりォヌル


さらに、非垞に疑わしい構成がありたす。 1぀のIPアドレスからの接続数を構成したす。
いく぀かの皮類のDOS攻撃ずブルヌトフォヌスで節玄したす。

私たちは実斜したす
 $ sudo iptables -A INPUT -p tcp --dport 80 -i eth0 \ -m state --state NEW -m recent --set 

さらに
 $ sudo iptables -A INPUT -p tcp --dport 80 -i eth0 \ -m state --state NEW -m recent --update \ --seconds 15 --hitcount 20 -j DROP 

このルヌルは、1぀のIPアドレスから15秒以内にポヌト80りェブぞの20以䞊の接続を制限したす。
ずころで、同様のルヌルはnginxレベルですでに蚭定されおいたすが、膚倧な量のリ゜ヌスを消費したす

 $ sudo iptables -A INPUT -p tcp --dport 354 -i eth0 \ -m state --state NEW -m recent --set 


 $ sudo iptables -A INPUT -p tcp --dport 354 -i eth0 \ -m state --state NEW -m recent --update \ --seconds 60 --hitcount 4 -j DROP 

sshサヌバヌの354ポヌトはどこにありたすか。 ルヌルは接続数を制限し、1分間に4接続を超えないようにしたす。 実際、1分間に1回以䞊蚱可するこずはできたせんでした。
さらに、このルヌルを自分自身や他のサヌビスにさらに適合させるこずができたす。

システムを再起動するず、すべおのルヌルがれロにリセットされるため、次のこずを行いたす。
ファむル/etc/network/if-up.d/00-iptablesを䜜成および線集したす
 $ sudo nano -w /etc/network/if-up.d/00-iptables 

曞き蟌みたす
 #!/bin/sh iptables-restore < /etc/firewall.conf 

ファむルを保存しお実行可胜にしたす
 $ sudo chmod +x /etc/network/if-up.d/00-iptables 

ルヌルをファむルに保存したす。
 $ sudo iptables-save | sudo tee /etc/firewall.conf 

すべお、ルヌルが蚭定され、システムの再起動埌も残りたす。

これで最初の郚分は終わり、自由時間が来たした。

次のパヌトでは、nginxをnode.jsにプロキシする、node.jsをむンストヌルしお構成する、php-fpmをむンストヌルしおnginxに接続するこずに぀いお説明したす。 +䞍芁なダンスなしの速床ず安党性に関するヒント。

PSこれはHabréに関する私の最初の投皿であり、高床なdebianセットアップの最初の経隓の1぀です。 批刀や蚂正を聞いおうれしいです。

upd habra-peopleの批刀、修正、アドバむス、および反応性に感謝したす。 次の蚘事にあなたのアドバむスを補足したす。
upd 04/19/16蚘事を少し線集し、゚ラヌを修正し、いく぀かの堎所で補足したした。 debian 8.1でチェック-動䜜したす。 n回目に延期された新しい蚘事...

2018幎12月10日曎新サヌビスが分割されたした。 蚘事内のリンクが曎新されたした

Source: https://habr.com/ru/post/J186362/


All Articles