Topic List
DirectAdmin ตั้งแต่เวอร์ชัน 1.39 เป็นต้นไป ได้เพิ่มความสามารถในการตรวจสอบการ Brute Force หรือการเดาสุ่มรหัสผ่านไปเรื่อยๆ (รายละเอียด) แต่สิ่งหนึ่งที่ DirectAdmin ไม่ได้ทำมาให้คือ ทำการแบนไอพีที่มา Brute Force เราโดยอัตโนมัติ ทำให้ DirectAdmin ทำได้เพียงแค่แจ้งเตือนว่ามีไอพีใด Brute Force เครื่องเราเรื่อยๆ โดยไม่ได้มีประโยชน์อันใดเพิ่มขึ้นมา (นอกจากทำให้รำคาญอีเมลแจ้งเตือน) เพราะฉะนั้นบทความนี้จะมาบอกถึงขั้นตอนทำให้ DirectAdmin แบนไอพีที่มา Brute Force โดยอัตโนมัติ โดยลินุกซ์ดิสโทรที่ผมใช้คือ Debian 6 64-bit ถ้าใช้ CentOS ลองทำตามขั้นตอนที่นี่ดูครับ
ขั้นแรกให้ลง iptables ก่อนด้วยคำสั่ง
apt-get install iptables
จากนั้นเราจะสร้างสคริปต์ blockip.sh ไว้ที่ /usr/local/directadmin/scripts/custom/blockip.sh โดยมีเนื้อหาตามนี้ครับ
#666666; font-style: italic;">#!/bin/sh
curriptables#7a0874; font-weight: bold;">(#7a0874; font-weight: bold;">) #7a0874; font-weight: bold;">{ #7a0874; font-weight: bold;">echo #ff0000;">"<br><br><textarea cols=160 rows=60>"; #000000; font-weight: bold;">/sbin#000000; font-weight: bold;">/iptables #660033;">-nL#7a0874; font-weight: bold;">echo #ff0000;">"</textarea>"; #7a0874; font-weight: bold;">}
#666666; font-style: italic;">### Make sure it's not already blocked #007800;">COUNT=#000000; font-weight: bold;"></span><span style="color: <a class="hashtag" href="/tags/c20cb9">#c20cb9</a>; font-weight: bold;">grep</span> <span style="color: <a class="hashtag" href="/tags/660033">#660033</a>;">-c</span> <span style="color: <a class="hashtag" href="/tags/007800">#007800</a>;">$ip</span> <span style="color: <a class="hashtag" href="/tags/000000">#000000</a>; font-weight: bold;">/</span>etc<span style="color: <a class="hashtag" href="/tags/000000">#000000</a>; font-weight: bold;">/</span>network<span style="color: <a class="hashtag" href="/tags/000000">#000000</a>; font-weight: bold;">/</span>iptables.save<span style="color: <a class="hashtag" href="/tags/000000">#000000</a>; font-weight: bold;">
;#000000; font-weight: bold;">if #7a0874; font-weight: bold;">[ #ff0000;">"#007800;">$COUNT" #660033;">-ne #000000;">0 #7a0874; font-weight: bold;">]; #000000; font-weight: bold;">then #7a0874; font-weight: bold;">echo #ff0000;">"#007800;">$ip already exists in iptables (#007800;">$COUNT). Not blocking."; curriptables #7a0874; font-weight: bold;">exit #000000;">2;
#000000; font-weight: bold;">fi
#7a0874; font-weight: bold;">echo #ff0000;">"Adding #007800;">$ip to iptables...<br>"; #000000; font-weight: bold;">/sbin#000000; font-weight: bold;">/iptables #660033;">-I INPUT #660033;">-s #007800;">$ip #660033;">-j DROP#000000; font-weight: bold;">/sbin#000000; font-weight: bold;">/iptables-save #000000; font-weight: bold;">> #000000; font-weight: bold;">/etc#000000; font-weight: bold;">/network#000000; font-weight: bold;">/iptables.save
#7a0874; font-weight: bold;">echo #ff0000;">"<br><br>Result:"; curriptables#7a0874; font-weight: bold;">exit #000000;">0;
เสร็จแล้วรันคำสั่ง
chmod 700 /usr/local/directadmin/scripts/custom/block_ip.sh
ซึ่งสคริปต์นี้จะทำให้เราสามารถสั่ง block ip ผ่านหน้าจัดการใน DirectAdmin ได้ โดยให้ไปที่เมนู Brute Force Monitor แล้วกดลิงก์ IP Info ของไอพีที่เราต้องการบล็อก หลังจากนั้นให้กดปุ่ม Block This IP ที่ด้านล่างสุด
ถ้าต้องการให้ iptables ถูก restore ข้อมูลใหม่ทุกครั้งที่ reboot เครื่อง ให้ใส่
post-up iptables-restore /etc/network/iptables.save
ลงไปที่ด้านท้ายของไฟล์ /etc/network/interfaces
ถ้าต้องการให้ DirectAdmin ทำการ block ip อัตโนมัติ โดยไม่ต้องมากดปุ่ม Block This IP เอง ให้สร้างไฟล์ /usr/local/directadmin/scripts/custom/bruteforcenotice_ip.sh และใส่เนื้อหาตามนี้
#!/bin/sh SCRIPT=/usr/local/directadmin/scripts/custom/block_ip.sh ip=$value $SCRIPT exit $?;
เสร็จแล้วรันคำสั่ง
chmod 700 /usr/local/directadmin/scripts/custom/brute_force_notice_ip.sh
โดยจำนวนการ Brute Force ก่อนที่จะโดน block ip นั้น สามารถตั้งได้ที่เมนู Administrator Settings > Notify Admins after an IP has และใส่จำนวนที่ต้องการลงไปครับ
ถ้าต้องการยกเลิก block ip อาจจะต้องเข้ามาพิมพ์คำสั่งยกเลิกด้วยตัวเองไปก่อนครับ ด้วยคำสั่งนี้
iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP iptables-save > /etc/network/iptables.save
เปลี่ยน xxx.xxx.xxx.xxx เป็น ip ที่เราต้องการยกเลิก block
ที่มา: วิธีการตั้งค่าให้ DirectAdmin Block IP อัตโนมัติเมื่อตรวจพบการ Brute Force บน Debian 6 64-bit , I wish to have a block_ip.sh so I can block IPs through DirectAdmin , How to block an IP in Linux
ไม่มีอะไรมาก แค่อยากบันทึกว่า เวลาเขียน script ภาษา php แล้วต้องการ run ด้วย crontab ซึ่งจะต้องระบุ path ของ php ให้ถูกต้อง ไม่อย่างนั้นมันก็จะ run ไม่ได้
ซึ่ง path ของ php ของ Directadmin ก็คือ /usr/local/bin/php และก็แค่นั้นเอง
suPHP และ PHP cgi ไม่สามารถเปลี่ยนค่า config โดย .htaccess ได้ จึงต้องใช้วิธีการเพิ่ม config โดยให้ php ไปอ่านจากไฟล์เพิ่มเติม
เริ่มด้วยการสร้างไฟล์ php.ini ไว้ใน /usr/local/directadmin/data/users/(username)/php/php.ini
แล้วเพิ่มใน Apache ว่า
SetEnv PHP_INI_SCAN_DIR /usr/local/directadmin/data/users/|USER|/php/
ที่มา DirectAdmin
พรบ.คอมพิวเตอร์บังคับให้เก็บ log ไว้อย่างน้อย 90 วัน
ขอเก็บรายละเอียดการทำไว้ก่อน ได้มาจาก แนะนำเก็บ log httpd ของ DirectAdmin Control Panel ให้เก็บได้ 90 วัน แบบง่าย ๆ
Step 1: Securing /tmp
Step 1.1: Backup your fstab file
cp /etc/fstab /etc/fstab.bak
Step 1.2: Creating tmpmnt partition file (Around 1Gb in size)
cd /var dd if=/dev/zero of=tmpMnt bs=1024 count=1048576
Step 1.3: Format the new partition
mkfs.ext3 -j /var/tmpMnt
Press Y when asked
Step 1.4: Making backup of old /tmp
cp -Rp /tmp /tmp_backup
Step 1.5: Mount the tmp filesystem
mount -o loop,noexec,nosuid,rw /var/tmpMnt /tmp
Step 1.6: Set the right permissions
chmod 0777 /tmp
Step 1.7: Copy the files back to new tmp folder
cp -Rp /tmp_backup/* /tmp/
Step 1.8: Adding new /tmp filesystem to fstab
echo "/var/tmpMnt /tmp ext3 loop,rw,noexec,nosuid,nodev 0 0" >> /etc/fstab
Step 2: No need for 2 tmp filesystems, so we symlink /var/tmp to /tmp
rm -rf /var/tmp/ ln -s /tmp/ /var/tmp
ปล.ลองทำแล้ว แต่ติดอยู่ที่ step 1.5 มีแจ้งว่า "mount: no permission to look at /dev/loop#" พอทำต่อ เหมือนกับไม่สำเร็จ
เพิ่งติดตั้ง DirectAdmin บน CentOS5.3 เป็นครั้งแรกในชีวิต หลังจากที่ติดตั้งเสร็จก็มีสิ่งที่ต้องทำต่อ ตามนี้
ก่อนลง ลองเช็คเวลาและ timezone ต้องกำหนด timezone ให้เรียบร้อย บน CentOS สามารถใช้ system-config-date เพื่อกำหนด timezone ได้
Sync เวลากับ time server
หากไม่มี ntpdate ก็ติดตั้งด้วย
yum install ntp
หรือ
apt-get install ntpdate
กำหนดให้มีการ sync time จาก clock.nectec.or.th ด้วยการตั้งเวลาใน crontab
crontab -e
แล้วเพิ่มโค๊ดไว้ด้านล่างสุด
0 */4 * * * root ntpdate clock.nectec.or.th
Howto: Sync เวลากับใครและบ่อยแค่ไหนดี
หลังจากนั้นก็ดำเนินการติดตั้งและ config security ตามรายการ
Step Security Unix/Linux - ฉบับ DirectAdmin และ บทความน่าอ่านจาก ThaiHostTalk
iptables - ติดตั้งไฟร์วอลเสีย และ DirectAdmin iptables , Shoutcast - not test
Intrustion detection and prevention for Apache with mod-security - พยายามทำแล้ว แต่ยังไม่ได้ผล
ปิด allow _ url _ fopen โดยแก้ไข php.ini เปลี่ยนจาก on เป็น off
; Disable allow_url_fopen for security reasons allow_url_fopen = Off
แก้ไขค่า default mysql เป็น MYISAM , utf8unicodeci โดยแก้ไขในไฟล์ /etc/my.cnf
# Add by softganz<br /> # Set default engin to MYISAM # Set default collation to utf8_unicode_ci default-storage-engine=MYISAM collation-server = utf8_unicode_ci character-set-server = utf8
บทความดี ๆ เกี่ยวกับ DirectAdmin