Tandai paket dengan iptables berdasarkan alamat mac tujuan

4

Saya perlu menandai paket yang masuk ke alamat mac yang ditentukan.

Saya perlu ini untuk digunakan dalam pembentuk tc.

--mac-destinationtidak ada di iptables.

Saya juga mencoba menggunakan ebtables:

ebtables -t nat -A POSTROUTING -d 9c:4e:36:aa:bb:cc -j mark --set-mark 0x2003 --mark-target ACCEPT

tetapi tidak menandai apa-apa (setidaknya ebtables -t nat -L --Lcmenunjukkan 0 counter)

Tolong bantu! Terima kasih banyak!

Serhii Matrunchyk
sumber

Jawaban:

2

Caranya adalah dengan menggabungkan iptables --mac-sourcedengan CONNMARK:

  • Pertama digunakan --mac-sourceuntuk mencocokkan paket yang berasal dari alamat mac yang Anda minati. Ini adalah arah yang salah karena Anda tertarik pada paket yang pergi ke alamat mac ini, tetapi sekarang Anda dapat
  • gunakan CONNMARKuntuk menandai seluruh koneksi, yaitu kedua arah (!) dan
  • atur tanda dari tanda koneksi dengan --restore-mark


# lan interface
if_lan=eth0

# create 'mark_mac' table for marking connections:
iptables -t mangle -N mark_mac
iptables -t mangle -A mark_mac -j MARK --set-mark 1234
iptables -t mangle -A mark_mac -j CONNMARK --save-mark

# mark connections involving mac address:
iptables -t mangle -A PREROUTING -i $if_lan -m state --state NEW -m mac --mac-source 9c:4e:36:aa:bb:cc -j mark_mac

# mark packets going to mac:
iptables -t mangle -A POSTROUTING -o $if_lan -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark


Awalnya saya pikir ini hanya akan berfungsi untuk koneksi tcp yang berasal dari lan, tetapi mengingat definisi --state NEWitu harus bekerja di kedua arah untuk tcp dan udp (!)

Lihat juga Perutean Kebijakan di Linux berdasarkan Pengirim Alamat MAC yang merupakan inspirasi untuk jawaban ini.

perasan lemon
sumber
-1

iptablesbekerja di OSI layer 3, jadi tidak tahu apa-apa tentang alamat MAC.

Bahkan, ia memiliki modul mac , yang hanya berisi filter lebih lanjut --mac-source: ini karena paket ethernet masuk membawa alamat MAC dari sumbernya. Namun, alamat MAC seperti itu tidak ada untuk paket yang datang melalui wifi, dan itu tidak relevan dengan paket keluar. Referensi di atas menyatakan:

Perhatikan bahwa ini hanya masuk akal untuk paket yang berasal dari perangkat Ethernet dan memasuki rantai PREROUTING, FORWARD atau INPUT.

Adapun ebtables, pertama-tama hanya dapat digunakan dengan frame Ethernet, karena frame wifi kehilangan satu MAC addres. Kedua, alamat sumber MAC, seperti yang saya katakan di atas, tidak ada dalam paket IP.

Jika Anda ingin mengontrol paket ARP, Anda akan segera mengetahui bahwa ada instruksi

arp-mac-dst [!] address [/ mask]

Spesifikasi alamat tujuan ARP MAC (R)

tetapi, sekali lagi, ini karena protokol ARP tidak menggunakan alamat MAC, tidak seperti protokol IP.

MariusMatutiae
sumber
Terima kasih. Saya menggunakan ebtables -t nat -A PREROUTING -p arp --arp-mac-dst bc:5f:f4:aa:bb:cc -j mark --mark-set 0x2003dan ebtables -t nat -L --Lvtidak menunjukkan kecocokan ..
Serhii Matrunchyk
2
Jawaban ini menyesatkan: jaringan wifi memang memiliki alamat mac dan iptables --mac-sourceberfungsi baik dengannya. Halaman manual mungkin harus membaca "... datang dari perangkat ethernet / wifi"
lemonsqueeze