例えば、以下のように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