
アップデート:
試してみましたがsudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4,11.22.33.44 -j DROP
、動作せず、エラーが発生します
iptables v1.8.2 (nf_tables): ! 複数の送信元または宛先 IP アドレスは使用できません
たとえば、私の目標は、許可のみを許可し1.2.3.4
、11.22.33.44
サーバーの ssh (ポート 22) に接続することです。
そして、私は他のアプローチ/コマンドよりもこのアプローチ/コマンドを好みます。
sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4 -j DROP
11.22.33.44
しかし、このコマンドで別の許可されたIPを追加する方法がわかりません。
少しだけ助けやヒントをいただけませんか?
ありがとう。
答え1
定義複数のみを使用するアドレス1つ iptables
コマンドの使用は! --source
不可能です。
アドレスは、ネットワーク名、ホスト名 (ホスト名を使用するのはおそらくあまり良い考えではありません)、ネットワーク IP アドレス (/mask 付き)、または単純な IP アドレスのいずれかになります。マスクは、ネットワーク マスクまたは単純な数字のいずれかになります。
デフォルトのルールセットを許可から削除に変更することを検討できます。これにより、許可する必要があるものだけに基づいて定義できるようになります。つまり、次のようになります。
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
... your other rules goes here ...
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -s 1.2.3.4,11.22.33.44 -j ACCEPT
iptables -P INPUT DROP
利点/美点は、パッケージの状態が考慮されるため、このようなルール セットのパフォーマンスがはるかに高くなることです。さらに、必要な構文を使用できます。さらに、ファイアウォール ルールを定義するための推奨される方法でもあります。
ただし、上記のような構文を使用する場合、-s 1.2.3.4,11.22.33.44
コマンドを使用するとわかるように、依然として 2 つの個別のテーブル エントリが作成されることに注意してくださいiptables -L INPUT
。また、iptables のすべてのバージョンで機能するわけではありません。さらに、個人的には読みにくく、保守も難しいと感じています。そのため、私はこれを避け、2 つの個別のコマンドを使用するようにしています。
ルールの数を最小限に抑えたい場合は、最も近い方法を使用することをお勧めします。1つ iptables
--match
代わりにを使用するルール--source
。ただし、追加のコマンドを使用して一致を定義する必要があります。これがどのように機能するかは、ipset を扱った他のコメントで完全に説明されています。
答え2
あなたはIP設定。
ディストリビューションによっては、ipset
最初にユーティリティをインストールする必要がある場合があります。
#(For Debian and Debian-derived distros)
sudo apt install ipset-persistent
次に、わかりやすい名前でセットを作成します。
sudo ipset create ssh_friends iphash
セットを作成したら、それに IP を追加できます。
sudo ipset add ssh_friends 1.2.3.4
sudo ipset add ssh_friends 11.22.33.44
iptables
これで、個々の IP ではなく、ルールで作成したセットを使用できるようになります。
sudo iptables -A INPUT -p tcp --destination-port 22 -m set ! --match-set ssh_friends src -j DROP