Leaderboard (728 x 90)

Thursday, July 29, 2010

Default Seach Provider corrupt in IE8

When you install IE7 or IE8 on winxp sp2 before upgrade windows to sp3, you will can't remove IE7/IE8 by Add and Remove Program.

If you upgrade IE7 to IE8 on winxp sp3, you may receive following error when you launch IE.


Resolution:

1. Click Start.
2. Click Run.
3. Type in regedit and press enter.
4. In the registry editor, expand and navigate to the following registry key: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders.
5. Right click User Shell Folders.
6. Select New and then Expandable String value.
7. A new value is added in right pane.
8. Type in AppData and press enter.
9. Double click AppData.
10. Under value data type in:

%USERPROFILE%\Application Data

11. Note: If there is already AppData in the right pane, double click and correct it to %USERPROFILE%\Application Data

If the above steps do not work,
1. Click Start.
2. Click Control Panel.
3. Click User Accounts.
4. Click Create a new user account.
5. Choose appropirate name for the new user account.
6. Choose Administrator or Limited or Standard user. It's upto you.
7. Click Create.
8. Click Start, Log out from the current user account and log back in with the new one.
9. If the new user account is working for you, obviously, the old user account has got corrupted and you will have to use the new user account. Also, FYI: you can transfer old user settings and files to the new user account.

Controlling Core Dump Files in Linux

การเกิด core dump ได้นั้น สาเหตุหลักๆคือ การทำงานผิดพลาดของโปรแกรม (program crash) หรือ อีกสาเหตุเกิดจากการที่ program พยายาม access memory ในส่วนที่ไม่ได้รับอนุญาต จึงทำให้ OS สั่งปิดโปรแกรม (Kill process) นั้นซะ จากเหตุการณ์ทั้งสอง OS ก็ได้สร้าง Core dump file ขึ้นมาเพื่อช่วยให้เหล่า programmer ทั้งหลายพบจุดผิดพลาดของโปรแกรม หรือ ช่วยในการ debug โปรแกรมนั้นเอง

ลักษณะของ core file นั้นสามารถสังเกตุได้ว่าไฟล์จะชื่อขึ้นต้นด้วยคำว่า core และตามด้วยจุดกับตัวเลข (ซึ่งก็คือ PID) เช่น core.20 เป็นต้น

เรามาดูกันว่าเราจะจัดการเจ้า core file ได้อย่างไรบ้างกันดีกว่า

ถ้าต้องการปิดไม่ให้มีการสร้าง core file ขึ้นมาให้ใช้คำสั่ง

#ulimit -S -c 0 > /dev/null 2>&1

ถ้าต้องการเปิดให้มีการเขียน core file ได้ให้ใช้คำสั่ง

#ulimit -S -c 25000 > /dev/null 2>&1 //กำหนดให้ core file มีขนาดเท่ากับ 25,000 byte
#ulimit -S -c unlimited > /dev/null 2>&1 //กำหนดให้ core file มีขนาดไม่จำกัด

-c คือขนาดสูงสุดของ core file

หรือถ้าต้องการให้ใช้งานตลอดไปให้แก้ไขไฟล์ /etc/profile แล้วเพิ่มคำสั่งข้างต้นลงไป

เรายังสามารถกำหนด path ที่เก็บและชื่อของ core file ว่าจะขึ้นต้นว่าอะไรได้ด้วย ซึ่งก็ให้ใส่ค่า path และชื่อไฟล์ที่ต้องการไปในไฟล์ proc/sys/kernel/core_pattern โดยใช้คำสั่ง echo เช่น กำหนดให้ core file ไปถูกเขียนใน directory ที่ /path/corefile และชื่อ file ชื่อว่า core

#echo “/path/corefiles/core” > /proc/sys/kernel/core_pattern

ด้านล่างนี้เป็น parameter ที่สามารถใช้ได้กับคำสั่งการแก้ไข core pattern

  • %% – A single % character
  • %p – PID of dumped process
  • %u – real UID of dumped process
  • %g – real GID of dumped process
  • %s – number of signal causing dump
  • %t – time of dump (secs since 0:00h, 1 Jan 1970)
  • %h – hostname (same as the ‘nodename’ returned by uname(2))
  • %e – executable filename

จากข้างต้นโดย default แล้วเวลาเกิดการเขียน core file จะมีการใส่เลข .PID เข้าไปหลังชื่อ core file เราสามารถกำหนดไม่ให้มีการใส่ .PID เข้าไปหลังจากระบบ dump core file ได้โดยใช้คำสั่ง

#echo “0″ > /proc/sys/kernel/core_uses_pid

สุดท้ายทดสอบการเซตค่าการสร้าง core file โดยใช้คำสั่ง

#kill -s SIGSEGV $$

Reference:

http://www.ezylinux.com/system/controlling-core-dump-files-in-linux/

Enable Core Dumps for Daemons or Services in Red Hat Enterprise Linux

โดยทั่วไปแล้ว daemon เป็นการทำงานในรูปแบบ background process การสั่งให้ deamon ทำงานสามารถทำได้โดยใช้ service command หรือ ใช้ init script การเปิดใช้งาน core dump (ดูรายละเอียดของ core dump ได้ที่ Core dump file) เพื่อใช้งานการ debug ของโปรแกรมหรือตามความต้องการเพื่อตรวจสอบข้อผิดพลาดของโปรแกรม

การ enable core dump สำหรับ daemon หรือ service สามารถทำได้ดังนี้

  1. แก้ไขไฟล์ /etc/profile ด้วยคำสั่ง vi /etc/profile
  2.     แก้ไขบรรทัด     ulimit -S -c 0 > /dev/null 2>&1      แก้ไขเป็น
                            ulimit -c unlimited >/dev/null 2>&1
  3. แก้ไขไฟล์ /etc/sysconfig/init ด้วยการเพิ่ม DAEMON_COREFILE_LIMIT=’unlimited’ เข้าไป
  4. โดยทั่วไปแล้ว core dump ไม่สามารถสร้างโดยโปรแกรมที่รันด้วย setuid เพื่อป้องกันข้อมูลรั่วไหลออกไปยัง user อื่น ดังนั้นเราจึงต้องแก้ไขให้สามารถทำ core dump ใน setuid program ด้วย
    • สำหรับ Red Hat Enterprise Linux 5:
    • echo 2 > /proc/sys/fs/suid_dumpable
    • สำหรับ Red Hat Enterprise Linux 4:
    • echo 2 > /proc/sys/kernel/suid_dumpable
    • สำหรับ Red Hat Enterprise Linux 3:
    • echo 1 > /proc/sys/kernel/core_setuid_ok
  5. แก้ไขไฟล์ /etc/sysctl.conf เพื่อเพิ่มข้อความด้านล่างลงไป
  6. fs.suid_dumpable = 2      # RHEL 5 only 
    kernel.suid_dumpable = 2  # RHEL 4 only 
    kernel.core_setuid_ok = 1 # RHEL 3 only 
    kernel.core_pattern = /tmp/core
  7. Reload settings ด้วยการใช้คำสั่ง sysctl -p
Reference:

Sunday, July 25, 2010

TCP/IP Stack Hardening

If you run a UNIX-like operating system, you can make it more secure by slightly modifying the behavior of its TCP/IP implementation.

This page lists modifications for the various TCP/IP protocols. For the most part, these are commands that would go into a boot script such as /etc/rc.sysinit or /etc/rc.local.

The tables only list the possible commands — some tuning steps are not possible (at least as far as I know) on certain UNIX implementations.

If there is a dangerous type of packet that might be allowed under a strict interpretation of the protocols, but which is currently considered to be risky, the listed commands frequently list how to both ignore inbound packets and refuse to send outbound packets. This prevents your host from being victimized and prevents it from being used to launch attacks.

This page only describes how to harden the TCP/IP stack on UNIX-like operating systems. It is based on the recommendations found in the following pages, plus my commentary and explanation:

ARP

Decrease the ARP cache cleanup interval.

