- 投稿日:2020-07-12T23:29:27+09:00
効果的な簡単のWebサーバセキュリティ対策「Linux編」
「効果的な簡単のWebサーバセキュリティ対策」の最終回です。今回の主人公はLinux、つまり、OSのセキュリティ対策です。
今まで、世界中70%のWebサービスはLinuxを使っています。つまり、Linuxはすでに広く使われているということです。 ユーザーが増えるということは、Linuxの脆弱性がより早く発見されるということです。
確かに、ここ5年ほどの間に、Linuxカーネルが深刻なCVEの脆弱性にさらされているのをよく見かけるようになったのも事実です。
でも、これを悪いこととは思わない。 Linux自体がオープンソースなので、発見されたCVEの脆弱性はすぐに修正されます。活き活きとしたエコロジーの体現だと思います。
Linuxサーバを安全に保つためには、私たち自身が良いセキュリティ習慣を維持する必要があります。
定期的なシステム更新
Linuxカーネルやパッケージを頻繁にアップデートすることで、最新の脆弱性を回避することができます。
通常は安定性を前提としたLinuxディストロの安定版(Ubuntu LTSとDebian StableとCentOSなど)を使用しており、カーネルは小さなバージョンしか更新しないし、最新カーネルへの直接のアップグレードはありませんので、カーネルのアップデートによる不具合とか、互換性の問題とかの問題は心配するが必要ないです。
システムまたはパッケージの更新:
Debian/Ubuntu
apt-get update && apt-get upgrade -y && apt-get autoremove -y && apt-get clean -yまたは:
apt update && apt upgrade -y && apt autoremove -y && apt clean -yCentOS
yum update -y && yum upgrade -yもちろん、様々なLinuxディストリビューションで自動更新を利用することもいい。
SSHセキュリティ
SSHのセキュリティは、Linuxのセキュリティ対策の中で、間違いなく最も重要なものの一つです。Linuxサーバーのハッキングのほとんどのケースは、SSHパスワードがクラックされていることが原因です。
Linuxサーバのセキュリティを確保するためにまずやるべきことはSSHの確保です。
通常、SSHパスワードがブラストされるのを防くのために、多くの人がSSH保護のためにFail2banを使うと言うでしょう。しかし、違法な侵入者がプロキシIPを多用してSSHに乱暴に侵入していることが判明しました。 そのため、Fail2banは効果的な保護ができなくなってしまいました。
なので、Fail2banを使ってSSHを保護しても特に効果があるわけではないのでお勧めしません。逆に、Fail2banは多くのiptablesルールも占有するため、iptablesのパフォーマンスに影響します。
では、SSHをどのように保護しますか? 次の方法をお勧めします:
1. SSHパスワードを強力なパスワードに設定する
SSH のブルートフォースクラッキングは、基本的には弱い暗号辞書を使って試みられています。そのため、SSHパスワードを強いものに変更する必要がありました。
通常、パスワードを12文字以上に変更し、大文字と小文字、数字に特殊記号を加えたものにしています。 これにより、パスワードが乱暴に解読されることを大きく防ぐことができます。
パスワードを変更する方法:
passwd root
2. SSHのデフォルトポートを変更する
通常、SSHに対する悪意スキャナは22番ポートのみをスキャンします。
そこで、SSHのデフォルトポートを別のポートに変更するだけで、悪意スキャナのこの部分を防ぐことができます。
デフォルトのポート変更方法:
1. SSH設定ファイルを開く:
vim /etc/ssh/sshd_config2. 以下のパラメータを変更します:
Port 22322 #<----好きなポートを選択してください3. iptablesが有効になっている場合は、変更したSSHポートをホワイトリスト化する必要があります:
iptables -A INPUT -p tcp --dport 22322 -j ACCEPT4. SSHサービスを再起動しましょう:
/etc/init.d/ssh restart
3. SSH証明書を使ってログインします
ログインにSSH証明書を使用すると、SSHパスワードがブルートフォースでクラックされるのを防ぐことができます。だって、パスワードが全くないから。パスワードなしでどうやってクラックしますか?
1. SSH証明書を生成する
ここでは、PuTTYの証明書ジェネレータを使用して、公開鍵と秘密鍵を生成し、生成後に保存します。
2. 公開鍵をサーバーにアップロードする
ここでは、公開鍵を「/etc/ssh/key/public.key」にアップロードしたと想定しています。
次に、公開キーを正しいシステム権限に設定します:
chmod 700 /etc/ssh/key chmod 600 /etc/ssh/key/public.key3. ログインにSSH証明書ために、SSH設定ファイル中の以下のパラメータを変更します:
SSH設定ファイルを開く:
vim /etc/ssh/sshd_config以下のパラメータを変更します:
...... RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile /etc/ssh/key/public.key PermitEmptyPasswords no AllowTcpForwarding no X11Forwarding no PasswordAuthentication no ......4. SSHサービスを再起動しましょう:
/etc/init.d/ssh restart
4. 指定したIPアドレスのみSSHポートへの接続を許可します
これが最も安全なSSHログインです。 SSH証明書ログインよりもさらに安全です。
SSHの証明書は漏洩の危険性がありますが、指定されたIPだけがSSHにログインできる方法は事実上破られることはありません。
ただ、自分で固定のプロキシサーバーを持っていて、プロキシサーバーのセキュリティ対策がしっかりしている場合に限ります。
個人的には、ワイヤーガードを使って自分のネットワークに接続してからインターネットにアクセスするなどしています。だから、私の輸出IPは固定されています。
そのため、私のサーバはすべてSSH接続のために私の出口IPに制限されています。
プロキシサーバーのIPを2つホワイトリストとして設定することをお勧めします。 バックアップとしてのプロキシサーバーの一つ。 また、両方のプロキシサーバーが異なる地域にあることをお勧めします。
ホワイトリストを設定:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -j ACCEPT iptables -A INPUT -s xxx.xxx.xxx.xxx -p TCP --dport 22322 -j ACCEPT iptables -A INPUT -p tcp --dport 22322 -j DROPiptables設定を保存する(Debian/Ubuntu):
/etc/init.d/netfilter-persistent save /etc/init.d/netfilter-persistent reload
5. 公式サイトからSSHクライアントをダウンロードする
たとえ、PuTTYでは、多くの非公式WebサイトにダウンロードされたPuTTYファイルにはバックドアがあり、ユーザーのSSHパスワードを違法に盗む可能性があります。
指定した受信ポートのみを許可する
通常、Webサーバーが使用するポートは固定されています。例えば、HTTPの80ポートとか、HTTPSの443ポートとか。これらのポートへの接続のみを許可することで、未知の攻撃の発生を防ぎます。
ここで特に注意したいのがDNSのポートです。DNSがUDPプロトコルを使用していることは誰もが知っていますが、UDPにはTCPプロトコルのような接続保持機能はありません。ですから、適切なDNS解決を行うために53番ポートを開放します。
ただし、DNS解決以外では、一般的なWebサーバではUDPプロトコルは必要ありません。そこで、DDoS攻撃を防ぐために、私は一般的にすべてのUDPプロトコルをブロックしています。しかし、それはすべてのDDoS攻撃を防御するものではありません。 DDoS攻撃からの防御方法については、後日の記事で説明します。
iptablesを使用してポートを制限する:
iptables -A INPUT -i lo -j ACCEPT #<-- ローカルループバックインターフェースを許可する (すなわち、ローカルマシンへのローカルアクセスを実行する) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #<-- 確立された接続または関連する接続の通過を許可する iptables -A OUTPUT -j ACCEPT #<-- すべてのローカルアウトバウンドアクセスを許可する iptables -A INPUT -s xxx.xxx.xxx.xxx -p TCP --dport 22322 -j ACCEPT #<-- 指定したIPアドレスのみSSHポートへの接続を許可します iptables -A INPUT -p tcp --dport 80 -j ACCEPT #<-- HTTP iptables -A INPUT -p tcp --dport 443 -j ACCEPT #<-- HTTPS iptables -A INPUT -p udp --dport 53 -j ACCEPT #<-- DNS iptables -A INPUT -j REJECT #<-- 許可されていない他のルールへのアクセスを禁止する iptables -A FORWARD -j REJECT #<-- 許可されていない他のルールへのアクセスを禁止する
結論
ここまで、「効果的な簡単のWebサーバセキュリティ対策」シリーズのチュートリアルは終了しています。
基本的には、私をご紹介したセキュリティ対策に従うことで、Webサーバーを安全に保つことができます。
ただし、100%のサーバーセキュリティを確保するためには、個人のサーバーセキュリティに対する意識を高めることも必要です。将来のセキュリティの脅威に直面するためには、常に準備をしておかなければなりません。
以上です。
- 投稿日:2020-07-12T18:05:43+09:00
LPIC-1 ver5.0に合格した体験記
本記事の概要
LPIC-1(Level1)version5.0 を受験し取得したので勉強方法を備忘録として投稿します。
LPICを受けようと思っている方や、現在勉強している方がこの記事を参考の一つにしていただけたら幸いです。使用した教材
あずき本 (Linux教科書 LPICレベル1 Version5.0対応)
AmazonLinux教科書 LPICレベル1 スピードマスター問題集 Version5.0対応
AmazonPing-t (101試験の範囲は無料)
Webサイト勉強の流れ(101試験編)
試験にビビり倒していたので勉強時間をとりあえず1ヶ月に設定して勉強スタート
第1週
・とりあえずあずき本を1冊読む
コマンドのオプションを覚えたり細かい部分を理解しきろうとせず、なんとな~く全体像を掴むイメージで読む。
元々知っているコマンド等もあったが、ほぼ初見の知識ばかりでモチベが続かず1週間かかってしまう。↓
第2,3週
・Ping-tのWEB問題集を分野毎に解いていき、間違えた問題は解答を読んでノートにまとめる。
もちろん最初は間違えまくるのでとても時間がかかった。
あずき本読んでる時は「オプションたくさんありすぎ!覚えられる気がしない!」と思っていたが、
ノートに自分なりにまとめてみると案外覚えられる。・↑が終わったら主題毎に全問金になるまで解きまくる。
問題総数が100問以下なら1日、150問~なら2日かけて金にすることを意識。↓
第4週
・Ping-tのコマ問を解く
コマ問に関しては全問網羅せず、主題毎に出題数を20問にして80%くらい安定して正解出来ればよし。
(コマ問の問題総数を見て軽く絶望したので)・スピードマスター問題集を解く。
スピマスはPing-tでは問われなかった問題もそこそこ載っていた。
この問題ちょっと難しいな~って思っていたやつがそっくりそのまま本試験に出たりしたので、
金銭的、時間的に余裕があればとてもおすすめ。
ただ、感覚的にはPing-tだけでも7割くらいはカバーできる気はする。・Ping-tのWEB問題集で模擬試験モードをやりまくる
とにかく解く。暇さえあればPing-tをやる。Ping-t人間。試験結果(101試験)
受験日:2020年6月27日
スコア:700
合格ライン:500
結果:passシステムアーキテクチャ:87%
Linuxのインストール及びパッケージ管理:75%
GNUコマンドおよびUnixコマンド:92%
デバイス、Linuxファイルシステム、ファイルシステム、階層標準:92%101試験を受けた率直な感想は「準備期間1ヶ月もいらなかった」
解き終わった際もかなり手ごたえを感じていて、安心して「試験終了」ボタンを押せた。勉強の流れ(102試験編)
101試験の結果から「2週間でいけるんじゃね?」と思い勉強時間を2週間に設定。
流れは101の時と大体同じ。第1週
・Ping-tのWEB問題集を分野毎に解いていき、間違えた問題は解答を読んで自分なりにノートにまとめる。
102試験は設定ファイルやディレクトリを完全パスで問われることが多いとのことから、
コマ問をやる前から意識して覚えるようにしていた。・↑が終わったら主題毎に全問金になるまで解きまくる。
・全問金にしたら模擬試験モードを5回ほどやる。
101の時とは違い、時間が少なかったため5回ほどやったら妥協して次に。
(もちろん間違えた問題は金にする)↓
第2週
・Ping-tのコマ問を解く
102のコマ問が個人的には結構難しく、80%超えるまでやってたら時間が足りないと思い65%以上正解で妥協。・スピードマスター問題集を解く。
101の時とは違い、Ping-tで問われない問題がかなり多く乗っている印象を受けた。
理解があやふやな問題も残っていたが、とりあえず1冊通して終わらせてこれも妥協。試験結果(102試験)
受験日:2020年7月12日
スコア:680
合格ライン:500
結果:passシェルおよびシェルスクリプト:75%
ユーザーインターフェースとデスクトップ:100%
管理タスク:83%
Essential System Service(エッセンシャルシステムサービス):91%
Networking Fundamentals(ネットワーキングの基礎):100%
セキュリティ:70%102試験は勉強段階で妥協した部分が多い事もあり、かなり緊張して挑むことに。
自信をもって解答できない問題が多く、ドキドキで「試験終了」ボタンを押した。受験してみての感想
Linuxに関して体系的に学ぶことが出来るので受ける価値はとてもある試験だと思います。
資格を持っているからなんだという訳ではない。というのは重々承知していますが、
この1ヶ月半の経験が「全くの無駄」ではないと思っています。
どう活かすかは結局自分次第ですので、無駄にしないようにしたいですね。この記事を開いていただき、また、
ここまで読んでいただきありがとうございました。
- 投稿日:2020-07-12T18:05:43+09:00
LPIC-1(Level1) ver5.0に合格した体験記
本記事の概要
LPIC-1(Level1)version5.0 を受験し取得したので勉強方法を備忘録として投稿します。
LPICを受けようと思っている方や、現在勉強している方がこの記事を参考の一つにしていただけたら幸いです。使用した教材
あずき本 (Linux教科書 LPICレベル1 Version5.0対応)
AmazonLinux教科書 LPICレベル1 スピードマスター問題集 Version5.0対応
AmazonPing-t (101試験の範囲は無料)
Webサイト勉強の流れ(101試験編)
試験にビビり倒していたので勉強時間をとりあえず1ヶ月に設定して勉強スタート
第1週
・とりあえずあずき本を1冊読む
コマンドのオプションを覚えたり細かい部分を理解しきろうとせず、なんとな~く全体像を掴むイメージで読む。
元々知っているコマンド等もあったが、ほぼ初見の知識ばかりでモチベが続かず1週間かかってしまう。↓
第2,3週
・Ping-tのWEB問題集を分野毎に解いていき、間違えた問題は解答を読んでノートにまとめる。
もちろん最初は間違えまくるのでとても時間がかかった。
あずき本読んでる時は「オプションたくさんありすぎ!覚えられる気がしない!」と思っていたが、
ノートに自分なりにまとめてみると案外覚えられる。・↑が終わったら主題毎に全問金になるまで解きまくる。
問題総数が100問以下なら1日、150問~なら2日かけて金にすることを意識。↓
第4週
・Ping-tのコマ問を解く
コマ問に関しては全問網羅せず、主題毎に出題数を20問にして80%くらい安定して正解出来ればよし。
(コマ問の問題総数を見て軽く絶望したので)・スピードマスター問題集を解く。
スピマスはPing-tでは問われなかった問題もそこそこ載っていた。
この問題ちょっと難しいな~って思っていたやつがそっくりそのまま本試験に出たりしたので、
金銭的、時間的に余裕があればとてもおすすめ。
ただ、感覚的にはPing-tだけでも7割くらいはカバーできる気はする。・Ping-tのWEB問題集で模擬試験モードをやりまくる
とにかく解く。暇さえあればPing-tをやる。Ping-t人間。試験結果(101試験)
受験日:2020年6月27日
スコア:700
合格ライン:500
結果:passシステムアーキテクチャ:87%
Linuxのインストール及びパッケージ管理:75%
GNUコマンドおよびUnixコマンド:92%
デバイス、Linuxファイルシステム、ファイルシステム、階層標準:92%101試験を受けた率直な感想は「準備期間1ヶ月もいらなかった」
解き終わった際もかなり手ごたえを感じていて、安心して「試験終了」ボタンを押せた。勉強の流れ(102試験編)
101試験の結果から「2週間でいけるんじゃね?」と思い勉強時間を2週間に設定。
流れは101の時と大体同じ。第1週
・Ping-tのWEB問題集を分野毎に解いていき、間違えた問題は解答を読んで自分なりにノートにまとめる。
102試験は設定ファイルやディレクトリを完全パスで問われることが多いとのことから、
コマ問をやる前から意識して覚えるようにしていた。・↑が終わったら主題毎に全問金になるまで解きまくる。
・全問金にしたら模擬試験モードを5回ほどやる。
101の時とは違い、時間が少なかったため5回ほどやったら妥協して次に。
(もちろん間違えた問題は金にする)↓
第2週
・Ping-tのコマ問を解く
102のコマ問が個人的には結構難しく、80%超えるまでやってたら時間が足りないと思い65%以上正解で妥協。・スピードマスター問題集を解く。
101の時とは違い、Ping-tで問われない問題がかなり多く乗っている印象を受けた。
理解があやふやな問題も残っていたが、とりあえず1冊通して終わらせてこれも妥協。試験結果(102試験)
受験日:2020年7月12日
スコア:680
合格ライン:500
結果:passシェルおよびシェルスクリプト:75%
ユーザーインターフェースとデスクトップ:100%
管理タスク:83%
Essential System Service(エッセンシャルシステムサービス):91%
Networking Fundamentals(ネットワーキングの基礎):100%
セキュリティ:70%102試験は勉強段階で妥協した部分が多い事もあり、かなり緊張して挑むことに。
自信をもって解答できない問題が多く、ドキドキで「試験終了」ボタンを押した。受験してみての感想
Linuxに関して体系的に学ぶことが出来るので受ける価値はとてもある試験だと思います。
資格を持っているからなんだという訳ではない。というのは重々承知していますが、
この1ヶ月半の経験が「全くの無駄」ではないと思っています。
どう活かすかは結局自分次第ですので、無駄にしないようにしたいですね。この記事を開いていただき、また、
ここまで読んでいただきありがとうございました。
- 投稿日:2020-07-12T18:02:10+09:00
MacでCPU 物理コア数 / 論理コア数・物理メモリの総量を確認するコマンド
はじめに
本投稿は備忘録です。
頻繁に使うものではありませんが、誰かのお役に立てれば幸いです。なお、記念すべき(?)Qiita初投稿です。
CPU 物理コア数を確認する
ターミナルでコマンドを実行する。
$ sysctl -n hw.physicalcpu_maxCPU 論理コア数を確認する
ターミナルでコマンドを実行する。
$ sysctl -n hw.logicalcpu_max物理メモリの総量を確認する
ターミナルでコマンドを実行する。
$ sysctl hw.memsizeバイトで結果が表示されるので、適宜変換してください。
まとめ
もっとスペックの良いMacBookProが欲しいです。