Alexey の iproute 文書からとった内容を netfilter に合わせ、 パスを調整したものです。これを用いる場合には、 数値をご自分のシステムにあわせて修正してください。
ネットワーク全体を守りたい場合は、このスクリプトは読み飛ばしてください。 これは単一のホストを守るためのものです。
これを 2.4.0 で動作させるには、最新版の iproute2 が必要なようです。
#! /bin/sh -x # # 入口 (ingress) の機能を用いたサンプルスクリプト # このスクリプトでは、到着する SYN を制限する例を示します。 # TCP-SYN 攻撃に対する防御として有用です。SYN に対してより # 強力な機能 (例えばサブネットを追加するなど) を追加した # ければ IPchains を使えます。 # # いろいろなユーティリティのパス。 # 自分の環境にあわせてください。 # TC=/sbin/tc IP=/sbin/ip IPTABLES=/sbin/iptables INDEV=eth2 # # $INDEV に到着した SYN パケットに MARK が 1 のタグを付けます。 ############################################################ $iptables -A PREROUTING -i $INDEV -t mangle -p tcp --syn \ -j MARK --set-mark 1 ############################################################ # # 入口 qdisc を、この入口インターフェースにインストールします ############################################################ $TC qdisc add dev $INDEV handle ffff: ingress ############################################################ # # # SYN パケットは 40 バイト (320 ビット) なので、3 つの SYN # は 960 ビット (およそ 1kビット) になります。よって帯域制限 # として、到着 SYN は 3/秒 にします (実はあまり便利ではあり # ません。しかし要点は押さえています -JHS ############################################################ $TC filter add dev $INDEV parent ffff: protocol ip prio 50 handle 1 fw \ police rate 1kbit burst 40 mtu 9k drop flowid :1 ############################################################ # echo "---- qdisc parameters Ingress ----------" $TC qdisc ls dev $INDEV echo "---- Class parameters Ingress ----------" $TC class ls dev $INDEV echo "---- filter parameters Ingress ----------" $TC filter ls dev $INDEV parent ffff: # 入口 qdisc を削除します。 #$TC qdisc del $INDEV ingress |