Archive for พฤษ าคม, 2008

May-22-08

การคอนฟิก SSL บน Ubuntu

posted by อดิศร ขาวสังข์

อ้างอิง http://articles.slicehost.com/2007/9/27/ubuntu-feisty-apache-ssl-and-vhosts 

บทนำ
การเชื่อมต่อไปยังเว็บไซต์ของคุณให้มีความปลอดภัยเป็นสิ่งที่จำเป็น  โดยเฉพาะเมื่อมีการป้อนรหัสผ่านหรือเมื่อเป็นการเข้าสู่ส่วนบริหารจัดการ (administration areas)

บทความนี้จะช่วยคุณในการสร้าง self-signed certificate และการคอนฟิก virtual host ด้วยการใช้ https connection (พอร์ต 443)

Non commercial
ก่อนอื่นเราจะมาดูในส่วนของ self-singed certificates ซึ่งจะสร้างคำเตือนเมื่อมีการแอกเซสผ่าน https link

Self-singed certificates ไม่เหมาะสมสำหรับ commercial site หรือ public facing site ใด ๆ แต่จะดีมากสำหรับส่วนบริหารจัดการส่วนบุคคล (Personal admistration areas)

There are many sites that specialise in issuing recognised and guaranteed certificates. A search for ’ssl certificates’ in your favourite search engine will provide many links.

SSL Directory
เราสามารถที่จะวาง certificate ที่ถูกสร้างขึ้นไว้ที่ใดก็ได ้แต่ผมมักชอบเก็บไว้ในโฟลเดอร์ที่ชื่อ /etc/apache2/ssl ซึ่งต้องสร้างก่อนดังนี้ :
sudo mkdir /etc/apche2/ssl

Certificate
การสร้าง self-signed certificates มีสองวิธี  สำหรับวิธีที่จะถูกใช้ในที่นี้เป็นการสร้าง single file และไม่ต้องการ passphase ในตอน reboot หรือ apache restart

เริ่มต้นให้ป้อนคำสั่งต่อไปนี้ :
sudo openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pemแล้วจะได้ initial output ดังนี้ :

Generating a 1024 bit RSA private key
……….++++++
…………………………………………………………………………………++++++
writing new private key to ‘/etc/apache2/ssl/apache.pem’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
ดังที่แสดง คุณจะถูกถามด้วยลำดับของคำถามดังต่อไปนี้ :

Country
Country Name (2 letter code) [AU]:
ในกรณีของผมป้อนเป็นประเทศไทย (TH)

State
State or Province Name (full name) [Some-State]:
คุณสามารถปล่อยว่างได้  แต่ในมี่นี้ผมใช้เป็นจังหวัด Songkhla

City
Locality Name (eg, city) []:
เช่นกัน คุณสามารถปล่อยว่างถ้าคุณไม่ต้องการ แต่สำหรับผมป้อนชื่อเมืองเป็น Hatyai

Organization
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
ผมใช้ชื่อบริษัทหลอก ๆ ว่า ITWizard Co Ltd.

Unit
Organizational Unit Name (eg, section) []:
ป้อนตามความเป็นจริงนะครับ แต่ผมใช้ IT

Name
Common Name (eg, YOUR name) []:
ป้อน domain address ของคุณ ซึ่งอาจจะเป็น admin.domain.com โดยให้ใช้เฉพาะค่าที่เป็น URL หรือ IP Address สำหรับผมใช้ www.itwizard.info เป็นตัวอย่าง

Email
Email Address []:
ถ้าคุณต้องการให้ email address ถูกแสดงผลบน certificate ก็ให้ป้อนเข้าไป  ถ้าคุณจะใช้ self-signed certificate สำหรับ public facing site ก็ขอแนะนำให้ป้อน address ที่สมบูรณ์ของบุคคลที่ใช้สำหรับการติดต่อ (person to contact)

ในที่นี้ผมใช้ adisorn.k@cattelecom.com

Done
You will be placed back at the command prompt and the certificate has been placed, as directed, in /etc/apache2/ssl/apache.pem.

mod_ssl
มาถึงตอนนี้ เราก็มี certificate ที่จำเป็นต้อง enable Apache mod_ssl ด้วยคำสั่ง :
sudo a2enmod ssl

แล้วทำการ reload apache ด้วยคำสั่ง :
sudo /etc/init.d/apache2 force-reload

