web-dev-qa-db-ja.com

攻撃から保護するための安全なiptables構成のヒント。 (クライアント側!)

独自の例:

###############
# KERNEL PARAMETER CONFIGURATION

# PREVENT YOU SYSTEM FROM ANSWERING ICMP ECHO REQUESTS
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward

###############
# INPUT

# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j DROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j DROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW OUTGOING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j DROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP

クライアントを攻撃から保護するために、より優れたiptables関連のアイデアを収集できますか?例:Ubuntu 11.04デスクトップPCの「攻撃からの防御」〜種類のルール。

ありがとうございました!

pS:もちろん:

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

p.s.2:IPv4とIPv6の両方で!

p.s.3:次のようなルールは必要ありません:UDPとTCPをポート53アウトバウンドでのみ許可します。たとえば、ポートスキャン、攻撃などのルールを「防御」するだけです。

p.s.4:PCがルーター/ NATの背後にあるか、「インターネットに直接」接続されている。

16
LanceBaynes

私はさまざまな意見があることに気づきますが、ネットワーキングとセキュリティについて本当に知っている人々の1つの主要な態度は、これらのiptables/sysctlルールのほとんどが冗長であり、あなたとネットワークに損害を与えないことです。何人かは、理由もなく標準的な振る舞いを破ると積極的に批判するでしょう。いくつかの例:

  • 標準のTCP/IPの動作はREJECTであり、ピアは何が行われているのかについてヒントを得ます。誰かがURLを間違って入力したか、管理者がホストを数えているか、誰かがゲームサーバーに接続したいが間違ったポートを入力した可能性があります。 DROPを使用すると、不明瞭で煩わしいタイムアウトのみが発生します。

  • 無効なパケットや不正なパケットをドロップする必要はありません。これらの攻撃はすべて10年前のものです。 Linuxカーネル開発者は、どの種類のパケットが有効でどのパケットが有効でないかについて、あなたよりもはるかに最新です。 「将来の欠陥についてはどうですか」と主張する人もいます。さて、将来の欠陥がTCPハンドラにあり、iptables TCPパーサにあるのではなく、

  • ほとんどのsysctl設定がデフォルトです。そうでない場合、通常は理由があります。たとえば、リダイレクトの送信を無効にするのはなぜですか?ピアが自動的に反応しない( "accept_redirects"、default = 0)場合でも、ルーティングが悪いことを通知されると非常に便利です。

  • Log_martiansやその他のロギングルールを使用して、/ var/logにも割り当てがあることを願っています。そうしないと、リモートでディスクをいっぱいにして、通常はサービス/アプリを強制終了するのがとても楽しいでしょう。また、ロギングにはレート制限を使用する必要があります。そうしないと、誰かが割り当てを埋めて、auth.logなどでSSHパスワードのブルートフォースの試行が表示されないようにする可能性があります。これらのログをデスクトップで実際に読んでいますか?ログチェックをお勧めします。

  • ICMPをブロックしているようです。前述のDHCPの問題とは別に、これによりPMTUの検出も妨げられます。 PMTUDがないと、DSL接続やその他のネットワーク設定がある場所でシステムを使用すると、奇妙な動作が発生します。一部のパケットは破棄されるだけで、その理由は誰にもわかりません。

  • 発信パケットのフィルタリングは、あいまいです。自分を信用しませんか?通常、信頼できないプログラムは実行しないでください。一般的なオペレーティングシステムでは、これらのプログラムを盗聴から隔離したり、他のプログラムのデータを操作したりすることはほとんどできません(キャッシュタイミング攻撃など)。

  • 新しいパケットにSYNが必要です。 TCP接続がiptablesのそれぞれの状態がすでにタイムアウトした後に継続される場合、これは壊れます。デフォルトのタイムアウトが何かはわかりませんが、一部のnetfilterの人が警告しました。

では、デスクトップにファイアウォールを設置する必要があるのはいつですか。

  • 現在のOSまたはサーバーが脆弱であるというニュースに特定の攻撃があり、推奨される迅速な修正の1つがファイアウォールルールである場合。

  • 安全な構成を許可しない特定のサービスを実行する必要があります。ほとんどは機能しますが、残りは安全な代替手段に置き換えるのが最善です。

  • デスクトップ上に複数のVMやインターフェイスを持つ、より複雑なネットワークがあります。

