Friday, June 26, 2009

Webalizer Configuration in Ubuntu

#apt-get install webalizer

By default the package will install a daily cron job which will cause the system to process the logfiles once a day, it will always run after the default Apache logfile rotation, which means that instead of examining the logfile /var/log/apache2/access.log it will use the previous one /var/log/apache2/access.log.1.

Enable the apache2 hostname resolution for this you need to edit /etc/apache2/apache2.conf file and

sudo vi /etc/apache2/apache2.conf

HostnameLookups Off

into

HostnameLookups On


To configure the software you must look at the global file /etc/webalizer/webalizer.conf.
Configure the
/etc/webalizer/webalizer.conf file.

Edit the webalizer.conf file, vi
/etc/webalizer/webalizer.conf and add/change in this file:

LogFile /var/log/apache2/access.log

OutputDir /home/www/webalizer

Incremental yes

PageType htm*

PageType cgi

PageType php

HideURL *.gif

HideURL *.GIF

HideURL *.jpg

HideURL *.JPG

HideURL *.ra

IgnoreURL /taskbar*

This tells the webalizer.conf file to set itself up for this particular configuration setup with:

LogFile /var/log/apache2/access.log

The option LogFile specifies the logfile to use with Webalizer. The default log file is supposed to be the access_log of Apache Web Server, but you can specifies a different one, like the one Squid Proxy Server makes named access.log if you use it in httpd-accelerator mode.

OutputDir /home/www/webalizer

The option OutputDir specifies the location of the output directory to use for the reports of Webalizer. All present and future report files generated by the Webalizer program will be hosted in this directory. It is recommended that you create this directory where your Apache web site resides.

Incremental yes

The option Incremental if set to Yes tells the program only to process partial logs file, and allows you to rotate your log files as much as you want without the loss of access information. It's recommended to set this option to Yes.

PageType htm* cgi php

The option PageType specifies what file extensions you want Webalizer to consider as a page to count. Each added file extensions must be specified on its own line as shown in the Webalizer configuration file above.

HideURL *.gif *.GIF *.jpg *.JPG *.ra

The option HideURL specifies what kind of items such as graphic files, audio files or other non-html files to hide from the reports page. Each added item must be specified on its own line as shown in the Webalizer configuration file above.

IgnoreURL /taskbar*

The option IgnoreURL specifies URLs to be completely ignored from the generated statistics reports. This option can be used to ignore directories that are not important in our statistics reports. It's also useful when you want to manage and class which URLs should be monitored and which should be ignored.

After configuring all the required options .Now you need to restart the Apache2 server using

/etc/init.d/apache2 restart

Running Webalizer manually first time

Now it's time to run the program to generate reports, html and graphics in the default Webalizer directory so that we can see them in our web browser interface. This step is required just the first time you install and use Webalizer, since it's preferable to use a cron job to automate this task in the future. To run Webalizer manually, to generate reports, use the following command:

        [root@test ] /# /usr/bin/webalizer
        Webalizer V1.30-04 (Linux 2.2.27) English
        Using logfile /var/log/apache2/access.log
        Creating output in /home/www/webalizer
        Hostname for reports is 'sites.test.com'
        History file not found...
        Previous run data not found...
        Saving current run data... [03/07/2005 04:42:03]
        Generating report for April 2005
        Generating summary report
        Saving history information...
        81 records (2 ignored) in 0.31 seconds

At this stage, we should verify that Webalizer is working on the system. To do that, point your web browser to the following address: http://my-web-server/webalizer/. The my-web-server is the address where your Apache web server lives, and usage is the directory that host all the Webalizer reports files.

This works well for single sites, but if you have a group of websites all on the same machine you might need to make some changes.


The way that you handle multiple websites on one host is to place all the files beneath a common directory /home/www, such as:


/home/www/


www.domain1.com/logs/ and www.domain1.com/stats
www.domain2.com/logs and www.domain2.com/stats


Here we have two sites www.domain1.com, and www.domain2.com, each has its own logs,stats/ subdirectory where Apache places the logfiles and stat files.


