Ubuntuで3つを除くすべてのポートをブロックするにはどうすればよいですか?


22

1962、999、12020を除くすべてのポートをブロックするにはどうすればよいですか?

SSH用の1つのポートと、ある種のスクリプト用の2つのポート。だから、これらのポートでの発信を許可する必要がありますよね?

私のiptables:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

申し訳ありませんが、このようなことになると私は本物の初心者であり、サーバーをより安全にしたいだけです。


UFWを使用しないのはなぜですか?
ソビエロ

回答:


25

最初は、常に定義済みのものを確認するためにフラッシュする必要があります...何も

iptables -F

次に、最後に到達し、一致するルールがない場合、INPUTチェーンのデフォルトポリシーをDROPに設定します。

iptables -P INPUT DROP

ループバックが影響を受けないようにするには、追加する必要があります

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

lo-ifのすべてのトラフィックと、確立した接続のすべての着信トラフィックを許可します。それはあなたがあなたのサービスのために必要なすべてのルールを追加した後、(あなたがそれを必要とする場合、あなたが出ている他のオープンsshをすることを忘れないでください!)

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

自分や他の人が誤ってセキュリティに穴を開けないようにするためのちょっとしたトリック:

iptables -A INPUT -j DROP

この行はINPUTチェーンのすべてに一致し、ポリシーは何も取得しません。これの利点は、ルールセットを初期化した後、ACCEPT-ruleを追加しても、すべてが削除されるためチェックされないことです。そのため、すべてを1か所に保管する必要があります。

あなたの質問については、要約すると全体は次のようになります。

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP

1
明確にするために:-Pチェーンにポリシーを設定します。実際にはルールを追加するわけではありません。チェーンのポリシーは、チェーンの終わりに達した場合にパケットで実行されるアクションを示します。そのため、ポリシーを設定する前にルールを追加するのが賢明DROPです。
ベルミンフェルナンデス

正しく覚えていれば、通常はポリシーをどこに設定してもかまいません。おそらく、答えを少し編集する必要があります。
モス

3
注:sshを介してファイアウォールを設定するときは、デフォルトポリシーの拒否とフラッシュを非常に慎重に設定してください。ロックアウトします。はい、これを行いました。:-)今、私は通常、iptables -A INPUT -j DROP代わりに最後のルールを作成します。その理由からです。
Sirex

私はsshの警告を少し強調しました;-)
Mose

@Mose:一般的には関係ないことを修正します。私はそれを強調しようとしていました。しかし、それはあなたが既に言及されているようにロックアウトされる可能性があります。
ベルミンフェルナンデス

20

ちょうどあなたのような初心者からの返信:-)私もUbuntuサーバーをセキュリティで保護する必要がありました。iptablesを学ぶのは苦労しました。UFW(Uncomplicated Firewall)は、ファイアウォールの設定をできるだけ簡単にするプログラムです。

  • ufwをインストールします。

    sudo apt-get install ufw
    
  • すぐに無効にします(自分のSSHログインからロックアウトされたため、レスキューブートする必要がありました)。

    sudo ufw disable
    
  • デフォルトのルールとして「拒否」を設定します(これによりすべてのポートがブロックされます)。

    sudo ufw default deny
    
  • 必要なポートを許可します。

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • 上記のルールでssh接続が切断されないことが確実な場合は、ufwを有効にします。

    sudo ufw enable
    

ドキュメントはよく書かれており、より多くの例を提供しています:https : //help.ubuntu.com/community/UFW


1
ファイアウォール構成を使用する場合、ファイアウォールを再度無効にするcronジョブを作成することをお勧めします。ロックアウトされた場合に備えて。
ピムキン14

これは以下のようにエラーを投げ、0.35 UFWと仕事をしないことに注意してくださいERROR: Bad destination addressERROR: Bad source address
デイブ

そして、特定のインターフェイスの1つのポートを除くすべてのポートを許可するにはどうすればよいですか?デフォルトの拒否ルールを使用していますが、VPNの使用時にDNSリークを防ぐために、イーサネットインターフェイスのDNSポート53をブロックします。現在、プライベートIP範囲に使用するすべてのポートを許可する必要がありますが、これはあまり便利ではありません。
-baptx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.