| | 57 | |
| | 58 | = table = |
| | 59 | == raw == |
| | 60 | * http://www.designandcommunication.co.jp/Security/iptables/modules/Modules0.html#raw |
| | 61 | |
| | 62 | raw テーブルはiptablesで最初に評価される |
| | 63 | PREROUTING と OUTPUT で使用出来る |
| | 64 | |
| | 65 | rawテーブルはNOTRACKを使用する事でconntrack、NATを適用せずに通過させる |
| | 66 | その分、高速になる、TRACE でトレース出来る |
| | 67 | また conntrackやstateモジュールは使用出来ない |
| | 68 | |
| | 69 | iptablesで最初に評価されるので、QUEUEやIMQなどにパケットを転送する前に |
| | 70 | おかしなパケットを廃棄出来る |
| | 71 | |
| | 72 | * PREROUTINGが使えることにより、INPUT/FORWARD双方に回る予定のパケットを前もって制御できる |
| | 73 | * POSTROUTINGもあれば良いのだが… |
| | 74 | |
| | 75 | === 巨大 icmp packet の拒否 === #toolargeicmp |
| | 76 | * デフォルト |
| | 77 | * ping 202.12.27.33 -c 1 |
| | 78 | {{{ |
| | 79 | PING 202.12.27.33 (202.12.27.33) 56(84) bytes of data. |
| | 80 | 64 bytes from 202.12.27.33: icmp_seq=1 ttl=241 time=5.95 ms |
| | 81 | }}} |
| | 82 | * ping 202.12.27.33 -c 1 -s 10240 |
| | 83 | {{{ |
| | 84 | PING 202.12.27.33 (202.12.27.33) 10240(10268) bytes of data. |
| | 85 | 10248 bytes from 202.12.27.33: icmp_seq=1 ttl=241 time=13.3 ms |
| | 86 | }}} |
| | 87 | |
| | 88 | * 自ホストから外へのlarge packetの拒否 |
| | 89 | * sudo iptables -t raw -A OUTPUT -p icmp --icmp-type echo-request -m length --length 85: -j DROP |
| | 90 | * ping 202.12.27.33 -c 1 |
| | 91 | {{{ |
| | 92 | PING 202.12.27.33 (202.12.27.33) 56(84) bytes of data. |
| | 93 | 64 bytes from 202.12.27.33: icmp_seq=1 ttl=241 time=10.5 ms |
| | 94 | }}} |
| | 95 | * ping 202.12.27.33 -c 1 -s 57 |
| | 96 | {{{ |
| | 97 | PING 202.12.27.33 (202.12.27.33) 57(85) bytes of data. |
| | 98 | ping: sendmsg: Operation not permitted |
| | 99 | }}} |
| | 100 | |
| | 101 | * 着信拒否 |
| | 102 | * sudo iptables -t raw -A PREROUTING -p icmp --icmp-type echo-request -m length --length 85: -j DROP |
| | 103 | * via http://www.designandcommunication.co.jp/Security/iptables/modules/Modules0.html#raw |
| | 104 | |
| | 105 | * ログを取る場合 |
| | 106 | {{{ |
| | 107 | sudo iptables -t raw -A PREROUTING -p icmp --icmp-type echo-request -m length --length 85: -j LOG --log-prefix "[IPTABLES BAD-ICMP]: " --log-level err -m limit --limit 3/min --limit-burst 10 |
| | 108 | sudo iptables -t raw -A PREROUTING -p icmp --icmp-type echo-request -m length --length 85: -j DROP |
| | 109 | }}} |
| | 110 | * 「-m limit」について => パケットサイズが異常なicmp requestが一分間に10回を超えた場合は、一分間に3回のみログを取るように制限する |
| | 111 | * 無いと膨大なログになる可能性がある |
| | 112 | |
| | 113 | == mangle == |
| | 114 | * どのようなときに使うべきなのかよく分からない。調査中。 |
| | 115 | * INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING の全てのchainが使える |
| | 116 | |
| | 117 | = misc = |
| | 118 | * interfacesのpost-upコマンドでスクリプトを呼び出してiptablesを設定するという手法も考えられる(この場合、ipコマンド等を使ってIP/Netmask等を取得できるので、スクリプト中にWANやLANのアドレスを埋め込まなくて良いという利点が考えられる)が、その場合NICが活性化してからiptablesの設定がされることになり、瞬間的にではあるがLinkUPしたにも関わらずFWが未設定という状態になるのでよろしくないと思われる。 |
| | 119 | |
| | 120 | * eth0がLAN側で192.168.100.254/24、eth1~ethNがWAN(マルチホーム等)の時、条件の逆転「!」を使うことで、iptablesのルール数を減らすべく、以下のようにIP Spoofing防御設定まとめられる思えるが、実際には問題がある。 |
| | 121 | {{{ |
| | 122 | sudo iptables -t raw -N LOG_SPOOF |
| | 123 | sudo iptables -t raw -A LOG_SPOOF -j LOG --log-prefix "[IP-SPOOFING]: " |
| | 124 | sudo iptables -t raw -A LOG_SPOOF -j DROP |
| | 125 | sudo iptables -t raw -A PREROUTING -i ! lo -s 127.0.0.0/8 -j LOG_SPOOF |
| | 126 | sudo iptables -t raw -A PREROUTING -i ! eth0 -s 10.0.0.0/8 -j LOG_SPOOF |
| | 127 | sudo iptables -t raw -A PREROUTING -i ! eth0 -s 172.16.0.0/12 -j LOG_SPOOF |
| | 128 | sudo iptables -t raw -A PREROUTING -i ! eth0 -s 192.168.0.0/16 -j LOG_SPOOF |
| | 129 | }}} |
| | 130 | * ping 192.168.100.254 (=eth0)が通らない |
| | 131 | {{{ |
| | 132 | Jul 4 07:07:28 ubuntu-napt kernel: [136737.367943] [IP-SPOOFING]: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=192.168.100.254 DST=192.168.100.254 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=40230 SEQ=1 |
| | 133 | Jul 4 07:07:29 ubuntu-napt kernel: [136738.366434] [IP-SPOOFING]: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=192.168.100.254 DST=192.168.100.254 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=40230 SEQ=2 |
| | 134 | }}} |
| | 135 | * 「IN=lo」となっていることから考えると、192.168.100.254=eth0だが実際にはloopbackに送られているためおかしくなる。 |
| | 136 | * WANの数だけルールを列挙するしかなさそう? |
| | 137 | |
| | 138 | * filter table以外を/etc/ufw/*.rulesに書くと、ufw startで反映はされるがufw stopで消去されないので設定が累積していく |
| | 139 | * interfaces pre-upとかに入れるのがよさそう… |