To handle this simply you merely copy the default webalizer.conf file from /etc into each of the log directories:


cp /etc/webalizer.conf /home/www.domain1.com/logs
cp /etc/webalizer.conf /home/www.domain2.com/logs


Now if you make the changes to the configuration file so that each one has:


Logfile access.log
OutputDir ../stats/


You can update the stats by running:


cd /home/www/www.domain1.com/logs
webalizer -q


cd /home/www/www.domain2.com/logs
webalizer -q


(The -q flag merely makes the program run quietly).


These two commands can be placed inside a shell script and invoked automatically be a cron job belonging to a user who can write to the stats directory - and you can remove the default job by running:


rm /etc/cron.daily/webalizer

Webalizer Webmin Module Installation


This module allows webmin (a web-based interface for system administration for Unix) to configure the webalizer HTTP server log file analyzer.For webmin installation in debian click here


If you want to install the webmin module for this in debian run the following command from your shell


#apt-get install webmin-webalizer


After finishing the installation login in to your webmin and check for webalizer now you can change all the required configuration options.

Wednesday, June 17, 2009

Apache + mod_proxy + mod_ssl - A good, secure reverse proxy

File cấu hình vhost

VirtualHost *:80
ServerName website.thehumanjourney.net

# Rewrite all incoming http request from external IP to https
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^10.0.*$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]

ProxyPass / http://INTERNALIP/
ProxyPassReverse / http://website.thehumanjourney.net/
ProxyPassReverse / http://INTERNALIP/

CustomLog /var/log/apache2/website.thehumanjourney.net.access.log combined
ErrorLog /var/log/apache2/website.thehumanjourney.net.error.log
/VirtualHost
VirtualHost *:443
ServerName website.thehumanjourney.net

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/thehumanjourney.crt
SSLCertificateKeyFile /etc/apache2/ssl/thehumanjourney.key

ProxyPass / http://INTERNALIP/
ProxyPassReverse / http://website.thehumanjourney.net/
ProxyPassReverse / http://INTERNALIP/

CustomLog /var/log/apache2/website.thehumanjourney.net.access.log combined
ErrorLog /var/log/apache2/website.thehumanjourney.net.error.log
/VirtualHost

* Nginx * ReverseProxy

Nginx & Apache

