顯示具有 Linux 伺服器 標籤的文章。 顯示所有文章
顯示具有 Linux 伺服器 標籤的文章。 顯示所有文章

2010年7月13日 星期二

nternet Explorer (IE) 進行FTP時常見錯誤說明

Internet Explorer (IE) 進行FTP時常見錯誤說明

常見錯誤1:

FTP 資料夾錯誤 開啟 FTP 伺服器的資料夾時發生錯誤。

請確定您有存取這個資料夾的權限。

詳細資料:操作等後逾時

非常經典的錯誤,基本上這個場合 IE 算是亂報錯誤,誤導使用者,

在這裡發生的錯誤與資料夾的權限並無關係,

而是 IE 已經登入 FTP Server (伺服器),

但是登入之後無法建立資料連線,所謂的資料連線就是 data connection,

講白話一點就是用來傳輸檔案目錄列表的連線無法建立。

解決方式,客戶端無法完成這的動作,有兩種可能性,

你必須先打開 FTP Server介面來看一下

錯誤在的用戶目前使用的是 PASV 還是 PORT 命令,方法如下:

如果出現如下的錯誤,表示用的是 PASV (被動式 Passive FTP),

表示你 FTP Server 端沒設好,

您只開通了 Server port 21,但沒有開通 data ports 1400-1410

如果出現類似上面的錯誤,但顯示的是 PORT failed (主動式 Active FTP),

表示你 FTP Client 端位於防火牆或分享器後,

解決方式為將 IE 設定為使用 被動式FTP。

IE 開啟使用被動式 FTP (PASSIVE MODE) 的方法,

進入 工具 > 網際網路選項 > 進階分隔頁 > 瀏覽子項目 > 勾選

使用被動式 FTP (為了防火牆及 DSL 數據機的相容性)。

如果改用了被動式 Passive FTP 還是不行,還是相同的錯誤,那很簡單,

就是您的 Server data ports 並未開通,請參照修正 PASV 問題的方式修正即可。


===========================================================================

[轉貼]
PORT和PASV模式的最核心區別在於服務器和客戶端誰主動去連接誰。

如果服務器和客戶端都有合法(Internet上唯一)的IP地址

(使用端口映射等技術讓自己看起來有合法地址也可以)

,兩種模式其實沒什麼區別。關鍵在於有一方或兩方是在內網中,

通過PROXY或網關使用NAT上網時,

兩種方式區別就出來了。

PORT模式是讓服務器去連接客戶端,這時客戶端必須有合法的IP地址,

服務器端可以用網關NAT的方式去找到客戶端

,服務器可以沒有合法IP地址,例如192.168.*.*之類,

因為這時對服務器來說IP地址無關緊要,

祇要服務器端能上網找到客戶端即可。如果客戶端這時也是用的通過內網網關上網就麻煩了,

客戶端給服務器報告自己的IP是192.168.*.*、10.*.*.*之類不合法、不唯一的地址,

結果服務器打著燈籠也找不到客戶端,數據Socket自然就聯不起來。

PASV模式正好相反,這時服務器必須有合法的IP地址,

客戶端可以是內網機器,道理和上面是一樣的。

一般來說,開始的時候FTP總是客戶端主動連上服務器的,

因此絕大多數情況下,PASV總是好用的,

也因此部分下載軟件,如Netants把PASV模式作為唯一下載模式。

什麼時候有問題呢,當服務器躲在防火牆之後,

防火牆軟件僅把21端口映射給服務器時就會有問題。



我們知道Socket連接有兩個重要參數,一個是IP地址,一個是端口(PORT)。

端口是用來區分服務類型的東西,有了端口的區別,

一台計算機才可以既提供FTP下載,又可以開Web讓大家瀏覽,

還可以同時開個BBS,一個IP地址就夠了。端口號從1到65535。

如果是FTP服務,則是端口21。

PORT模式下是客戶端向服務器報告自己的IP地址,同時報告自己的一個端口,

意思是說:我這裡有個端口****空閒,你來連吧。

PASV模式則將前面的客戶端和服務器調過個就是了。

一般內網開服務器必須做端口映射。

因為一般稱為網關的那台計算機(或路由器)才有合法IP,

內網開服務器時,客戶端連接服務器實際上連的是它,

並沒能直接連接到真正開服務的那台計算機上。

這時,網關必須設置好一些參數,

區分連到自己的各個端口的請求應該自己處理還是扔給內網的某台服務器處理,

例如把21端口的請求都轉給內網的某台FTP服務器去處理。在PORT模式下,這就夠了。

PASV模式是服務器提供自己的IP和一個端口號(>1024)讓客戶端來連,

服務器的IP不合法一般不要緊,

數據包從網關出去時多數情況會自動翻譯成網關自己的合法IP的

(NAT——網絡地址轉換,共享上網的基礎技術),

但端口號就不行了,客戶端按照這個端口來連接到網關時,

網關如果不設置把這些端口的請求都轉給FTP服務器,

Socket就連不起來。這種情況的設置經常漏掉,

所以內網開FTP服務器常不能支持PASV模式。

——是設置不全,而不是不可能。

========================================================

FTP傳輸模式

FTP的連線包括兩種不同用途,一個是傳遞客戶端與伺服器之間的Command的,

也就是一般我們在設定的FTP通訊埠(預設21)。另一個是資料傳送的連線,

FTP資料傳送的模式又分二種:PORT、PASV。

兩者主要分別在於它們會向FTP伺服器發出不同的FTP Command。

PORT模式:

當用戶端要求與FTP伺服器進行檔案傳輸時,用戶端會向FTP伺服器發出Port Command,

