ปกติการ Set static ARP โดยใช้ command
arp -s IP_address MAC_address
เมื่อเครื่อง reboot ค่าที่กำหนดไว้ก็จะหายไปด้วย ซึ่งวิธีการแก้ไขก็อาจโดยการสร้างเป็น .bat เพื่อให้ทำงานทุกครั้งที่เปิดเครื่อง แต่ในกรณีนี้จะใช้วิธี netsh โดยสามารถทำได้ดังนี้
ระบบทดสอบ
OS: Microsoft Windows 7 Professional x64
วิธีการเพิ่ม Static ARP
netsh interface ipv4 add neighbors "Local Area Connection" "192.168.100.1" "00-1e-5a-a5-2b-c7"
โดย
Local Area Connection คือ Network Interface ที่ใช้ในการเชื่อมต่อ
192.168.100.1 คือ IP address ที่สนใจ
00-1e-5a-a5-2b-c7 คือ Mac address ของ IP address ที่สนใจ
วิธีการลบ Static ARP ของจาก ARP table
netsh interface ipv4 delete neighbors "Local Area Connection" "192.168.100.1" "00-1e-5a-a5-2b-c7"
วิธีการแสดงรายการ ARP table
arp -a
หรือ
netsh interface ipv4 show neighbors
หรือ
netsh interface ipv4 show neighbors "Local Area Connection"
ทดสอบโดยการ reboot พบว่า ARP ยังคงอยู่ในระบบ
วันอังคารที่ 12 ตุลาคม พ.ศ. 2553
วันจันทร์ที่ 20 กันยายน พ.ศ. 2553
SNMP : ตัวอย่างการเรียกดูข้อมูลของเครื่องเป้าหมายผ่าน Protocol SNMP
ในกรณีที่เราเปิดการใช้งาน SNMP ไว้ แต่ไม่มีการป้องกันการเข้าถึงนั้น อาจทำเป็นช่องโหว่ทำให้ผู้บุกรุกเข้ามาหาข้อมูลเพื่อบุกรุกเครื่องเราได้ (FootPrinting) ดังตัวอย่าง
กำหนดให้
Target OS : Microsoft Windows 7
HostName = MSW-server
snmp-community string = MyServer
Hacker OS : Ubuntu 9.10
HostName = hacker-server
hacker-server$ snmwalk -v 2c -c MyServer MSW-server system
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: x86 Family 15 Model 72 Stepping 2 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7600 Multiprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1013543) 2:48:55.43
SNMPv2-MIB::sysContact.0 = STRING: admin@MSW-server
SNMPv2-MIB::sysName.0 = STRING: Windows-Server
SNMPv2-MIB::sysLocation.0 = STRING: Secure, IDC
SNMPv2-MIB::sysServices.0 = INTEGER: 79
จากตัวอย่างข้างต้นจะเห็นว่า สามารถเรียกดูข้อมูลของ OS ได้ จากนั้นลองทดสอบเรียกดูว่าเครื่องเป้าหมายติดตั้งโปรแกรมอะไรบ้าง
hacker-server$ snmpwalk -v 2c -c MyServer MSW-server SWInstalledName
HOST-RESOURCES-MIB::hrSWInstalledName.1 = STRING: "Vuze"
HOST-RESOURCES-MIB::hrSWInstalledName.2 = STRING: "Adobe AIR"
HOST-RESOURCES-MIB::hrSWInstalledName.3 = STRING: "Adobe Flash Player 10 ActiveX"
HOST-RESOURCES-MIB::hrSWInstalledName.4 = STRING: "Adobe Flash Player 10 Plugin"
HOST-RESOURCES-MIB::hrSWInstalledName.5 = STRING: "aMSN 0.98.3"
HOST-RESOURCES-MIB::hrSWInstalledName.6 = STRING: "avast! Free Antivirus"
HOST-RESOURCES-MIB::hrSWInstalledName.7 = STRING: "BitComet 0.70"
HOST-RESOURCES-MIB::hrSWInstalledName.8 = STRING: "Cisco Packet Tracer 5.3"
HOST-RESOURCES-MIB::hrSWInstalledName.9 = STRING: "Foxit Reader"
HOST-RESOURCES-MIB::hrSWInstalledName.10 = STRING: "GNS3 0.7.2"
HOST-RESOURCES-MIB::hrSWInstalledName.11 = STRING: "K-Lite Mega Codec Pack 5.9.0"
HOST-RESOURCES-MIB::hrSWInstalledName.12 = STRING: "Microsoft .NET Framework 4 Client Profile"
HOST-RESOURCES-MIB::hrSWInstalledName.13 = STRING: "Microsoft Visual J# 2.0 Redistributable Package - SE"
จากผลลัพธ์จะเห็นว่า สามารถแสดงรายชื่อ Software ที่อยู่บนเครื่องเป้าหมายได้
ดังนั้นในการใช้งาน SNMP ควรมีการป้องกันระบบให้ดี
กำหนดให้
Target OS : Microsoft Windows 7
HostName = MSW-server
snmp-community string = MyServer
Hacker OS : Ubuntu 9.10
HostName = hacker-server
hacker-server$ snmwalk -v 2c -c MyServer MSW-server system
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: x86 Family 15 Model 72 Stepping 2 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7600 Multiprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1013543) 2:48:55.43
SNMPv2-MIB::sysContact.0 = STRING: admin@MSW-server
SNMPv2-MIB::sysName.0 = STRING: Windows-Server
SNMPv2-MIB::sysLocation.0 = STRING: Secure, IDC
SNMPv2-MIB::sysServices.0 = INTEGER: 79
จากตัวอย่างข้างต้นจะเห็นว่า สามารถเรียกดูข้อมูลของ OS ได้ จากนั้นลองทดสอบเรียกดูว่าเครื่องเป้าหมายติดตั้งโปรแกรมอะไรบ้าง
hacker-server$ snmpwalk -v 2c -c MyServer MSW-server SWInstalledName
HOST-RESOURCES-MIB::hrSWInstalledName.1 = STRING: "Vuze"
HOST-RESOURCES-MIB::hrSWInstalledName.2 = STRING: "Adobe AIR"
HOST-RESOURCES-MIB::hrSWInstalledName.3 = STRING: "Adobe Flash Player 10 ActiveX"
HOST-RESOURCES-MIB::hrSWInstalledName.4 = STRING: "Adobe Flash Player 10 Plugin"
HOST-RESOURCES-MIB::hrSWInstalledName.5 = STRING: "aMSN 0.98.3"
HOST-RESOURCES-MIB::hrSWInstalledName.6 = STRING: "avast! Free Antivirus"
HOST-RESOURCES-MIB::hrSWInstalledName.7 = STRING: "BitComet 0.70"
HOST-RESOURCES-MIB::hrSWInstalledName.8 = STRING: "Cisco Packet Tracer 5.3"
HOST-RESOURCES-MIB::hrSWInstalledName.9 = STRING: "Foxit Reader"
HOST-RESOURCES-MIB::hrSWInstalledName.10 = STRING: "GNS3 0.7.2"
HOST-RESOURCES-MIB::hrSWInstalledName.11 = STRING: "K-Lite Mega Codec Pack 5.9.0"
HOST-RESOURCES-MIB::hrSWInstalledName.12 = STRING: "Microsoft .NET Framework 4 Client Profile"
HOST-RESOURCES-MIB::hrSWInstalledName.13 = STRING: "Microsoft Visual J# 2.0 Redistributable Package - SE"
จากผลลัพธ์จะเห็นว่า สามารถแสดงรายชื่อ Software ที่อยู่บนเครื่องเป้าหมายได้
ดังนั้นในการใช้งาน SNMP ควรมีการป้องกันระบบให้ดี
FreeBSD, MRTG : การติดตั้ง MRTG เพื่อดูปริมาณการใช้งาน Network Traffic
ระบบที่ใช้
OS : FreeBSD 8.1 amd64
เริ่มด้วยการติดตั้ง snmpd ก่อน
server# cd /usr/ports/net-mgmt/net-snmp
server# make install
server# rehash
สร้างไฟล์ Configuration ของ SNMP
server# mkdir /etc/snmp
server# echo "rocommunity myServer" > /etc/snmp/snmpd.conf
เพิ่มบรรทัดต่อไปนี้เข้าไปใน /etc/rc.conf
snmpd_enable="YES"
snmpd_conffile="/etc/snmp/snmpd.conf"
สั่ง start SNMP โดย
server# /usr/local/etc/rc.d/snmpd start
ทดสอบการใช้งาน SNMP โดย
server# snmpwalk -v 2c -c myServer 127.0.0.1
ถ้าได้ output ที่ไม่ใช่ Error ออกมาก็เป็นอันใช้ได้
ต่อไปติดตั้ง MRTG
server# cd /usr/ports/net-mgmt/mrtg
server# make install
server# rehash
จากนั้นทำการสร้าง MRTG Configuration file ดังนี้
server# cfgmaker --global 'WorkDir: /www/mrtg' \
--global 'Options[_]: growright,bits' \
--output /usr/local/etc/mrtg/127.0.0.1.cfg \
myServer@127.0.0.1
หลังจากได้ Configuration file แล้ว ก็ทำการสั่งให้ MRTG ไปเก็บค่า snmp ตามที่ต้องการ ดังนี้
server# mrtg /usr/local/etc/mrtg/127.0.0.1.cfg
ทั้งนี้ เนื่องจากเป็นการใช้งานครั้งแรก อาจมี error อยู่ ซึ่งอาจต้องสั่งซ้ำๆ 2-3 ครั้ง เพื่อให้ error หมดไป ซึ่งเมื่อ error หมดไปแล้ว จะได้ output ไปอยู่ที่ /www/mrtg ตามที่ได้กำหนดไว้ในขั้นสร้างไฟล์ Configuration ซึ่งจะเรียกดู output ผ่าน web browser ตามปกติ
จากนั้นกำหนดให้ MRTG ทำงานทุกๆ 5 นาที โดยไปกำหนดที่ /etc/crontab ดังนี้
*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/127.0.0.1.cfg
OS : FreeBSD 8.1 amd64
เริ่มด้วยการติดตั้ง snmpd ก่อน
server# cd /usr/ports/net-mgmt/net-snmp
server# make install
server# rehash
สร้างไฟล์ Configuration ของ SNMP
server# mkdir /etc/snmp
server# echo "rocommunity myServer" > /etc/snmp/snmpd.conf
เพิ่มบรรทัดต่อไปนี้เข้าไปใน /etc/rc.conf
snmpd_enable="YES"
snmpd_conffile="/etc/snmp/snmpd.conf"
สั่ง start SNMP โดย
server# /usr/local/etc/rc.d/snmpd start
ทดสอบการใช้งาน SNMP โดย
server# snmpwalk -v 2c -c myServer 127.0.0.1
ถ้าได้ output ที่ไม่ใช่ Error ออกมาก็เป็นอันใช้ได้
ต่อไปติดตั้ง MRTG
server# cd /usr/ports/net-mgmt/mrtg
server# make install
server# rehash
จากนั้นทำการสร้าง MRTG Configuration file ดังนี้
server# cfgmaker --global 'WorkDir: /www/mrtg' \
--global 'Options[_]: growright,bits' \
--output /usr/local/etc/mrtg/127.0.0.1.cfg \
myServer@127.0.0.1
หลังจากได้ Configuration file แล้ว ก็ทำการสั่งให้ MRTG ไปเก็บค่า snmp ตามที่ต้องการ ดังนี้
server# mrtg /usr/local/etc/mrtg/127.0.0.1.cfg
ทั้งนี้ เนื่องจากเป็นการใช้งานครั้งแรก อาจมี error อยู่ ซึ่งอาจต้องสั่งซ้ำๆ 2-3 ครั้ง เพื่อให้ error หมดไป ซึ่งเมื่อ error หมดไปแล้ว จะได้ output ไปอยู่ที่ /www/mrtg ตามที่ได้กำหนดไว้ในขั้นสร้างไฟล์ Configuration ซึ่งจะเรียกดู output ผ่าน web browser ตามปกติ
จากนั้นกำหนดให้ MRTG ทำงานทุกๆ 5 นาที โดยไปกำหนดที่ /etc/crontab ดังนี้
*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/127.0.0.1.cfg
วันพฤหัสบดีที่ 2 กันยายน พ.ศ. 2553
Linux, Network : เปลี่ยนชื่อ Network Interface
ในกรณีที่ใช้ Linux มาทำเป็น Firewall นั้น บางทีจะอยากจะเปลี่ยนชื่อของ Network Interface ให้ตรงกับ Zone ในใช้งาน เพื่อให้ง่ายในการจดจำ ในกรณีที่มีหลาย Interface เช่น จากเดิม eth0 ก็ไปเป็น wan เป็นต้น
ระบบที่ทดสอบ
OS : Ubuntu Linux 10.04.1 LTS
กำหนดให้
eth0 --> wan
eth1 --> lan
eth2 --> wireless
eth3 --> dmz
ระบบเดิม
root@server:~# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:14:22:15:eb:ed
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xccc0 Memory:df8e0000-df900000
eth1 Link encap:Ethernet HWaddr 00:14:22:15:eb:ee
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xbcc0 Memory:df6e0000-df700000
eth2 Link encap:Ethernet HWaddr 00:01:02:58:ed:ca
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:37 Base address:0xc00
eth3 Link encap:Ethernet HWaddr 00:04:76:21:ac:96
inet addr:172.17.12.55 Bcast:172.17.12.255 Mask:255.255.255.0
inet6 addr: fe80::204:76ff:fe21:ac96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:359 errors:0 dropped:0 overruns:1 frame:0
TX packets:173 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33463 (32.6 KB) TX bytes:22815 (22.2 KB)
Interrupt:39 Base address:0xec00
ขั้นตอนการเปลี่ยน
ให้แก้ไขที่ไฟล์ /etc/udev/rules.d/70-persistent-net.rules โดยก่อนการแก้ไข ควร backup ไฟล์นี้ไว้ก่อน
root@server:/etc/udev/rules.d# cp 70-persistent-net.rules 70-persistent-net.rules.backup
จากนั้นมาดูเนื้อหาในไฟล์นี้ก่อนว่ามีอะไรน่าสนใจบ้าง
root@server:/etc/udev/rules.d# cat 70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ed", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ee", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:02:58:ed:ca", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:04:76:21:ac:96", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"
จาก output จะเห็นว่า จะมีการ map หมายเลขของ MAC address เช่น ATTR{address}=="00:04:76:21:ac:96" ---> NAME="eth3"
ซึ่งเราจะมาทำการแก้ตรงนี้แหละ
root@server:/etc/udev/rules.d# vi 70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ed", ATTR{type}=="1", KERNEL=="eth*", NAME="wan" <--- แก้เป็น wan จากเดิม eth0
# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ee", ATTR{type}=="1", KERNEL=="eth*", NAME="lan" <--- แก้เป็น lan จากเดิม eth1
# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:02:58:ed:ca", ATTR{type}=="1", KERNEL=="eth*", NAME="wireless" <--- แก้เป็น wireless จากเดิม eth2
# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:04:76:21:ac:96", ATTR{type}=="1", KERNEL=="eth*", NAME="dmz" <--- แก้เป็น dmz จากเดิม eth3
จากนั้นให้ทำการแก้ไข network configuration เพื่อให้รู้จักชื่อ Interface ใหม่
root@server# vi /etc/network/interfaces
auto lo
iface lo inet loopback
# The primary network interface
auto dmz <--- แก้เป็น dmz จากเดิม eth3
iface dmz inet static <--- แก้เป็น dmz จากเดิม eth3
address 172.17.12.55
netmask 255.255.255.0
gateway 172.17.12.1
เมื่อตรวจสอบเรียบร้อยแล้ว ก็ reboot เครื่อง
และเมื่อเครื่อง boot เสร็จแล้ว ก็ทำการตรวจสอบผลงานซะหน่อย
root@server:/# ifconfig -a
dmz Link encap:Ethernet HWaddr 00:04:76:21:ac:96
inet addr:172.17.12.55 Bcast:172.17.12.255 Mask:255.255.255.0
inet6 addr: fe80::204:76ff:fe21:ac96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3135 errors:0 dropped:0 overruns:1 frame:0
TX packets:1038 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:317387 (309.9 KB) TX bytes:171021 (167.0 KB)
Interrupt:39 Base address:0xcc00
lan Link encap:Ethernet HWaddr 00:14:22:15:eb:ee
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xbcc0 Memory:df6e0000-df700000
wan Link encap:Ethernet HWaddr 00:14:22:15:eb:ed
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xccc0 Memory:df8e0000-df900000
wireless Link encap:Ethernet HWaddr 00:01:02:58:ed:ca
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:37 Base address:0xec00
root@server:/# ethtool dmz
Settings for dmz:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 24
Transceiver: internal
Auto-negotiation: on
Current message level: 0x00000001 (1)
Link detected: yes
ทดสอบด้วย iptables
root@server:/# iptables -A INPUT -i dmz -j ACCEPT
root@server:/# iptables -A INPUT -i lan -j ACCEPT
root@server:/#
root@server:/# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 796 packets, 64226 bytes)
pkts bytes target prot opt in out source destination
57 4308 ACCEPT all -- dmz * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lan * 0.0.0.0/0 0.0.0.0/0
แต่เมื่อทดสอบด้วย mii-tool กลับไม่รู้จักซะงั้น (ไม่เป็นไร พอรับได้)
root@server:/# mii-tool
no MII interfaces found
หมายเหตุ การเปลี่ยนชื่อ interface นั้นอาจทำให้ Application บางตัวที่สนใจแต่ชื่อ eth มีปัญหาได้ ดังนั้นควรตรวจสอบให้ดีก่อนใช้งานในระบบจริง (แต่เท่าที่ผมทดสอบในระบบของผม ไม่พบปัญหา)
ระบบที่ทดสอบ
OS : Ubuntu Linux 10.04.1 LTS
กำหนดให้
eth0 --> wan
eth1 --> lan
eth2 --> wireless
eth3 --> dmz
ระบบเดิม
root@server:~# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:14:22:15:eb:ed
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xccc0 Memory:df8e0000-df900000
eth1 Link encap:Ethernet HWaddr 00:14:22:15:eb:ee
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xbcc0 Memory:df6e0000-df700000
eth2 Link encap:Ethernet HWaddr 00:01:02:58:ed:ca
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:37 Base address:0xc00
eth3 Link encap:Ethernet HWaddr 00:04:76:21:ac:96
inet addr:172.17.12.55 Bcast:172.17.12.255 Mask:255.255.255.0
inet6 addr: fe80::204:76ff:fe21:ac96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:359 errors:0 dropped:0 overruns:1 frame:0
TX packets:173 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33463 (32.6 KB) TX bytes:22815 (22.2 KB)
Interrupt:39 Base address:0xec00
ขั้นตอนการเปลี่ยน
ให้แก้ไขที่ไฟล์ /etc/udev/rules.d/70-persistent-net.rules โดยก่อนการแก้ไข ควร backup ไฟล์นี้ไว้ก่อน
root@server:/etc/udev/rules.d# cp 70-persistent-net.rules 70-persistent-net.rules.backup
จากนั้นมาดูเนื้อหาในไฟล์นี้ก่อนว่ามีอะไรน่าสนใจบ้าง
root@server:/etc/udev/rules.d# cat 70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ed", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ee", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:02:58:ed:ca", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:04:76:21:ac:96", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"
จาก output จะเห็นว่า จะมีการ map หมายเลขของ MAC address เช่น ATTR{address}=="00:04:76:21:ac:96" ---> NAME="eth3"
ซึ่งเราจะมาทำการแก้ตรงนี้แหละ
root@server:/etc/udev/rules.d# vi 70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ed", ATTR{type}=="1", KERNEL=="eth*", NAME="wan" <--- แก้เป็น wan จากเดิม eth0
# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ee", ATTR{type}=="1", KERNEL=="eth*", NAME="lan" <--- แก้เป็น lan จากเดิม eth1
# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:02:58:ed:ca", ATTR{type}=="1", KERNEL=="eth*", NAME="wireless" <--- แก้เป็น wireless จากเดิม eth2
# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:04:76:21:ac:96", ATTR{type}=="1", KERNEL=="eth*", NAME="dmz" <--- แก้เป็น dmz จากเดิม eth3
จากนั้นให้ทำการแก้ไข network configuration เพื่อให้รู้จักชื่อ Interface ใหม่
root@server# vi /etc/network/interfaces
auto lo
iface lo inet loopback
# The primary network interface
auto dmz <--- แก้เป็น dmz จากเดิม eth3
iface dmz inet static <--- แก้เป็น dmz จากเดิม eth3
address 172.17.12.55
netmask 255.255.255.0
gateway 172.17.12.1
เมื่อตรวจสอบเรียบร้อยแล้ว ก็ reboot เครื่อง
และเมื่อเครื่อง boot เสร็จแล้ว ก็ทำการตรวจสอบผลงานซะหน่อย
root@server:/# ifconfig -a
dmz Link encap:Ethernet HWaddr 00:04:76:21:ac:96
inet addr:172.17.12.55 Bcast:172.17.12.255 Mask:255.255.255.0
inet6 addr: fe80::204:76ff:fe21:ac96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3135 errors:0 dropped:0 overruns:1 frame:0
TX packets:1038 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:317387 (309.9 KB) TX bytes:171021 (167.0 KB)
Interrupt:39 Base address:0xcc00
lan Link encap:Ethernet HWaddr 00:14:22:15:eb:ee
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xbcc0 Memory:df6e0000-df700000
wan Link encap:Ethernet HWaddr 00:14:22:15:eb:ed
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xccc0 Memory:df8e0000-df900000
wireless Link encap:Ethernet HWaddr 00:01:02:58:ed:ca
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:37 Base address:0xec00
root@server:/# ethtool dmz
Settings for dmz:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 24
Transceiver: internal
Auto-negotiation: on
Current message level: 0x00000001 (1)
Link detected: yes
ทดสอบด้วย iptables
root@server:/# iptables -A INPUT -i dmz -j ACCEPT
root@server:/# iptables -A INPUT -i lan -j ACCEPT
root@server:/#
root@server:/# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 796 packets, 64226 bytes)
pkts bytes target prot opt in out source destination
57 4308 ACCEPT all -- dmz * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lan * 0.0.0.0/0 0.0.0.0/0
แต่เมื่อทดสอบด้วย mii-tool กลับไม่รู้จักซะงั้น (ไม่เป็นไร พอรับได้)
root@server:/# mii-tool
no MII interfaces found
หมายเหตุ การเปลี่ยนชื่อ interface นั้นอาจทำให้ Application บางตัวที่สนใจแต่ชื่อ eth มีปัญหาได้ ดังนั้นควรตรวจสอบให้ดีก่อนใช้งานในระบบจริง (แต่เท่าที่ผมทดสอบในระบบของผม ไม่พบปัญหา)
วันจันทร์ที่ 30 สิงหาคม พ.ศ. 2553
Linux, iptables : การแสดงลำดับของกฎของ iptables และการแทรกกฎไปที่บรรทัดที่ต้องการ
ระบบทีใช้ทดสอบ
OS : Ubuntu 8.04.4 LTS
Kernel Version : 2.6.24-28
ตัวอย่าง
การเรียกดูกฎของ iptables ในตาราง INPUT พร้อมให้แสดงลำดับที่ของกฎด้วย
root@server:~# iptables -nvL INPUT --line
Chain INPUT (policy DROP 48 packets, 4520 bytes)
num pkts bytes target prot opt in out source destination
1 348 25568 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 249 18956 ACCEPT all -- * * 172.17.12.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0
4 0 0 ACCEPT all -- * * 192.168.10.0/24 0.0.0.0/0
5 0 0 ACCEPT all -- * * 192.168.200.0/24 0.0.0.0/0
ต้องการแทรกกฎ DROP บาง IP เข้าไปในแถวที่ 4 (ก่อน ACCEPT 192.168.10.0/24 )
root@server:~# iptables -I INPUT 4 -s 192.168.10.100 -j DROP
root@server:~# iptables -nvL INPUT --line
Chain INPUT (policy DROP 48 packets, 4520 bytes)
num pkts bytes target prot opt in out source destination
1 449 32676 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 250 19192 ACCEPT all -- * * 172.17.12.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0
4 0 0 DROP all -- * * 192.168.10.100 0.0.0.0/0
5 0 0 ACCEPT all -- * * 192.168.10.0/24 0.0.0.0/0
6 0 0 ACCEPT all -- * * 192.168.200.0/24 0.0.0.0/0
ต้องการลบกฎแถวที่ 4 ตามตัวอย่างข้างบนออก
root@server:~# iptables - D INPUT 4
root@staff-fw:~# iptables -nvL INPUT --line
Chain INPUT (policy DROP 224 packets, 21764 bytes)
num pkts bytes target prot opt in out source destination
1 509 37952 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 276 23686 ACCEPT all -- * * 172.17.12.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0
4 0 0 ACCEPT all -- * * 192.168.10.0/24 0.0.0.0/0
5 0 0 ACCEPT all -- * * 192.168.200.0/24 0.0.0.0/0
OS : Ubuntu 8.04.4 LTS
Kernel Version : 2.6.24-28
ตัวอย่าง
การเรียกดูกฎของ iptables ในตาราง INPUT พร้อมให้แสดงลำดับที่ของกฎด้วย
root@server:~# iptables -nvL INPUT --line
Chain INPUT (policy DROP 48 packets, 4520 bytes)
num pkts bytes target prot opt in out source destination
1 348 25568 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 249 18956 ACCEPT all -- * * 172.17.12.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0
4 0 0 ACCEPT all -- * * 192.168.10.0/24 0.0.0.0/0
5 0 0 ACCEPT all -- * * 192.168.200.0/24 0.0.0.0/0
ต้องการแทรกกฎ DROP บาง IP เข้าไปในแถวที่ 4 (ก่อน ACCEPT 192.168.10.0/24 )
root@server:~# iptables -I INPUT 4 -s 192.168.10.100 -j DROP
root@server:~# iptables -nvL INPUT --line
Chain INPUT (policy DROP 48 packets, 4520 bytes)
num pkts bytes target prot opt in out source destination
1 449 32676 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 250 19192 ACCEPT all -- * * 172.17.12.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0
4 0 0 DROP all -- * * 192.168.10.100 0.0.0.0/0
5 0 0 ACCEPT all -- * * 192.168.10.0/24 0.0.0.0/0
6 0 0 ACCEPT all -- * * 192.168.200.0/24 0.0.0.0/0
ต้องการลบกฎแถวที่ 4 ตามตัวอย่างข้างบนออก
root@server:~# iptables - D INPUT 4
root@staff-fw:~# iptables -nvL INPUT --line
Chain INPUT (policy DROP 224 packets, 21764 bytes)
num pkts bytes target prot opt in out source destination
1 509 37952 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 276 23686 ACCEPT all -- * * 172.17.12.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0
4 0 0 ACCEPT all -- * * 192.168.10.0/24 0.0.0.0/0
5 0 0 ACCEPT all -- * * 192.168.200.0/24 0.0.0.0/0
วันเสาร์ที่ 21 สิงหาคม พ.ศ. 2553
ค้นหา Serial Number หรือ Service Tag ของเครื่อง Server ผ่าน Command Line
ในการเก็บข้อมูล Serial number หรือ Service Tag (สำหรับ Dell) ของเครื่อง Server นั้น ส่วนมากจะแปะบอกไว้ที่เครื่อง ซึ่งถ้าเราอยู่ใกล้ ก็เดินไปดู แต่ถ้าอยู่ไกล เช่น อยู่ต่างจังหวัด หรือต่างประเทศ คงลำบากในการตามจด วันนี้จึงลองเสนอวิธีดู Serial number หรือ Service Tag ผ่าน Command Line (ได้ผลดีกับเครื่อง Brand name เช่น Dell, HP)
ระบบที่ใช้ทดสอบ FreeBSD, Ubuntu, CentOS
CentOS# dmidecode | more
--- ตัด output ---
System Information
Manufacturer: Dell Inc.
Product Name: PowerEdge 2950
Version: Not Specified
Serial Number: 2Gxxxxx <------ Dell Service Tag
UUID: 44454C4C-4700-104B-8036-B2C04xxxxxxx
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified
--- ตัด output ---
FreeBSD# dmidecode | more
SMBIOS 2.6 present.
123 structures occupying 3313 bytes.
Table at 0xDF7FE000.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Hewlett-Packard
Version: P62
Release Date: 03/27/2009
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 8192 kB
---- ตัด output ------
System Information
Manufacturer: Hewlett-Packard
Product Name: ProLiant DL380 G6
Version: Not Specified
Serial Number: SGH926xxxx
UUID: 33343934-3932-4753-4839-32xxxxxxxxxx
Wake-up Type: Power Switch
SKU Number: 494xxx-xxx
Family: ProLiant
----- ตัด output ------
ระบบที่ใช้ทดสอบ FreeBSD, Ubuntu, CentOS
CentOS# dmidecode | more
--- ตัด output ---
System Information
Manufacturer: Dell Inc.
Product Name: PowerEdge 2950
Version: Not Specified
Serial Number: 2Gxxxxx <------ Dell Service Tag
UUID: 44454C4C-4700-104B-8036-B2C04xxxxxxx
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified
--- ตัด output ---
FreeBSD# dmidecode | more
SMBIOS 2.6 present.
123 structures occupying 3313 bytes.
Table at 0xDF7FE000.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Hewlett-Packard
Version: P62
Release Date: 03/27/2009
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 8192 kB
---- ตัด output ------
System Information
Manufacturer: Hewlett-Packard
Product Name: ProLiant DL380 G6
Version: Not Specified
Serial Number: SGH926xxxx
UUID: 33343934-3932-4753-4839-32xxxxxxxxxx
Wake-up Type: Power Switch
SKU Number: 494xxx-xxx
Family: ProLiant
----- ตัด output ------
วันอาทิตย์ที่ 15 สิงหาคม พ.ศ. 2553
FreeBSD, SSH : block การเข้าถึงบริการ SSH โดยใช้ hosts.allow
ในกรณีที่เราพบว่าเครื่องให้บริการถูกโจมตีโดยความพยายามเดาสุ่มรหัสผ่าน ดังตัวอย่าง Log
Aug 16 11:12:09 FreeBSD sshd[20296]: Failed keyboard-interactive/pam for root from 172.17.12.51 port 55095 ssh2
Aug 16 11:12:10 FreeBSD sshd[20296]: error: PAM: authentication error for root from 172.17.12.51
Aug 16 11:12:10 FreeBSD sshd[20296]: Failed keyboard-interactive/pam for root from 172.17.12.51 port 55095 ssh2
Aug 16 11:12:10 FreeBSD sshd[20296]: error: PAM: authentication error for root from 172.17.12.51
Aug 16 11:12:10 FreeBSD sshd[20296]: Failed keyboard-interactive/pam for root from 172.17.12.51 port 55095 ssh2
Aug 16 11:12:18 FreeBSD sshd[20304]: error: PAM: authentication error for root from 172.17.12.51
Aug 16 11:12:18 FreeBSD last message repeated 3 times
จาก Log ก็เห็นว่าเครื่อง IP 172.17.12.51 พยายามที่จะเดา password เข้ามา ดังนั้นถ้าเราต้องการไม่ให้ IP ดังกล่าว สามารถทำอย่างนั้นได้อีก จึงจำเป็นต้องมีการ Block การเข้าถึง SSH ซึ่งอาจใช้ผ่าน Firewall เช่น ipfw ก็ได้
แต่ถ้ามี host ที่พยายามเข้าถึงเป็นจำนวนมาก การที่ block ผ่าน ipfw อาจเกิดความยุ่งยากในการจัดการ ดังนั้นจึงจะมาใช้วิธี block ผ่าน hosts.allow ของ FreeBSD แทน ดังนี้
สร้างไฟล์เก็บ IP Blacklist ดังตัวอย่าง
สร้างไฟล์ /root/sshd.blacklist
172.17.1.1 <---- block เป็นราย IP
172.17.12.0/255.255.255.0 <----- block ทั้ง Subnet /24 แก้ไขไฟล์ /etc/hosts.allow โดยหาแถวที่เขียนว่า ALL : ALL : allow แล้วเพิ่ม sshd : /root/sshd.blacklist : deny ไว้ข้างบน ดังนี้
sshd : /root/sshd.blacklist : deny
ALL : ALL : allow
ทำการ save ไฟล์ แล้วทดสอบการใช้งาน
ตัวอย่าง log ที่เกิดขึ้น
Aug 16 11:32:39 FreeBSD sshd[1041]: refused connect from 172.17.12.51 (172.17.12.51)
Aug 16 11:12:09 FreeBSD sshd[20296]: Failed keyboard-interactive/pam for root from 172.17.12.51 port 55095 ssh2
Aug 16 11:12:10 FreeBSD sshd[20296]: error: PAM: authentication error for root from 172.17.12.51
Aug 16 11:12:10 FreeBSD sshd[20296]: Failed keyboard-interactive/pam for root from 172.17.12.51 port 55095 ssh2
Aug 16 11:12:10 FreeBSD sshd[20296]: error: PAM: authentication error for root from 172.17.12.51
Aug 16 11:12:10 FreeBSD sshd[20296]: Failed keyboard-interactive/pam for root from 172.17.12.51 port 55095 ssh2
Aug 16 11:12:18 FreeBSD sshd[20304]: error: PAM: authentication error for root from 172.17.12.51
Aug 16 11:12:18 FreeBSD last message repeated 3 times
จาก Log ก็เห็นว่าเครื่อง IP 172.17.12.51 พยายามที่จะเดา password เข้ามา ดังนั้นถ้าเราต้องการไม่ให้ IP ดังกล่าว สามารถทำอย่างนั้นได้อีก จึงจำเป็นต้องมีการ Block การเข้าถึง SSH ซึ่งอาจใช้ผ่าน Firewall เช่น ipfw ก็ได้
แต่ถ้ามี host ที่พยายามเข้าถึงเป็นจำนวนมาก การที่ block ผ่าน ipfw อาจเกิดความยุ่งยากในการจัดการ ดังนั้นจึงจะมาใช้วิธี block ผ่าน hosts.allow ของ FreeBSD แทน ดังนี้
สร้างไฟล์เก็บ IP Blacklist ดังตัวอย่าง
สร้างไฟล์ /root/sshd.blacklist
172.17.1.1 <---- block เป็นราย IP
172.17.12.0/255.255.255.0 <----- block ทั้ง Subnet /24 แก้ไขไฟล์ /etc/hosts.allow โดยหาแถวที่เขียนว่า ALL : ALL : allow แล้วเพิ่ม sshd : /root/sshd.blacklist : deny ไว้ข้างบน ดังนี้
sshd : /root/sshd.blacklist : deny
ALL : ALL : allow
ทำการ save ไฟล์ แล้วทดสอบการใช้งาน
ตัวอย่าง log ที่เกิดขึ้น
Aug 16 11:32:39 FreeBSD sshd[1041]: refused connect from 172.17.12.51 (172.17.12.51)
สมัครสมาชิก:
บทความ (Atom)