web-dev-qa-db-ja.com

gitユーザーを除き、sshをローカルネットワークに制限します

GitlabとOpenVPNを使用してUbuntu 12.04サーバーをセットアップし、GitおよびVPNサーバーとして機能させています.

現在、ファイアウォールでポート1194を開いて、OpenVPN用に開き、ユーザーがrsa証明書とgoogle認証キーで認証できるようにしています。

SSHをWANに完全に公開したくないので、SSHトラフィック用にファイアウォールをまだ開いていません。ただし、vpnに接続せずにプッシュおよびプルできる必要があります。

管理者がLANからサーバーにアクセスできるようにしながら、制限されたgitユーザーに対してのみWANへのsshアクセスを開くにはどうすればよいですか?

Sshd_configファイルで一致グループを使用する方向で何かを探す必要があると思います。この質問に見られるように: " OpenSSHのユーザーごとの認証方法を設定するにはどうすればよいですか? "、誰かがこれを経験したことがありますか?


編集:

私は当初、access.confを使用してログインアクセスを制限するという答えを受け入れました。しかし、後の回答は、matchディレクティブまたはusername @ hostaddress構文を使用して、sshd.confで同じことが達成できることを示しています。

最初は、これをsshdに入れる方が直感的であると思いました。他の管理者にとっては、おそらくメンテナンスと理解が容易になるでしょう。 sshd.confよりもaccess.confを使用することの大きな利点はありますか?

ここに記載されているオプションの範囲を、どれほど直感的であるかについて説明すると、次のようになります。1。sshd.conf 2. access.conf 3. IpTables

同意しますか?

5
Trygve

AllowGroupsAllowUsersDenyGroups、およびDenyUsersディレクティブを使用して、ユーザーがログインを許可される場所を制御できます。 sshd_configにあります。それらはDenyUsersAllowUsersDenyGroupsAllowGroupsの順序で処理されます。 AllowUsersホストとユーザー名を含めることができます。他の人は名前だけを許可していると思います。

あなたのことを言いましょう

  • LANは192.168.1.0/24です
  • gitユーザーの名前はgit
  • 管理者ユーザーはアリスとボブという名前です

Sshd_configであなたは言うでしょう

AllowUsers [email protected]/24 [email protected]/24 git

または、Matchディレクティブを使用してこれを行うこともできます。 matchディレクティブを使用すると、ユーザーが接続しているアドレスなどの条件に基づいてsshdの動作を変更できます。

sshd_configのグローバル部分では、

AllowUsers git

ファイルの最後に、LANのこれをオーバーライドします。

Match Address 192.168.1.0/24
    AllowUsers alice bob git
4
sciurus

あなたが探しています pam_access、これを使用すると、ローカルネットワークからのすべてのユーザーとどこからでもgitユーザーの認証を受け入れるようにsshdを構成できます。

何かのようなもの:

+ : ALL : 10. crond :0 tty1 tty2 tty3 tty4 tty5 tty6
+ : git : ALL
- : ALL : ALL

access.confでトリックを行う必要があります

5

Sshd_configファイルを使用して、iptablesやtcpwrappersを使用できるだけでなく、ユーザー/ホストおよびネットワークごとにアクセスを制御できます。この場合、iptablesに加えて、tcpwrappersを使用してアクセスを制御することをお勧めします。 iptablesの使用:

Iptablesの-sオプションを使用します。 nnn.nnn.nnn.nnnの形式のIPまたはマスク付きのIP(nnn.nnn.nnn.nnn/nnn.nnn.nnn.nnnまたはnnn.nnn.nnn.nnn/nn)を受け入れます。したがって、たとえばnnn.nnn.nnn。*からの接続を許可するには、次のように記述できます。

iptables -A INPUT -s nnn.nnn.nnn.0/255.255.255.0 -i em1 -p tcp --dport XXXXX -m state --state NEW,ESTABLISHED -j ACCEPT

または

iptables -A INPUT -s nnn.nnn.nnn.0/24 -i em1 -p tcp --dport XXXXX -m state --state

ネットマスクを作成できない場合は、サーバーへの接続を許可するIPアドレスごとにルールを複製する必要があります。

Tcpラッパーを使用して、/ etc/hosts.allowを開き、アクセスを許可します。

sshd: 192.168.0.0/255.255.255.0 1.2.3.4

その上で、LANと単一のWAN IP、この場合は1.2.3.4)が許可され、他のすべてのホストへのアクセスを拒否できます。

アクセスを拒否するには:

テキストエディタでファイル/etc/hosts.denyを開きます。システムへのアクセスを許可されていないホスト/ IPのこのファイルリスト。すべてのsshを拒否するには:

sshd: ALL

詳細については、RedHatのWebサイトで次の TCP Wrapperのリファレンス を参照してください。

私の推奨は、サーバーをより安全にするために複数のセキュリティ層を使用することであり、当然のことながら、sshにはパスワード付きのキーベース認証を使用する必要があります。

3
Zeeshan

pam_accessをオプションにすることもできますが、私はsshとコンソールの両方のアクセスを制限する必要がある場合にのみ使用します

Sshの場合、次の構成行が機能するはずです。

AllowUsers git *@localhost
1
Shâu Shắc

iptablesでボックスをロックダウンするのは非常に簡単です..... ssh mgmtの単一のIPを除いて、トラフィックをドロップするだけで、ローカルLANがtcp/80(httpの場合)に達する可能性がある場合

iptables -F
iptables -A INPUT -P tcp -p 22 -s [your-ip-address]/32 -j ACCEPT
iptables -A INPUT -P tcp -p 80 -s [your-local-network-addr]/[your-local-netmask] -j ACCEPT
iptables -A INPUT -j DROP

内部ネットワークアドレス/内部ネットマスクが何であるかは明確ではありませんが、内部LANが/ 16で、ネットワークアドレスが192.168.0.0の場合、これにより、RFC以外のプライベートIPアドレスがポート80にアクセスできる可能性があります(この設定は、直接着信IPトラフィックのある境界デバイス上にあります)。

より複雑で特定のiptablesルールを設定することは可能であり、またそうすべきですが、最低限、これは機能するはずです。

0
nandoP