ステータス:非推奨

この記事では、サポートされなくなったバージョンのCentOSについて説明します。 現在CentOS6を実行しているサーバーを運用している場合は、サポートされているバージョンのCentOSにアップグレードまたは移行することを強くお勧めします。

理由: CentOS 6は2020年11月30日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このため、このガイドは維持されなくなりました。

代わりに参照してください:
このガイドは参照として役立つ場合がありますが、他のCentOSリリースでは機能しない場合があります。 可能な場合は、使用しているCentOSのバージョン用に作成されたガイドを使用することを強くお勧めします。
次のDigitalOceanチュートリアルは、このガイドでカバーされているトピックに関連するトピックをカバーしており、興味があるかもしれません。

イントロ

この記事では、CentosVPSで簡単なファイアウォールを作成する方法を説明します。 必要なポートのみを開き、他のサービスを閉じます。 また、より単純な攻撃を防ぐ方法と、誤って自分自身へのアクセスを拒否した場合にVPSに戻る方法についても説明します。

チュートリアルは決して網羅的なものではなく、いくつかの着信ポートを開く方法(apache、SSH、および電子メール用)と、その他すべてを閉じる方法のみを示しています。 発信トラフィックをブロックすることはなく、脆弱なVPSを探す通常のスクリプトとボットをブロックするための最も一般的なルールをいくつか作成するだけです。

iptables は、ほとんどのLinuxディストリビューションにインストールされている単純なファイアウォールです。 Linuxのマニュアルページfor iptables は、IPv4パケットフィルタリングおよびNAT 用の管理ツールであると述べています。これは、翻訳すると、フィルターで除外するツールであることを意味します。インターネットトラフィックをブロックします。 iptables ファイアウォールは、DigitalOceanが提供するCentos6.4Linuxイメージにデフォルトで含まれています。

ルールごとにファイアウォールを設定します。 簡単に言うと、ファイアウォールはルールのリストであるため、着信接続が開いているときに、いずれかのルールに一致する場合、このルールはその接続を受け入れるか拒否することができます。 ルールが満たされない場合は、デフォルトのルールを使用します。

ノート: このチュートリアルでは、IPv4セキュリティについて説明します。 Linuxでは、IPv6のセキュリティはIPv4とは別に維持されます。 たとえば、「iptables」はIPv4アドレスのファイアウォールルールのみを維持しますが、「ip6tables」と呼ばれるIPv6の対応物があり、IPv6ネットワークアドレスのファイアウォールルールを維持するために使用できます。

VPSがIPv6用に構成されている場合は、IPv4とIPv6の両方のネットワークインターフェイスを適切なツールで保護することを忘れないでください。 IPv6ツールの詳細については、次のガイドを参照してください。LinuxVPSでIPv6を使用するようにツールを構成する方法

開くポートとサービスを決定します

まず、どのサービスを公開したいのかを知りたい。 典型的なウェブホスティングサーバーを使用してみましょう。これはウェブサーバーとメールサーバーであり、SSHサーバーを使用する必要もあります。

まず、SSHポートを開いたままにして、VPSにリモートで接続できるようにします。つまりポート22です。

また、Webトラフィック用にポート80と443(SSLポート)が必要です。 電子メールを送信するために、ポート25(通常のSMTP)と465(安全なSMTP)を開きます。 ユーザーがメールを受信できるようにするために、通常のポート110(POP3)と995(安全なPOP3ポート)を開きます。

さらに、IMAPポートがインストールされている場合は、それを開きます。IMAPの場合は143、SSLを介したIMAPの場合は993です。注:安全なプロトコルのみを許可することをお勧めしますが、これはオプションではない場合があります。メールサービスユーザーに影響を与えて電子メールクライアントを変更することはできません。

最も一般的な攻撃をブロックする

DigitalOcean VPSには通常、空の構成が付属しています。すべてのトラフィックが許可されます。 これを確認するために、ファイアウォールルールをフラッシュすることができます。つまり、すべてを消去します。

iptables -F

次に、いくつかの簡単なファイアウォールルールを追加して、最も一般的な攻撃をブロックし、スクリプトキディからVPSを保護します。 本格的なDDOSなどから保護するためにiptablesだけを当てにすることはできませんが、少なくとも、最終的にVPSを見つけて悪用するセキュリティホールを探し始める通常のネットワークスキャンボットを延期することはできます。 まず、ヌルパケットのブロックから始めます。

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

tcpフラグがNONEのすべての着信パケットを取得し、それらをドロップするようにファイアウォールに指示しました。 ヌルパケットは、簡単に言うと、偵察パケットです。 攻撃パターンはこれらを使用して、VPSをどのように構成したかを確認し、弱点を見つけます。 次に拒否するパターンは、syn-flood攻撃です。

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Syn-Flood Attack は、攻撃者が新しい接続を開きますが、必要なもの(つまり、 SYN、ACK、何でも)。 彼らは私たちのサーバーのリソースを使いたいだけです。 そのようなパッケージは受け付けません。 次に、もう1つの一般的なパターンに移ります。 XMAS パケット、これも偵察パケットです。

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

VPSに脆弱性を見つける通常のパターンの少なくともいくつかを除外しました。

選択したサービスのポートを開く

これで、選択したサービスをファイアウォールフィルターに追加できるようになりました。 最初のそのようなものはローカルホストインターフェースです:

iptables -A INPUT -i lo -j ACCEPT

