不良パケットをブロックする方法は? [閉鎖]

不良パケットをブロックする方法は? [閉鎖]

不良パケットをブロックしたい。 CSFを使用してcsfpost.shに追加しましたが...この問題を回避したい(フラグ:SYN ECN CWR)。

さて、これは私のルールです。

#!/bin/bash
# Drop Various Attacks
iptables -A INPUT -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A OUTPUT -p udp -j DROP
ip6tables -A OUTPUT -p udp -j DROP
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ECN,CWR -j DROP

# Prevent source address 127.0.0.1 from sending data through various interfaces
iptables -A INPUT -p all -s localhost -i wlan0 -j DROP
iptables -A INPUT -p all -s localhost -i eth0 -j DROP

# Drop Fragments
iptables -A INPUT -f -j DROP

# Drop ICMP (Ping) Packets
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP

# Do not respond to pings
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP

# Drop Invalid Packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

# Drop LAND (Local Area Network Denial) Packets
# In this attack, a packet is spoofed to make the source address appear as the IP-address of the target.  In other words, the source and destination IP-addresses are the same.
iptables -A INPUT -s 127.0.0.0/8 -j DROP

# Drop Null Packets
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Drop excessive RST Packets to avoid Smurf-Attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

## Drop Smurf-Attacks
# Smurf-Attacks send a large number of ICMP "echo broadcast" packets with a spoofed source IP-address being the target's IP-address. The machines on the network recieve this broadcast message and reply to the target with "echo reply" packets. One way to block this attack is to block all the ICMP packets. However, if that cannot be done, then a limit may be applied to the ICMP packets allowed.
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m limit --limit 2/second --limit-burst 2 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

# Drop Spank DoS Attacks
# Computers answer TCP packets that are coming from a multicast-address. This can be used for the Spank DoS Attack or stealth-scans.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

# Drop SYN Flood Packets
# This is a type of DOS (Denial Of Service) attack.
iptables -A INPUT -p tcp -m state --state NEW -m limit --limit 2/second --limit-burst 2 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -j DROP

# Drop XMAS Packets
# A Christmas-Tree Packet is a packet that has all flags of any protocol set. The FIN, URG, and PSH bits in the TCP header are set. This packet is called an "Xmas Tree" packet because all the fields of header are "lightened up".
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# Prevent Port-scans

# Use only one of the two given port-scan lock-out systems
# Lock-out systems that attempted a port-scan (lock lasts a day)
iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove
# Lock-out systems that attempted a port-scan (lock lasts a week)
iptables -A INPUT -m recent --name portscan --rcheck --seconds 604800 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 604800 -j DROP
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# Log Port-Scan Attempts
iptables -A INPUT -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT -m recent --name portscan --set -j DROP
iptables -A FORWARD -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -m recent --name portscan --set -j DROP

# Block Packets used by Port-Scans
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -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

ベストアンサー1

しようとする可能なすべての悪いものをリストして廃棄してください。リストは無限で間違いなく拡大し続けるので無駄です。代わりに、ファイアウォールルールを設計するときに推奨される原則は、次の種類のトラフィックを許可するルールを定義することです。必要システムにタスクを実行させ、最終ルールを追加します。他のすべてを捨ててください。

あなたの「CSF」がサーバーファイアウォールを構成し、その場合、この原則に従って設計されている可能性が高いです。

私はあなたのルールが入ってきて、csfpost.shすべてコマンドとして表示され、iptables -ACSFが作成したルールチェーンの最後に新しいルールを追加したと言いました。しかし、CSFがうまく設計されている場合は、ルールの最後に「すべての受け入れられていないアイテムを破棄する」というルールを追加します。ルールは順番にチェックされるので、手動ルールの長いリストは実際には本当の効果は全くありません最後のCSFルールの後に追加されるからです。

スクリプトには、ルールセットの先頭に配置すると実際に有害になる可能性があるいくつかのルールも含まれています。たとえば、

iptables -A OUTPUT -p udp -j DROP
ip6tables -A OUTPUT -p udp -j DROP

発信するすべてのUDPトラフィックをブロックしています。 IPマルチキャストは、制御にはIGMPのみ、データ転送にはUDPのみを使用できます。これらの規則は、システムが有用なIPv4またはIPv6マルチキャストメッセージをまったく送信できないことを意味します。 IPv6はデフォルトでブロードキャストをマルチキャストに置き換えるため、IPv6は効果的に弱まります。 IPv4側は、最も基本的なDNSクエリであるNTPとDHCPをブロックします。

iptables -A INPUT -s 127.0.0.0/8 -j DROP

このルールは外部インターフェイスに限定されないため、ループバックインターフェイスにも適用され、そのインターフェイスのすべてのトラフィックを効果的に破棄します。ループバックインターフェイスをブロックすると、多くのソフトウェアが機能しなくなったり、非常に奇妙に動作する可能性があります。

iptables -A INPUT -d 224.0.0.0/4 -j DROP
...
iptables -A INPUT -d 239.255.255.0/24 -j DROP

これにより、すべてのIPv4マルチキャストも削除されます。 2番目のルールは最初のルールですでに扱われているので不要です。

iptables -A INPUT -d 255.255.255.255 -j DROP

システムが DHCP サーバーとして動作している場合、その機能は中断されます。 (DHCPクライアントは起動時に自分のIPアドレスを知らないため、送信元アドレスが0.0.0.0で宛先アドレスが255.255.255.255のブロードキャストのみを送信できます。これらのブロードキャストがあるネットワークセグメントから別のネットワークセグメントに転送される場合別のセグメントは、真剣に誤って設定されたルータを通過します。

iptables -A INPUT -p tcp -m state --state NEW -m limit --limit 2/second --limit-burst 2 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -j DROP

1秒間に2つの新しいTCP接続だけが受信されますが、バッファはどのように2つの接続をさらに保持できますか?単一のWebブラウザでこれらの要件を簡単に満たすことができます。

iptables -A INPUT -p tcp --tcp-flags SYN,ECN,CWR -j DROP

ECNは単一のフラグではなく、複数の新しいTCPフラグを含む技術です。LinuxカーネルはすでにECNをサポートしています。単純なiptablesルールで実行できるよりも正確な完全性チェックがすでに組み込まれている可能性があります。

iptables -A INPUT -f -j DROP

IPフラグメントを削除するのはおそらく古いアドバイスです。それにもかかわらず、Linuxカーネルは必要に応じてすべての断片を自動的に再組み立てし、完全性をチェックし、それを行います。これは、接続トレースがパケットを処理する前に発生するため、ルールがどのようなものともiptables一致しない可能性があります。

全体として、あなたはさまざまなファイアウォールルールの意味を完全に理解していないまま収集しているか、古いまたは不完全なアドバイスに従っているようです。

個々のコマンドレベルで効果的なファイアウォールルールを設計するには、iptablesシステムがそのタスクを実行するために許可する必要があるすべての種類のネットワークトラフィックを理解し、少なくとも関連プロトコルの基本的な理解が必要です。 「良い」トラフィックタイプとどのような関係があるかを理解していない限り、すべての可能性のある悪いアイテムのルールを収集しようとすると、常に失敗します。この道を続けると、これを難しい方法で学ぶことになります。警告を受けたと思います。

おすすめ記事