AIXno -o arpt_killc=20
FreeBSDsysctl -w net.link.ether.inet.max_age=1200
Solarisndd -set /dev/arp arp_cleanup_interval 60000

Consider static ARP (but also consider the maintenance problems!). This does not scale well to routine use on LANs, but it might be worth its trouble on a small sensitive LAN — a DMZ LAN in your network perimeter, or a small LAN populated by a few sensitive servers and a router port.Remember that if you change the Ethernet card in one machine, you must then modify and re-run the static ARP script boot script on every host on that LAN!

If you want to do this, you will need a script like the following, with IP and MAC addresses changed as needed. For thorough paranoia, define a MAC address for all possible IP addresses on the LAN, even ones not in use. For the unused IP addresses, use a MAC address that you know will not exist on that LAN (maybe that of an Ethernet card on another LAN).

arp -s 10.1.1.1 00:02:E3:05:9F:A3
arp -s 10.1.1.2 00:08:C7:29:E7:31
arp -s 10.1.1.3 00:60:97:B9:3B:B5
... and so on ...

ICMP

Disable ICMP broadcast echo activity. Otherwise, your system could be used as part of a Smurf attack:

AIXno -o directed_broadcast=0
FreeBSDsysctl -w net.inet.icmp.bmcastecho=0
HP-UXndd -set /dev/ip ip_respond_to_echo_broadcast 0
ndd -set /dev/ip ip_forward_directed_broadcasts 0
IRIXsystune allow_brdaddr_srcaddr 0
Linuxsysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
OpenBSDAlready ignores these by default
Solarisndd -set /dev/ip ip_respond_to_echo_broadcast 0
ndd -set /dev/ip ip6_respond_to_echo_multicast 0
ndd -set /dev/ip ip_forward_directed_broadcasts
0

Disable ICMP routing redirects. Otherwise, your system could have its routing table misadjusted by an attacker.

AIXno -o ipignoreredirects=1
no -o ipsendredirects=0
FreeBSDsysctl -w net.inet.ip.redirect=0
sysctl -w net.inet.ip6.redirect=0
HP-UXndd -set /dev/ip ip_send_redirects 0
ndd -set /dev/ip ip_forward_directed_broadcasts 0
IRIXsystune icmp_dropredirects 1
Linuxsysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv6.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv6.conf.all.send_redirects=0
OpenBSDsysctl -w net.inet.icmp.rediraccept=0
sysctl -w net.inet6.icmp6.rediraccept=0

Those two disable the
acceptance of ICMP Redirect.
To disable
sending ICMP Redirect messages:
sysctl -w net.inet.ip.redirect=0
sysctl -w net.inet6.ip6.redirect=0
Solarisndd -set /dev/ip ip_ignore_redirect 1
ndd -set /dev/ip ip6_ignore_redirect 1
ndd -set /dev/ip ip_send_redirects 0
ndd -set /dev/ip ip6_send_redirects 0


Disable ICMP router solicitations and advertisements, and ICMP subnet mask requests and replies. An attacker might be able to use unsolicited advertisements and replies to misadjust host routing tables. An attack also might be able to use solicitations and requests to reverse engineer some details of your network infrastructure. It appears that you will have to do this with packet-filtering rules on the host.

Disable ICMP broadcast probes. Otherwise, an attacker might be able to reverse engineer some details of your network infrastructure.

AIXno -o icmpaddressmask=0
FreeBSDsysctl -w net.inet.icmp.maskrepl=0
HP-UXndd -set /dev/ip ip_respond_to_address_mask_broadcast 0
ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0
IRIXYou will have to block these with a packet filter like ipfilterd
LinuxYou will have to block these with a packet filter like iptables
OpenBSDAlready ignores these by default
Solarisndd -set /dev/ip ip_respond_to_address_mask_broadcast 0
ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0

IP

Disable IP source routing. The only use of IP source routing these days is by attackers trying to spoof IP addresses that you would trust as internal hosts.

AIXno -o ipsrcroutesend=0
no -o ipsrcrouteforward=0
FreeBSDsysctl -w net.inet.ip.sourceroute=0
sysctl -w net.inet.ip.accept_sourceroute=0
HP-UXndd -set /dev/ip ip_src_route_forward 0
IRIXsystune ipforward 2
Linuxsysctl -w net.ipv4.conf.all.accept_source_route=0
sysctl -w net.ipv4.conf.all.forwarding=0
sysctl -w net.ipv4.conf.all.mc_forwarding=0
OpenBSDAlready ignores these by default
Solarisndd -set /dev/ip ip_forward_src_routed 0
ndd -set /dev/ip ip6_forward_src_routed 0

Enforce sanity checking, also called ingress filtering or egress filtering. The point is to drop a packet if the source and destination IP addresses in the IP header do not make sense when considered in light of the physical interface on which it arrived.

Linuxsysctl -w net.ipv4.conf.all.rp_filter=1

Log and drop "Martian" packets. A "Martian" packet is one for which the host does not have a route back to the source IP address (it apparently dropped in from Mars). These days most hosts have a default route, meaning that there would be no such thing as a Martian packet, but to be safe and complete...

Linuxsysctl -w net.ipv4.conf.all.log_martians=1

Enforce strict multi-homing for non-forwarding multi-homed systems. If a host is connected to more than one LAN, but it should not act as an IP router, make certain that it does not forward IP datagrams between networks. Maybe it is a firewall, or maybe it is just a multi-homed host.

Solarisndd -set /dev/ip ip_strict_dst_multihoming 1
ndd -set /dev/ip ip6_strict_dst_multihoming 1


TCP

Increase resiliance under heavy TCP load (which makes the system more resistant to SYN Flood attacks). There are five major steps to making a system more resiliant under heavy, possibly malicious, TCP load:

  • Buy more RAM. Each inbound SYN packet is intended to establish a TCP circuit, which requires resources on the server. The TCP buffers require memory to be allocated.
  • Use TCP SYN Cookies (Linux and BSD only). With TCP Syn Cookies, the kernel does not really allocate the TCP buffers unless the server's ACK/SYN packet gets an ACK back, meaning that it was a legitimate request.
  • Reduce the allowed number of HALF_OPEN TCP circuits. Further requests are refused, a denial of service, but at least the server hasn't run out of memory.
  • Reduce the amount of time an opening TCP circuit can stay in the HALF_OPEN state. The server is made less patient — if the TCP circuit is not fully established quickly, it is dropped and the client, if legitimate but very slow, must start again.
  • Reduce the amount of time a closing TCP circuit can stay in the TIME_WAIT state. Some clients are very rude, apparently Microsoft Explorer is particularly bad. They establish a connection, get their data, but then refuse to participate in cleanly shutting down the TCP circuit. At least for busy web servers, make them very impatient with such nonsense, dropping these no longer active connections and freeing resources.

The following show the vendor recommendations for tuning the TCP queue length and circuit establishment timers, and how to reduce TCP TIME_WAIT to 60 seconds.

AIXno -o clean_partial_conns=1
FreeBSDsysctl -w kern.ipc.somaxconn=1024
HP-UXndd -set /dev/tcp tcp_syn_rcvd_max 1024
ndd -set /dev/tcp tcp_conn_request_max 200 ndd -set /dev/tcp tcp_time_wait_interval 60000
IRIXsystune tcp_2msl 60
The kernel automatically limits the queue of pending connections.
Linuxsysctl -w net.ipv4.tcp_max_syn_backlog=1280
sysctl -w net.ipv4.tcp_syncookies=1

Already drops inactive TCP connections within 60 seconds
OpenBSDAlready has a resilient TCP implementation by default
Solarisndd -set /dev/tcp tcp_conn_req_max_q 1024
ndd -set /dev/tcp tcp_conn_req_max_q0 4096
ndd -set /dev/tcp tcp_time_wait_interval 60000

Defend against TCP connection hijacking by following the recommendations of RFC 1948. Most UNIX implementations use RFC 1948 recommendations to generate initial sequence numbers, but Solaris (at least up through Solaris 8) needs a little help.