Working with virtual servers (like OpenVZ containers or XEN dom's) you might need a load balancing or a proxy solution to be able to run services from inside those machines through your host's single public IP address.

Here you will find how to solve such a situation using Nginx and Apache. (Apache already has mod_proxy module which can be used instead of Nginx, but the second one is much lighter and scalable, so I recommend you using it.)

Note: This tutorial assumes you already have a working environment like the one described above.

Nginx Installation

Just use your favorite package manager and install nginx package:

sudo apt-get install nginx

Nginx configuration for proxy behavior

Nginx uses the following directives (as an example) in it's configuration files to behave like a proxy:

proxy_redirect          off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;

Create the file /etc/nginx/proxy.conf containing all the informations above. We will include this file in every nginx vhost we need to be a proxy.

Nginx vhost proxy example

Create an nginx vhost by creating a file inside /etc/nginx/sites-available/ like this:

server {
listen 80;
server_name foo.bar.no foo.bar.yes foo.bar.ok;

access_log /var/log/nginx/access.log;


location / {
proxy_pass http://172.27.0.2/;
include /etc/nginx/proxy.conf;
}
}

The example above will be a proxy for every domain listed with server_name, and the server which will be used for proxy is under proxy_pass directive.

Done with nginx. Reload it:

invoke-rc.d nginx reload

Apache configuration

This assumes you are working on a machine behind the host that uses nginx as a proxy ( an OpenVZ container, XEN dom or a machine inside your network which is connected to the host we installed Nginx before)

Apache to use proxy

Apache will doesn't know who connects to it except the host ip address we set up nginx. To repair this, we need to install Apache's mod_rpaf. Use your favorite package manager to install libapache2-mod-rpaf:

sudo apt-get install libapache2-mod-rpaf

mod_rpaf requires the following directives inside a vhost to work:

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 172.27.7.1

Where RPAFproxy_ips can be multiple IP addresses, one of which is our Nginx proxy private IP address.

Using Nginx as a Reverse Proxy

-This how-to is going to assume that you already have a standard LAMP stack running, if not, there are plenty of tutorials and examples on how to get a LAMP stack running.

-We have chosen to go with a standard Apache 2 installation using libapache2_mod_php5 over using Nginx (pronounced ‘Engine X’) with fastCGI. You may be thinking “that is preposterous, why not just use Nginx as your webserver and ditch Apache?” I hate fastCGI, I’ve never had very good luck with it and most importantly I know Apache. Also, when all Apache has to worry about is the dynamic content, in this case PHP, it is quite fast, and has a smaller memory footprint then normal Apache usage.

-Using Nginx as a reverse proxy is great for a few reasons. Firstly it handles static content very well. It is able to handle the requests and serve static content much faster in our tests and this has cut our page load time in about half (using YSlow with a clear cache). The memory footprint of Nginx is very small so this extra speed increase is worth every megabyte, in this case .6 megabytes of our total ram on a 540 megabyte server. Secondly, it allows for quick and easy migration of your Apache services to another server. Through the config files you are able to specify an IP of your server and a port. If your apache server is taking a pounding it wouldn’t be difficult to move it to another server and just change the proxy IP to your now remote server.

-Setting up Nginx is fairly straight forward. I will be showing the commands for an Ubuntu 8.04 installation but they should work for previous versions and other distributions (with a little tweaking).

Install Nginx


sudo apt-get install nginx

the following is essentially the config file we use for /etc/nginx/nginx.conf and is pretty similar to the default config for the installation. The only major thing I changed was adding gzip compression. I have personally set the level to 5 although it is adjustable. The higher you set this value the more CPU intensive it becomes.


user www-data;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
server_names_hash_bucket_size 64;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_comp_level 5;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types text/plain text/html text/css image/x-icon
application/x-javascript;
gzip_vary on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

-You are going to want to make sure that the line “include /etc/nginx/conf.d/*.conf;” is included in this config. This is where you will store the default proxy information.

-We will now configure the default proxy. Create the file proxy.conf in the /etc/nginx/conf.d/ folder with the following contents.


proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;

-The only thing you may want to change is the buffer sizes. We had to increase our proxy_buffer_size and a few others, from the default, to allow for larger cookies that were choking Nginx. With that being said you may want to decrease the buffers a bit, just do some testing. If the buffers are not working for your content Nginx will throw a 50x error.

-Finally, we will configure the various hosts. To save yourself some time, and possible a headache you should always keep your static assets in one folder, while subdividing them by type in containing folders. For example static->images, static->js, static->css. This will greatly simplify your Nginx installation and I’ve found your code.

-Now we will edit (with your favorite CLI editor) /etc/nginx/sites-available/default.


server {
listen 80;
server_name example.com;
access_log /var/www/example.com/log/nginx.access.log;
error_log /var/www/example.com/log/nginx_error.log debug;

#set your default location
location / {
proxy_pass http://127.0.0.1:8080/;
}

#I had a problem accessing phpmyadmin with an Nginx reverse
#proxy without adding this location
location /phpmyadmin {
proxy_pass http://127.0.0.1:8080/phpmyadmin;
allow 1.1.1.1;
deny all;
}
#set your static folder location without the proxy pass so Nginx
#will server those files. We also set expires max to add an
#expires to have the client cache the files. You will
#have to #set a version on your css and js files to prevent
#the user who has cached files from not receiving new versions.
location /static {
root /var/www/example.com/htdocs/;
expires max;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
#If you have a subdomain you need to add a new server if you
#want Nginx to server the static files. Our subdomain only
#serves static files so we have not set up a proxy_pass
server {
listen 80;
server_name subdomain.example.com;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
access_log /var/www/subdomain.example.com/log/nginx.access.log;
error_log /var/www/subdomain.example.com/log/nginx.error.log;
index index.html;
location / {
expires max;
root /var/www/subdomain.example.com/htdocs/;
}
}

-Finally we need to make some quick changes to Apache and we’ll finally have everything running. Edit the file /etc/apache2/ports.conf.

-You’ll want to change the listen line to 127.0.0.1:8080. This will prevent apache from receiving requests from outside, but you should be blocking port 8080 anyways! The port we’ve set is 8080 but whatever you set in the Nginx configs is what you should use.


NameVirtualHost *
Listen 127.0.0.1:8080

-Lastly, if you don’t want all your apache logs to show 127.0.0.1 for who is accessing your files or your application uses IP’s to track sessions you need to install libapache2-mod-rpaf. It is painless just issue the command below.


sudo apt-get install libapache2-mod-rpaf

reload or restart both Apache2 and Nginx.


/etc/init.d/apache2 restart
/etc/init.d/nginx restart

-To see if it is working open a page on your website, if you don’t see any errors that is a good start. You can then check the logs of Apache and Nginx. Your Apache logs should only contain the php requests and your Nginx logs should contain all of your assets. Your Apache logs should also have HTTP 1.0 request when they go through the reverse proxy.

Cài đặt apache2 trên ubuntu

1.Install apache

$ sudo apt-get install apache2

2.Cấu hình apache

-The default Apache settings in the /etc/default/apache2 configuration file relate to local caching, using the mod_disk_cache module

-You can activate the module with the following command:
$ sudo a2enmod disk_cache

-Global settings for the Apache web server are configured by default in the /etc/apache2
/apache2.conf configuration file

3.Examine the First Host

-The first host is configured in the /etc/apache2/sites-enabled/ directory, in the 000-
default configuration file. It’s a virtual host, linked to the file named default, in the /etc/
apache2/sites-available/ directory

For example, suppose that you are serving the domain www.domain.tld and you wish to add the virtual host www.otherdomain.tld, which points at the same IP address.

NameVirtualHost *:80

VirtualHost *:80
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
/VirtualHost

VirtualHost *:80
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
/VirtualHost


4.Configure Virtual Hosts

$ cd /etc/apache2/sites-enabled
$ sudo cp 000-default website1

$ sudo mkdir /var/www/website1
$ sudo mkdir /var/log/apache2/website1

Các tham số khai báo :

ServerName site1.example.org
ServerAlias www.example.org

DocumentRoot /var/www/website1
Replace /dir with the DocumentRoot directory
ErrorLog Set to the dedicated directory for the log file
CustomLog Set to the dedicated directory for the log file

-Create an index.html file in the /var/www/website1 directory

Client gõ vào trình duyệt www.example.org


Tuesday, June 16, 2009

Thêm HardDisk vào Linux

- Khái quát về việc cần làm -
1. Gắn HD vào máy
2. Tạo phần vùng cho HD mới
3. Tạo ext3 cho /dev/hdb
5. Copy dữ liệu của HD cũ sang HD mới
6. Cấu hình cho HD tự khởi động


- Tạo phần vùng cho HD mới -
[root@localhost src]# fdisk /dev/hdb

The number of cylinders for this disk is set to 20023.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)


Command (m for help): l

Command (m for help): n

Command action
e extended
p primary partition (1-4)
p <--- và Enter Partition number (1-4): First cylinder (1-20023, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-20023, default 20023): Using default value 20023
Command (m for help): p

Disk /dev/hdb: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hdb 1 20023 160834716 83 Linux

- Thoát ra fdisk -
Command (m for help): q

- Tạo ext3 cho /dev/hdb -

[root@localhost src]# mke2fs -jc /dev/hdb

Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
20119552 inodes, 40209120 blocks
2010456 blocks (5.00%) reserved for the super user
First data block=0
..............
.......

Writing superblocks and filesystem accounting information:
done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override



- Mount /dev/hdb vào /mnt/hdb bằng ext3 -
[root@localhost src]# mkdir /mnt/hdb
[root@localhost src]# mount -t ext3 /dev/hdb /mnt/hdb/
[root@localhost src]# ls /mnt/hdb/
lost+found


- Copy dữ liệu sang HD mới và xóa /home trên HD cũ -
[root@localhost src]# cd /home
[root@localhost src]# tar cvf - . | tar xvf - -C /mnt/hdb
[root@localhost src]#rm -rf /home
[root@localhost src]#mkdir /home
[root@localhost src]#reboot

- Kiểm tra -
[root@localhost root]# df -h

Filesystem size Used Avail Use% Mounted on
/dev/hda3 150G 1.5G 141G 2% /
/dev/hda1 99M 8.3M 86M 9% /boot
none 504M 0 504M 0% /dev/shm
/dev/hdb 151G 33M 144G 1% /home

Cài đặt ProFTPD server (secure way)

1.Mở SSH console, gõ lệnh:

apt-get install proftpd

2.Bổ sung dòng sau vào file /etc/shells

/bin/false

3.Tạo /FTP-shared directory

cd /
mkdir /FTP-shared

4.Create a user named userftp which will be used only for ftp access. This user don't need a valid shell (more secure) therefore select /bin/false shell for userftp and /home/FTP-shared as home directory (property button in user and group window) :

useradd nguoiquynhon -d /FTP-shared -s /bin/false
passwd nguoiquynhon

5.Tạo các thư mục upload / download
cd /FTP-shared/
mkdir download
mkdir upload

cd /FTP-shared
chmod 755 download
chmod 777 upload

6.Sửa file /etc/proftpd/proftpd.conf với nội dung tương tự sau
cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.org
vi /etc/proftpd/proftpd.conf

RootLogin on

Umask 022 022
AllowOverwrite off

DenyAll




Umask 022 022
AllowOverwrite off

DenyAll



/FTP-shared/upload/>
Umask 022 022
AllowOverwrite on

DenyAll



AllowAll



7.Khởi động lại FTP Server
/etc/init.d/proftpd start
/etc/init.d/proftpd stop
/etc/init.d/proftpd restart

8.Cho phép root login: sửa file /etc/ftpusers, lọai bỏ root và bổ sung vào file /etc/proftpd/proftpd.conf dòng:
RootLogin on

Cài đặt Samba server

1.Mở SSH console, gõ lệnh:

sudo apt-get install samba smbfs

2.Tạo samba user

(smbpasswd -a )
sudo adduser sambauser
smbpasswd -a sambauser

3.Sửa file /etc/samba/smb.conf -->> bổ sung share folder

[homes]
comment = Home Directories
browseable = yes

# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
read only = no

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
; create mask = 0700

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
; directory mask = 0700

# By default, \\server\username shares can be connected to by anyone
# with access to the samba server. Un-comment the following parameter
# to make sure that only "username" can connect to \\server\username
# This might need tweaking when using external authentication schemes
valid users = %S
[soft]
comment = Soft Directories
path = / soft
guest ok = yes
browseable = yes
directory mask = 0777
read only = no

4.Tạo thư mục và khởi động lại Samba

mkdir /soft
chmod 777 /soft
/etc/init.d/samba restart

•Chép các Zimbra software cần thiết vào thư mục soft đã shared

Friday, June 12, 2009

Dùng iptables NAT thay thế cho reverse proxy

Hôm rồi một khách hàng thông báo website của họ cứ chập chờn, lúc vào được, lúc lại không. Tôi vào kiểm tra thì thấy web-server của họ hoàn toàn ổn, duy một điều coi log lại không thấy kết nối nào đến được web-server cả. Loay hoay một hồi, khách hàng mới báo cho biết rằng họ có sử dụng một con squid làm reverse proxy đứng trước web-server, mục đích là để cache lại static content.

Tôi vào kiểm tra con squid này thì phát hiện trong log của nó phun ra khá nhiều lỗi. Google cho biết đây là những lỗi khá nghiêm trọng và cũng có đưa ra vài giải pháp, nhưng do tôi không có nhiều kinh nghiệm với squid thành ra loay hoay mãi mà vẫn không sao giải quyết được.

Tôi quyết định tạm thời stop con squid này lại, tìm một giải pháp thay thế. Ban đầu tôi định sử dụng Apache để làm reverse proxy do tôi có nhiều kinh nghiệm với thằng này. Tuy vậy, giải pháp này khá mất thời gian mà con reverse proxy này cũng sẽ bị "kết liễu" trong vài ngày tới, nên tôi quyết định sử dụng chức năng NAT của iptables để làm luôn cho gọn.

Thú thật là rất lâu rồi tôi không đụng đến iptables, nên tôi cũng mất gần 15' coi tài liệu mới nhớ lại cách làm. Tôi ghi lại ở đây để sau này có gặp sự cố tương tự thì có cách giải quyết nhanh:

iptables -t nat -A PREROUTING -p tcp --dport 80 -d 1.1.1.1 -i eth0 -j DNAT --to 2.2.2.2:80

iptables -t nat -A POSTROUTING -p tcp --dport 80 -o eth0 -j SNAT --to 1.1.1.1

Ghi chú:

- 1.1.1.1 là IP address của eth0 trên reverse proxy, 2.2.2.2 là IP address của eth0 trên web-server.

- 2 lệnh này được chạy trên reverse proxy và chúng chỉ "redirect" traffic đến cổng 80, nếu bạn cần redirect traffic đến các cổng khác như 443 chẳng hạn, bạn phải thêm vào các lệnh tương ứng.

- Lệnh số 1 có tác dụng chuyển destination IP address (hence DNAT) của tất cả TCP packet đến cổng 80 của IP 1.1.1.1 thành cổng 80 của IP 2.2.2.2. Lệnh này nằm ở chain PREROUTING, nghĩa là nó được apply trước giai đoạn routing.

- Lệnh số 2 có tác dụng chuyển source IP address (hence SNAT) của tất cả TCP packet đi ra bằng đường eth0 có destination port là 80 thành 1.1.1.1. Lệnh này nằm ở chain POSTROUTING, nghĩa là nó được apply sau giai đoạn routing.

Giải thích:

1. client 3.3.3.3 gửi một packet (src=3.3.3.3, dst=1.1.1.1) đến reverse proxy 1.1.1.1

2. Lệnh thứ nhất sẽ chuyển packet này thành (src=3.3.3.3, dst=2.2.2.2).

3. Lệnh thứ hai sẽ chuyển packet này thành (src=1.1.1.1, dst=2.2.2.2).

3. Sau khi web-server 2.2.2.2 nhận được packet này, nó sẽ tạo ra một packet (src=2.2.2.2, dst=1.1.1.1) và gửi lại cho reverse proxy 1.1.1.1.

4. reverse proxy 1.1.1.1 sẽ nhìn vào NAT table của lệnh thứ hai để chuyển packet này thành (src=2.2.2.2, dst=3.3.3.3)

5. reverse proxy 1.1.1.1 tiếp tục nhìn vào NAT table của lệnh thứ nhất để chuyển packet này thành (src=1.1.1.1, dst=3.3.3.3)

6. reverse proxy 1.1.1.1 gửi packet (src=1.1.1.1, dst=3.3.3.3) lại cho client 3.3.3.3

Làm việc với máy chủ thông qua SSH

SSH là công cụ hết sức cần thiết cho bất kỳ một chuyên gia quản trị máy chủ nào bởi nó là phương cách chính để bạn giao tiếp với máy chủ nhằm thực hiện các tác vụ như cài đặt, cập nhật… SSH cho phép bạn kết nối từ xa đến máy chủ và ra lệnh cho nó thông qua môi trường shell. Dưới đây là sanh sách các lệnh thường dùng khi làm việc với máy chủ

1.Ls: liệt kê dánh sách tập tin / thư mục trong một thư mục

Ls –al: hiển thị tất cả các tập tin (bao gồm cả tập tin ẩn), thư mục, và chi tiết thuộc tính của từng tập tin

2.Cd: thay đổi thư mục

– nếu bạn gõ cd /home/username thì hệ thống sẽ chuyển đến thư mục /home/username
cd ~ : di chuyển đến thư mục home của bạn
cd - : di chuyển đến thư mục cuối cùng mà bạn đã từng đến
cd .. di chuyển đến thư mục trên một cấp

3.Cat: hiển thị nội dung tập tin ra màn hình

cat filename.txt: hiển thị nội dung tập tin filename.txt ra màn hình

4.Chmod: thay đổi quyền truy cập đến tập tin

Việc thiết lập quyền tương ứng theo thứ tự 3 đối tượng : USER – GROUP – EVERYONE

0 = — không có quyền
1 = –X chỉ có quyền thực thi
2 = -W- chỉ có quyền ghi
3 = -WX quyền ghi và thực thi
4 = R– chỉ có quyền đọc
5 = R-X đọc và thực thi
6 = RW- đọc và ghi
7 = RWX đọc, ghi và thực thi

Sử dụng:
Chmod

chmod 000 : không ai có quyền truy cập
chmod 644: thừơng áp dụng cho các trang HTML
chmod 755: thường áp dụng cho các mã CGI

Chown: thay đổi quyền sở hữu tập tin
Việc thiết lập quyền tương ứng theo thứ tự 2 đối tượng : USER – GROUP

Chown root myfile.txt: thay đổi người dùng sở hữu tập tin sang cho tài khoản root
Chown root.root myfile.txt: thay đổi người dùng và nhóm sở hữu tập tin sang cho tài khoản root

5.Tail: giống cat nhưng chỉ hiển thị những dòng cuối của tập tin

tail /var/log/messages: xem 20 dòng (mặc định) cuối cùng của /var/log/messages
tail -f /var/log/messages: xem tiếp tục tập tin trong khi nó đang được cập nhật
tail -200 /var/log/messages: xem 200 dòng cuối cùng của tập tin

6.More: giống cat nhưng mở tập tin trên mỗi lần một trang màn hình

more /etc/userdomains: duyệt tập tin userdomains và nhấn phím Space để sang trang kế tiếp hoặc nhấn q để thoát

7.Pico: sử dụng để chỉnh sửa tập tin


pico /home/burst/public_html/index.html: chỉnh sửa trang index thuộc trang web của bạn

Vi: sử dụng để chỉnh sửa tập tin với nhiều tính năng hơn pico
vi /home/burst/public_html/index.html: chỉnh sửa trang index thuộc trang web của bạn

Trong khi làm việc với vi một số lệnh sau là hữu dụng. Bạn cần phải nhấn tổ hợp phím SHIFT + để vào chế độ command

:q! thoát khỏi tài liệu mà không cần lưu lại và thoát khỏi vi
:w Lưu tập tin
:wq Lưu tập tin và thoát khỏi vi
:25 Di chuyển đến dòng thứ 25 trong tập tin
:$ Di chuyển đến dòng cuối cùng của tập tin
:o Di chuyể đến dòng đầu tiên của tập tin

8.Grep: tìm từ / cụm từ trong tập tin

grep root /etc/passwd: hiển thị tất cả các dòng có từ root trong tập tin /etc/passwd
grep -v root /etc/passwd: hiển thị tất cả các dòng không có từ root trong tập tin /etc/passwd

Ln: tạo các liên kết giữa tập tin và thư mục


ln -s /usr/local/apache/conf/httpd.conf /etc/httpd.conf: giờ đây bạn có thể chỉnh sửa tập tin /etc/httpd.conf thay vì tập tin gốc. Các thay đổi sẽ ảnh hửơng đến tập tin gốc, tuy nhiên bạn có thể xóa liên kết này mà không ảnh hưởng đến tập tin gốc

9.Last: hiển thị những ai đã đăng nhập và vào lúc nào


last -20: hiển thị 20 lần đăng nhập cuối cùng
last -20 –a: hiển thị 20 lần đăng nhập cuối cùng kèm theo cả thông tin về tên máy

w: hiển thị những ai đang đăng nhập và vị trí họ đã đăng nhập vào

10.Netstat: hiển thị tất cả các kết nối hiện tại

netstat -an : hiển thị tất cả các kết nối đến máy chủ bao gồm cả địa chỉ IP và cổng nguồn và đích
netstat –rn: hiển thị bảng routing của tất cả các địa chỉ IP thuộc máy chủ

11.Top: hiển thị các tiến trình hệ thống, thông tin bộ nhớ, thời gian uptime và các thông tin hữu ích khác theo thời gian thực.

12.Ps: hiển thị các tiến trình đang chạy và số định danh PID tương ứng

ps U username : hiển thị các tiến trình được thực thi bởi một người dùng cụ thể
ps aux: hiển thị tất cả các tiến trình hệ thống

13.Touch: tạo ra một tập tin rỗng
touch /home/burst/public_html/404.html : tạo 1 tập tin rỗng tên là 404.html nằm trong thư mục /home/burst/public_html/

14.Du: hiển thị thông tin sử dụng ổ đĩa

du –sh: hiển thị tóm tắt tổng dung lượng đĩa đã được sử dụng trong thư mục hiện tại, bao gồm cả các thư mục con
du –sh* : tương tự như lệnh trên nhưng hiển thị chi tiết cho từng tập tin và thư mục

15.Cp: sao chép một tập tin

cp filename filename.backup : sao chép tập tin filename thành filename.backup
cp -a /home/burst/new_design/* /home/burst/public_html/: sao chép toàn bộ tập tin mà vẫn giữ lại các quyền từ thư mục này sang thư mục khác

16.Mv: di chuyển / đổi tên một tập tin

mv oldfilename newfilename: đổi tên tập tin oldfilename thành newfilename

17.Rm : xóa một tập tin

rm filename.txt : xóa tập tin filename.txt
rm -f filename.txt : xóa tập tin filename.txt mà không yêu cầu xác nhận.
rm -rf tmp/ : xóa tuần tự thư mục tmp, và tất cả các tập tin bao gồm cả thư mục con. Cẩn thận với lệnh này !!!

18.Tar : nén và giải nén tập tin tar.gz và .tar

tar -zxvf file.tar.gz: giải nén tập tin file.tar.gz
tar –xvf file.tar : giải nén tập tin file.tar
tar -cf archive.tar contents/: lấy tất cả nội dung từ thư mục contents/ và đặt vào trong tập tin nén có tên archive.tar
gzip -d filename.gz : giải nén tập tin filename.gz

19.Unzip: giải nén tập tin .zip

Unzip file.zip: giải nén tập tin file.zip

20.Tường lửa Iptables

iptables –I INPUT –s <địa chỉ IP> -j DROP: lệnh này sẽ chặn mọi kết nối đến từ địa chỉ IP
iptables –L : liệt kê tất cả các rule trong iptable
iptables –F: xóa tất cả các rule trong iptable (xóa tường lửa)
iptables –save: Lưu lại các bộ rule hiện tại trong bộ nhớ vào đĩa
service iptables restart : khởi động lại iptables

21.Các lệnh Apache

httpd –v : hiển thị ngày xây dựng và phiên bản của máy chủ Apache
httpd –l : liệt kê danh sách các module đã được compile trong Apache
httpd status: chỉ hoạt động nếy mod_status được kích hoạt và hiển thị một trang các kết nối đang active
service httpd restart : khởi động lại máy chủ Apache


22.Các lệnh trong MySQL

mysqladmin processlist : hiển thị các kết nối và query đang active
mysqladmin drop databasename : xóa cơ sở dữ liệu có tên databasename
mysqladmin create databasename : tạo cơ sở dữ liệu có tên databasename
mysql -u username -p password databasename <> databasefile.sql : sao lưu cơ sở dữ liệu databasename ra tập tin databasefile.sql