WebServer

การปรับแต่ง WebServer Server Hosting ตั้งค่าต่าง apache Mysql php เทคนิคเรื่องความปลอภัย

User Rating: 0 / 5

Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive

เปิด Port สำหรับ DNS Server จัดการ Firewall บน CentOS 7
สำหรับ  CentOS 7 แถม Default Firewall มาให้ ซึ่งถ้าก่อนหน้านี้ ใครใช้ iptable เป็น firewall อยู่ก็จะไม่ค่อยคุ้นเท่าไหร่
สำหรับ DNS Server จะใช้ port 53 ทั้ง tcp/udp ซึ่งทั้งสองตัวนี้ โดยค่าเริ่มต้นของ firewall บน   CentOS 7 ตัวนี้ถูกปิด ไว้
วิธีเปิด ใช้คำสั่งตามนี้
firewall-cmd --zone=dmz --add-port=53/tcp --permanent
firewall-cmd --zone=dmz --add-port=53/udp --permanent

หลักจากนั้น สั่ง reload

วิธีเช็คง่ายๆ ว่า port ถูกปิดอยู่หรือไม่ ใช้ คำสั่ง ping ตามด้วยชื่อโดเมนในครื่องชี้ DNS Server มาที่เครื่องเรา
ping mydomain.com

ถ้าสั่งไปแล้วขึ้นข้อความ
ping: unknown host mydomain.com 
ก็แสดงว่า firewall ยังปิด port 53 ไว้อยู่

คำสั่งเช็คสถานะของ firewall
systemctl start firewalld
ผลที่ได้

systemctl status firewalld
â— firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Fri 2016-10-28 23:44:24 ICT; 12h ago
  Process: 783 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 783 (code=exited, status=0/SUCCESS)

คำสั่งเช็ค Port ที่ รัน DNS Server อยู่ด้วย netstat 
netstat -lnp | grep named
ผลที่ได้ดประมาณนี้
tcp        0      0 122.122.122.122:53      0.0.0.0:*               LISTEN      16614/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      16614/named
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      16614/named
tcp6       0      0 ::1:953                 :::*                    LISTEN      16614/named
udp        0      0 122.122.122.122:53      0.0.0.0:*                           16614/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           16614/name

User Rating: 4 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Inactive

จากบทความที่แล้ว มาใช้ rsync ในการ Backup ข้อมูลกัน เป็นการ Backup ไฟล์ในเครื่องเดียวกัน

บทความนี้มาดูการ Backup ไฟล์จาก Server หนึ่งไปไว้อีก Server หนึ่ง

โปรแกรมที่ต้องการใช้ คือ rsync และ SSH Server

รูปแบบคำสั่ง

rsync -options -e ต้นทาง ปลายทาง

ทั้งต้นทาง และ ปลายทางสามารถใช้ SSH ได้

ตัวอย่าง การ Backup ด้วยการ Transfer ไฟล์จาก Server IP xxx.xxx.xxx.xxx มาไว้ในเครื่องที่รันคำสั่ง

rsync -av --delete --exclude="home/admin" -e ssh This email address is being protected from spambots. You need JavaScript enabled to view it.:/home /backup/xxx

อธิบายความหมาย

เป็นการ copy ไฟล์จาก server ip xxx.xxx.xxx.xxx folder home ทั้ง folder รวม folder ย่อยทุก folder ยกเว้น /home/admin

มาไว้ที่ /backup/xxx ของเครื่องที่รันคำสั่งนี้

-a, -v, --exclude ดูได้จากบทความ มาใช้ rsync ในการ Backup ข้อมูลกัน

--delete ให้ลบไฟล์ปลายทางถ้าไฟล์ต้นทางถูกลบไป

เพิ่มเติม

ถ้า xxx.xxx.xxx.xxx ไม่ได้ใช้ port 22 ให้ใส่ options

-p เพิ่มเข้าไปหลัง ip เช่น -p 1111

User Rating: 4 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Inactive