Solarisndd -set /dev/tcp tcp_strong_iss 2
To configure this behavior to be the default after future reboots, put the line
TCP_STRONG_ISS=2 in the file /etc/default/inetinit

Increase TCP send and receive window sizes to at least 32 kbytes. But do not increase these above 64 kbytes unless you fully understand and support both RFC 1323 andRFC 2018.

AIXno -o tcp_sendspace=32768
no -o tcp_recvspace=32768
FreeBSDsysctl -w net.inet.tcp.sendspace=32768
sysctl -w net.inet.tcp.recvspace=32768
HP-UXThe TCP send and receive spaces are 32 kbytes by default.
IRIXThe TCP send and receive spaces are 64 kbytes by default.
LinuxThe kernel supports RFC 1323 and RFC 2018 and dynamically adjusts the TCP send and receive space by default
OpenBSDThe kernel supports RFC 1323 and RFC 2018 and dynamically adjusts the TCP send and receive space by default
Solarisndd -set /dev/tcp tcp_xmit_hwat 32768
ndd -set /dev/tcp tcp_recv_hwat 32768


Reference:

Friday, July 23, 2010

Linux Increase The Maximum Number Of Open Files / File Descriptors (FD)

How do I increase the maximum number of open files under CentOS Linux? How do I open more file descriptors under Linux?

The ulimit command provides control over the resources available to the shell and/or to processes started by it, on systems that allow such control. The maximum number of open file descriptors displayed with following command (login as the root user).

Command To List Number Of Open File Descriptors

Use the following command command to display maximum number of open file descriptors:
cat /proc/sys/fs/file-max

Output:

75000
75000 files normal user can have open in single login session. To see the hard and soft values, issue the command as follows:
# ulimit -Hn
# ulimit -Sn

To see the hard and soft values for httpd or oracle user, issue the command as follows:
# su - username

In this example, su to oracle user, enter:
# su - oracle
$ ulimit -Hn
$ ulimit -Sn

System-wide File Descriptors (FD) Limits

The number of concurrently open file descriptors throughout the system can be changed via /etc/sysctl.conf file under Linux operating systems.

The Number Of Maximum Files Was Reached, How Do I Fix This Problem?

Many application such as Oracle database or Apache web server needs this range quite higher. So you can increase the maximum number of open files by setting a new value in kernel variable /proc/sys/fs/file-max as follows (login as the root):
# sysctl -w fs.file-max=100000

Above command forces the limit to 100000 files. You need to edit /etc/sysctl.conf file and put following line so that after reboot the setting will remain as it is:
# vi /etc/sysctl.conf

Append a config directive as follows:
fs.file-max = 100000

Save and close the file. Users need to log out and log back in again to changes take effect or just type the following command:
# sysctl -p

Verify your settings with command:
# cat /proc/sys/fs/file-max

OR
# sysctl fs.file-max

User Level FD Limits

The above procedure sets system-wide file descriptors (FD) limits. However, you can limit httpd (or any other users) user to specific limits by editing /etc/security/limits.conf file, enter:
# vi /etc/security/limits.conf

Set httpd user soft and hard limits as follows:
httpd soft nofile 4096
httpd hard nofile 10240

Save and close the file. To see limits, enter:
# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Reference:

Found Solutions for Different Windows Problems

PROBLEM #1
Unable to register jscript.dll, getting the following error: DllRegisterServer in jscript.dll failed.Return code was: 0x80004005.

For the above error message, we need to follow troubleshooting steps depending upon the operating system. For windows vista, we need to register the dll file in command prompt with administrator rights for which we need to follow the below steps:
1. Click Start. 2. Type in cmd. 3. Don't press enter. 4. On the top, right click cmd and click run as administrator. 5. Type in
regsvr32 jscript.dll and press enter. Now it should say DllRegisterServer in jscript.dll succeeded.

If the above error message is in windows xp pro,
1. Click Start. 2. Click Run. 3. Type in
secedit /configure /cfg %windir%\repair\secsetup.inf /db secsetup.sdb /verbose and press enter.

If it is windows xp home, run microsoft fixit at http://support.microsoft.com/kb/313222.

Please let us know whether the above steps helped or not. Even if you have any further suggestions or questions, please use Comment/Ask a question down at the bottom of the page.
----------------------------------------------------------------------------------


PROBLEM #2
Unable to install internet explorer 8, getting the following errors
Setup exit code: 0x13371337 (Undefined Error Code) or Installer Process exit code: 0x00000017.


For the above error messages, run a microsoft fixit at http://support.microsoft.com/default.aspx/kb/949220 and try to reinstall internet explorer 8. If the fixit tool does not help, we need to install internet explorer 8 in safe mode with networking with administrator login by following the below steps:
1. Restart the computer. 2. As soon as it restarts, tap F8 key on the keyboard. 3. Choose Safe mode with networking and press enter. 4. If it asks to choose your operating system, choose whatever operating system you are using such as windows xp. 5. If you are using windows xp, choose your user name Administrator. 6. If you are using windows vista, log in with your regular user account but make sure you are an administrator. 7. Now, try to reinstall internet explorer 8.

Please let us know whether the above steps helped or not. Even if you have any further suggestions or questions, please use Comment/Ask a question down at the bottom of the page.
----------------------------------------------------------------------------------


PROBLEM #3
Unable to download java, giving "Internet explorer cannot display the webpage" error, also when you try to update java from control panel, it says "Java update cannot proceed with the current internet connection settings of your system. Please check your Control Panel -> Internet Options, and make sure the settings and proxy information are correct...".

For the above error, first make sure no proxy server is configured by following the below steps:
1. Click Start. 2. Click Cotrol Panel. 3. Click Internet Options. 4. Click Connections. 5. Click LAN settings. 6. Make sure Use a proxy server for LAN....is unchecked.

If no proxy server is configured for you, the problem seems to be related to your ISP, so try using global dns servers by following the below steps:
1. Click Start. 2. Click Control Panel. 3. Click Network Connections. 4. Right click Local area connection or Wireless connection whichever saying connected and being used by you. 5. Click Properties. 6. Highlight Internet Protocol TCP/IP or Internet Protocol TCP/IP Version 4. 7. Click Properties. 8. Select Use the following DNS server address. 9. Put 4.2.2.2 next to Preferred DNS server and 4.2.2.1 next to Alternate DNS server. 10. Click OK. 11. Again, click OK.

Please let us know whether the above steps helped or not. Even if you have any further suggesions or questions, please use Comment/Ask a question down at the bottom of the page.
----------------------------------------------------------------------------------


PROBLEM #4
Unable to uninstall internet explorer 8, getting "cannot find the file" errors or other errors.


If you are getting different errors while uninstalling internet explorer 8, use internet explorer 8 removal tool from the link below. Even if it says, internet explorer 8 beta removal tool, it works fine for all versions.

http://cid-2347850efe92080a.skydrive.li ... 20V1.1.exe

Please let us know whether the above steps helped or not. Even if you have any further suggesions or questions, please use Comment/Ask a question down at the bottom of the page.
----------------------------------------------------------------------------------


PROBLEM #5
An error after opening internet explorer 8: "A program on your computer has corrupted IE8 default search provider settings. IE8 will reset the search provider setting to default setting of xxx search. IE8 will open the search provider dialog where you can change your search provider".


For the above error follow the below steps:
1. Click Start. 2. Click Run. 3. Type in regedit and press enter. 4. In the registry editor, expand and navigate to the following registry key: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders. 5. Right click User Shell Folders. 6. Select New and then Expandable String value. 7. A new value is added in right pane. 8. Type in AppData and press enter. 9. Double click AppData. 10. Under value data type in

%USERPROFILE%\Application Data. 11. Note: If there is already AppData in the right pane, double click and correct it to %USERPROFILE%\Application Data

