パブリック 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 セキュリティ プロフェッショナルとしての知識に基づいています。