ก่อนอื่นมาทำความรู้จัก rsync กันก่อน Rsync เป็นโปรแกรม ไว้สำหรับ Backup ข้อมูล เป็น Directory
หนึ่งไปยังอีก Directory ทำงานได้หลายโหมด หลักการทำงานมันจะเปรียบเทียบไฟล์ ให้เรา ถ้าไฟล์เดิมมีอยู่
แล้วและยังไม่มีการเปลี่ยนแปลงอะไร ก็จะข้ามไฟล์นั้น ไป ทำให้เวลาในการ Backup ข้อมูลน้อย
นอกจากนี้ ถ้านำ rsync ใช้ร่วมกับ ssh ก็สามารถ Backup ไฟล์ข้าม Server ได้ ซึ่ง rsync มีให้ใช้กับทุก OS
นั่นหมายความว่าเรา สามารถ Backup Directory ข้าม Server ข้าม OS ได้

วิธีใช้งาน rsync มาดูคำสั่ง  (ถ้า OS ที่ใช้ยังไม่มีโปรแกรมนี้ก็ติดตั้งก่อน)
แบบแรก Backup Directory ใน Server เดียวกันไปไว้อีก Directory หนึ่งเช่น
ต้องการ Backup /home ไปไวทีที่ /backup/xxxx/
ใช้คำสั่ง (ตัวอย่างใช้ OS FreeBSD)

rsync -av --exclude="home/admin/admin_backups/*.gz" /home /backup/xxx

ความหมาย Option แต่ละตัว
-a คือ archive ทำให้ ไฟล์ตันฉบับกับไฟล์ปลายทางเหมือนกันทุกอย่าง
-v คือ verbose ให้แสดงรายละเอียดระหว่างทำงานขึ้นมาบนหน้าจอ
--exclude คือไม่รวมไฟล์ สามารถให้ รูปแบบ ได้เช่น ตามตัวอย่างหมายความว่า ไม่เอา ไฟล์ทุกไฟล์ที่ .gz ที่อยู่ใน
home/admin/admin_backups/ *
--delete ให้ลบไฟล์ปลายทางถ้าไฟล์ต้นทางถูกลบไป

 

บทความต่อไป การใช้ rsync ในการ Backup ข้าม Server ด้วย rsync ssh

User Rating: 1 / 5

Star ActiveStar InactiveStar InactiveStar InactiveStar Inactive

ช่วงนี้ Server เจอปัญหา DDoS เข้ามาทาง phpMyAdmin วิธีแก้ไขคือการอัพเกรด

ถ้า WebServer ติดตั้ง ด้วย directadmin ไว้ อัพเกรดก็คือ การ build ใหม่ ทำได้ง่ายๆ ตามนี้

มาเริ่ม Upgrade phpMyadmin ใน directadmin กัน เลย
Login เข้า Server ด้วย ssh ในฐานะ Root

เข้าไปที่ 
cd /usr/local/directadmin/custombuild
./build set downloadserver files1.directadmin.com
./build set phpmyadmin_ver 4
./build update
./build phpmyadmin

สั่งไปทีละบรรทัดแล้วรอให้ทำงานจบ แล้วสั่งบรรทัดถัดไป รอจนแล้ว แล้วของเข้า PHPMyadmin ใหม่ ก็จะได้เวอร์ชั่นใหม่ พร้อมใช้งานแล้วครับ

 

ดูแบบ VDO ได้ที่

https://www.youtube.com/watch?v=Y5wWyf1n5ps

User Rating: 3 / 5

Star ActiveStar ActiveStar ActiveStar InactiveStar Inactive

ลบ Message System tickets ใน Directadmin แบบเกลี้ยงๆ
ปัญหาเจอ brute force attack ทำให้ directadmin สร้าง Message System ขึ้นเต็มพื้นที่การใช้งาน
วันนี้ เลยหาทางลยออก แบบ ไม่ต้องเข้าลบที่ละหน้าใน หน้า admin ของ directadmin  ซึ่งทำแบบนั้น
คงใช้เวลาเยอะมาก

เริ่มกันเลย
เข้าไปที่จัดการให้  tickets.list หมดจดเหลือแต่บรรทัดเปล่าๆ
โดย