If the above steps do not work,
1. Click Start. 2. Click Control Panel. 3. Click User Accounts. 4. Click Create a new user account. 5. Choose appropirate name for the new user account. 5. Choose Administrator or Limited or Standard user. It's upto you. 6. Click Create. 7. Click Start, Log out from the current user account and log back in with the new one. 8. If the new user account is working for you, obviously, the old user account has got corrupted and you will have to use the new user account. Also, FYI: you can transfer old user settings and files to the new user account.

Please let us know whether the above steps helped or not. Even if you have any further suggesions or questions, please use Comment/Ask a question down at the bottom of the page.
----------------------------------------------------------------------------------


PROBLEM #6
Error 126: The specified module could not be found while trying to start remote access connection manager service.

1. Click Start-Run-C:\windows\system32 and press Enter.
2. Make sure rasman.dll, rasmans.dll, rasppp.dll, raschap.dll, and rastls.dll are present.
3. If any file is missing, insert the operating system cd in and copy the file by clicking Start-Run-cmd(in vista and windows 7, right click cmd and click Run as administrator).
4. Type in expand e:\i386\xxx.dl_ c:\windows\system32\xxx.dll and prese enter (wherein e: is the cd drive letter and xxx is the missing dll file).
5. If all the files are intact, click Start-run-regedit and press enter.
6. Go to HKLM/SYTEM/CurrentControlSet/Services/RasMan/PPP/EAP and delete entries other than 13,25, and 26.
7. If your problem is related to an AT&T wireless card, most probably, you will find 21 and 43 which need to be deleted.
8. Reboot the computer and the service should be started now.

Please let us know whether the above steps helped or not. Even if you have any further suggestions or questions, please use Comment/Ask a question down at the bottom of the page.
----------------------------------------------------------------------------------


PROBLEM #7
Error 1747 authentication service is unknown while trying to start WLAN auto config (wireless) service.

For the above error, simply reset winsock by
1. Start-Run-cmd (if it is windows vista or 7, right click cmd and click run as administrator).
2. Type netsh winsock reset, press enter, and restart the computer.

Reference:
http://foundsolutionz.blogspot.com/index.html#uds-search-results

Why might I be receiving errors related to the cluster or filesystem names when I attempt to mount a GFS or GFS2 filesystem?

Problem

When creating a GFS or GFS2 filesystem from the command line with mkfs.gfs or mkfs.gfs2, the user must define the following two attributes for the locking table that will be written to the superblock:

* Cluster name: This must exactly match the name in use by the cluster at the time of mounting, which can be checked in /etc/cluster/cluster.conf:



* Filesystem name: This must be a unique name across all GFS/GFS2 filesystems available to the cluster, as two filesystems with the same name cannot be mounted simultaneously

These attributes can be specified using the -t option. For example:

# mkfs.gfs -p lock_dlm -t myCluster:datafs1 -j 3 /dev/clustervg/datalv1
# mkfs.gfs2 -p lock_dlm -t myCluster:datafs1 -j 3 /dev/clustervg/datalv1

Where myCluster is the name of the cluster and datafs1 is the name given to this filesystem. If either of these two values is defined incorrectly, it can cause mount attempts to fail with varying error messages depending on the version and specific failure.

Diagnosis

Cluster Name Mismatch

If the filesystem was created with a cluster name that does not match the one currently in use, attempting to mount it would produce an error such as this on Red Hat Enterprise Linux 4:


# mount -t gfs /dev/clustervg/datalv1 /mnt/datafs1
mount: permission denied
# tail -n 4 /var/log/messages
Jun 4 15:43:42 node1.pvt kernel: GFS: Trying to join cluster "lock_dlm", "myCluster:datafs1"
Jun 4 15:43:42 node1.pvt kernel: lock_dlm: cman cluster name "myCluster" does not match file system cluster name "otherCluster"
Jun 4 15:43:42 node1.pvt kernel: lock_dlm: init_cluster error -1
Jun 4 15:43:42 node1.pvt kernel: GFS: can't mount proto = lock_dlm, table = otherCluster:datafs1, hostdata =



or for a GFS/GFS2 filesystem on Red Hat Enterprise Linux 5:


# mount /dev/clustervg/datalv1 /mnt/datafs1
/sbin/mount.gfs: fs is for a different cluster
/sbin/mount.gfs: error mounting lockproto lock_dlm
# tail -n 1 /var/log/messages
Jun 4 15:58:21 node1.pvt gfs_controld[5832]: mount: fs requires cluster="otherCluster" current="myCluster"


Duplicate Filesystem Name

If trying to mount a GFS filesystem that has a duplicate name compared to another that is already mounted, the error would look like this on Red Hat Enterprise Linux 4

# mount -t gfs /dev/clustervg/datalv1 /mnt/datafs1
mount: File exists
# tail -n 4 /var/log/messages
Jun 4 19:30:22 node1.pvt kernel: GFS: Trying to join cluster "lock_dlm", "myCluster:datafs1"
Jun 4 19:30:22 node1.pvt kernel: dlm: datafs1: lockspace already in use
Jun 4 19:30:22 node1.pvt kernel: lock_dlm: new lockspace error -17
Jun 4 19:30:22 node1.pvt kernel: GFS: can't mount proto = lock_dlm, table = myCluster:datafs1, hostdata =


Or on Red Hat Enterprise Linux 5 with GFS/GFS2:

# mount /dev/clustervg/datafs1 /mnt/datafs1/
/sbin/mount.gfs: different fs appears to exist with the same name
/sbin/mount.gfs: error mounting lockproto lock_dlm
# tail -n 1 /var/log/messages
Jun 4 16:49:00 node1.pvt gfs_controld[5832]: different fs dev /dev/mapper/clustervg-otherlv with same name


Solution

The locking table can be changed using the gfs_tool or gfs2_tool for GFS and GFS2, respectively.



NOTE: Before changing the locking table, ensure that the device in question should in fact be presented to this cluster and is unmounted on all nodes. If a GFS/GFS2 filesystem is being used by one cluster and the device it resides on is accidentally presented to another cluster, changing its locking table can have negative consequences for the cluster that was already using it.

# gfs_tool sb /dev/clustervg/datalv1 table myCluster:datafs1
You shouldn't change any of these values if the filesystem is mounted.

Are you sure? [y/n] y

current lock table name = "otherCluster:otherfs1"
new lock table name = "myCluster:datafs1"

Done


# gfs2_tool sb /dev/clustervg/datalv1 table myCluster:datafs1
You shouldn't change any of these values if the filesystem is mounted.

Are you sure? [y/n] y

current lock table name = "otherCluster:otherfs1"
new lock table name = "myCluster:datafs1"
Done


Further mount requests should no longer fail with the previously mentioned error messages.

Reference: http://kbase.redhat.com/faq/docs/DOC-3773

Monday, July 19, 2010

การตั้งค่า firewall สำหรับ Passive FTP Connection (ตอนที่ 2)

จากบทความในตอนที่ 1 หลายๆ คนคงจะพอเข้าใจกันแล้วว่าการเชื่อมต่อ FTP แบบ Passive Mode ทำงานอย่างไร และมีความจำเป็นสำหรับ client ที่ใช้งานอินเตอร์เน็ตผ่าน NAT, Firewall หรือ Router อย่างไร แต่สิ่งสำคัญที่จะลืมไปไม่ได้ คือ การเชื่อมต่อแบบนี้เซิร์ฟเวอร์จะต้องสุ่มหมายเลขพอร์ตที่อยู่ในช่วง 1024-65535 สำหรับใช้เป็นพอร์ตรับส่งข้อมูล และส่งหมายเลขพอร์ตดังกล่าวกลับไปยังไคลเอ็นต์ ประเด็นก็คือถ้าเราใช้ Windows Firewall หรือ Firewall ใดๆ ก็ตาม ในการป้องกันการโจมตีจากผู้บุกรุก เราจะต้องกำหนด policy อย่างไร เราจะต้อง allow พอร์ต 1024-65535 เพื่อให้ Passive FTP สามารถทำงานได้อย่างไม่มีปัญหาอย่างนั้นหรือ คำตอบนี้ถูกเพียงครึ่งเดียวครับ เพราะการทำแบบนั้น หมายความว่า คุณจะต้องลดระดับความปลอดภัยของเครื่องเซิร์ฟเวอร์ของคุณ เพียงเพื่อให้สามารถเชื่อมต่อ FTP แบบ Passive Mode ได้
วิธีการที่ดีกว่านั้น ก็คือ คุณสามารถกำหนดช่วงพอร์ต หรือ port range ที่จะใช้สำหรับการเชื่อมต่อ FTP แบบ passive mode
ซึ่งจะทำให้คุณสามารถควบคุมกฎเกณฑ์และนโยบายของไฟร์วอลล์ได้ง่ายขึ้น และปลอดภัยมากขึ้น