用戶端會在本機開啟一個PORT,而FTP伺服器接收到命令之後,

便會依據用戶端的要求,去連結這個通訊埠建立連線。

伺服器必須允許打開用戶使用的FTP客戶端新連接(FTP client port),才能進行檔案傳送。

PASV 模式:

用戶端向FTP伺服器發出PASV Command,

FTP伺服器只需在本機打開一個短暫的連接埠,然後回應用戶端,

用戶端接收到訊息之後,就可以向這個通訊埠建立檔案傳輸連線。

========================================================================


Definition: PASV is an alternative mode for establishing File Transfer Protocol (FTP) connections. PASV mode is designed for FTP clients behind firewalls.

PASV mode works by allowing FTP clients to initiate sending of both control and data messages. Ordinarily, only FTP servers initiate the data requests. Because many client firewalls reject incoming messages like these FTP requests, PASV mode makes FTP "firewall-friendly."

Most FTP clients, including Web browsers like Internet Explorer, support a PASV FTP option. However, configuring PASV on the client doesn't guarantee that PASV mode will work, as FTP servers may choose to deny PASV mode connections. Some network administrators disable PASV mode on FTP servers because of the additional security risks PASV entails.

Also Known As: passive mode FTP
Examples:
To set the PASV option in Internet Explorer, check the "Use Passive FTP" box in the Advanced tab under Tools/Internet Options. This option will not work with older FTP servers that do not support PASV. Also, PASV bugs have been found in FTP servers and firewalls, so this option is not 100% reliable.
=============================================================================

連線IIS的FTP Server時候,如果SERVER有裝防火牆,

而用戶端電腦又在NAT環境底下,以往都必須要叫使用者切換自己FTP軟體的PASV模式。

原來只要調整IIS以及防火牆的設定就可以了。

以下的設定是要讓IIS FTP固定PASV mode 的PORT在5500-5520,步驟如下

1. 開啟命令提示字元
2. 切換到 c:\inetpub\adminscripts
3. 執行 adsutil.vbs set /MSFTPSVC/PassivePortRange 5500-5520

4. 接著要開啟防火牆的設定,將port 5500-5520 打開,讓FTP可以連線

如此就可以讓使用者的電腦不用再特別設定PASV模式,就可以上傳資料。

參考資料


[教學] 什麼是PASV

防火牆有很多種,其中有一些會禁止那些不是從內部網路IP發出的連接請求。
而ftp協定是個很老的東東,沒有考慮這個問題。
可以這樣簡單描述一般ftp的工作原理:
client對server發出請求:“嗨,我的xx埠正等著你傳送資料呢,sever聽到這個請求,就會建立一個連接,指向這個埠,並且開始傳送資料。
這就回到了我們的問題,如果發出請求的client在防火牆的後面,而這
個防火牆禁止外部IP建立連接,那麽當然server(在外部)不能建立與client的
連接。
所以,過了幾年,人們修改了ftp協定以應付這種情況。
這就是passive mode,
工作原理如下:client向server發出passive命令,
server回答說:“資料在xx埠等你,自己來拿。”
而這回則由client建立指向server的連接,從而取得資料。
這就避免了防火牆的限制。

2009年3月15日 星期日

DNS + Dig

  • dig @168.95.1.1 ssorc.tw
  • dig @168.95.1.1 ssorc.tw [ A | ANY | MX | NS | SOA | HINFO | AXFR | TXT ]
  • 反解

dig -x 1.1.1.1

  • 用 tcp 查詢,預設為 +notcp,就是 udp

dig ssorc.tw +tcp

  • dig ssorc.tw +vc
  • 忽略 UDP 查詢在中斷時使用 TCP 重試,設預為 +noignore

dig ssorc.tw +ignore

  • 不使用遞迴查詢,預設為 +rec

什麼是 DLZ

Quote: http://bind-dlz.sourceforge.net/

What is DLZ?

DLZ (Dynamically Loadable Zones) is a patch for BIND version 9 that simplifies BIND administration and reduces memory usage and startup time. DLZ allows you to store your zone data in a database. Unlike using scripts, the changes in your database are immediately reflected in BIND's response to DNS queries, so there is no need to reload or restart BIND. You see, BIND "dynamically loads" the "zone" data it needs to answer a query from the database.

大致上就是說它是把 ZONE 記錄記到資料庫,且能動態的、即時的讀出要查詢的記錄,不必像純文字檔時要 restart 或 reload,且 DLZ 能淢少記憶體用量及啟動的時間

Why is DLZ needed?

The defacto standard DNS server is BIND. Despite being around for many years now and going through several revisions, BIND's basic functionality has remained the same. Unfortunately, so have some of its unfavorable attributes:

  • BIND reads DNS data from text files. It is very easy to make a mistake when editing a file causing it to be mis-read or made un-readable by BIND.
  • BIND stores all DNS data in RAM. If your DNS server is authoritative for a large number of zones, you may have to rebuild the kernel on your machine in order to support BIND's memory needs.
  • BIND parses all of its zone files at startup. For a large number of zones this can be time-consuming.
  • If you change any information in those zone files, you must reload or restart BIND before those changes take effect. Do this often enough and BIND could spend more time reloading data than answering queries.



DNS Cache Server 快取伺服器 - pdnsd

http://www.phys.uu.nl/~rombouts/pdnsd/index.html

About pdnsd
pdnsd is a proxy DNS server with permanent caching (the cache contents are written to hard disk on exit) that is designed to cope with unreachable or down DNS servers (for example in dial-in networking).
Since version 1.1.0, pdnsd supports negative caching.

PowerDNS DNS 伺服器

