เทคนิคการใช้งานคำสั่ง screen บน Linux

ในกรณีที่อยู่ภายนอกระบบเครือข่ายมหาวิทยาลัย การจะเข้าถึง Linux Server ของตนเองนั้น อาจจะทำได้โดย VPN เข้ามา แล้ว จึงใช้ SSH Client ต่างๆ เพื่อเข้าถึง SSH มายัง Server ที่ เปิดให้ Secure Shell ได้จากภายนอก แล้วจึง ssh จากเครื่องดังกล่าว ไปยัง Server ที่ต้องการ ปัญหาคือ การใช้งาน VPN ทำให้ ได้ IP เป็น Private ภายในมหาวิทยาลัย อาจจะไม่สะดวกในบางประการ ครั้นจะต้อง ssh ไปยังเครื่องที่เปิดให้ แล้วค่อยไปต่อก็ไม่สะดวกนัก เพราะ ถ้าต้องทำงานกับหลายๆเครื่อง ก็ต้อง ssh กันหลายรอบ บทความนี้ ขอยกตัวอย่างว่า มีเครื่อง xxx.psu.ac.th เปิดให้ ssh จากภายนอกเข้ามาได้ และมีเครื่อง aaa.psu.ac.th, bbb.psu.ac.th, ccc.psu.ac.th และ ddd.psu.ac.th เป็นเครื่องที่ต้องการจะเข้าไปจัดการ ด้วย SSH Client และสมมุติให้เครื่องต่างๆ เปิด Firewall ให้ xxx.psu.ac.th สามารถ ssh ไปได้ วิธีการหนึ่งที่สะดวกกว่าการ ssh หลายๆรอบ คือ การใช้คำสั่ง screen ขั้นตอนคือ ssh ไปยังเครื่อง xxx.psu.ac.th ใช้คำสั่ง screen จากนี้ไป เป็นการติดต่อไปยัง Server ต่างๆ … ที่ Shell ของ screen บนเครื่อง xxx.psu.ac.th ใช้คำสั่ง ssh username@aaa.psu.ac.th ก็จะได้เข้าถึง aaa.psu.ac.th ได้ เมื่อต้องการ ติดต่อไปยัง bbb.psu.ac.th ก็ กดปุ่ม Ctrl + a แล้วกดตัว c (c ตัวพิมพ์เล็ก) จากนั้นจะได้ Prompt ใหม่ของ xxx.psu.ac.th แล้วใช้คำสั่ง ssh username@bbb.psu.ac.th เมื่อต้องการ ติดต่อไปยัง ccc.psu.ac.th ก็ กดปุ่ม Ctrl + a แล้วกดตัว c (c ตัวพิมพ์เล็ก) จากนั้นจะได้ Prompt ใหม่ของ xxx.psu.ac.th แล้วใช้คำสั่ง ssh username@ccc.psu.ac.th เมื่อต้องการ ติดต่อไปยัง ddd.psu.ac.th ก็ กดปุ่ม Ctrl + a แล้วกดตัว c (c ตัวพิมพ์เล็ก) จากนั้นจะได้ Prompt ใหม่ของ xxx.psu.ac.th แล้วใช้คำสั่ง ssh username@ddd.psu.ac.th ต่อไป หากต้องการดูว่า มีการเชื่อมต่อไปยัง Server ใดไว้บ้าง ใช้คำสั่ง Ctrl + a แล้ว กด ” (Double Quote) ก็จะแสดง รายการของ Server ที่ติดต่อไป โดยนำหน้าด้วย ตัวเลข เริ่มจาก 0, 1, 2 และตามด้วยชื่อ โดยเริ่มต้น จะเป็นชื่อ Shell เช่น bash ทำให้จำได้ยาก แต่สามารถ ใช้ปุ่ม ลูกศร บนคีย์บอร์ด เพื่อเลื่อนขึ้นลงได้ ให้ เลื่อนไปที่อันแรก แล้วกด Enter (ซึ่งก็คือเครื่อง aaa.psu.ac.th)

Read More »

Shorewall Blacklist