สำหรับ IIS6 + Microsoft FTP Service บน Windows 2003 Server

• ก่อนอื่น ต้อง Enable Direct Metabase Edit ใน Internet Information Service Manager
1. เปิด Internet Information Service Manager.
2. คลิกขวาบน โนดที่เป็นชื่อของเครื่องโลคอล
3. เลือก Properties.
4. ตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายในกล่องหน้าข้อความ Enable Direct Metabase Edit checkbox เรียบร้อยแล้ว

• คอนฟิก PassivePortRange โดยใช้ ADSUTIL script
1. เปิด Command Prompt
2. พิมพ์คำสั่ง cd C:\Inetpub\AdminScripts แล้วกดปุ่ม ENTER.
3. พิมพ์คำสั่ง cscript.exe adsutil.vbs set /MSFTPSVC/PassivePortRange "5001-5201"
4. Restart เซอร์วิสที่ชื่อว่า FTP Publishing Service.

• การ allow พอร์ตที่อยู่ในช่วงของ PassivePortRange ใน Windows Firewall
1. เปิด Command Prompt
2. สมมติว่าค่า PassivePortRange คือ 5001-5201 ให้พิมพ์คำสั่งต่อไปนี้
FOR /L %I IN (5001,1,5201) DO netsh firewall add portopening TCP %I "Passive FTP"%I

3. เสร็จสิ้นกระบวนการ ลองทดสอบการใช้งาน

การตั้งค่า firewall สำหรับ Passive FTP Connection (ตอนที่ 1)

FTP เป็นเซอร์วิสที่ทำงานบนโปรโตคอล TCP/IP ในการติดต่อและรับส่งข้อมูลกับ client โดยใช้พอร์ต 2 พอร์ต คือ พอร์ตรับคำสั่ง และพอร์ตข้อมูล โหมดของ FTP สามารถแบ่งออกเป็น 2 โหมด คือ Active Mode และ Passive Mode ซึ่งจะมีการทำงานที่แตกต่างกัน
รูปภาพ
ใน active mode ของ FTP ไคลเอ็นต์จะเชื่อมต่อจากพอร์ตแบบสุ่มที่มีค่าพอร์ตมากกว่า 1023 มาที่พอร์ต 21 ของเซิร์ฟเวอร์ ซึ่งเป็นพอร์ตรับคำสั่ง (พอร์ต N>1023 จากรูปจะสมมติให้ N=1026) แล้วส่งคำสั่งซึ่งจะบอกให้เซิร์ฟเวอร์ทราบหมายเลขพอร์ตที่จะใช้ในการรับส่งข้อมูลกับเครื่องไคลเอ็นต์ (พอร์ต N+1) จากนั้นเซิร์ฟเวอร์จะตอบสนองคำสั่งโดยจะส่ง acknowledge จากพอร์ต 21 กลับไปยังพอร์ต N ของเครื่องไคลเอ็นต์ แล้วจึงทำการเชื่อมต่อจากพอร์ต 20 ซึ่งเป็นพอร์ตข้อมูลของเซิร์ฟเวอร์ไปยังพอร์จ N+1 ของเครื่องไคลเอ็นต์ ในขั้นตอนท้ายสุด ไคลเอ็นต์จะตอบสนองการเชื่อมต่อจากเซิร์ฟเวอร์โดยจะส่ง acknowledge กลับไปยังพอร์ต 20 ของเครื่องเซิร์ฟเวอร์ คำสั่งจากเครื่องไคลเอ็นต์จะส่งไปที่พอร์ต 21 ของเครื่องเซิร์ฟเวอร์ และเซิร์ฟเวอร์จะรับส่งข้อมูลกับเครื่องไคลเอ็นต์ผ่านทางพอร์ต 20

ปัญหาหลักของการทำงานในโหมดนี้ ก็คือ เครื่องไคลเอ็นต์ที่ติดตั้งไฟร์วอลล์ไว้ อาจจะไม่สามารถใช้งานได้ เนื่องจากเซิร์ฟเวอร์จะส่งข้อมูลจากพอร์ต 20 กลับไปที่พอร์ต N+1 ซึ่งพอร์ตดังกล่าวเป็นแบบสุ่ม ซึ่งโดยทั่วไปมักจะบล็อคไว้
วิธีแก้ไข คือจะต้อง allow packet ทั้งหมดที่มาจากพอร์ต 20 ของเครื่องภายนอก แต่วิธีนี้ก็อาจทำให้เกิดผลกระทบต่อความปลอดภัยภายในองค์กรอีกเช่นเดียวกัน

เพื่อแก้ปัญหาดังกล่าว จึงมีการพัฒนารูปแบบการเชื่อมต่อของ FTP ขึ้นมาอีกแบบหนึ่งซึ่งเรียกว่า Passive Mode

หลักการทำงานในโหมดนี้ ก็คือ
รูปภาพ
การทำงานในโหมดนี้จะเริ่มจากไคลเอ็นต์เชื่อมต่อจากพอร์ตแบบสุ่ม N>1023 ไปที่พอร์ต 21 ของเครื่องเซิร์ฟเวอร์ และส่งคำสั่ง PASV ไปที่เซิร์ฟเวอร์
เมื่อเซิร์ฟเวอร์ได้รับคำสั่งจะสุ่มพอร์ตสำหรับใช้เป็นพอร์ตข้อมูล สมมติให้เป็นพอร์ต P>1023 จากรูป พอร์ต P=2024 จากนั้นเซิร์ฟเวอร์จะส่งหมายเลขพอร์ต P ดังกล่าวกลับไปที่พอร์ต N ของเครื่องไคลเอ็นต์
เมื่อเครื่องไคลเอ็นต์รับทราบ ไคลเอ็นต์จะเชื่อมต่อจากพอร์ต N+1 ไปที่พอร์ต P ของเครื่องเซิร์ฟเวอร์ จากนั้นเซิร์ฟเวอร์จะส่ง Acknowledge กลับไปยังพอร์ต N+1 ของเครื่องไคลเอ็นต์ คำสั่งจากเครื่องไคลเอ็นต์จะส่งไปที่พอร์ต 21 ของเครื่องเซิร์ฟเวอร์ และเซิร์ฟเวอร์จะรับส่งข้อมูลกับไคลเอ็นต์ผ่่านทางพอร์ต P ที่เซิร์ฟเวอร์สุ่มขึ้นมา

ถึงตรงนี้ ก็คงจะเห็นภาพกันแล้วว่าใน Passive Mode การเชื่อมต่อจะเริ่มจาก client ก่อนเสมอ จึงขจัดปัญหาเรื่องไฟร์วอลล์ในส่วนของไคลเอ็นต์ไป แต่คำถามต่อมาก็คือ แล้วเซิร์ฟเวอร์ล่ะ จะควบคุมนโยบายและกฎเกณฑ์ต่างๆ ของไฟร์วอลล์ได้อย่างไร ในเมื่อพอร์ตที่ใช้เป็นพอร์ตข้อมูลเป็นพอร์ตแบบสุ่มซึ่งมากกว่า 1023 แต่เป็นพอร์ตอะไรก็ได้ จะต้อง allow ทุกพอร์ตที่มีค่ามากกว่า 1023 เลยอย่างนั้นหรือ
คำตอบ คือ ไม่จำเป็นครับ เพราะ FTP Server แต่ละค่าย ก็จะมีวิธีในการกำหนด port range ที่จะใช้ในการสุ่มเป็นพอร์ตข้อมูลในการทำงานแบบ Passive Mode อยู่แล้ว แต่วิธีการก็จะแตกต่างกันไป ตามแต่ละค่าย ทีนี้เราก็แค่ allow เฉพาะพอร์ตที่อยู่ใน port range ที่เรากำหนดไว้เท่านั้น

