Web サイトを構築するために VPS ホストを使用する人が増えていますが、個人用 VPS ホストは、仮想ホストや管理対象サーバーと比較して、基本的に管理されていません。つまり、ホストプロバイダーは、VPS ホストのネットワークを円滑にすることにのみ責任を負います。自分でそれを理解する必要があります。これまで、Alibaba Cloud が使用していた VPS ホストは、CC や DDOS によって頻繁に攻撃されていました。基本的に、攻撃を受けるたびに、Alibaba Cloud の「ブラックホール」に侵入していました。
CC および DDOS 用の Alibaba Cloud の VPS ホストは、一般に、攻撃トラフィックが増加すると、基本的にルートがクリアされ、1 日または数日間「ブラック ホール」が発生することもあります。 。今、私は自分のウェブサイトを古典的な CN2 VPS ポーターに移動しました。以前、ポーターは CC と DDOS を 3 回しか処理しないと VPS を直接ブロックするという注意を受けました。
この攻撃は、Web サイトを従来の VPS ホストに配置する場合には依然として注意が必要であることも教えてくれました。最初はサイトを開くことができませんでしたが、多くの友人からのメッセージで思い出したので、すぐにホスティングプロバイダーのバックエンドにログインして確認しました。監視グラフから、VPS の CPU 使用率が超過していることがわかりました。 100% であり、帯域幅の速度が数百 MB を超えていたため、ホスティング プロバイダーによって VPS が切断されたようです。
この記事では、VPS ホストを使用して Web サイトを構築している友人に、小規模な CC および DDOS 攻撃に対処するための基本的な手順を共有します。これらの攻撃は、基本的にファイアウォールを介して悪意のある IP をブロックすることを中心に展開します。
Web サイトのセキュリティと Web サイト構築の経験をさらに深めたい方には、次のようなものがあります。
- 無料の VPS コントロール パネルを使用するための 5 つのセキュリティに関するヒント – ハッカーに利用させないでください
- Linux php-fpm 最適化体験 - php-fpm プロセスは大量のメモリを消費し、メモリの問題を解決しない
- DNS ドメイン名解決により DNSSEC が DNS ハイジャックを防止できる - Google Cloud DNS 設定 DNSSEC
追記: 2018 年 3 月 6 日更新、 特定の IP が Web サイトにアクセスできないようにしたい場合は、次の方法を使用できます: Web サイトのブロックと特定の地域および国の IP アクセス設定のブロック - PHP コード/Nginx /WordPressの設定。
追記: 2020 年 3 月 19 日更新 、Web サイトがハッキングされた場合は、次の方法を参照して問題を解決できます: Web サイトのトロイの木馬とサーバー ハッキングのトラブルシューティング分析 - VPS ホストとサーバーの強化されたセキュリティ方法。
1. CC と DDOS を扱うときは、事前に下調べをしてください
次の 2 つのコマンドを使用して、現在の攻撃をすばやく判断できます。 単一 IP の接続数を表示するには、次のコマンドを入力します。
netstat -nat|grep -i '80'|wc -l
接続されている IP を接続数で並べ替えて、TCP 接続ステータスを表示します。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1.1 ローカル バックアップとオフサイト バックアップの頻繁なバックアップの組み合わせ
ウェブサイトのバックアップは、CC 攻撃や DDOS 攻撃に対処する確実な方法であり、データが破壊されない限り、損失を最小限に抑えることができます。頻繁に更新されるデータについては、1 日に 1 回バックアップすることをお勧めします。Alibaba Cloud、Tencent Cloud、以前に紹介した Linode スナップショットなど、一部のホスティング プロバイダーはスナップショット バックアップ機能も提供します。
ローカル バックアップに加えて、オフサイト バックアップを実行するのは当然です。オフサイト バックアップは、クラウド ストレージまたはクラウド ディスクと組み合わせてデータを保存できます。先ほど共有した Linux VPS は、Google Drive や Dropbox をマウントすることで VPS 上のデータをネットワーク ディスクに自動的にアップロードしたり、DigitalOcean Spaces のクラウド ストレージやクラウド シューティングを使用したりできます。 、Qiniu クラウド ストレージ、Baidu BOS およびその他の専門的なクラウド ストレージ。
1.2 Linux VPS システム負荷の確認方法を学ぶ
CC および DDOS 攻撃を受けた場合、通常は VPS ホスティング プロバイダーのコントロール パネルから確認することができ、監視データに明らかな「異常」が見られます。下の写真は、攻撃を受けた際のVPSホスト監視で表示されたIO、CPU、メモリ等が100%であることを示しています。 (拡大するにはクリックしてください)
2.2 Fail2ban を使用して攻撃 IP をブロックする
failed2ban は Python 言語で開発された監視ソフトウェアで、iptables を呼び出してシステムログのログイン情報を監視し、該当するログイン IP をブロックし、特定の IP からの悪意のあるアクセスを防ぎます。 ail2ban は、対応するログ ファイル、Debian/Ubuntu:/var/log/auth.log、CentOS/Redhat:/var/log/secure を読み取ります。フェイル 2ban をインストールします。
apt-get install fail2ban
#CentOS内置源并未包含fail2ban,需要先安装epel源
yum -y install epel-release
#安装fial2ban
yum -y install fail2ban
インストールが完了すると、主な設定ファイルは /etc/fail2ban ディレクトリにあり、このディレクトリには 2 つのファイルと 2 つのディレクトリが含まれます。
failed2ban.conf: 構成ファイルは、fail2ban によって記録されるログ レベル、ログ ファイルの場所、およびソケットを定義します。
jail.conf は、監視対象のサービスと使用されるいくつかの戦略を定義します。
jail.conf の先頭は、デフォルトのグローバル構成ブロック [DEFAULT] です。デフォルトの構成は次のように説明されます。
[DEFAULT]
#忽略哪些IP,可以是具体IP、CIDR类型的地址,多个IP用空格分开
ignoreip = 127.0.0.1
#设置IP被锁住的时间,单位为秒
bantime = 600
#检测时间,在此时间内超过规定的次数会激活fail2ban
findtime = 600
#尝试的次数
maxretry = 3
#日志检测机器,有"gamin", "polling" and "auto"三种模式。
backend = polling
#发送报警邮件的地址
destemail = root@localhost #默认的动作执行行为,在action.d目录下有各种行为策略,默认是iptables-#multiport
banaction = iptables-multiport
#0.8.1版本后fail2ban默认用sendmail MTA
mta = sendmail
#默认使用tcp协议
protocol = tcp
#定义了各种行动的参数
#banaction参数在action.d目录下具体定义,name port protocol 也可以自己定义
#只禁止IP
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
#即禁止IP又发送email
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s]
#禁止IP、发送email、报告有关日志
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
%(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]
#如果没有定义行为,则默认的行为为action,可选择action_,action_mw, action_mwl 等
action = %(action_)s
默认配置文件含有此模块
#定义子模块名
[ssh]
#是否激活
enabled = true
#定义port,可以是数字端口号表示,也可以是字符串表示
port= ssh
#过滤规则,在filter.d目录下定义
filter = sshd
#检测日志的路径
logpath = /var/log/auth.log
#尝试的次数,覆盖了全局配置的
maxretry = 6
#banaction 在action.d目录下定义,此参数值会替换action中选用的默认行为中定义的banaction参数
banaction = iptables-allports
#注意 port protocol banaction 可以不用分开定义,直接使用action定义也可以,例如:
#action = iptables[name=SSH, port=ssh, protocol=tcp]
#在子模块中定义的port protocol banaction 都会在action_ action_mw, action_mwl中替换成具体的设置值。
Fail2ban の他のディレクトリ機能は次のように説明されます。
filter.d ディレクトリでは、ログ ファイルに基づいてフィルタリングのルールを定義します。主に正規表現を使用して、エラーの原因となるキーワードに一致します。
action.d ディレクトリには、フィルタリング ルールに従って、対応する IP に対してどのようなアクションを実行する必要があるかが含まれています。
Fail2ban CC 攻撃の例:
#需要先新建一个nginx日志匹配规则
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填写如下内容
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =
引き続き jail.local
を変更し、次のコンテンツを追加します。
[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 60
findtime = 60
bantime = 3600
logpath = /data/wwwlogs/wzfou.com_nginx.log
上記の設定は、同じ IP が 60 秒以内に 60 リクエストに達すると、その IP が 1 時間禁止されることを意味します。Web サイトのログ パスを変更することを忘れないでください。次のコマンドを使用して、fail2ban ステータスを表示し、禁止された IP アドレスのリストを表示します。
/usr/local/python/bin/fail2ban-client status ssh-iptables
上記のコードを保存した後、x(実行)権限を付与します。シェル スクリプトがバックグラウンドのデーモンに似ていることを理解するには、nohup を使用する必要があります。
nohup 该shell script的位置 >/dev/null 2>&1 &
>/dev/null 2>&1
は、シェル スクリプトの実行によって出力される情報 (デバッグに使用されるシェル スクリプト内のいくつかのエコー) を /dev/null にリダイレクトすることを意味します。 最後の & はバックグラウンド実行を表します。この場合、ログアウトしてもシェル スクリプトはバックグラウンドで実行され続けます。
3. まとめ
Web サイトのログをリアルタイムで検出し、異常な IP を自動的に iptables に追加してブロックする上記 2 つのスクリプトを使用しました。結果は非常に良好で、小規模な CC 攻撃には十分対応できます。現在、Fail2ban は Web サイトのログを検出し、悪意のある IP をブロックするために使用されています。 3 つのスクリプトにはそれぞれ独自の利点があり、ニーズに応じて選択できます。
ただし、より大規模な DDOS 攻撃に遭遇した場合は、やはり専用の攻撃対策サービスを使用する必要があります。たとえば、Cloudflare 攻撃対策サービスは、基本的に VPS 業界の誰もが使用しています。 Web サイトが攻撃されてアクセスできなくなった場合は、Cloudflare を有料バージョンにアップグレードすると、保護が強化されます。