1。它是 Open Source

2。DNS 伺服器

3。支援資料庫 MySQL、PostgreSQL、Oracle 或其它等

4。官網: http://www.powerdns.com/

5。參考文件: http://www.howtoforge.com/installing-powerdns-with-mysql-backend-and-poweradmin-on-debian-etch

6。下載: http://www.powerdns.com/en/downloads.aspx

2009年2月18日 星期三

The High Availability Linux Project


The High Availability Linux Project

The basic goal of the High Availability Linux project is to:

  • Provide a high availability (clustering) solution for Linux which promotes reliability, availability, and serviceability (RAS) through a community development effort.

The Linux-HA project is a widely used and important component in many interesting High Availability solutions, and ranks as among the best HA software packages for any platform. We estimate that we currently have more than thirty thousand installations up in mission-critical uses in the real world since 1999. Interest in this project continues to grow. These web pages are average nearly 20000 hits per day, and we see more than 100 downloads of Heartbeat per day.

Heartbeat now ships as part of SUSE Linux, Mandriva Linux, Debian GNU/Linux, Ubuntu Linux, Red Flag Linux, and Gentoo Linux. Ultra Monkey, and several company's embedded systems are also based on it. Although this is called the Linux-HA project, the software is highly portable and runs on FreeBSD, Solaris, and OpenBSD, even on !MacOS/X from time to time.

There have been many articles and several chapters in books written on this project and software. See the PressRoom for more details.

We are now competitive with commercial systems similar to those described in D. H. Brown's 1998 or March 2000 analysis of RAS cluster features and functions. This release 2 series brings technologies and basic capabilities which match or exceed the capabilities of many commercial HA systems. We think you'll be surprised. An R2 getting started guide is available.

We include advanced integration with the DRBD real-time disk replication software, and also work well with the LVS (Linux Virtual Server) project. We expect to continue to collaborate with them in the future, since our goals are complementary.

We have a page of reference sites to provide a few real-life examples of how organizations both small and large use Heartbeat in production. Submissions for this page are actively encouraged.

Heartbeat is a leading implementor of the Open Cluster Framework (OCF) standard.


http://kiwi.csie.chu.edu.tw/blog/archives/150

What is DRBD


http://www.drbd.org/
http://www.allhabit.net/dedo_siteindex.php?q=centos+nfs+drbd+ha

DRBD® refers to block devices designed as a building block to form high availability (HA) clusters. This is done by mirroring a whole block device via an assigned network. DRBD can be understood as network based raid-1.

In the illustration above, the two orange boxes represent two servers that form an HA cluster. The boxes contain the usual components of a Linux™ kernel: file system, buffer cache, disk scheduler, disk drivers, TCP/IP stack and network interface card (NIC) driver. The black arrows illustrate the flow of data between these components.

The orange arrows show the flow of data, as DRBD mirrors the data of a high availably service from the active node of the HA cluster to the standby node of the HA cluster.

DRBD

http://gator.hoja.idv.tw/post/2/52


DRBD是一個Distributed Replicated Block Device的縮寫,簡單的說,他是一個遠端資料備份的機制,不同rsync,他是透過網路realtime的mirror Local端與遠端的Device。

本次測試的軟硬體如下:


  • CPU: Transmeta TM5600 533MHz
  • Memory: 128M
  • HD: 實際測試資料是寫入透過USB1.1連接的硬碟
  • (這會使測試資料較不正確,但是礙於時間,暫時如此)
  • OS: CentOS4.1 Linux kernel升級至 2.6.15.5
  • DRBD: drbd-0.7.16 tarball

(上述機器共兩台)

安裝與設定

如果沒有特殊說明,表示兩台機器都要作。
假設
primary IP= 192.168.55.1 hostname=ha1
secondary IP= 192.168.55.2 hostname=ha2

1. 升級kernel 至 2.6.15.5
解壓縮kernel source於 /usr/src下,並建一個link,link到 /usr/src/linux。然後重新編譯kernel

2. 安裝DRBD
將drbd-0.7.16.tar.gz解壓縮至/usr/src/然後執行以下指令

>cd /usr/src/drbd-0.7.16
>make; make install
> modprobe drbd
>lsmod #正確的話,應該可以看到drbd module已經安裝好了
>ls /dev/drbd*
/dev/drbd0 /dev/drbd1

(ps: source code中有INSTALL說明檔,但是不需要照著作。直接make即可)

3. 編輯 /etc/drbd.conf

resource r0 {
protocol C;
incon-degr-cmd "halt -f";

on ha1 {
device /dev/drbd0;
disk /dev/sda6; #要寫入的device
meta-disk internal;
address 192.168.55.1:7788;
}
on ha2 {
device /dev/drbd0;
disk /dev/sda2; #要寫入的device
meta-disk internal;
address 192.168.55.2:7788;
} }

PS: Device 必須大於128MB


4. 在入module,與啟動brbd

執行以下指令
> drbdadm up all
> dmesg | tail #正確的話,應該可以看到以下類似訊息
drbd: initialised. Version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74)
drbd: registered as block device major 147

nb: to have it register as 43 (NBD) you can say
modprobe drbd use_nbd_major

drbd0: Creating state block
drbd0: resync bitmap: bits=1250 words=40
drbd0: size = 5000 KB
drbd0: Assuming that all blocks are out of sync (aka FullSync)
drbd0: 5000 KB now marked out-of-sync by on disk bit-map.
drbd0: Handshake successful: DRBD Network Protocol version 74
drbd0: Connection established.
drbd0: I am inconsistent, but there is no sync? BOTH nodes inconsistent!
drbd0: Secondary/Unknown --> Secondary/Secondary
> cat /proc/drbd #正確的話,應該可以看到以下類似訊息
version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74)

