学習用

SYN Flood攻撃
攻撃者が大量のSYNパケット(接続開始要求)を偽装したIPアドレスからサーバーに送信します。サーバーは各要求に対してSYN-ACKパケット(接続受け入れ応答)を返し、クライアントからの最終的なACKパケット(接続確立)を待つため、一時的にリソースを割り当てます。攻撃者がACKパケットを送らない場合、サーバーは応答を待つ状態に留まり、新しい接続要求を処理するためのリソースが枯渇
Linuxでは、SYN Cookieを有効にすることでSYN Flood攻撃に対抗。これにより、サーバーはSYN-ACK応答を送る前に接続状態を記録する必要がなくなります。
Windowsでは、Windows Firewallや高度なセキュリティ設定を利用して不正なトラフィックをフィルタリングします。
ブロードキャスト攻撃に対しては、ネットワーク機器でのレートリミッティングやブロードキャストトラフィックの監視を強化する
レートリミッティングは、ネットワーク機器が一定時間内に処理するデータ量を制限する機能
LinuxでのDHCPサーバー設定は、主にdhcpd.confファイルで行われる。
-------------------------------------
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
}
固定IP割当:
host 特定のホスト名 {
hardware ethernet 00:1A:2B:3C:4D:5E;
fixed-address 192.168.1.200;
}
NTPサーバの指定:
option ntp-servers ntp.example.com;
ドメイン名の設定:
option domain-name "example.com";
ブロードキャストアドレスの指定:
option broadcast-address 192.168.1.255;
リース時間の設定変更:
default-lease-time 3600;
max-lease-time 7200;
-------------------------------------
TOMCAT
Tomcatのネットワーク接続や接続数を設定するには、server.xmlファイル内の<Connector>タグにある属性を使用します。
重要な属性には、maxThreads(最大処理スレッド数)、acceptCount(接続要求のキューの最大数)、maxConnections(最大接続数)、およびconnectionTimeout(接続タイムアウト)がある。
maxThreadsはTomcatが同時に処理できるリクエストの最大数。この値を大きくすると、同時に多くのリクエストを処理できますが、サーバーのリソースに負荷がかかります。
acceptCountは、maxThreadsで指定したスレッドが全て使用中の場合に、Tomcatがキューに入れることができる接続要求の最大数です。このキューが満たされた時に新たな接続要求が来た場合、Tomcatはそのリクエストを拒否。
SSL/TLS設定
server.xmlファイルの<Connector>タグを編集
-------------------------------------
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
  SSLEnabled="true"
  scheme="https"
  secure="true"
clientAuth="false"
  sslProtocol="TLS"
  keyAlias="tomcat"
keystoreFile="/path/to/keystore.jks"
  keystorePass="keystorepassword"