iptablesに、ローカルホストインターフェイス(-i lo)に到達するトラフィックを着信(INPUT)フィルターテーブルに追加(-A)し、それを受け入れる(-j ACCEPT)ように指示します。 Localhostは、次の目的でよく使用されます。 ローカルにインストールされたデータベースと通信するWebサイトまたは電子メールサーバー。 そうすれば、VPSはデータベースを使用できますが、データベースはインターネットからのエクスプロイトに対して閉鎖されます。

これで、Webサーバートラフィックを許可できます。

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

2つのポート(httpポート80とhttpsポート443)をACCEPTチェーンに追加し、これらのポートへのトラフィックを許可しました。 それでは、ユーザーがSMTPサーバーを使用できるようにしましょう。

iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

前に述べたように、ユーザーに影響を与えることができる場合は、安全なバージョンを使用する必要がありますが、多くの場合、条件を指定できず、クライアントはポート25を使用して接続します。これにより、パスワードを盗聴するのがはるかに簡単になります。 次に、ユーザーがサーバーで電子メールを読み取れるようにします。

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

これらの2つのルールは、POP3トラフィックを許可します。 繰り返しになりますが、安全なバージョンのサービスを使用するだけで、電子メールサーバーのセキュリティを強化できます。 次に、IMAPメールプロトコルも許可する必要があります。

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

SSHアクセスの制限

また、SSHトラフィックを許可して、VPSにリモートで接続できるようにする必要があります。 これを行う簡単な方法は、次のコマンドを使用することです。

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

ここで、iptablesに、ポート22(デフォルトのSSHポート)に着信するtcpトラフィックを受け入れるためのルールを追加するように指示しました。 SSH構成を別のポートに変更することをお勧めします。それに応じて、このファイアウォールフィルターを変更する必要がありますが、SSHの構成はこの記事の一部ではありません。

ただし、ファイアウォール自体を使用して、これについてもう1つ行うことができます。 私たちのオフィスに永続的なIPアドレスがある場合、このソースからのSSHへの接続のみを許可できます。 これにより、私たちの場所の人だけが接続できるようになります。

まず、外部IPアドレスを確認します。 LANからのアドレスでないことを確認してください。そうでない場合、機能しません。 whatismyip.comサイトにアクセスするだけでそれを行うことができます。 それを見つける別の方法は、次のように入力することです。

w

ターミナルで、ログインしていることを確認する必要があります(ログインしているのが私たちだけの場合)、IPアドレスが書き留められています。

出力は次のようになります。

root@iptables# w
 11:42:59 up 60 days, 11:21,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root   pts/0    213.191.xxx.xxx  09:27    0.00s  0.05s  0.00s w

これで、ファイアウォールルールを作成して、SSHポートへのトラフィックが1つのソース(IPアドレス)からのものである場合にのみ許可することができます。

iptables -A INPUT -p tcp -s YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT

もちろん、YOUR_IP_ADDRESSを実際のIPに置き換えてください。

ポート番号を変更することで、必要に応じてファイアウォールでさらに多くのポートを開くことができます。 そうすれば、ファイアウォールは必要なサービスへのアクセスのみを許可します。 今のところ、発信接続を使用できるようにするルールをもう1つ追加する必要があります(つまり、 VPSからpingするか、ソフトウェアアップデートを実行します);

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

これにより、確立された発信接続は、その接続の反対側にあるVPSから応答を受信できるようになります。 すべての設定が完了したら、他のすべてをブロックし、すべての発信接続を許可します。

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

これで、ファイアウォールルールが設定されました。

構成を保存します

すべての構成が完了したので、ルールをリストして、不足しているものがないかどうかを確認できます。

iptables -L -n

ここでの-nスイッチは、ドメイン名ではなく、IPアドレスのみが必要なためです。 つまり。 次のようなルールにIPがある場合:69.55.48.33:ファイアウォールはそれを調べて、それがdigitalocean.comIPであることを確認します。 それは必要ありません。アドレス自体だけです。 これで、最終的にファイアウォール構成を保存できます。

iptables-save | sudo tee /etc/sysconfig/iptables

CentOSのiptables構成ファイルは、 / etc / sysconfig /iptablesにあります。 上記のコマンドは、作成したルールをそのファイルに保存しました。 すべてが機能することを確認するために、ファイアウォールを再起動できます。

service iptables restart

保存されたルールは、VPSが再起動されても保持されます。

フラッシュして自分のロックを解除します

構成で事故が発生した場合は、VPSへのアクセスがブロックされている可能性があります。 ファイアウォールがワークステーションからの接続を許可しないように、間違ったIPアドレスを入力した可能性があります。 今ではそれらのルールに到達できず、それらを保存した場合、再起動しても役に立ちません。 幸い、DO Webインターフェイスを使用すると、コンソールを介してサーバーに接続できます。

接続したら、rootとしてログインし、次のコマンドを発行します。

iptables -F

これによりフィルターがフラッシュされ、VPSに再びアクセスできるようになります。

結論

この記事は網羅的なものではなく、Linuxマシンで単純なファイアウォールを実行することのほんの一部にすぎません。 これは、Linuxコマンドラインやiptablesに精通していない開発者向けの一般的なWebおよび電子メールサーバーのシナリオには十分です。

ただし、さらに多くのことができます。 より堅牢な構成を提供するのに役立つ、優れたチュートリアルとサンプルがインターネット上にあります。 実稼働環境では、より詳細な構成を作成するか、セキュリティの専門家に構成を準備してもらうことをお勧めします。

うまくいけば、短い手順で新しいVPSに基本的なセキュリティが提供されます。