0: cs:Connected st:Secondary/Secondary ld:Inconsistent
ns:0 nr:0 dw:0 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0

以下的步驟只需在Primary作
>drbdadm primary all #如果有錯誤訊息,你也可以執行以下那行指令
>drbdadm -- --do-what-I-say primary all
>drbdadm -- connect all
>cat /proc/drbd #你將會看到sync的畫面如下
0: cs:SyncSource st:Primary/Secondary ld:Consistent
ns:12940824 nr:0 dw:87492 dr:13690591 al:109 bm:1668 lo:1000 pe:1876 ua:1000 ap:0
[========>...........] sync'ed: 44.4% (15858/28487)M
finish: 0:09:20 speed: 28,933 (25,160) K/sec

不需要等到sync完成即可以作測試了!!

測試與結果

首先,我先在ha1(primary)上建立一個mount point,並將/dev/drbd0 mount上去。然後執行我寫好的touch去產生檔案。產生完後,umount 並且執行 drbdadm secondary all 將Primary變成 secondry。

#在ha1執行,並記得先mke2fs /dev/sda6以及 ha2上的/dev/sda2
>mkdir /mnt/test
>mount /dev/drbd0 /mnt/test
>touch test.txt
>umount /mnt/test
>drbdadm secondary all

接著移至ha2,現在同樣把他變成primary,並mount起/dev/drbd0,如果可以看到之前建立的檔案即成功了。

#在ha2執行
>drbdadm primary all
>mkdir /mnt/test
>mount /dev/drbd0 /mnt/test
>ls /mnt/test
test.txt

另外,我也試過,如果,secondary異常時(例如,斷線),primary會正常運作,當secondary恢復後,資料也會自動備援過去。

接著,我分別在ha1本機硬碟,ha1上的/dev/sda6(USB1.1 上的硬碟),以及DRBD執行下(含secondary 連線正常 與secondary 斷線的情況下,執行我的php scrip(touch.php)產生出以下數據。

執行狀態檔案大小測試次數平均執行時間(sec)備註
本機硬碟 100MB 50 8.846169
USB1.1連接硬碟 100MB 50 75.870175 [1]
DRDB 100MB 10 94.990632 [2]
DRDB ( Secondry fail) 100MB 10 79.909951 當網路恢復,DRBD約以240K/sec速度進行sync
100MB資料約7min多中完成sync
此資訊可由 watch cat /proc/drbd 取得

根據以上的資料顯是,DRBD大約會造成效率降低25% ( ( [2]- [1]) / [1] *100%)。

PS: 我的touch.php 如下:(他會產生以1K為單位的檔案,檔案大小與執行次數由參數決定)

#!/usr/bin/php -q

2008年4月26日 星期六

架設 Squid -- 使用 Proxy 認證服務

1. 允許從任何地方連線: (不建議)

CODE:

http_access allow all(放在 deny all 上面或者直接改掉 deny all 這行)

2. 要求使用帳號密碼:
a. 先使用 htpasswd 建立一組帳號清單
b. 修改

CODE:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd(使用 ncsa_auth 認證, 認證檔為 /etc/squid/passwd )

CODE:

acl password proxy_auth REQUIRED這行已經內建, 只要取消註記即可)

增加一行:

CODE:

http_access allow password底下這行記得Mark起來

CODE:

#http_reply_access allow all接著把Squid重啟即可


來源: ADJ網路控股集團

在 Linux 下更改 MAC 位址

1.首先必須關閉網卡設備,否則會報告系統忙,無法更改。

命令是:
# /sbin/ifconfig eth0 down

2.修改MAC地址,這一步較Windows中的修改要簡單。

命令是:
# /sbin/ifconfig eth0 hw ether 00 AA BB CC DD EE”

3.重新啟用網卡

# /sbin/ifconfig eth0 up
網卡的MAC位址更改就完成了。

如果這樣不行 記得多一條指令
#service network restart

把網路重開 應該就生效了

來源: ADJ網路控股集團

2008年4月20日 星期日

IPTABLES中SNAT和MASQUERADE的區別