ports.conf
ถัดไป ให้ทำการคอนฟิก apache ทำการเปิดรับ (listen) การทำงานที่พอร์ต 443 (the default https port) ด้วยคำสั่ง :
sudo nano /etc/apache2/ports.conf ให้มีค่าดังนี้ :
Listen 80
Listen 443
หรือ
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>

Virtual Hosts
ต่อไปเราจะต้องทำการคอนฟิก Virtual Host เพื่อ enable secure connection

จงจำไว้ว่า คุณสามารถมี cerfiticate อันเดียวเท่านั้นต่อ IP Address ซึ่งหมายความว่าถ้าคุณ enable SSL connection มากกว่า 1 virtual host จะเป็นการ แชร์ cerfiticate อันเดียวกัน

ถ้าคุณมี IP Address หลาย IP สำหรับ Site ของคุณ  คุณก็ควรจะคอนฟิก virtual host เป็นแบบ IP-base โดยไม่จำเป็นต้องใช้ named-base

เริ่มต้นด้วยการ enable port 443 บน default virtual host
sudo nano /etc/apache2/sites-available/default

โดยส่วนบนของไฟล์จะเป็นดังนี้ :
NameVirtualHost *
<VirtualHost *>

ให้ทำการเปลี่ยนแปลงค่าให้มีการ listen พอร์ตที่เป็น default http port (80) ดังนี้ :
NameVirtualHost *:80
<VirtualHost *:80>

และเพื่อให้สนับพอร์ต 443 ให้เพิ่มข้อความ ‘NameVirtualHost *:443′ เป็นดังนี้ :
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>

มาถึงตอนนี้ default virtual host จะมีการ listen ทั้งพอร์ต 80 และ 443 แต่ตอนนี้เราได้เซ็ตเฉพาะพอร์ต 80 เท่านั้น ซึ่งหมายถึงมันยังไม่สามารถเชื่อมต่อกับพอร์ต 443 ได้

ให้เราปรับแก้ให้ถูกต้องด้วยการสำเนาการเซ็ตค่าของ <VirtualHost *:80> ต่อไปนี้ :
<VirtualHost *:80>


</VirtualHost>

แล้วไป paste ที่ส่วนล่างของไฟล์ด้วยการเปลี่ยนพอร์ตเป็น *:443 ดังนี้ :
<VirtualHost *:443>


</VirtualHost>

และให้เพิ่มสองบรรทัดต่อไปนี้ เอาไว้ภายในบล็อกดังกล่าว
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem

Other virtual hosts
จำไว้ว่าการเปลี่ยนค่า <VirtualHost *>  ไปเป็น <VirtualHost *:80> ใน default virtual host file จำเป็นต้องเหมือนกับ virtual host file อื่น ๆ

และการเพิ่ม SSL support สำหรับ virtual host อื่น ๆ ทำได้ด้วยการทำซ้ำขั้นตอนที่ผ่านมา และจะมีสองคอนฟิกในแต่ละไฟล์ นั่นคืออันหนึ่งเป็นของพอร์ต 80 และอีกอันเป็นของพอร์ต 443 และจงจำไว้ว่าคอนฟิกของ virtual host ใดๆ จะแช์ certificate อันเดียวกัน

คุณไม่จำเป็นต้องเซ็ต NameVirtualHost ในแต่ละไฟล์  ให้เซ็ตเฉพาะใน default file เท่านั้น

Reload
มาถึงตอนนี้ก็ให้ reload apache ด้วยคำสั่ง :
sudo /etc/init.d/apache2 force-reload

การใช้งาน
ให้เรียกเป็น https เช่น https://mail.itwizard.info

จบครับ

May-22-08

ตัวอย่างการติดตั้ง snmpd บน ubuntu

posted by อดิศร ขาวสังข์

อ้างอิง http://www.debuntu.org/how-to-monitor-your-servers-with-snmp-and-cacti
ติดตั้งบน
Ubuntu 8.04

บทนำ
SNMP (Simple Network Management Protocol) เป็นโปรโตคอลสำหรับการจัดการเครือข่าย  แต่ละ Entity ที่ถูกจัดการในเครือข่ายจะรัน snmp server (snmpd) ซึ่งจะรวบรวมข้อมูลจาก Server เช่น networking, load, cpu