ตอนต่อไปจะกล่าวถึงวิธีการตั้งค่าไฟร์วอลล์สำหรับการทำงานในโหมด Passive FTP สำหรับ Microsoft FTP Service

การป้องกันปัญหาการ์ดแลนเสียโดยใช้เทคนิค Ethernet Bonding

คุณคงเคยเจอปัญหาการ์ดแลนของเซิร์ฟเวอร์พัง ทำให้บริการต่างๆ ของเครื่องเซิร์ฟเวอร์หยุดชะงัก การแก้ไขก็คือ คุณจะต้องรอให้ช่างเข้าไปเปลี่ยนฮาร์ดแวร์ หรือไม่ก็ต้องแก้คอนฟิกต่างๆ ของเครื่องเซิร์ฟเวอร์ เพื่อทำให้เซิร์ฟเวอร์ทำงานต่อไปได้ แต่นั่นก็หมายความว่าเซิร์ฟเวอร์ของคุณมีเวลาดาวน์เกิดขึ้นหลายชั่วโมงอย่างไม่ต้องสงสัย คุณจะมีวิธีป้องกันได้อย่างไร

คำตอบสำหรับเซิร์ฟเวอร์ที่เป็นลินุกซ์ ก็คือ คุณสามารถใช้เทคนิค Ethernet Bonding เข้ามาแก้ปัญหานี้ได้ หลักการก็คือ โดยปกติเซิร์ฟเวอร์มาตรฐานจะมีพอร์ตแลนมาให้อยู่แล้ว 2 พอร์ต แค่คุณทำให้ทั้งสองพอร์ตเข้ามาทำงานร่วมกันเสมือนว่าเป็นการ์ดแลนใบเดียวกัน ดังนั้นในเวลาที่สถานะการทำงานของเซิร์ฟเวอร์ปกติ แพ็คเกจต่างๆ ที่เข้ามาเซิร์ฟเวอร์ จะกระจายเข้าทั้งสองพอร์ตแลนอย่างสมดุล ช่วยลดปัญหาคอขวดของ TCP Buffer และทราฟฟิค แต่ถ้ามีพอร์ตใดพอร์ตหนึ่งเสีย เซิร์ฟเวอร์ก็ยังสามารถทำงานต่อไปได้ โดยไม่ต้องดาวน์ระบบ นั่นหมายถึง คุณไม่ต้องเสียงาน เสียลูกค้า เสียเครดิต

ทีนี้มาดูวิธีการติดตั้งกันดีกว่า

ในบทความนี้ขอแนะนำการคอนฟิก Ethernet Bonding เพื่อแก้ปัญหาที่อาจเกิดขึ้น โดยจะมีการจัดกลุ่มพอร์ตแลนเข้าด้วยกัน เพื่อช่วยในการรับส่งข้อมูล รูปแบบการส่งจะมีสองแบบใหญ่ๆ คือ

* Active-backup พอร์ตหนึ่งจะทำหน้าพอร์ตหลักเพื่อใช้รับส่งข้อมูล (Active) แต่อีกพอร์ตหนึ่งจะสำรอง (Backup) ไว้เฉยๆ ไม่มีการรับส่งข้อมูลใดๆ ผ่านทางพอร์ตสำรอง แต่เมื่อไรที่พอร์ตหลักมีปัญหาพอร์ตนี้จะรับส่งข้อมูลแทน สำหรับ Ethernet Bonding จะเป็นคอนฟิกใน mode 1
* Load Balance พอร์ตทั้งหมดในกลุ่มจะช่วยกันรับส่งข้อมูล ส่วนเทคนิคในการรับส่งจะมีหลายแบบด้วยกันแล้วแต่ mode ที่คอนฟิก

ในตัวอย่างจะเป็นการคอนฟิกบน Fedora 9 ซึ่งน่าจะประยุกต์ใช้กับ Fedora เวอร์ชั่นอื่นๆ, CentOS, RedHat หรือลีนุกซ์ตัวอื่นๆ ได้
เตรียมพอร์ตแลนที่จะคอนฟิกเป็น Ethernet Bonding

ในตัวอย่างจะใช้พอร์ตแลน eth2 และ eth3 เพื่อคอนฟิกรวมเป็น bond0

เริ่มต้นสร้างไฟล์ /etc/sysconfig/network-scripts/ifcfg-bond0 ซึ่งจะเป็นไฟล์คอนฟิกของ bond0 เป็นพอร์ต bonding (ในเครื่องหนึ่งสามารถจัดกลุ่มทำได้หลาย bonding พอร์ตที่คอนฟิกก็จะเป็น bond1, bond2 เป็นต้น) ในไฟล์จะมีคอนฟิก IP Address, Netmask เหมือนที่คอนฟิกพอร์ต ethernet ทั่วไป

ตัวอย่างคอนฟิก ifcfg-bond0

