ローカルネットワーク以外のすべての着信要求をブロックします

ローカルネットワーク以外のすべての着信要求をブロックします

パブリック IP アドレスを使用して Ubuntu 22.04.1 LTS サーバーを起動した専用サーバーがあります。特定の IP アドレスのみが通過できるように SSH ポートをロックダウンしたいと考えています。

私は仕事用の IP アドレスを 3 つ持っており、サーバー上に IP 範囲を指定してネットワークを設定しました。

これらの IP アドレスのみがサーバーにログインできるようにするにはどうすればよいでしょうか?

別の投稿でこれを見つけました:

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j REJECT

これを各 IP アドレスに対して実行した場合、機能しますか、それとも複雑になりますか?

また、これで十分でしょうか? 他のポートもロックダウンする必要がありますか? これは postgresql のみを含む新規インストールです。Ubuntu と postgresql についてさらに詳しく学習しようとしていますが、サーバーがターゲットにされたくありません。

ご意見ありがとうございます!

答え1

単一ポートに焦点を絞るアプローチから完全な「防御」姿勢に調整することをお勧めします。IPをホワイトリストに登録し、他のすべての接続試行を拒否します。これは、環境内のほぼすべてのポートに適用されます。そうしないと、ブラックリストに登録する必要があります。サービススキャンを行う既知のIPなので、そのリストは非常に長くなります。サービススキャナは、ポートなので、まず第一に「信頼の拒否」アプローチを採用する必要があります。Web サーバー (HTTP/HTTPS のポート 80、443 は、公開サイトの場合は特定の IP よりも広いアクセスが必要になる場合があります) もスキャンされますが、Web サーバーとコンテンツを適切に強化することで「保護」できます。ただし、全てポートはサービススキャナによってスキャンされ、全てインターネットに接続されたデバイスはスキャンの対象となるため、最初はすべてを拒否する方がよい方法です。

したがって、「信頼の拒否」に対する最も効果的なアプローチは、特定の IP がポートとマシン上の他のすべてのサービスに接続することを許可し、他のすべての接続の試行を拒否することです。また、localhost が自分自身と通信することも許可しますが、これは問題ありません。

他のポートを開く前に、ホワイトリストを使用してすべてを保護することから始めます。さらにサービスが必要な場合は、どこからでも HTTP トラフィックに対して追加の ALLOW ルールを設定できます。

# Allow localhost traffic
iptables -A INPUT -i lo -j ACCEPT

# INVALID type packets should be DROPped regardless of source.
iptables -A INPUT -m state --state INVALID -j DROP

# Allow traffic for related/established connections already running
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow all new connections/traffic from the local subnet you're on 
# (10.20.30.0/24 is used in example)
iptables -A INPUT -m state --state NEW -s 10.20.30.0/24 -j ACCEPT

# Whitelist your IPs - repeat this step for each of your IPs permitted
# to access the machine outside of local network
iptables -A INPUT -s IPADDRESS -m state --state NEW -j ACCEPT

# If you have other services you want to configure for *public* access, then
# use this rule as a template and execute this before you follow the last step.
#
# Change PROTO to the protocol (tcp/udp, etc.) and PORT to the port number 
# (80 for HTTP, ex.)
#
# Add this to the end of the rule if you want to allow only certain 
# IPs to the specified service:
#   -s IPADDRESS 
iptables -A INPUT -p PROTO --dport PORT -m state --state NEW -j ACCEPT

# Deny all other traffic
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable

これは、約 15 年間のサーバー経験と、ネットワーク セキュリティのトレーニング、そして IT セキュリティ プロフェッショナルとしての知識に基づいています。

関連情報