cd /usr/local/directadmin/data/admin
echo -n "" > tickets.list

หรือ ถ้าต้องการลบ ของ User อื่นๆ ด้วย ก็เข้าไป

cd /usr/local/directadmin/data/users/username
echo -n "" > tickets.list

ต่อไปลบไฟล์ที่เก็บข้อความจริงของ tickets
ใช้คำสั่ง

rm -rf /usr/local/directadmin/data/tickets/*

เท่านี้เราก็จะได้พื้นที่กลับมาใช้งานได้

Unix commands

User Rating: 1 / 5

Star ActiveStar InactiveStar InactiveStar InactiveStar Inactive
ในบทความ .htaccess ใช้ประโยนช์ สำหรับ เจ้าของเว็บให้การเปลี่ยนแปลงการเข้าถึง เว็บเรา บน Host เพื่อกำหนดคุณสมบัติต่างๆ ให้แตกต่างจากเว็บอื่นๆ บน Host เดียวกัน ในตัวอย่างนี้ จะบังคับให้ ผู้ใช้งานเว็บเราเข้า เว็บด้วย HTTPS เพื่อความปลอดภัยของข้อมูลในการรับส่ง ระหว่าง Browser กับ Webserver ที่เราโดเมนของเว็บเราอยู่
เช่น เวลาผู้เข้าลิงค์ต่างๆ หรือ POST ค่าจากฟอร์ม ต่างๆ ข้อมูลที่ส่งเข้ามาที่ Webserver ก็จะถูกเข้ารหัสก่อนเสมอ
ตัวอย่าง ให้ทำการสร้างไฟล์ .htaccess เก็บไว้ที่ root directory ของเว็บ ใส่รายข้อมูลในไฟล์ตามนี้
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*\.)*yourdomain.com$ [NC]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R]
เปลี่ยน ข้อควยามสีแดงเป็นเชื่อโดเมนของเรา

ถ้าทำเว็บด้วย Joomla ให้เปลี่ยนชื่อไฟล์ htaccess.txt เป็น ".htaccess"
แล้วเพิ่ม บรรทัดนี้ลงไป
RewriteCond %{HTTP_HOST} ^(.*\.)*yourdomain.com$ [NC]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R]
ไม่ต้องใส่
RewriteEngine On เพราะ Joomla ได้เตรียม ไว้ให้อยู่แล้ว
เท่านี้ตอนเข้าเว็บเราทุกคนก็จะเข้าด้วย https แล้ว

User Rating: 2 / 5

Star ActiveStar ActiveStar InactiveStar InactiveStar Inactive

การตั้งค่าให้ Mysql สามารถ connect จากเครื่องอื่นได้
เวลาเราติดตั้ง mysql เสร็จ ก็จได้ ไฟล์ my.cnf ในกรณี ติดตั้งบน Unix, linux ตระกูลต่างๆ หรือ my.ini กรณี OS ของเราเป็น Windows

กณิตัวอย่าง เป็นการกำหนดค่าให้ เครื่องอื่น ติดต่อเข้ามายัง Mysql Server บนเครื่อง Ubuntu ได้
แก้ไขไฟล์ my.cnf
login เข้าระบบ
sudo nano /etc/my.cnf แก้บรรทัด

bind-address=YOUR-SERVER-IP
เป็น IP ของเครื่อง

เช่น

bind-address=192.168.1.100

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
bind-address=192.168.1.100
# skip-networking
....

เสร็จแล้ว restart mysql

sudo /etc/init.d/mysql restart

ต่อไปเราก็สามารถเพิ่ม user ด้วย phpMyadmin หรือ command โดย ระบุ Host เป็น % ได้แล้ว

** ถ้าเครื่องลง ติด firewall iptables ไม่สามารถเข้าใช้งาน port 3306 ได้ให้เพิ่ม port ลงไปด้วยคำสั่ง

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

เท่านี้เราก็สามารถใช้เครื่องอื่นติดต่อเข้ามายัง ฐานข้อมูลบน Mysql บน server เราได้แล้วครับ

User Rating: 2 / 5

Star ActiveStar ActiveStar InactiveStar InactiveStar Inactive

จากบทความที่แล้ว สอนการติดตั้ง FTP Server ด้วย vsftpd วิธีติดตั้ง FTP Server ทำ ไฟล์เซิร์ฟเวอร์ ว้ใช้งาน ด้วย vsftpd
แต่ว่าในขั้นสร้าง User เพื่อใช้งาน FTP นั้น ต้องสั่งหลาย คำสั่ง กว่าจะได้ user เพื่อใช้งาน
ด้วยความขีเกียจ ผมก็เลย เขียน Python ขึ้นมาไฟล์หนึ่งไว้สำหรับสร้าง user และกำหนดค่าต่างๆ ที่ต้องการให้กับ user ของเรา

ตัวอย่างโค้ด ไฟล์ addftpuser.py
from subprocess import call
u=raw_input('Enter New User name:')
call(['mkdir', '/var/www/'+u])
call(['chmod', '755', '/var/www/'+u])
call('htpasswd -d /etc/vsftpd/ftpd.passwd '+u, shell=True)
call(['chown', 'vsftpd:nogroup','/var/www/'+u])


เรียกใช้งาน
sudo python addftpuser.pyจะมี หน้าจอให้เรากรอก user, password ของ user นั้นขึ้นมา ให้เรากรอก เราก็ใส่ค่าตามต้องการเข้าไป
โปรแกรมจะสร้าง folder ชื่อเดียวกับ user ไว้ใน /var/www/user
และกำหนด permission ของไฟล์ให้เราอัตโนมัต

โปรแกรมนี้ใช้งานได้กับ vsftpd Server เท่านั้นนะครับ

สามารถศึกษาบทเรียนเกี่ยวกับ Python ได้ที่นี่

User Rating: 1 / 5

Star ActiveStar InactiveStar InactiveStar InactiveStar Inactive

ติดตั้ง FTP Server ด้วย vsftpd และทำ virtual users
login เข้าระบบ ในฐาน root
เตรียมตัวก่อนติดตั้ง
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:thefrontiergroup/vsftpd
sudo apt-get update
sudo apt-get install vsftpd libpam-pwdfile
แก้ไขไฟล์ vsftpd.conf

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bakสร้างไฟล์ vsftpd ขึ้นมาใหม่
sudo nano /etc/vsftpd.conf
เพิ่มข้อความข้างล่างลงใน ไฟล์
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
chroot_list_enable=YES
allow_writeable_chroot=YES

ในที่นี้จะใช้ root ของแต่ละคนอยู่ที่ /var/www/ชื่อ user

สร้าง virtual users

sudo mkdir /etc/vsftpd

เพิ่ม user
sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1-c คือสร้างuser ใหม่ถ้ายังไม่มีชื่อนี้อยู่ในระบบ
-d คือเข้ารหัส รหัสผ่านของ user ด้วย md5

ถ้าต้องการเพิ่ม user อื่นๆ ก็เป็น จาก user1 เป็น ชื่อ user ที่เราต้องการเพิ่ม

Config PAM

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
sudo nano /etc/pam.d/vsftpdเพิ่มข้อความข้างล่างนี้ลงในไฟล์
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

เพิ่ม user โดยไม่ต้องให้ user เข้า ใช้งาน shell
sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
สร้าง folder สำหรับเก็บไฟล์ ของ user
sudo mkdir /var/www/user1
sudo chmod -w /var/www/user1
sudo chmod 755 /var/www/user1
sudo chown -R vsftpd:nogroup /var/www/user1


Restart vsftpd
sudo /etc/init.d/vsftpd restart

*** จะเห็นว่าตอนสร้าง user ต้องใช้ หลายคำสั่ง ผมได้เขียน เป็นโปรแกรมเล็กๆขึ้นมาเพื่อให้ ใช้เพิ่ม user ได้สะดวกและง่ายขึ้น ดูได้ที่ เขีบน Python เพิ่ม User ใน vsftpd FTP Server