IPtables中SNAT和MASQUERADE的區別
IPtables中可以靈活的做各種網絡地址轉换(NAT)網絡地址轉换主要有兩種:SNAT和DNAT
SNAT是source network address translation的縮寫即源地址目標轉换比如,多個PC機使用ADSL路由器共享上網每個PC機都配置了内網IPPC機訪問外部網絡的時候,路由器將數據包的報頭中的源地址替换成路由器的ip當外部網絡的服務器比如網站web服務器接到訪問請求的時候他的日志記録下來的是路由器的ip地址,而不是pc機的内網ip這是因為,這個服務器收到的數據包的報頭裏邊的“源地址”,已經被替换了所以叫做SNAT,基于源地址的地址轉换
DNAT是destination network address translation的縮寫即目標網絡地址轉换典型的應用是,有個web服務器放在内網配置内網ip,前端有個防火墻配置公網ip互聯網上的訪問者使用公網ip來訪問這個網站當訪問的時候,客户端發出一個數據包這個數據包的報頭裏邊,目標地址寫的是防火墻的公網ip防火墻會把這個數據包的報頭改寫一次,將目標地址改寫成web服務器的内網ip然後再把這個數據包發送到内網的web服務器上這様,數據包就穿透了防火墻,并從公網ip變成了一個對内網地址的訪問了即DNAT,基于目標的網絡地址轉换MASQUERADE,地址僞裝,在iptables中有着和SNAT相近的效果,但也有一些區彆但使用SNAT的時候,出口ip的地址範圍可以是一個,也可以是多個,例如:
如下命令表示把所有10.8.0.0網段的數據包SNAT成192.168.5.3的ip然後發出去iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3
如下命令表示把所有10.8.0.0網段的數據包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等幾個ip然後發出去iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3-192.168.5.5
這就是SNAT的使用方法,即可以NAT成一個地址,也可以NAT成多個地址但是,對于SNAT,不管是幾個地址,必須明確的指定要SNAT的ip假如當前系統用的是ADSL動態撥號方式,那麽每次撥號,出口ip192.168.5.3都會改變而且改變的幅度很大,不一定是192.168.5.3到192.168.5.5範圍内的地址這個時候如果按照現在的方式來配置iptables就會出現問題了因為每次撥號後,服務器地址都會變化,而iptables規則内的ip是不會隨着自動變化的每次地址變化後都必須手工修改一次iptables,把規則裏邊的固定ip改成新的ip這様是非常不好用的
MASQUERADE就是針對這種場景而設計的,他的作用是,從服務器的網卡上,自動獲取當前ip地址來做NAT比如下邊的命令:
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE如此配置的話,不用指定SNAT的目標ip了不管現在eth0的出口獲得了怎様的動態ip,MASQUERADE會自動讀取eth0現在的ip地址然後做SNAT出去這様就實現了很好的動態SNAT地址轉换
注:
對于MASQUERADE,只是計算機的負荷稍微多一點。因為對每個匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。當然,這也有好處,就是我們可以使用通過PPP、 PPPOE、SLIP等撥號得到的地址,這些地址可是由ISP的DHCP隨機分配的。
感謝原作者:微笑使者
原文地址 http://www.xp.org.cn/wiki/html/68/n-68.html

2008年3月29日 星期六

Linux & Windows 上面時間較時方法

yum -y install ntp

ntpdate watch.stdtime.gov.tw && clock -w

時間與頻率國家標準實驗室:http://www.stdtime.gov.tw/chinese/home.htm
NTP 校時軟體(for Windows):http://www.stdtime.gov.tw/chinese/EXE/NTPClock.exe

cp /etc/crontab /etc/crontab.bak
vi /etc/crontab

0 0-23 * * * root /usr/sbin/ntpdate watch.stdtime.gov.tw > /dev/null 2>&1
#每個小時校時一次

0 6 * * 0 root /bin/sync;/bin/sync;/bin/sync;/sbin/shutdown -r now > /dev/null 2>&1
#每星期天早上六點電腦重新開機
#以上設定僅供參考,請視自己狀況設定

RPM 基本指令介紹

  • 安裝:rpm -ivh xxx
  • 移除:rpm -e xxx
  • 升級:rpm -Uvh xxx
  • 查詢:
rpm -qa | grep xxx
rpm -qi xxx
rpm -ql xxx
rpm -qc xxx
rpm -qf /etc/yum.conf
rpm -qpi xxx

yum 指令介紹

  • 更新:yum update
  • 安裝:yum install xxx
  • 移除:yum remove xxx
  • 清除已經安裝過的檔案(/var/cache/yum/):yum clean all
  • 搜尋:yum search xxx
  • 列出所有檔案:yum list
  • 查詢檔案訊息:yum info xxx

vi 基本指令介紹

vi (or vim)是 Unix-like 作業系統下最通用、強悍的文字編輯器

輸入:a、i、o

到第一行:gg
到最後一行:G
到某一行:xxG
到行首:0
到行末:$

複製:yy
貼上:p
復原:u

刪一個字:x
刪整行:dd

顯示行數::set nu
不顯示行數::set nonu

vi 的搜尋:/、再次搜尋:n
到 shell::sh(在 shell 中回到 vi:exit)

儲存::w
離開::q
儲存兼離開::wq 或 shift+zz
強制離開(不儲存)::q!

Vim 官方文件:http://www.vim.org/docs.php

2008年3月23日 星期日

轉載文章 技術文章: 以 iptables 架設 SME 防火牆

轉載文章 技術文章: 以 iptables 架設 SME 防火牆
此文章由 pango 發表於1月 7日 (星期三) 上午12:00


由於 Internet 的普及和連接的成本下降, 很多企業都已經把辦公室網絡接上 Internet 去了。 而當各企業正享受著 Internet 所帶來的商機和方便的同時, 亦為企業本身帶來各種的危機。 從一些貪玩小孩的入侵, 到大規模的網蟲 (NetWorm) 爆發。 企業的系統無時無刻面對著各種挑戰。 一但系統被入侵, 所損失的往往多於能從 Internet 中所得到的。 所以我們必需要有一個防禦的機制來保護企業內的資料和財產, 免受外來的種種攻擊。 而當中最為普及的技術便是『防火牆』(Firewall)。




什麼是防火牆

『防火牆』只是一個統稱, 或者可以說是一個概念。 其實, 任何一種能成功防止外來入侵的網絡裝置或軟件, 都可以稱為『防火牆』。

從網絡保安而言, 防火牆通常會用作內部網絡對外連接的唯一通道。 如此一來, 防火牆便成為了一個網絡關卡, 所有進出內部網絡的交通都必先經過防火牆的檢查和過濾, 防止入侵者接近內部的資源。

而防火牆是根據網絡管理員預先定下的規則 (Rules) 來過濾網絡交通。 而這些規則便是整個防火牆的靈魂、內部網絡的守衛。 在制定這些規則時, 大都是圍繞著以下幾個範籌而定:


誰〔不〕能進出網絡
什麼〔不〕可以進出網絡
資料〔不〕可以傳到那裡去
用什麼方法才〔不〕可進出網絡


防火牆的種類

現時所流行的防火牆大致可分為以下兩類:


1 封包過濾 (Packet Filters)

封包過濾是透過檢測網絡封包的標頭 (Header) 資料是否符合管理員所定下的規則, 而決定是否讓其通過。 這些標頭資料包括了:


來源/目的地的位址 (Address)
來源/目的地的通訊埠 (Port)
通訊協定 (Protocol)

使用封包過濾的好處是其系統和應用程式中立性 (Operating Sytem & Application-neutral), 對於在內部網絡的客端程式不須作任可更改便可提供保謢。 而本文將會介紹的 防火牆亦是封包過濾式的。


2 應用層閘道 (Application Gateway)

應用層閘道式的防火牆, 主要是在客端和伺服器之間加上『代理伺服器』(Proxy Server) 而達成。 如此一來, 網絡間的連線得變成兩個部驟: 首先是客端和代理伺服器連線, 然後經過過濾後才由代理伺服器和真實的伺服器連線。

但是使用應用層閘道式的防火牆, 往往須要更改客端程式的設定來佩合。 這對於一般的用家 (End-user) 來說, 並不如封包過濾般方便。


Linux 與 封包過濾

Linux 核心自版本 1.1 開始已提供了封包過濾的功能。 到了現時的 2.4 版本內建的 Netfilter 模組, 功能更臻完善。 這個模組利用了一致被資訊保安界好評的 『狀態性』(Stateful) 機制, 記下各網絡連線的狀態並檢查往後的封包是否屬於同一連線。 狀態性機制能使防火牆能過濾一些以往不能偵測的連線狀態, 加強了內部網絡安全。


iptables

Netfilter 是在 Linux 核心 (Kernel) 的模組, 我們不能和它直接溝通。 它只會依著管理員定下的規則, 對封包進行檢測。 至於把怎樣才能把規則告知 Netfilter, 就得靠一個名為 iptables 的用戶端的程式。

要把 iptables 運用得當, 就先要理解 Netfilter 處理封包的機制。

之前提及過防火牆是透過一系列的規則而建成, 而每個規則都包含了一個對封包的描述 (Match) 和 一個處置動作 (Target)。 每當封包符合規則中的描述時, 核心便會對封包進行相應的處置動作。 而在 Netfilter 的角度中, 這些規則是記錄在不同的鏈 (Chain) 中, 而鏈又會被歸納到不同的規則表 (Table) 中。

封包會根據它在核心中不同的層次和狀態, 被送到一個或多個規則表和鏈中, 並和當中的每個規則作對比並執行相應的動作。 iptables 的功用就是讓管理員管理各個規則表和鏈中的規則。


核心中的規則表

在核心中有三個規則表:


filter

這個規則表是最常用的規則表, 也是 iptables 的預設的規則表。 所有對封包進行過濾的規則都是加進這個規則表的鏈中。 這個規則表中有三個預設的鏈, 分別是: INPUT (給目的地是本機的封包), FORWORD (給途經本機的封包), OUTPUT (給由本機所發出的封包)


nat

這個規則表主要是給予系統 網路位址轉換 (Network Address Translation) 的功能。顧名思義, 網路位址轉換就是把封包標頭的位址和通訊埠的資料更改。 這個功能主要的用處是:


Internet 連線分享。 即使只得一個可用的 Internet 位址, 也可把整個內部網絡的電腦接上 Internet。
隱蔽內部網絡的存在。 縱然有足夠的 Internet 位址可用, 但基於保安的理由我們有時會不希望其他人知到企業內部網絡的存在。 運用網路位址轉換就可把所有內部網絡對外的通訊轉換成看似是同一位址所發出的封包一樣。
服務轉向 (Forwording )。 當有伺服器置於防火牆後, 但又須要對外提供時, 便可以把目的地位址是防火牆的封包轉向到真實的伺服器。這個規則表中有三個預設的鏈, 分別是: PREROUTING (給所有進入本機而未經路由處理 (Routing Decision)的封包), POSTROUTING (給所有經過路由處理而目的地不是本機的封包), OUTPUT (給由本機所發出的封包)


mangle

這個規則表用來更改封包的一些屬性 (Properties), 這個規則表中有四個預設的鏈, 分別是: PREROUTEING, INPUT, FORWARD , OUTPUT 和 POSTROUTING。


Iptables 的基本語法

iptables -t Table -Operation Chain Match -j Target

Table 是所用的是個規則表
Chain 指明是用規則表中的哪一個鏈
Operation 是對鏈中的規則所進行的動作, 例如:增加,移除,清空 等
Match 是一個對封包的描述, 例如:來源地址及通訊埠
Target 是處置動作, 例如:ACCEPT, DROP, LOG等



常用的描述語法

語法 用途
-p [!] protocol 指定所針對的通訊協定, 例如:tcp, udp, icmp
-s [!] address[/mask] 指定所針對的來源位址。 這可以是一個IP位址, 主機名稱, 或加上網絡遮罩以表示一群 IP 位址。
-d [!] address[/mask] 指定所針對的目的地位址。 這可以是一個IP位址, 主機名稱, 或加上網絡遮罩以表示一群IP位址。
-i [!] name 指定從那個網絡介面進入的封包。 例如:eth0, ppp0
-o [!] name 指定從那個網絡介面送出的封包。 例如:eth0, ppp0
--sport [!] port[:port] 指定來源通訊埠。 這可以指明是那一個或那一組埠
--dport [!] port[:port] 指定目的地通訊埠。 這可以指明是那一個或那一組埠
[!] --syn 只限 TCP 協定所用, 這指定封包須為 TCP 連線要求封包