ネットワークセキュリティのための最も重要なツールは、システムアップデートです。次に、netstatとnmapがあります。これらは、実行しているサービスを見つけて確認するために使用する必要があります。次に、不要なものを無効にするか、127.0.0.1に制限します。

ここまで読んだ場合のボーナス:パケットはESTABLISHED、RELATED、またはNEWのいずれかで、それ以外はすべてドロップされます。 SYNのみが設定されている場合を除き、NEWもドロップします。 ESTABLISHED、RELATEDはフラグをチェックするように見えるため、これにより、すべての--tcp-flagsルールと-fルールが冗長になります。 OUTPUTについても同じですが、いずれにせよOUTPUTに対してACCEPTされるパケットはないので、それはおそらく問題ではありません。

22
pepe

信頼できるネットワーク内のデバイスとDMZ内のデバイスで同じルールセットのこれらの部分を作成する場合は注意が必要です。そこで定義したルールを使用することで、IPが使用中であるかどうかを尋ねる(ICMPエコー)DHCPサーバーに応答することはありません。これにより、アドレスの重複が発生する可能性があります。

各シナリオに適用する2つの異なるルールセットを作成します。上記のようなものはDMZマシンの良いベースラインですが、一般的なLANでいくつかの課題を作成します。

また、ログをマーティアン、アウトバウンドドロップ、インバウンドドロップ接続などに追加することをお勧めします。これはトラブルシューティングに不可欠であり、SIEMが食べるのに役立つデータになる可能性があります。

6
Ori

Pppを介してインターネットに直接接続されているクライアントPCの場合、次のルールセットが適切なスタートです。

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
ip6tables -A INPUT -j REJECT
  1. 内部ローカルインターフェイス上のすべてを許可します。
  2. 送信するパケットに対する回答であるすべてのパケットを許可します。これには、TCP接続内のパケット、小さなDNSクエリなどのUDPパケットへの応答が含まれます。古いスタイルの暗号化されていないFTPプロトコルの場合、ip_conntrack_ftpがロードされていると仮定して、データ接続が含まれます。
  3. 外部からtcp接続を開こうとするすべての試行を拒否する
  4. すべての初期(非応答)udpパケットを拒否します。

または、最後の2つのルールで-j DROPを使用できます。このトピックの説明については、 ICMPエラーでIPパケットを拒否するか、単にドロップするか? を参照してください。

5

だからあなたの質問を詳しく説明するために私が実行しているものをここに示します(私はIPCHAINSがそれらすべての年前に死んだので、私はコメントがネットフッターに引き継がれていないので、私はあなたの例をメモと共に使用します)

これは内部システムで機能する可能性がありますが、考慮されていない新しいアプリケーションのiptablesの構成に時間を費やすことがよくあります。 SSHルールも削除しましたが、これはかなり標準的なルールです(多くの構成では、入力を許可するために表示されるルールは1つだけです)。

###############
# VARIABLE DEFINITIONS
IPTABLES=/sbin/iptables

#Your DHCP Server for input of ICMP packets
DHCPSERVER=127.0.0.1
PUBIF=eth0

# KERNEL PARAMETER CONFIGURATION
#
# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#
# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#
# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
#
# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#
# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#
# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward
###############
$IPTABLES -F
###############
# LOGDROPPER
$IPTABLES -N LOGNDROP > /dev/null 2> /dev/null 
$IPTABLES -F LOGNDROP 
$IPTABLES -A LOGNDROP -j LOG --log-prefix "LOGNDROP: " 
$IPTABLES -A LOGNDROP -j DROP

###############
# LO allowance
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

###############
# Only bring what you need to survive
$IPTABLES -A INPUT -p icmp -s $DHCPSERVER -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p tcp --sport 68 --dport 67 -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p udp --sport 68 --dport 67 -j ACCEPT
###############
# INPUT
#
# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j LOGNDROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOGNDROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j LOGNDROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j LOGNDROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j LOGNDROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -j LOGNDROP
$IPTABLES -A FORWARD -j LOGNDROP

ネットワークが騒々しい場合、または多くのことが起こっている場合、これはすぐにログボリュームをいっぱいにします。しかし、私は偏執的であり、不必要にうるさい設定を作成している場合は、人々のチョップをバストアップします。

4
Ori