例えば、以下のようにiptablesを使ってSSH攻撃と思われるアクセスのログをとっているとする。
$IPTABLES -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --rcheck --seconds 600 --hitcount 5 -j LOG --log-prefix 'SSH attack: '
/var/log/messageには以下のようなログが現れる。ログの中に現れるMACは最初の12桁があて先MACアドレス、続く12桁がソースMACアドレス、続く4桁がIPデータグラム。ただしソースMACアドレスは攻撃元(SRC=**.***.**.***)のMACアドレスではなく、同じネットワークにいるどの機器からIPパケットが送られてきたかを示す。
Feb 20 06:47:03 ********* kernel: [**************] SSH attack: IN=eth0 OUT= MAC=DD:DD:DD:DD:DD:DD:SS:SS:SS:SS:SS:SS:08:00 SRC=**.***.**.*** DST=**.***.**.*** LEN=60 TOS=0x00 PREC=0x00 TTL=49 ID=15275 DF PROTO=TCP SPT=50724 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
ログの中からMACアドレスとソースIPアドレスだけを抜き出して、統計を取ると以下のようになる。同じmacアドレスで複数のIPアドレスから、同じIPアドレスで複数のmacアドレスから攻撃されていることがわかる。
# zgrep " SSH attack: " /var/log/messages* | cut -d " " -f 11-12 | sort | uniq -c | sort -k1,1n | tail -n 30 9 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=212.87.227.15 9 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=93.122.146.211 12 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=59.106.178.248 12 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=59.106.178.248 15 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=222.124.173.245 26 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=184.106.178.12 36 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=184.106.178.12 47 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=190.54.23.158 52 IN=eth0 OUT= 56 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=190.54.23.158 61 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=190.223.250.168 61 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=190.223.250.168 66 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=203.172.129.147 80 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=203.172.129.147 90 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=116.213.93.37 114 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=116.213.93.37 126 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=84.52.98.201 128 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=84.52.98.201 690 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=66.135.63.194 834 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=66.135.63.194 886 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=49.212.122.215 922 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=49.212.122.215 2417 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=201.83.222.127 2566 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=201.83.222.127 2640 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=89.140.99.27 2811 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=89.140.99.27 4915 OUT= MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 5058 OUT= MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 8435 MAC=DD:DD:DD:DD:DD:DD:S1:S1:S1:S1:S1:S1:08:00 SRC=49.212.91.160 8545 MAC=DD:DD:DD:DD:DD:DD:S0:S0:S0:S0:S0:S0:08:00 SRC=49.212.91.160
上の結果から攻撃元と思われるIPアドレスを手作業で追加。
# IP address based block $IPTABLES -A INPUT -s 49.212.91.160 -j DROP $IPTABLES -A INPUT -s 89.140.99.27 -j DROP $IPTABLES -A INPUT -s 201.83.222.127 -j DROP
例えば以下のようにしてMACアドレスベースのルールを追加できる。今回はMACアドレスを追加しない。MACアドレスを追加する場合は注意。外のネットワークからのパケットがこのMACアドレスを持つ機器を通じてサーバに到着する場合、外からのアクセスを全て遮断することになる。
# MAC address based block #$IPTABLES -A INPUT -m mac --mac-source S1:S1:S1:S1:S1:S1 -j DROP #$IPTABLES -A INPUT -m mac --mac-source S0:S0:S0:S0:S0:S0 -j DROP