防火牆架設範例

有了基本的認識後, 我們便開始架設防火牆。 我們假設企業A 有一個 Internet 連線和足夠的合法 Internet 位址給所有電腦使用。 而企業A 只希望員工使用 WWW 和 FTP。

我們可以跟著以下的步驟制作一個 Shell Script, 來架設防火牆。

設定網絡參數和載入相關的核心模組

$INTERNAL_NET=X.X.X.X/24 # Local LAN Subnet
$INTERNAL_NIC=eth0 # Local LAN interface


$EXTERNAL_NET=Y.Y.Y.Y/8 # Internet Subnet
$EXTERNAL_NIC=eth1 # Internet interface


echo 1 > /proc/sys/net/ipv4/ip_forward


/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ipt_state


清除現有的規則

-F 動作會清除所指定的鏈中的所有規則, 如果沒有指明鏈則規則表中所有的鏈都會被清空。

/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F

-X 動作會移除指定規則表中所有由用者增加的鏈

/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X


設定預設政策

-P 動作會設定所指定的鏈的預設政策。 當一個封包進入鏈後, 但沒有規則能符合這個封包的資料和狀態時, 核心會以鏈的預設政策去處理該個封包。

每一個良好的防火牆的預設政策都應設為 DROP。 正所謂寧枉無縱, 預設拒絕所有封包, 然後才讓真正有用封包通過。 能使防火牆更為堅固。

/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P OUTPUT DROP
/sbin/iptables -t filter -P FORWARD DROP


不回應 ICMP 封包

如要查看一部主機是否在線, 最簡單的方法是使用 ping 指令。 如果不想被 ping, 可以設定 Netfilter 不回應 ICMP 封包

/sbin/iptables -t filter -A INPUT -p icmp --icmp-type echo-requested -j DROP
/sbin/iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
/sbin/iptables -t filter -A FORWARD -p icmp --icmp-type echo-requested -j DROP
/sbin/iptables -t filter -A FORWARD -p icmp --icmp-type echo-reply -j DROP


防止 IP Spoofing

IP Spoofing 是把外來的封包假裝成是內部網絡所發出的, 試途讓防火牆誤認而允許其進入內部網絡。 而要防止 IP Spoofing, 我們只須要過濾那些從 Internet 進入而聲稱來源地址是內部網絡的封包便可。

/sbin/iptables -t filter -A INPUT -i $EXTERNAL_NIC -s $INTERNAL_NET -j DROP
/sbin/iptables -t filter -A FORWARD -i $EXTERNAL_NIC -s $INTERNAL_NET -j DROP


防止網絡掃描

網絡掃描是利用一些不正常而又合法的封包去檢測伺服器所提供的服務和取得一些系統資訊。 亦有入侵者用這些封包企途繞過防火牆去入侵內部網絡, 所以必需過濾。

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP


允許內部網絡使用者瀏覽 Internet 網頁

要允許瀏覽 Internet 網頁, 我們須要允許封包從內部網絡傳送到 Web Server 去, 並同時要允許封包從 Web Server返回內部網絡。

/sbin/iptables -t filter -A FORWARD -p tcp -s $INTERNAL_NET -d 0/0 --dport 80 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -p tcp -s $INTERNAL_NET -d 0/0 --dport 443 -j ACCEPT

要允許封包從 Web Server返回內部網絡, 有兩個方法設定。 其一是利用狀態性機制去自動判斷相關的封包:

/sbin/iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

其次是加上相應的規則:

/sbin/iptables -t filter -A FORWARD -p tcp -d $INTERNAL_NET -s 0/0 --sport 80 ! --syn -j ACCEPT
/sbin/iptables -t filter -A FORWARD -p tcp -d $INTERNAL_NET -s 0/0 --sport 443 ! --syn -j ACCEPT

利用狀態性機制去自動判斷的好處是, 只須設定一次就能和其他規則分享使用 (象以下的 DNS 和 FTP), 能減少規則的數量,方便管理。


允許內部網絡查詢 DNS