truststoreFile="/path/to/truststore.jks" truststorePass="truststorepassword" />
-------------------------------------
ポート8443でリスニングし、SSL/TLSを有効。
maxThreads="150"は同時に処理できる最大スレッド数を指定し、
keystoreFileとkeystorePassはサーバーの秘密鍵と証明書が格納されているキーストアのパスとパスワードを設定。
truststoreFileとtruststorePassは信頼できる証明書を格納したトラストストアを指定。
クライアントとサーバー間の通信は暗号化
セキュリティ設定(omcatのweb.xmlに記述)
-------------------------------------
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Area</web-resource-name>
<url-pattern>/secure/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
-------------------------------------
特定のウェブリソース(この例では/secure/*パスにあるもの)へのアクセスを制限。
<security-constraint>タグはセキュリティ制約を定義し、
<web-resource-collection>内で保護されるリソースの名前とURLパターンを指定。
<auth-constraint>タグは、このリソースへのアクセスを許可されるロール(この場合はadmin)を指定
この設定により/secure/パス下のリソースへのアクセスはadminロールを持つユーザーに限定。
ユーザーとロール (tomcat-users.xml)
-------------------------------------
<tomcat-users>
<role rolename="admin"/>
<user username="admin" password="password" roles="admin"/>
</tomcat-users>
-------------------------------------
Tomcatの認証用のユーザーとロールを定義しています。ここではadminという名前のロールを作成し、そのロールを持つadminユーザーを定義しています。このユーザーはpasswordというパスワードを使って認証する
tomcatでデータベース接続に関連するパラメータ
通常context.xmlファイル内で<Resource>タグを使用して定義。
重要なパラメータには、データベースのURL(url)、
データベースドライバクラス名(driverClassName)、
ユーザー名(username)、パスワード(password)
maxActive(最大アクティブ接続数)、
maxIdle(最大アイドル接続数)
validationQuery: データベース接続がまだ有効かをチェックするために実行されるSQLクエリ。
initialSize: プールの開始時に作成される接続の数。
maxWait: 使用可能な接続がプールにない場合に待機する最大時間(ミリ秒)。この時間を超えると例外が発生。
minEvictableIdleTimeMillis: 接続がプール内でアイドル状態(使用されていない状態)になることができる最小時間。この時間を超えると接続は閉じられます。
timeBetweenEvictionRunsMillis: 接続の検証とアイドル接続のクリーンアップを行う間隔。
Tomcatプール
データベース接続のインスタンスを効率的に管理するためのメカニズム。プールはあらかじめ定義された数のデータベース接続を保持し、アプリケーションが必要とする際に即座に提供することで、接続のオープンとクローズにかかる時間とリソースの消費を削減。アプリケーションが接続を終了すると、接続はプールに返され再利用される。これにより、データベースへのアクセス性能が向上し、リソース使用率が最適化される。
AWS EC2のリタイア通知
インスタンスが物理的なハードウェアの問題や寿命によりバックエンドで動作している物理ハードウェアが交換する予定であることをユーザーに通知するもの。インスタンスの停止と起動を行うことで、新しい物理ハードウェアに移行。再起動だけでは物理的なハードウェアの変更は行われない。
EC2インスタンス休止
インスタンスの状態を保持しながら最大60日間コンピューティングリソースの課金を停止できる。ただし、EBSボリュームやElastic IPアドレスなどの他のリソースに関連する費用は引き続き発生。
ゼロからOSやプロセスを立ち上げるよりも、EBSボリュームからメモリに情報を戻すことで早く元の状態に回復することができる。
EC2インスタンス休止条件
①起動 (=新規作成) 時に休止が有効になっている
②休止が可能なAMIである (Amazon Linux 2023, Ubuntu など)
③休止が可能なインスタンスファミリー (m7i, t3, c7a, c7i, r7a, r7i など) である
④ベアメタルインスタンスではない
⑤メモリサイズが150GB未満である
⑥休止が可能なEBSボリュームタイプ (gp2, gp3, io1, io2) である
⑦EBSボリュームが暗号化されている などの条件を全て満たす場合
EC2インスタンスで停止保護を有効
EC2インスタンスを誤って停止・終了 するのを防ぐ。ただしOS上でshutdownコマンドやpoweroffコマンドを実行した場合、またAWSのメンテナンスによって停止するのも防げない。さらにEC2 Auto Scalingのスケールインによって終了するのも防げない。ちなみにスポットインスタンスでは停止保護を有効にできない
EC2インスタンスの起動時に選ぶ『メタデータのバージョン』
『V1とV2 (トークンはオプション)』を使えるようにするか、『V2のみ (トークンは必須)』を使えるようにするかの選択。
インスタンスメタデータはインスタンスに関するデータであり、例えばインスタンスID・インスタンスタイプ・ホスト名・プライベートIPv4アドレス・パブリックIPv4アドレス・EC2インスタンスで停止ロール名 などを実行中のインスタンスの中から確認することができる便利機能。
インスタンスメタデータのV1とV2の違い
IMDSv1 (サービスバージョン 1) は特定のURLに向けて、単純にリクエストをすれば必ずレスポンスが返ってくる仕組み。
一方でIMDSv2はセッション指向リクエストを使っているため、リクエスト時に必ずセッショントークンが必要。これによりWAF・リバースプロキシ・L3ファイアウォール・NATの設定の穴やSSRF脆弱性を突くことで、インスタンスメタデータを不正に取得する攻撃を防ぐことができる。
AWS使用料金を削減
リザーブドインスタンス
特定のEC2インスタンスタイプに対して1年または3年の期間で予約を行い、使用するリージョンを指定する。これにより、事前に決定した使用量に対して大幅な割引を受けることができますが、需要の変動が大きい場合や、使用するインスタンスタイプが変更になる可能性がある場合には柔軟性に欠ける。自動更新はしない。
Savings Plans またはこっち
柔軟性が高く、使用量に基づいて割引を受ける。Savings Plansには、Compute Savings PlansとEC2 Instance Savings Plansの2種類があり、前者はEC2インスタンス、Fargate、Lambdaを含むAWSのコンピューティングサービス全般に適用される一方で、後者はEC2インスタンスに限定されます。Compute Savings Plansでは、リージョンやインスタンスファミリーを問わず、使用量に応じて自動的に割引が適用されるため、将来の使用パターンが不確実な場合でも柔軟に対応することが可能
オンデマンドインスタンス
予約なしに使用でき、必要な時にすぐにリソースを利用できます。
オンデマンドキャパシティ予約
事前に特定のアベイラビリティーゾーン内でコンピューティング能力を確保することで、必要な時にそのリソースが利用できることを保証。これにより、需要が高い時でもリソースが確実に手に入る。要するに、オンデマンドキャパシティ予約は、リソースを事前に保証するための方法。
Amazon Linux 2とAmazon Linux 2023
Python 2.7がPython 3に置き換えられ、パッケージ管理ツールがyumからdnfに変更。また、セキュリティの強化として、SELinuxがデフォルトで有効になり、OpenSSL 3が導入。さらに、Amazon Linux 2023はデフォルトでIMDSv2を使用。システムのログ管理ではsystemd-journaldがデフォルト。
AWS 起動テンプレート
インスタンスを起動するたびにパラメータを指定する必要がなくなる。例えば、AMI ID やインスタンスタイプ、通常インスタンスの起動に使用しているネットワーク設定を使って、起動テンプレートを作成することでパラメータを再度入力する代わりに、起動テンプレートを指定。さらに、起動テンプレートと組み合わせてEC2 Auto Scalingを利用することで、ロードに応じて自動的にインスタンスを起動/終了させるなど、インスタンスの自動スケーリングも行える。
専用ホスト
あなたのためだけに用意された実際のコンピューター。このコンピューターを使い、他の誰とも共有しません。特定のソフトウェアのライセンスが特定のコンピューターに紐付けられている時や、特別なセキュリティ要件がある場合に役立つ。
専用インスタンス
実際のコンピューターは共有されるが、使用する仮想マシン(インスタンス)は他の誰とも共有しない。これも同様にセキュリティや特定の要件がある時に使われます。簡単に言うと、専用ホストは物理的なコンピューター全体を自分だけのものに、専用インスタンスは仮想マシンを自分だけのものにし、他のAWSアカウントと共有しない(できない)。
AWSのゴミ箱機能
誤って削除されたり、一時的に不要になったEBS スナップショットと EBS-backed AMIを復元するための機能。この機能により、特定のAWSリソースを削除した後に一定期間内であれば、元に戻すことが可能。これにより、誤ってデータを失ってしまった場合のリスクを軽減できる。

よろしければサポートお願いします!よりいい情報を発信します。