ใช้ได้กับ Shorewall 4.4.12 ขึ้นมา แก้แฟ้ม /etc/shorewall/interfaces โดยเพิ่มความว่า blacklist ต่อท้ายของเดิม เป็น net eth0 detect tcpflags,logmartians,nosmurfs,blacklist เพิ่มลิสต์ที่ต้องการบล็อคลงไปในแฟ้ม /etc/shorewall/blacklist ตัวอย่างค้นหาเครื่องที่ต้องการบล็อคการเข้าถึงพอร์ต 80 และ 443 grep -R phpmyadmin/scripts/setup.php /var/log/apache2|cut -d: -f2|awk ‘{ print $1 }’|sort -t’.’ -n -k1,1 -k2,2 -k3,3 -k4,4|uniq จากตัวอย่างในเครื่องเราไม่มี phpmyadmin แต่มีคนพยายามเข้าถึงตัวติดตั้ง phpmyadmin ฉะนั้นบล็อค IP พวกนี้ไว้ก่อน (บล็อคถาวรกรั่กๆ…) เอา IP จากข้อที่แล้วมาใส่ในแฟ้ม /etc/shorewall/blacklist รูปแบบ #ADDRESS/SUBNET PROTOCOL PORT เช่น 93.115.210.90 tcp 80,443 93.174.93.153 tcp 80,443 94.23.58.185 tcp 80,443 94.102.51.155 tcp 80,443 103.247.21.60 tcp 80,443 107.6.88.155 tcp 80,443 109.163.232.218 tcp 80,443 110.170.34.220 tcp 80,443 111.90.168.5 tcp 80,443 115.84.101.78 tcp 80,443 115.238.101.45 tcp 80,443 115.239.253.11 tcp 80,443 116.93.105.112 tcp 80,443 117.35.96.146 tcp 80,443 118.140.120.26 tcp 80,443 119.52.254.20 tcp 80,443 119.57.51.154 tcp 80,443 122.49.0.220 tcp 80,443 123.125.148.79 tcp 80,443 125.210.204.242 tcp 80,443 restart shorewall sudo shorewall restart IP ที่ถูกแบล็คลิสต์ อาจหายไปจากสารบบ ทำให้ shorewall start ไม่ขึ้น ต้องลบไอพีดังกล่าวออกไปก่อนจึงจะ start ได้ Compiling /etc/shorewall/blacklist… ERROR: Unknown Host (93.x4.93.153) : /etc/shorewall/blacklist (line 23) จบ… ขอให้สนุกครับ ที่มา http://shorewall.net/manpages/shorewall-blacklist.html คีย์เวิร์ดสำหรับแบน /CFIDE/administrator/enter.cfm /MyAdmin/scripts/setup.php /myadmin/scripts/setup.php /phpMyAdmin/scripts/setup.php /pma/scripts/setup.php /w00tw00t.at.blackhats.romanian.anti-sec:) เป็นต้น

Read More »

เทคนิคการเขียน Shell Script #1

เมื่อต้องการเขียน Shell Script เพื่อรับ Argument และ Option เช่น เขียน myscript.sh ซึ่งแบ่งเป็น 3 แบบ 1) $ sh myscript1.sh myfirstname mylastname 16 2) $ sh myscript2.sh -f myfirstname -l mylastname -a 16 3) $ sh myscript3.sh –firstname myfirstname –lastname mylastname –age 16 [บทความนี้ ใช้งานบน Ubuntu 12.04 Server และ ใช้ Bash Shell] 1) วิธีแรก คือ การรับตัว Argument เรียงตามลำดับ โดยใช้ เครื่องหมาย $ ตามด้วยลำดับของตัวแปร เช่น $1, $2, $3 ดัง Script myscript1.sh มีรายละเอียด ต่อไปนี้ firstname=$1 lastname=$2 age=$3 echo “Firstname=$firstname” echo “lastname=$lastname” echo “age=$age” วิธีนี้ ข้อดีคือ สร้างง่าย แต่ ข้อเสียคือ ต้องใส่ Argument ตามลำดับเท่านั้น 2) วิธีที่สอง คือ มีการใช้ Option แบบชื่อสั้น เช่น -f, -l ,-a โดยต้องใช้คำสั่ง getopts ดังตัวอย่าง Script myscript2.sh getopts “f:l:a:” opt while [ “$opt” != “?” ] do case $opt in f) echo “Firstname: $OPTARG” ;; l) echo “Lastname: $OPTARG” ;; a) echo “Age: $OPTARG” ;; esac getopts “f:l:a:” opt done อธิบายเพิ่มเติม getopts “f:l:a:” opt คำสั่งนี้ บอกว่า getopts จะรับ Option คือ f, l และ a และ เมื่อรับมาแล้ว จะใส่ในตัวแปร opt ส่วนใน “f:l:a:” นั้น เป็นการกำหนด Short Option Name โดยที่ เป็นอักษรตัวเดียว และ ค่า Option ใด ไม่มี เครื่องหมาย “:” แสดงว่า ไม่ต้องการใส่ค่า Option ใด มี     เครื่องหมาย “:” แสดงว่า ต้องการมีการใส่ค่า Option ใด ไม่มี เครื่องหมาย “::” แสดงว่า จะใส่ค่า หรือไม่ใส่ค่า ก็ได้ while [ “$opt” != “?” ] … done วนลูป ทุก Options จนเจอค่า “?”