[root@fc9-x1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=10.1.0.1
NETMASK=255.255.255.0
BROADCAST=10.1.0.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

คอนฟิกพอร์ต (Physical) ให้อยู่ในกลุ่ม bond0 ตามตัวอย่าง

[root@fc9-x1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USECTL=no

[root@fc9-x1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USECTL=no

แก้ไขไฟล์ /etc/modprobe.conf เพื่อให้โหลด kernel module สำหรับการทำ bonding ตอนที่มีการโหลดคอนฟิก bond0

[root@fc9-x1 ~]# cat /etc/modprobe.conf
alias bond0 bonding
options bonding miimon=100 mode=1

สามารถระบุว่าจะทำ bonding เพื่อรับส่งข้อมูลแบบไหนได้จากคอนฟิก mode ดังนี้

* mode=0 (balance-rr) เป็นการส่งข้อมูลแบบ round-robin (load balancing, fault tolerance)
* mode=1 (active-backup) สถานการณ์ปกติจะมีพอร์ตเดียวเท่านั้นที่ใช้รับส่งข้อมูล (fault tolerance)
* mode=2 (balance-xor) เป็นการส่งข้อมูลแบบใช้ XOR เพื่อหาพอร์ตที่จะส่ง เช่นคำนวณจาก MAC Address ต้นทางปลายทางเป็นต้น (load balancing, fault tolerance)
* mode=3 (broadcast)
* mode=4 (802.3ad) เป็นส่งข้อมูลแบบ Link Aggregation Control Protocol (LACP) / 802.3ad
* mode=5 (balance-tlb) ส่งข้อมูลแบบ Adaptive transmit load balancing
* mode=6 (balance-alb) ส่งข้อมูลแบบ Adaptive load balancing

หมายเหตุ รายละเอียดเพิ่มเติมดูได้จากไฟล์ /usr/share/doc/kernel-doc-2.6.25/Documentation/networking/bonding.txt จาก kernel-doc-2.6.25-14.fc9.noarch.rpm

ในเริ่มต้นแนะนำให้ทดสอบกับ mode=1 เพื่อทดลอง active-backup ก่อน

หลังจากสร้างไฟล์คอนฟิกทั้งหมดแล้ว รีบูตเครื่องหนึ่งครั้ง เผื่อให้ bond0 ถูกโหลดขึ้นมา
ตรวจสอบสถานะของ Ethernet Bonding

เมื่อเครื่องบูตเสร็จเรียบร้อย ถ้าถูกต้องเมื่อรันคำสั่ง ifconfig จะมีพอร์ต bond0 เพิ่มขึ้นมาตามตัวอย่าง

[root@server ~]# ifconfig
bond0 Link encap:Ethernet HWaddr 00:0C:22:FF:11:55
inet addr:10.1.0.1 Bcast:10.1.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:13 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1160 (1.1 KiB) TX bytes:1574 (1.5 KiB)

...

eth2 Link encap:Ethernet HWaddr 00:0C:22:FF:11:55
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1100 (1.0 KiB) TX bytes:1574 (1.5 KiB)
Interrupt:16 Base address:0x1824

eth3 Link encap:Ethernet HWaddr 00:0C:22:FF:11:55
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:60 (60.0 b) TX bytes:0 (0.0 b)
Interrupt:17 Base address:0x18a4

ข้อสังเกตจากคำสั่ง ifconfig

* HWaddr หรือ MAC Address ของแต่ละพอร์ตที่ทำ bonding ด้วยกันจะเป็นค่าเดียวกันหมด ทั้งนี้เพื่อประโยชน์ในการทำ fail over
* ในโหมด active-backup ปกติจะมีพอร์ตเดียวทำหน้าที่เป็นหลักใช้ในการรับส่งข้อมูล ซึ่งดูได้จากค่า RX, TX packets

หากต้องการรู้ว่าพอร์ตไหนถูกใช้เป็นหลัก (active) ในการส่งข้อมูล สามารถดูได้จากไฟล์ /proc/net/bonding/bond0

ตัวอย่างไฟล์ /proc/net/bonding/bond0

[root@fc9-x1 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.2.5 (March 21, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth2
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:22:ff:11:55

Slave Interface: eth3
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:22:ff:11:56

จากตัวอย่างพอร์ตหลักที่ถูกใช้ในโหมด (active-backup) คือพอร์ต eth2 ดูได้จาก Currently Active Slave: eth2
ทดสอบการ fail over

แนะนำว่าก่อนที่จะดึงสายแลนให้รันคำสั่ง ping ทิ้งไว้ เพื่อดูว่าเวลาที่มีการ fail over จะยังส่งข้อมูลต่อไปได้เลยไหม

ทดลองดึงสายออกจากพอร์ต eth2 แล้วตรวจสอบไฟล์ /proc/net/bonding/bond0 อีกครั้ง จะเห็นว่าพอร์ต eth3 จะถูกนำมาใช้เป็นหลักในการรับส่งข้อมูลแทน แล้วคำสั่ง ping ก็ยังคงทำงานอยู่ อาจมีสะดุดไปบ้างเล็กน้อย

[root@fc9-x1 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.2.5 (March 21, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth3
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth2
MII Status: down
Link Failure Count: 1
Permanent HW addr: 00:0c:22:ff:11:55

Slave Interface: eth3
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:22:ff:11:56

จากผลลัพธ์จะแสดงสถานะของ bonding ต่างๆ ดังนี้

* Currently Active Slave: eth3 พอร์ตหลักที่ใช้รับส่งข้อมูลตอนนี้
* Slave Interface: eth2, MII Status: down สถานะของพอร์ต eth2 down
* Link Failur Count: 1 แสดงตัวเลขจำนวนครั้งที่พอร์ตมีปัญหา

สุดท้ายทดสอบด้วยการเสียบสายกลับเข้าไปที่พอร์ตที่ 2 จะเห็นว่าไม่มีการ fail over กลับมาที่พอร์ต eth2 พอร์ต eth3 จะยังคงเป็นหลักในการรับส่งข้อมูลอยู่

ทำไมลูกค้า Maxnet ส่งเมล์ผ่าน Outlook ไม่ได้

สาเหตุก็ง่ายๆ เลยครับ เนื่องจากการส่งอีเมล์ผ่านโปรแกรม mail client เช่น Outlook Express หรือ Microsoft Outlook โดยทั่วไปถ้าไม่มีการตั้งค่าใดๆ เพิ่มเติม จะใช้พอร์ต 25 สำหรับการส่งเมล์ แต่ Maxnet จะบล็อคพอร์ต 25 ทำให้เราไม่สามารถติดต่อกับ smtp server ผ่านพอร์ตมาตรฐานที่ทั่วโลกใช้กันได้

สำหรับวิธีแก้ไขก็มีอยู่ 2 แบบ คือ

1. ใช้ smtp server (Outgoing Mail Server) ที่ทาง maxnet จัดเตรียมไว้ให้ คือ smtp.tttmaxnet.com (อันนี้เป็นคำตอบของทีมเทคนิคของ maxnet ซึ่งผมลองมาแล้วก็ไม่เวิร์คเหมือนกันครับ)
2. ถ้าคุณเป็นแอดมิน หรือสามารถติดต่อกับแอดมินของระบบเมล์ของบริษัทของคุณได้ ให้ทำการเพิ่ม listen port อื่นๆ ที่ไม่ใช่พอร์ต 25 สำหรับการเมล์ขาเข้า ขอย้ำ !!! เพิ่มนะครับ ไม่ใช่เปลี่ยน เพราะยังจำเป็นจะต้องใช้พอร์ต 25 ในการรับเมล์จากเซิร์ฟเวอร์ทั่วไป ที่สำคัญ ให้ระวัง พอร์ตที่เพิ่มเข้าไปจะต้องไม่ซ้ำกับพอร์ตมาตรฐานของ service อื่นที่ใช้งานอยู่ ในกรณีนี้ ผมทดสอบแล้ว เวิร์คแน่นอนครับ แต่ในการใช้งาน จะต้องตั้งค่าใน mail client โดยกำหนด SMTP Port เป็นพอร์ตที่เราเพิ่มเข้าไปแทนพอร์ต 25 ครับ

วิธีการเลี่ยงพอร์ตแบบนี้ นอกจากจะใช้กับ SMTP แล้ว อาจนำไปประยุกต์ใช้กับระบบหรือโปรแกรมอื่นๆ ที่โดนบล็อคพอร์ตได้อีกด้วยนะครับ

Friday, July 16, 2010

How do I get rid of old 10.x patches or superseded patches?

DO NOT USE SWREMOVE!  swremove will check the scripts for
the patch you ask it to remove, and happily remove whatever
file you tell it to, and replace it with an earlier version
of the patch from /var/adm/sw/patch/ (if one exists).

NOTE: If you have already removed previous OS version
patches with swremove, you will either
1) need to restore from backup, or 2) reload the OS.

First download and install one of the following patches,
which contain the HP-UX patch tools:

o 10.x: PHCO_20824 ('cleanup' only)
o 11.00: PHCO_27779 ('cleanup', 'check_patches', &
'show_patches')
o 11.11: PHCO_27780 ('cleanup', 'check_patches', &
'show_patches')

The patch tools come with 11.00, but you should still install
patch PHCO_24347 to fix several bugs that exist in it.

The 'cleanup' tool is used to commit patches while preserving
a set level of rollback, remove HP-UX 10.x patch information
from the IPD, and prune superseded patches from a depot.
The 'check_patches' utility checks for partially installed
(split) patches, incorrect patch_state, patch attribute
corruption, and objects within an archive library. The
'show_patches' tool can display the set of active or
superseded patches on a system.

To remove old 10.x patches from /var/adm/sw/patch/, use the
command:

# cleanup -i

Committing a patch causes rollback files associated with
that patch to be deleted from /var/adm/sw/save/.

To commit all patches that have been superseded at least
twice, use the command:

# cleanup -c 2

On 11.x, to commit a patch that has not been superseded,
use the command:

# swmodify -x patch_commit=true

In case you were wondering, 'cleanup -c 0' does not work.

WARNING: Once the above swmodify command has been executed,
you CANNOT roll back (remove) the patch unless you
remove the associated base software that the patch
modified. For this reason, I do not recommend
doing it unless you desperately need to free up
space under /var, and you have exhausted all
other means of doing so.

Reference:
http://www.faqs.org/faqs/hp/hpux-faq/section-158.html

How do I configure swlist to not display superseded patches?

A new option to swlist, "show_superseded_patches", was
introduced in HP-UX 11.00 via the SD-UX cumulative patch
PHCO_20078. In 11.00, by default, swlist displays all
installed patches, including superseded ones. In 11.10+,
by default, swlist does not display superseded patches.

Assuming you have PHCO_20078, or any more recent SD-UX
cumulative patch installed, you may change the default
behavior of swlist in 11.00. To do so, add the following
line to the file /var/adm/sw/defaults:

swlist.show_superseded_patches = false

Reference:
http://www.faqs.org/faqs/hp/hpux-faq/section-160.html

How can I install multiple HP-UX patches, without having to reboot more than once?

Use swcopy(1M) on each patch to copy the patch into a local
depot, then use swinstall(1M) to install all patches
contained in the local depot.

# swcopy -s /tmp/PHCO_12345.depot \
-x enforce_dependencies=false \* \
@ /tmp/my_patch_depot
# swcopy -s /tmp/PHCO_67890.depot \
-x enforce_dependencies=false \* \
@ /tmp/my_patch_depot

etc..

# swinstall -s /tmp/my_patch_depot -x autoreboot=true \*

The following script automates the process of creating the
depot:

#!/sbin/sh
# cd to the directory where the patches are (PHxx_xxxx)
# and start this script. it will extract the patches one
# by one and create a patch-depot in $PDEPOT.

PATH=/usr/bin:/usr/sbin
PDEPOT=/tmp/my_patch_depot
for PFILE in PH*[0-9]; do
sh $PFILE
rm $PFILE
done
# It's a good habit first reading the PHxx_xxxx.text
# files before deleting them.
# rm *.text
for PFILE in PH*depot; do
swcopy -s -x enforce_dependencies=false $PWD/$PFILE \* \
@ $PDEPOT
done
clear
echo \
"*******************************************************"
echo \
"PLEASE NOTE: The Patch depot $PDEPOT has been created."
echo \
"*******************************************************"
echo \
"Please start swinstall with $PDEPOT as the source, and"
echo \
"don't forget to unregister the depot"
echo \
"(e.g. swreg -u -l depot $PDEPOT)."


Reference:
http://www.faqs.org/faqs/hp/hpux-faq/section-159.html

Friday, July 9, 2010

Time Not Syncing With Remote NTP Server

All computers have their own internal clocks, implemented in hardware and software. These clocks have acceptable accuracy, but are not anywhere near perfect?they all exhibit ?clock drift,? letting their time drift by several seconds a day. While desktop users may not be inconvenienced by drift, system administrators cannot tolerate it. When running a server, it is essential to keep the system's time synchronized with the other servers it interacts with.

Linux provides a means to keep time in sync via the Network Time Protocol (NTP). A computer running the NTP client frequently probes one or more NTP servers and synchronizes its time with that of the server(s).

YaST provides a means to set-up one or more remote NTP server via the ?NTP Client? module found under "Network Services." A list of public NTP servers can be found at http://ntp.isc.org/bin/view/Servers/WebHome. OES servers can also be configured to serve as NTP servers. See the Novell Network Time Protocol Administration Guide for OES for more details.

The Problem:

When adding a remote time source in YaST, there are always at least two sources added to /etc/ntp.conf: the local computer and the remote time source. When the NTP daemon starts, it initially synchronizes the system time to the time server's time, then periodically performs the same synchronization in the background. If the time server is not immediately available, then NTP falls back on the default local time source.

Some users have observed that their system time is being synchronized to the remote server's time when xntpd initially starts, but then is only being synchronized to their local time thereafter. An example /var/log/ntp would look like this:


2 May 08:11:05 ntpd[2965]: synchronized to LOCAL(0), stratum 10
2 May 08:11:05 ntpd[2965]: kernel time sync disabled 0041
2 May 08:14:17 ntpd[2965]: synchronized to LOCAL(0), stratum 10
2 May 08:26:13 ntpd[2965]: kernel time sync enabled 0001
2 May 10:33:35 ntpd[3489]: synchronized to LOCAL(0), stratum 10
2 May 10:33:35 ntpd[3489]: kernel time sync disabled 0041

Also, executing xntpdc -p would reveal that the time is synchronized to the LOCAL, not the remote server (see the entry with the '*').

#  xntpdc -p

remote local st poll reach delay offset disp
=======================================================================
*LOCAL(0) 127.0.0.1 10 1024 377 0.00000 0.000000 0.11856
=prv-time.provo. 137.65.211.18 2 1024 377 0.00041 -262.1380 0.11470

The Solution:

The solution is to make NTP more persistent when probing the remote time server. This is done by appending the flags burst and iburst to the remote server; burst tells NTP to send a burst of eight packets to the remote server instead of one when the server is reachable, and iburst tells it to do the same when the server is not reachable. The result is faster and more reliable synchronizations.

These options can be added in the "NTP Client" YaST module by selecting "Complex Configuration" then editing the remote server. The options are added in the "Options" field and are space-delimited. They can also be added directly to the server in /etc/ntp.conf as follows:


server 137.65.1.123 burst iburst

A healthy /var/log/ntp will then look like this:


29 Apr 15:24:58 ntpd[6892]: synchronized to 137.65.1.123, stratum 2
29 Apr 15:24:58 ntpd[6892]: kernel time sync disabled 0041
29 Apr 15:26:15 ntpd[6892]: kernel time sync enabled 0001
2 May 08:10:41 ntpd[6892]: ntpd exiting on signal 15
2 May 08:13:33 ntpd[6684]: synchronized to 137.65.1.123, stratum 2
2 May 08:13:33 ntpd[6684]: kernel time sync disabled 0041
2 May 08:13:45 ntpd[6684]: kernel time sync enabled 0001


Reference:
http://www.novell.com/coolsolutions/feature/15345.html

Monday, July 5, 2010

Outlook Express Error Code : 0×800C0133

ข้อผิดพลาดหมายเลข 0×800C0133 เกิดขึ้นจากการที่ Outlook Express
ไม่สามารถจัดการกับ Inbox ที่มีขนาดเกิน 2 กิกะไบต์ได้นั่นเอง
โดยทั้งนี้ไม่ขึ้นอยู่กับจำนวนอีเมลล์ที่รับได้
ขึ้นตอนการแก้ไขทำได้หลายวิธีด้วยกัน แต่แนะนำให้ถือโอกาสนี้
สังคายนา Inbox ของคุณซะเลยก็ดีเหมือนกันนะ

ขั้นแรก สร้างเมลล์บ็อกซ์ขึ้นมาใหม่
โดยคลิ้กขวาบนรายการ Local Folders ที่อยู่ในกรอบหน้าต่างทางขวา
เลือกคำสั่ง New Folder ตั้งชื่อ เช่น 2008Q1 ซึ่งหมายถึงอีเมลล์
3เดือนแรกของปี 2008

จากนั้นใน Inbox คลิ้กเลือกอีเมลล์ตั้งแต่เดือนมกรา-มีนาคม คลิ้กขวา
เลือกคำสั่ง Move to Foder… เลือกย้ายไปที่โฟลเดอร์ 2008Q1
เพียงแค่นี้อีเมลล์ 3 เดือนแรกของปีก็จะถูกย้ายออกไปจาก Inboxแล้ว

ขั้นตอนต่อไป ก็คือการลดขนาด Inbox ด้วยการคลิ้กเมนู
File–>Compact โปรแกรม OE จะลดขนาดไฟล์ Inbox ลง
โดยคุณสามารถตรวจสอบขนาดไฟล์อินบ็อกซ์ได้ที่
C:\Document and Settings\(user)\Local Settings\Application Data\
Identities\{GIU}\Microsoft\Outlook Express
จะเห็นว่าไฟล์ Inbox.dbx มีขนาดลดลงแล้ว ให้ลองคลิ้กรับเมลล์อีกครั้ง

Reference: http://blog.ibiz.co.th/2008/12/15/oe-outlook-express-error-code-0x800c0133/