管理しているサーバーがあります。ポート22から多くのマシンにアクセスできます。一部のユーザーの要塞ホストとして使用したいと思います。欠点は、サーバー上の各ユーザーに、SSHで接続できるIP /アドレスの独自のホワイトリストを持たせたいということです。
たとえば、私のマシンMがサーバーS1、S2、S3、... S8にアクセスできるとします。マシンMにA、B、Cの3人のユーザーがいます。AがS2にのみSSHで接続できるようにし、BがS1、S5、S6にのみSSHで接続できるようにし、CがS2にSSHで接続できるようにします。 、S3、S4、S5およびS8。
どうすればこれを達成できますか?
宛先サーバーでは、/ etc/ssh/sshd_configファイルでユーザー名によってSSHアクセスを制限できますが、ここで探しているものではないと思います。
ソースマシンでは、iptablesの「owner」モジュールを使用してこれを行うことができます。メンテナンス作業かもしれませんが、うまくいくでしょう。ユーザーのUIDをチェックし、接続を許可(または拒否)します。
ユーザーのUIDが1、2、3であるとします。ユーザーAは1.1.1.1に、ユーザーBは2.2.2.2に、ユーザーCは3.3.3.3にSSHで接続できます。
iptables -A OUTPUT -m owner --owner-uid 1 -d 1.1.1.1/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 1 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -m owner --owner-uid 2 -d 2.2.2.2/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 2 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -m owner --owner-uid 3 -d 3.3.3.3/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 3 -p tcp --dport 22 -j DROP
それをもう少し「管理しやすい」状態に保つために、ユーザーごとに「チェーン」を作成し、そこで許可されるすべてのアクセスを定義することができます。
チェーンを作成します。
iptables -N USER1
iptables -N USER2
iptables -N USER2
ユーザーからの発信トラフィックをチェーンに転送します。
iptables -A output -m owner --owner-uid 1 -J USER1
iptables -A output -m owner --owner-uid 2 -J USER2
iptables -A output -m owner --owner-uid 3 -J USER3
各ユーザーにチェーンのルールを追加します。
iptables -A USER1 -d 1.1.1.1/32 -p tcp --dport 22 -m comment --comment "allow ssh to 1.1.1.1" -j ACCEPT
iptables -A USER1 -p tcp --dport 22 -j DROP
iptables -A USER1 -j ACCEPT
iptables -A USER2 -d 2.2.2.2/32 -p tcp --dport 22 -j ACCEPT
iptables -A USER2 -p tcp --dport 22 -j DROP
iptables -A USER3 -d 3.3.3.3/32 -p tcp --dport 22 -j ACCEPT
iptables -A USER3 -p tcp --dport 22 -j DROP
ユーザーのアクセスを確認する(ディスプレイチェーン)
iptables -L USER1
所有者モジュールは、gidでも機能します。
iptables -A USER3 -m owner --owner-gid 3 -p tcp --dport 22 -j DROP
ユーザーごとのネットワークアクセスを制限するiptableフィルター(所有者の一致)を使用して、これを実現できるはずです。以下の「ハウツー」を参照してください。
http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.html