DNS 是主機名稱和 IP 位址互換的服務, 如果過濾了 DNS 查詢, 用戶便不能用主機名稱 (如:http://www.linuxpilot.net ) 來瀏覽網頁, 而是要直接用 IP 位址 (如: http://203.194.196.187)。

/sbin/iptables -t filter -A FORWARD -p udp -s $INTERNAL_NET -d 0/0 --dport 53 -j ACCEPT

如果已有固定的 DNS 伺服器, 可以以下規則去限制只可以查詢指定的 DNS 伺服器:

$DNSSRV=202.181.230.106 # IP Address of the DNS Server
/sbin/iptables -t filter -A FORWARD -p udp -s $INTERNAL_NET -d $DNSSRV --dport 53 -j ACCEPT


允許內部網絡使用者使用 FTP

大部份的 Internet 服務的設定基本上和之前的大同小異, 讀者可以嚐試自行設定。 但可惜的是 FTP 不只用一個通訊埠來進行資料傳送, 而是要用兩個。 更甚的是其中一個通訊埠是次次不同的, 根本不可能預先在防火牆中設定。

有幸的是 Netfilter 所提供的狀態性機制能解決這個問題。 由於 FTP 的第二個通訊埠的連線, 是透過在埠21已建立的連線來建立, 所以可以利用狀態性機制去允許所有由已建立的連線所衍生出來的連線。

/sbin/iptables -t filter -A FORWARD -p tcp -s $INTERNAL_NET -d 0/0 --dport 21 -j ACCEPT


允許管理員以 SSH 連線到防火牆修改設定

最後, 開設一個通道給管理員以 SSH 連線到防火牆修改設定。 不然的話, 每當有設定要修改時, 管理員便要親身登入防火牆修改了。

/sbin/iptables -t filter -A INPUT -i $INTERNAL_NIC -s $INTERNAL_NET --dport 22 -j ACCEPT


最後的步驟

當設計好所有的規則和相應的 Script 後, 把所有的 Script 集合起來製成一個 Shell Script, 然後於 /etc/rc.d/rc.local 中加入執行該 Script 的命令。 這樣每次系統啟動時便會自動啟動防火牆。


Internet 連線分享

雖然以上的防火牆是基於有足夠的合法位址而設計, 但只須多加一規則便可以讓內部網絡以一個合法位址分享Internet 連線。

如果獲得一個固定的合法位址, 可以用:

$FIREWALL_IP=y.y.y.z # IP Address that can connect to Internet
/sbin/iptables -t nat -A POSTROUTING -o $EXTERNAL_NIC -s $INTERNAL_NET -j SNAT –to $FIREWALL_IP

如果位址是動態分佩的話, 則用:

/sbin/iptables -t nat -A POSTROUTING -o $EXTERNAL_NIC -s $INTERNAL_NET -j MASQUERADE

其實以上兩個規則,都是叫核心把由內部網絡所發出的封包內的來源位址, 先轉成防火牆的合法位址再送出 Internet。 只不過用 MASQUERADE 方法時, 因為要顧及動態位址分佩, 所以會比 SNAT 多用一點 CPU 資源。


總結

Linux 加上 Netfilter 的強大功能, 給予中小企一個低成本的防火牆的解決方案。 以保障企業的資源。 以上的範例雖已包含了一般防火牆的功能, 但單靠 Netfilter 是未能杜絕所有的入侵 (例如: 電郵病毒)的。 所以系統管理員仍是要綜合各種網絡保安的工具一起, 發揮最大的效能。

作者Isaac Chau

原文在 LinuxPilot 第 15 期刊登

postfix相關設定值

postfix相關設定值

suse.com Zone
suse.com IN MX 10 mail
mail.suse.com IN A 192.135.229.2

另一個
mail.geeko.idv.tw IN MX 10 mail
mail.geeko.idv.tw IN A 10 61.219.23.88

Postfix 的設定相關套件及設定檔
Daemon : postfix
Daemon 所需套件
>postfix-*rpm
Script:/etc/init.d/postfix
Post:25(smtp)
設定檔: /etc/sysconfig/mail
/etc/aliases
/etc/postfix/main.cf
/etc/postfix/*
Log檔:/var/log/mail*



post預設值設定檔
啟動時有兩種特性
一、只在127.0.0.1的port 25上面listen
inet_interfaces=127.0.0.1
此設定不接收其他工作端及另一部電腦的連結寄信
除非他自己連接到主機上面使用指令寄信。
建議改成all
或用指令 postconf -e 'inet_interfaces=all'
二、允許同一網段的主機可Relay信件
mynetwork_style=subnet
實務上面通常利用Postfix的mynetworks來限制允許relay的主機範圍

共有三總型態 mynetworks_style= class, subnet, host 預設是subnet

建議修改成 mynetworks=127.0.0.0/8 192.168.142.0/24
或用指令 postconf -e 'mynetworks=127.0.0.0/8 192.168.142.0/24'
可利用postconf指令看所有設定值內容

*************************************************************
*************************************************************
修改main.cf下列設定值
myhostname
就是這部mail server 主機名稱,注意要用FQDN表示方式
例如:myhostname=mail.geeko.idv.tw

mydomain
就是網域名稱
例如:geeko.idv.tw
可以用下面指令檢查設定值
mail:~#postconf mydomain
mydomain=geeko.idv.tw
建議可以直接在main.cf上面加上mydomain的設定值
以免預設值跟你的環境不符合
或用指令 postconf -e 'inet_interfaces=all'
建議修改成 mynetworks=127.0.0.0/8 192.168.142.0/24
或用指令 postconf -e 'mynetworks=127.0.0.0/8 192.168.142.0/24'
注意:同時設定mynetwork_style 跟 mynetworks 則 mynetworks會覆蓋mynetwork_style

myorigin
其預設值作為寄件者email@後面的字串 就是寄件者所在的主機,其預設值應為$myhostname
mydestination
是非常重要的參數 ,postfix利用它來判斷所收到的信件是否要視為本機信件
其預設值應包含$myhostname
///////////////////////////////////////////////////////////
可以直接執行下列指令 便可完成需求
postconf -e 'myhostname=mail.geeko.odv.tw'
postconf -e 'mydomain=geeko.idv.tw'
postconf -e 'inet_interfaces=all'
postconf -e 'mynetworks=127.0.0.0/8 192.168.142.0/24'
postconf -e 'myorigin=$myhostname'
postconf -e 'mydestination=$myhostname'
////////////////////////////////////////////////////////////
最後重新啟動postfix
rcpostfix start
並查看有無listen
netstat -tupln | grep:25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 5932/master
tcp 0 0 :::25 :::* LISTEN 5932/master
另外記得啟動pop3 服務
qpopper
docvert

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
根據email原理
為了將geeko.idv.tw信件被送到mail.geeko.idv.tw
必須新增對應的MX RECOED
格式如下
geeko.idv.tw IN MX 10 mail
mail.geeko.idv.tw IN A 61.219.23.88
為了讓end user也可以使用 記得要 設定 geeko.idv.tw 加入A 紀錄