特定のIPアドレスがiptablesのdportにアクセスできるようにする方法は?例:2つのクライアントがあり、最初のクライアントのIPアドレスは182.3.3.1、2番目のクライアントのIPアドレスは202.4.5.6、ポートは2222です。私が望むのは、このIPアドレスだけがポート2222にアクセスできることです。
私はこの規則を書いた:
iptables -A INPUT -p tcp ! -s 182.3.3.1 --dport 2222 -j REJECT
iptables -A INPUT -p tcp ! -s 202.4.5.6 --dport 2222 -j REJECT
問題は、1つのアドレスにのみアクセスでき、他のアドレスはブロックされることです。何が問題なの?
答え1
iptablesがルールを処理する方法は、パケットをキャッチして上から下に一連のルールと一致しようとすることです。ルールが一致した場合は実行し、追加の処理を中止します(ターゲットが異なるチェーン、LOG、RETURNなどの特別な場合は除く)。
各チェーンには、ルールと一致しないパケットに発生するデフォルトポリシー(デフォルトでは受け入れ)もあります。
次の2つの規則がある場合:
iptables -A INPUT -p tcp ! -s 182.3.3.1 --dport 2222 -j REJECT
iptables -A INPUT -p tcp ! -s 202.4.5.6 --dport 2222 -j REJECT
IP 182.3.3.1からアクセスすると、最初のルールが一致して適用されます(何もしません。ルールはACCEPTと思われるチェーンDEFAULTポリシーによって処理されます)。 2番目の場合、IPが202.4.5.6の場合、最初のルールも一致して適用されます(アクセス拒否)。
おそらくあなたが望むものは次のとおりです(システムにこれらのルールを入力しないでください。そうしないと、あなた自身がロックされます!):
iptables -P DROP INPUT # Changes the INPUT Chain default policy to DROP
iptables -A INPUT -p tcp -s 182.3.3.1 --dport 2222 -j ACCEPT # Allows the access of IP 182.3.3.1
iptables -A INPUT -p tcp -s 202.4.5.6 --dport 2222 -j ACCEPT # Allows the access of IP 202.4.5.6
これらのルールを使用すると、他のサービスへのアクセスを許可するためにルールセットを更新する必要があることを理解してください(たとえば、SSHやサーバーの他のサービスへのアクセスを許可するため、サーバーから自分自身をロックしないことをお勧めします)。 。