ขั้นตอนการติดตั้งและคอนฟิก

  1. ติดตั้งแพ็กเกต SNMP บน Server ที่เป็น SNMP daemon (snmpd) ด้วยคำสั่ง :
    sudo apt-get install snmpd

  2. การคอนฟิกให้แก้ไขไฟล์ /etc/default/snmpd โดยให้มีค่าที่จำเป็นดังนี้
    SNMPDRUN=yes
    SNMPDOPTS=’-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1′

  3. ค่า 127.0.0.1 ในข้อ 2 เป็นการอนุญาตให้ Server รอการเชื่อมต่อจาก Interface ที่เป็น localhost เท่านั้น ถ้าต้องการให้ Server รอการเชื่อมต่อจากทุก Interface (listen on all interface) ก็ทำได้ด้วยการเอาค่า 127.0.0.1 ออก  หรือถ้าต้องการอนุญาตจาก Network หรือ host ใด ๆ ก็สามารถทำได้ด้วยการระบุค่า Network หรือ host ใด ๆ แทนค่า 127.0.0.1

  4. สุดท้ายก็แก้ไขค่าของไฟล์คอนฟิกของ snmpd คือไฟล์ /etc/snmp/snmpd.conf ซึ่งที่จำเป็นก็คือค่าของ community ซึ่งจะเป็นดังค่าข้างล่าง
    # sec.name source community
    com2sec paranoid default public
    #com2sec readonly default public
    #com2sec readwrite default private

    ที่ผมเลือกใช้จะเป็นดังนี้ครับ
    # sec.name source community
    #com2sec paranoid default public
    com2sec readonly default public
    #com2sec readwrite default private

  5. และสุดท้าย (จริง ๆ) เราสามารถตรวจสอบ snmp configuration ด้วยการใช้ snmpwalk ซึ่งเป็น utility ที่จะพิสูจน์ว่า Server ทำงานตามที่เราต้องการเหรือเปล่า ซึ่งสามารถจะใช้งานเป็นดังนี้ :
    $ snmpwalk -Os -c public -v 1 localhost system

    อาจจะเจอข้อความดังต่อไปนี้ ถ้ายังไม่มีการติดตั้ง snmp
    The program ’snmpwalk’ is currently not installed. You can install it by typing: apt-get install snmp
    ก็ให้ติดตั้ง snmp ตามคำแนะนำก่อนนะครับ

    ถ้าทุกอย่าง OK ก็ควรจะได้ผลประมาณต่อไปนี้ :
    root@ubuntu-mail:~# snmpwalk -Os -c public -v 1 localhost system
    sysDescr.0 = STRING: Linux ubuntu-mail 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686
    sysObjectID.0 = OID: netSnmpAgentOIDs.10
    sysUpTimeInstance = Timeticks: (68957) 0:11:29.57
    sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)
    sysName.0 = STRING: ubuntu-mail
    sysLocation.0 = STRING: Unknown (configure /etc/snmp/snmpd.local.conf)
    sysORLastChange.0 = Timeticks: (0) 0:00:00.00
    sysORID.1 = OID: snmpFrameworkMIBCompliance
    sysORID.2 = OID: snmpMPDCompliance
    sysORID.3 = OID: usmMIBCompliance
    sysORID.4 = OID: snmpMIB
    sysORID.5 = OID: tcpMIB
    sysORID.6 = OID: ip
    sysORID.7 = OID: udpMIB
    sysORID.8 = OID: vacmBasicGroup
    sysORDescr.1 = STRING: The SNMP Management Architecture MIB.
    sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.
    sysORDescr.3 = STRING: The management information definitions for the SNMP User-based Security Model.
    sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
    sysORDescr.5 = STRING: The MIB module for managing TCP implementations
    sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
    sysORDescr.7 = STRING: The MIB module for managing UDP implementations
    sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
    sysORUpTime.1 = Timeticks: (0) 0:00:00.00
    sysORUpTime.2 = Timeticks: (0) 0:00:00.00
    sysORUpTime.3 = Timeticks: (0) 0:00:00.00
    sysORUpTime.4 = Timeticks: (0) 0:00:00.00
    sysORUpTime.5 = Timeticks: (0) 0:00:00.00
    sysORUpTime.6 = Timeticks: (0) 0:00:00.00
    sysORUpTime.7 = Timeticks: (0) 0:00:00.00
    sysORUpTime.8 = Timeticks: (0) 0:00:00.00
    root@ubuntu-mail:~#

จบครับ