web-dev-qa-db-ja.com

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

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

27
David

私は デスクトップユーザーのための基本的なIptablesルールに関するブログ投稿 をかなり前に書いたので、おそらくそれを読むべきであり、リンクされた ステートフルファイアウォールの設計 に関する記事を読んでください。しかし、カーネル2.6.39より前(ipsetを含み、ホワイトリストに10を超える場合(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は確かに特定のアプリケーションで問題を引き起こします。

29
xenoterracide

incoming接続のみをブロックする(テストされていない!)例を次に示します。ループバックインターフェイスを介した、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

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

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

以下は完全に機能する例です。
また、アプリケーションを機能させます(re:keepassが起動しないという私のコメント)

https://github.com/skironDotNet/linux-allow-only-single-ip

0
Pawel Cioch