เทคนิคการจับตายพวกชอบแอบล๊อกอินเข้า Centos/Linux Server
Total Page:16
File Type:pdf, Size:1020Kb
DenyHosts 1 เทคนิคการจับตายพวกชอบแอบล๊อกอินเข้า CentOS/Linux Server เคยลองดูข้อมูลในไฟล์ /var/log/secure มั๊ยครับ ไฟล์นี้จะเก็บข้อมูลทุกอย่างถ้ามีความพยายามจะล๊อกอินเข้าเครื่อง CentOS ด้วย Secure Shell ทั้งล๊อกอินส าเร็จและไม่ส าเร็จ ลองดูตัวอย่างข้างล่างนี้ครับ Mar 17 14:55:46 supercall sshd[4727]: Failed password for root from 218.207.158.7 port 46665 ssh2 Mar 17 14:55:46 supercall sshd[4728]: Received disconnect from 218.207.158.7: 11: Bye Bye Mar 17 14:55:47 supercall sshd[4729]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.20 จะเห็นว่ามีคนพยายามที่จะล๊อกอินเข้ามาด้วย root มาจาก 218.207.158.7 ด้วย ssh2 ถ้าเราตั้งพาสเวอร์ด root ให้ง่ายต่อการเดาหล่ะก็ เสร็จเขาครับ เขาจะเข้ามาเป็น root และก็จะท าอะไรเครื่อง CentOS ของเราก็ได้ ก็ไม่จ าเป็นว่าเขาจะพยายามเข้ามาเป็น root นะครับ เขา อาจจะพยายามล๊อกอินเข้ามาด้วยยูสเซอร์อะไรก็ได้ วิธีป้องกันที่ผมชอบใช้มีอยู่ 2 วิธีครับ คือ ปิดไม่ให้ใช้ root ล๊อกอินเข้าทาง SSH (ใช้ยูสเซอร์อื่นแทน แล้วใช้ค าสั่ง su - root เมื่อต้องการเป็น root) และใช้โปรแกรม DenyHosts ล๊อกไอพีต้นทางไว้เลย ถ้าเข้ามาผิดเงื่อนไขก็จะเอาไอพีนั้นไปใส่ไว้ในไฟล์ /etc/hosts.deny ผลก็คือไอพี นั้นจะเข้ามาเครื่องเราไม่ได้อีก เราไม่ต้องท าเองครับโปรแกรม DenyHosts ท าให้ เว็บไซต์โปรแกรม DenyHosts http://denyhosts.sourceforge.net วิธีการติดตั้งและใช้งานโปรแกรม DenyHosts โปรแกรม DenyHosts ใช้ Python ด้วยนะครับ มีให้ดาวน์โหลดทั้งแบบ RPM และ Source Code ถ้าเลือกแบบ RPM ต้องเช็คว่าในเครื่องเรา ติดตั้ง Python เวอร์ชั่นอะไรแล้วเลือกดาวน์โหลดให้ตรง เช็คเวอร์ชั่น Python python -V 1. ดาวน์โหลด DenyHosts 2.6 ส าหรับ Python 2.3 http://downloads.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6-python2.3.noarch.rpm?use_mirror=nchc ส าหรับ Python 2.4 wget http://downloads.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6-python2.4.noarch.rpm?use_mirror=nchc ส าหรับ Python 2.5 wget http://downloads.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6-python2.5.rpm?use_mirror=nchc บทความโดย คุณหนุ่ย แห่งเว็บ www.voip4share.com DenyHosts 2 และนี่ส าหรับท่านที่จะสร้าง RPM เอง wget http://downloads.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6-1.src.rpm?use_mirror=nchc และถ้าต้องการจะคอมไพล์เอง wget http://downloads.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz?use_mirror=nchc 2. ติดตั้ง DenyHosts เครื่องผมเป็น Python 2.4 โค้ด: เลือกทั้งหมด rpm -ivh DenyHosts-2.6-python2.4.noarch.rpm ไฟล์และไดเร็คตอรี่ที่เกี่ยวข้อง ไฟล์ /usr/bin/denyhosts.py ไดเร็คตอรี่ /usr/share/denyhosts 3. สร้างไฟล์คอนฟิก โค้ด: เลือกทั้งหมด cd /ust/share/denyhosts cp denyhosts.cfg-dist denyhosts.cfg ไฟล์ denyhosts.cfg เป็นไฟล์คอนฟิกของ DenyHosts ครับ รายละเอียดทั้งหมดผมขอยกไว้ไปอยู่ตอนท้ายบทความ 4. ท าให้ DenyHosts ท างานในโหมด Daemon cp daemon-control-dist daemon-control แก้ไขบรรทัดต่อไปนี้ (ถ้าไฟล์เหล่านี้ไม่ได้อยู่ในต าแหน่งดีฟอลท์) ถ้าติดตั้งจาก RPM จะเป็นดีฟอลท์อยู่แล้วครับ จึงไม่ต้องแก้ไขอะไรในไฟล์นี้ DENYHOSTS_BIN = "/usr/bin/denyhosts.py" DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts" DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg" PYTHON_BIN = "/usr/bin/env python" เปลี่ยน Onwer และ Permission chown root daemon-control chmod 700 daemon-control บทความโดย คุณหนุ่ย แห่งเว็บ www.voip4share.com DenyHosts 3 5. ทดสอบรัน DenyHosts แบบ Daemon ./daemon-control start ถ้ารันได้ส าเร็จ จะมีข้อความแบบนี้ starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg โปรแกรมจะไปดูที่ไฟล์ /var/log/secure และจะเอารายชื่อ IP Address ที่พยายามจะล๊อกอินเข้า CentOS แต่ไม่ส าเร็จไปไว้ในไฟล์ /etc/hosts.deny และไฟล์ /usr/share/denyhosts/data/hosts-restricted และจะมีไดเร็คตอรี่ /usr/share/denyhosts/data ถูกสร้างขึ้นมา แสดงว่าเรารัน DenyHosts แบบ Daemon ได้ 6. ท าให้ DenyHosts รันทุกครั้งที่เปิดเครื่อง cd /etc/init.d ln -s /usr/share/denyhosts/daemon-control denyhosts chkconfig --level 35 denyhosts on มารู้จักกับไฟล์ต่างๆในไดเร็คตอรี่ /usr/share/denyhosts/data และหน้าที่ของมัน 1. ไฟล์ hosts เป็นรายชื่อ IP Address ที่พยายามล๊อกอินเข้ามาในวันที่และเวลาที่ระบุ ทั้งที่ล๊อกอินส าเร็จและไม่ส าเร็จ 66.18.176.160:4:Thu Mar 18 10:20:00 2010 67.52.158.237:265:Thu Mar 18 10:19:59 2010 2. ไฟล์ hosts-restricted เป็นรายชื่อ IP Address ที่ถูกน าไปใส่ไว้ในไฟล์ /etc/hosts.deny 3. ไฟล์ hosts-root เป็นรายชื่อ IP Address ที่พยายามจะล๊อกอินเข้ามาด้วย root ดังตัวอย่าง 110.164.66.222:0:Thu Mar 18 10:20:00 2010 112.143.13.139:0:Thu Mar 18 10:19:58 2010 124.127.117.105:13:Thu Mar 18 10:19:58 2010 183.89.134.100:1:Thu Mar 18 10:20:00 2010 4. ไฟล์ hosts-valid เป็นรายชื่อ IP Address ที่พยายามล๊อกอินเข้ามาด้วยยูสเซอร์ที่มีอยู่ในไฟล์ /etc/passwd รวมทั้งที่ล๊อกอินส าเร็จและไม่ส าเร็จ 202.173.222.125:0:Thu Mar 18 10:20:00 2010 บทความโดย คุณหนุ่ย แห่งเว็บ www.voip4share.com DenyHosts 4 203.130.33.50:0:Thu Mar 18 10:20:00 2010 203.179.88.218:0:Thu Mar 18 10:20:00 2010 218.207.158.7:31:Thu Mar 18 10:20:00 2010 5. ไฟล์ offset บันทึกการสตาร์ทของโปรแกรม sshd Mar 17 05:25:10 supercall sshd[2842]: Server listening on :: port 22.2068379 6. ไฟล์ suspicious-logins 7. ไฟล์ users-hosts เป็นรายชื่อยูสเซอร์ที่มีผู้พยายามสุ่มล๊อกอินเข้ามา พร้อมกับ IP Address เป็นยูสเซอร์ที่มีอยู่ในไฟล์ /etc/passwd ตัวอย่าง mailnull - 67.52.158.237:1:Thu Mar 18 10:19:59 2010 news - 61.19.255.53:1:Thu Mar 18 10:20:00 2010 news - 67.52.158.237:1:Thu Mar 18 10:19:59 2010 nfsnobody - 67.52.158.237:1:Thu Mar 18 10:19:59 2010 nobody - 67.52.158.237:1:Thu Mar 18 10:19:59 2010 operator - 67.52.158.237:1:Thu Mar 18 10:19:59 2010 root - 124.127.117.105:13:Thu Mar 18 10:19:58 2010 8. ไฟล์ users-invalid เป็นรายชื่อยูสเซอร์ที่มีผู้พยายามสุ่มล๊อกอินเข้ามา เป็นยูสเซอร์ที่ไม่มีอยู่ในระบบ คือไม่มีอยู่ในไฟล์ /etc/passwd ตัวอย่าง ion:2:Thu Mar 18 10:19:59 2010 iraf:2:Thu Mar 18 10:20:00 2010 irc:2:Thu Mar 18 10:19:59 2010 iresha:2:Thu Mar 18 10:20:00 2010 irina:2:Thu Mar 18 10:19:59 2010 9. ไฟล์ users-valid เป็นรายชื่อยูสเซอร์ที่มีผู้พยายามสุ่มล๊อกอินเข้ามา เป็นยูสเซอร์ที่มีอยู่ในไฟล์ /etc/passwd ตัวอย่าง adm:1:Thu Mar 18 10:19:59 2010 apache:2:Thu Mar 18 10:20:00 2010 bin:2:Thu Mar 18 10:20:00 2010 daemon:1:Thu Mar 18 10:19:59 2010 ftp:21:Thu Mar 18 10:20:00 2010 บทความโดย คุณหนุ่ย แห่งเว็บ www.voip4share.com DenyHosts 5 ตัวอย่างข้อมูลในไฟล์ /etc/hosts.deny ซึ่งถ้า CentOS พบว่า IP Address เหล่านี้พยายามจะใช้ SSH ล๊อกอินเข้ามาไม่ว่าจะด้วยยูสเซอร์อะไรก็ตาม มันจะ Reject ทันที และถ้าเรา เปลี่ยนจาก sshd เป็น ALL (ตั้งในไฟล์ denyhosts.cfg ได้) ก็จะเข้าไม่ได้ทุกเซอร์วิสบน CentOS sshd: 66.18.176.160 sshd: 67.52.158.237 sshd: 203.130.33.50 ไฟล์ allowed-hosts ไฟล์นี้ดีฟอลท์ไม่มีอยู่ใน DenyHosts นะครับ แต่เราสร้างขึ้นมาได้ ข้อมูลในไฟล์นี้จะเป็น IP Address หรือ Network Address ที่ DenyHosts จะไม่เอาไปไว้ในไฟล์ /etc/hosts.deny ซึ่งหมายความว่าจะล๊อกอินผิดๆยังไงก็ได้ กี่ครั้งก็ได้ vi /usr/share/denyhosts/data/allowed-hosts 192.168.0.* 127.0.0.1 58.59.60.1 ไฟล์ restricted-usernames ใส่ชื่อยูสเซอร์ที่ DenyHosts จะไม่ยอมให้ล๊อกอินเข้ามาในเครื่องเลย โดยเมื่อ DenyHosts พบว่ามีใครก็ตามที่พยายามล๊อกอินด้วยยูสเซอร์นี้ จะบล๊อก IP เลย vi /usr/share/denyhosts/data/restricted-usernames root mysql apache บทความโดย คุณหนุ่ย แห่งเว็บ www.voip4share.com DenyHosts 6 ไฟล์คอนฟิก denyhosts.cfg ############ THESE SETTINGS ARE REQUIRED ############ # # SECURE_LOG: the log file that contains sshd logging info if you are not sure, grep "sshd:" /var/log/* # # The file to process can be overridden with the --file command line argument # # Redhat or Fedora Core: SECURE_LOG = /var/log/secure # # Mandrake, FreeBSD or OpenBSD: #SECURE_LOG = /var/log/auth.log # # SuSE: #SECURE_LOG = /var/log/messages # # Mac OS X (v10.4 or greater - also refer to: http://www.denyhosts.net/faq.html#macos #SECURE_LOG = /private/var/log/asl.log # # Mac OS X (v10.3 or earlier): #SECURE_LOG=/private/var/log/system.log # # # HOSTS_DENY: the file which contains restricted host access information # # Most operating systems: HOSTS_DENY = /etc/hosts.deny # # Some BSD (FreeBSD) Unixes: #HOSTS_DENY = /etc/hosts.allow # # Another possibility (also see the next option): #HOSTS_DENY = /etc/hosts.evil บทความโดย คุณหนุ่ย แห่งเว็บ www.voip4share.com DenyHosts 7 # # PURGE_DENY: removed HOSTS_DENY entries that are older than this time when DenyHosts is invoked with the --purge flag # # format is: i[dhwmy] # Where 'i' is an integer (eg. 7) # 'm' = minutes # 'h' = hours # 'd' = days # 'w' = weeks # 'y' = years # # never purge: PURGE_DENY = # # purge entries older than 1 week #PURGE_DENY = 1w # # purge entries older than 5 days #PURGE_DENY = 5d # # PURGE_THRESHOLD: defines the maximum times a host will be purged. Once this value has been exceeded then this host will not be purged. # Setting this parameter to 0 (the default) disables this feature. # default: a denied host can be purged/re-added indefinitely #PURGE_THRESHOLD = 0 # # a denied host will be purged at most 2 times. #PURGE_THRESHOLD = 2 # # # BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY # # man 5 hosts_access for details บทความโดย คุณหนุ่ย แห่งเว็บ www.voip4share.com DenyHosts 8 # # eg. sshd: 127.0.0.1 # will block sshd logins from 127.0.0.1 # # To block all services for the offending host: BLOCK_SERVICE = ALL # To block only sshd: #BLOCK_SERVICE = sshd # To only record the offending host and nothing else (if using an auxilary file to list the hosts). Refer to: # http://denyhosts.sourceforge.net/faq.html#aux #BLOCK_SERVICE = # # # DENY_THRESHOLD_INVALID: block each host after the number of failed login attempts has exceeded this value. This value applies to invalid # user login attempts (eg. non-existent user accounts) # DENY_THRESHOLD_INVALID = 5 # # # DENY_THRESHOLD_VALID: block each host after the