![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
If You Meet a Sysadmin on the Road, Kill Him
... або моя боротьба зі внутрішнім сисадміном.
Системних адміністраторів ліпше за все душити з пуп'яночку, коли вони є маленькі, беззахисні.
-- Сорайя Саенс де Сантамарія, з книжки Ля практика де ля Ґерра Тоталь (Практика Тотальної Війни).
Коли домашній рутер почав барахлити, я вирішив не купляти нового кетайського пластикового мотлоху, а пристосувати старого безшумного десктопа, який стоїть вимкнений 364 дні на рік.
Спочатку я зовсім не бажав, як би сказав пан Smugastyi Kit, колхозіть лайнукса, а кортів придбати копійчаного майкрóтіку, але прочитав про болісну процедуру заливання до нього openwrt та пригадав свої бідкання зі дивовижно черепаховими usb ув openwrt у минулому.
Окрім пáкет рýтін', самби та вебсервера, такий лайнукс має мескерєйтиди пакети для інших дівайсів, що (сюрприза!) означає, що у коробці повинно бути 2 мережеві плати. Знайшовши у засіках якийсь старезний інтелівський адаптер, я потішився від свого фругаліті, підключив зе плату, під'єднав 2 ізернет кабелі, запхнув десктопа назад до його ведмежого кута та приготувався страждати з iptables.
Щоб записати правила файеволу правильно, треба ретельно слідкувати за іменами мережевих інтерхфейсів, яких у мене було 3:
- enp0s18f2u6i1
- enp2s0
- enp3s5
2 з них то є ізернет, 1--ондроїд, запасний інторнета. Хтось може здогадатися, що відповідає чому? Куди був підключений який кабель?
Жодна з ip, ifconfig, ethtool утіліт не друкує виробника
дівайсу. lspci--друкує, але не показує mac, що унеможливлює
рівнозначну ідентифікацію. Я впевнений, що геть усі сндовскі сисадміни
знають префікси з /usr/share/nmap/nmap-mac-prefixes
напам'ять, але я
не сисадмін, тому вважаю це знущянням.
Заплакав та написав собі скрипта (ні, ніяких mac префіксів воно не використовує):
#!/bin/sh
errno=0
sys=/sys/class/net
# $1 == nic
dump() {
[ -d "$sys/$1" ] || { echo "$1 is absent" 1>&2; errno=2; return; }
echo Name "$1" | pp
echo MAC "`cat "$sys/$1/address"`" | pp
echo Driver "`uevent "$1" DRIVER`" | pp
(pci "$1" || usb "$1") | pp
}
# $1 == nic
pci() {
local dev=`uevent "$1" PCI_ID`
[ ! -z "$dev" ] && /usr/sbin/lspci -d "$dev" -vmmk 2>/dev/null \
| gawk 'match($0, /^(S?Vendor|S?Device|Rev):(.*)/, r) { printf("%s %s\n", r[1], r[2]) }'
}
# $1 == nic
usb() {
local dev=`uevent "$1" PRODUCT | awk -F/ '{printf("%s:%s", $1, $2)}'`
[ ! -z "$dev" ] && lsusb -v -d "$dev" 2>/dev/null | awk '/idVendor|iManufacturer|iProduct|iSerial/ {printf $1; $1=""; $2=""; print $0}'
}
# $1 == nic, $2 == key
uevent() { awk -F= '/^'"$2"'/ {print $2}' "$sys/$1/device/uevent" 2>/dev/null; }
pp() { awk '{if ($2 != "") { printf("%-15s", $1); $1=""; print $0} }'; }
nics=$*
[ -z "$nics" ] && { nics=`(cd $sys && echo *)` || exit 1; }
idx=0; for val in $nics; do
[ $idx -ne 0 ] && echo ''
dump "$val"
idx=1
done
exit $errno
На жаль, коротше ніж у 43 рядки
$ cloc nic | grep '^[LB]'
Language files blank comment code
Bourne Shell 1 10 4 29
укластися не вийшло.
Перейменував через udev інтерхфейси на wan, lan та android0. Зараз зе скрипта друкує таке:
$ nic
Name android0
MAC ce:2b:a1:1f:84:ee
Driver cdc_ether
idVendor LG Electronics, Inc.
iManufacturer LG Electronics Inc.
iProduct LGE Android Phone
iSerial <redacted>
Name lan
MAC 00:30:67:ad:fc:96
Driver r8169
Vendor Realtek Semiconductor Co., Ltd.
Device RTL810xE PCI Express Fast Ethernet controller
SVendor Biostar Microtech Int'l Corp
SDevice Device 230b
Rev 02
Name lo
MAC 00:00:00:00:00:00
Name wan
MAC 00:07:e9:0b:29:27
Driver e1000
Vendor Intel Corporation
Device 82540EM Gigabit Ethernet Controller
SVendor Intel Corporation
SDevice PRO/1000 MT Desktop Adapter
Rev 02
Після тортур з iptables, відчуваю, що головне зараз не почати настроювати сендмейла. Легка жадоба є, але я поки що тримаюся.
no subject
А вообще можно придумать свои имена и задать их в udev-правилах
/etc/udev/rules.d, вот пример для парочки беспроводных:
За что я люблю FreeBSD — там имена сетевых карт таковы, что каждый драйвер начинает нумерацию с нуля в своём пространстве имён.
Например, Intel'овские сетевухи: igb0, igb1, ...
Realtek новые: re0, re1, ...
Realtek старые: rl0, rl1, ...
Atheros: ath0, ath1, ...
Соответственно очень редко нужно греться такой х*йнёй.
no subject
no subject
no subject
no subject
я так і зробив, перед тим як чіпати iptables
без udev життя нема
коли всі у Києві користувалися fbsd, ув лайнуксах були лише ethX, а потім якась enterprising soul ув червоній шапці...
no subject
no subject
no subject
Что с тплинками не так? Юзаю уже лет 10 на офисе и дома, проблем никаких.
no subject
https://www.cvedetails.com/vulnerability-list/vendor_id-11936/year-2018/Tp-link.html
торік у мого знайомого ув рутері тіпілінку оселилася якась погань, яка періодично намагалася атакувати мошини в lan. знайомий спочатку бідкався на свого провайдера ("скорасть стала нікакая!"), а потім глянув ув логи файеволу віндюка
як на мене, всі консьюмерні пластикові рутери можна юзати тільки поставивши туди openwrt, але навіщо цим займатися, коли є безвинтиляторні mini itx? тулиш туди ще 1 nic, ставиш лайнукс чи bsd та bob's your uncle
no subject
"Куди був підключений який кабель?"
включаєш у рутера DHCP, висмикнути один кабель, і перевірити, у якого інтерфейса з'явився IP.
no subject
так, mac же буде різний
це, звичайно, не допоможе відрізнити карту інтел у 1му pci vs карту інтел у 2му pci
включаєш у рутера DHCP, висмикнути один кабель
ггг
поінт був у тому, як це зробити не піднімання інтерхфейсів та без фізичного пересмикування кабелів
no subject
звичайно. Він різний і без скрипта :)
no subject
ну гаразд:
ггг
no subject