iptables:特定のIPを許可し、他のすべての接続をブロックします


26

特定のIPを許可し、iptablesの他のすべての接続をブロックするにはどうすればよいですか?


以下のようジルが示す概念はこのように書きます:ソースIPまたは他の資格で、その後、拒否するようにデフォルトポリシーを設定するかどうかを許可する各特定のもののためのルールをACCEPTに追加します。
カレブ

回答:


27

かなり前にデスクトップユーザー向けの基本的なIptablesルールに関するブログ記事を書いたので、おそらく読んでおくべきでしょう。また、ステートフルファイアウォールの設計に関するリンク記事もあります。ただし、カーネル2.6.39より前(ipset10を超えるホワイトリスト(10は任意)がある場合は、IPをホワイトリストに含めるために使用することもできます)。

最初に、受け入れまたはドロップすることがわかっている状態、およびインターフェイスを処理します。

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

状態なしで、IPのみによる許可を行いたい場合

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

ただし、これを行うと問題が発生する可能性が高いため、状態を使用して生活を楽にすることをお勧めします。例えば、許可しない-i lo-o lo、確かに、特定のアプリケーションで問題が発生します。


4
DROPではなく、不要なパケットを拒否する必要があります。これにより、問題の診断がはるかに簡単になり、タイムアウトが防止されます。ICMPエラーでIPパケットを拒否する、または単にドロップするを
ジル「SO-悪であるのをやめる」14年

両方のセットアップを試しましたが、KeePass2が起動しません。また、iptables -Fすべてのルールをクリアすることになっている場合、ubuntu.comにpingすることもできません
Pawel Cioch

@PawelCiochなぜKeePass2にインターネット接続が必要なのですか?
アレックス

@AlexはDBファイルをリモートの場所に保存しますが、これには単一のIPが必要です。しかし、私はすべてを把握、セットアップはより複雑になっているここでの例
パヴェルCioch

10

着信接続のみをブロックする(テストされていない!)例です。192.168.3.x、ICMP、またはSSHポートからのループバックインターフェイスを介した接続が許可されます。他のすべての接続は拒否されます。

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT

@GillesがRELATEDおよびESTABLISHED状態を適切に使用するには、最初のパケットを新しい状態として一致させる必要があります。 lo上記の例では、状態の一致から除外され、常に許可されています。
ペンギン359

@ penguin359:NEWが必要な理由について詳しく説明してください。私はiptablesの専門家とはほど遠いです。これらのルールの一部は自宅のルーターからコピーしましたが、NEWでは一致しません。私の知る限り、最初のルールの後に残っているのは、とにかく新しい(または未追跡の)パケットだけです。(私はあまりにも遠くマークオフだとした場合、あなたは答えとして説明してあなたのバージョンを投稿し、コメントで説明することはできませんし、私は私を削除します。)
ジル「SO-停止ビーイングの悪」

@Gilles何かを受け入れる前に、常に無効な状態を削除します...無効、関連、確立されていないものはすべて、新しい状態でなければなりません。しかし、他のすべてがNEWを指定しなければならない理由はわかりません。ただし理論的には、INVALIDを処理せず、NEWを指定しないと、INVALIDを受け入れることになります。しかし、INVALIDが処理されると、すべてのルールでNEW状態を確認するには、パケットの処理がさらに必要になるだけのように思えます。
-xenoterracide

@Gillesは、拒否のデフォルトポリシーも悪いです。受信したすべてのパケットに対して拒否パケットを送信するため、これはDOS攻撃を悪化させます。
xenoterracide

@xenoterracide:良い点。REJECTを使用する必要がありますか?私は尋ねました:ICMPエラーでIPパケットを拒否するか、単にドロップしますか?
ジル 'SO-悪である停止

7

以下のルールは、IPのみを許可し、ポート22またはsshを介して他のすべてのIPをブロックします。切断する前に新しい端末でテストしてください。

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
簡潔な答えをありがとう。いくつかのIPとIP範囲を許可したい場合、これはどのように変わりますか。代わりにyourIPaddress、私はいくつかのIPアドレスと範囲を追加することができますか?また、2888のような非標準ポートでSSHを使用している場合、コマンドは22例のを2288?に変更します。また、これは許可されたものを除くすべてのIPからこのサーバーへのrsync、sftpなどもブロックしますか?
PKHunter

1
ここで-p tcp重要なのは、--dportそれなしでは機能しないためです。また、ポートを閉じたポートと同一にし、そのポート宛てのパケットをブラックホールにするため、-j REJECT代わりに使用することをお勧めします。実際には、リモートの攻撃者は、実際に閉じられているポートから構成済みのポートを検出できます。DROPREJECTDROPDROP
ミッコランタライネン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.