Read More »

วิธีตรวจสอบเว็บไซต์ที่โดน Hack #12

บทความนี้ จะกล่าวถึง วิธีการปิดช่องโหว่ของ Apache ที่ให้บริการ Web Hosting เลย เผื่อมีผู้ใช้ ติดตั้ง Joomla และมี JCE รุ่นที่มีช่องโหว่ จะได้ไม่สร้างปัญหา และ แนะนำวิธีสำหรับผู้พัฒนาเวปไซต์เองด้วย ที่เปิดให้มีการ Upload ไฟล์โดยผู้ใช้ผ่านทาง Web ด้วย … เพราะหน้าที่นี้ ควรเป็นของ Web Server Administrator ไม่ใช่ของ Web Master หรือ Web Author ครับ จากปัญหาช่องโหว่ของ JCE Exploited ของ Joomla ที่อธิบายไว้ใน วิธีตรวจสอบเว็บไซต์ที่โดน Hack #3 ที่อธิบายขั้นตอนการเจาะช่องโหว่, วิธีตรวจสอบเว็บไซต์ที่โดน Hack #4 ซึ่งเป็นวิธีการตรวจสอบค้นหา และทำลาย Backdoor และ วิธีตรวจสอบเว็บไซต์ที่โดน Hack #11  วิธีการ Incremental Backup ซึ่งสามารถช่วยกู้ไฟล์ได้และรู้ว่า มีไฟล์แปลกปลอมอะไรเกิดบ้าง ซึ่งเป็นการแก้ปัญหาปลายเหตุทั้งสิ้น ส่วน วิธีตรวจสอบเว็บไซต์ที่โดน Hack #5 กล่าวถึงการตรวจสอบว่า Software ที่ใช้งานอยู่มีช่องโหว่อะไรบ้าง ด้วยการตรวจสอบ CVE เป็นต้น สำหรับ JCE Exploited จะพบว่า การวางไฟล์ Backdoor จะเริ่มวางไว้ที่ไดเรคทอรี่ images/stories ที่ แกล้งเป็นไฟล์ .gif แล้วเอาโค๊ด PHP เข้ามาใส่ แล้วเปลี่ยนนามสกุลเป็น .php ภายหลัง ดังนั้น หาก Apache Web Server สามารถ ปิดกั้นตั้งแต่จุดนี้ได้ กล่าวคือ ต่อให้เอาไฟล์มาวางได้ แต่สั่งให้ทำงานไม่ได้ ก็น่าจะปลอดภัย และ หากพัฒนาเวปไซต์เอง หรือ ผู้ใช้ของระบบต้องการให้ Upload ไฟล์ไว้ในไดเรคทอรี่ใดได้ ก็ต้องแจ้งให้ Web Server Administrator รับทราบ และเพิ่มเติมให้ น่าจะทำให้ปลอดภัยมากขึ้นได้ สมมุติฐานคือ ติดตั้ง OS และ Apache Web Server ใหม่ ติดตั้ง Joomla ใหม่ หรือ เอา Web Application ที่ปลอดช่องโหว่อื่นๆ/Backdoor มาลง โดย Joomla ที่มีที่วางไฟล์ภาพไว้ที่ images/stories ส่วน Web Application อื่นๆ ขอสมมุติว่าตั้งชื่อไดเรคทอรี่ว่า uploads สำหรับ Apache2 บน Ubuntu Apache 2.2 นั้น มีโครงสร้างไดเรคทอรี่ดังนี้ /etc/apache2/ |– apache2.conf |       `–  ports.conf |– mods-enabled |       |– *.load |       `– *.conf |– conf.d |       `– * |– sites-enabled         `– * เมื่อ Apache เริ่ม (Start) ก็จะไปอ่าน /etc/apache2/apache2.conf ในนั้น จะกำหนดภาพรวมของระบบ ได้แก่ ใครเป็นคน Start (APACHE_RUN_USER/APACHE_RUN_GROUP), การกำหนดชื่อไฟล์ .htaccess ที่เปิดให้ผู้ใช้ปรับแต่ง Apache ที่แต่ละไดเรคทอรี่ของตนได้, กำหนดว่า จะเรียกใช้ Module อะไรบ้าง โดยการ Include *.load, *.conf

Read More »