網路開展事業或在網路創業賺錢的第一步:【架設24小時賺錢網站主機】比網頁設計更優先!

感謝您造訪 Linux主機伺服器架設技術基地。 你可進入替你架設主機.影片教你維護頁面,詳細瞭解Linux主機架設及相關技術維護影片教學(完整配套措施),有主機馬上可以架設網站營運,完全無限制!

租用不如自有主機!聰明的網站經營者都選擇架設Linux主機伺服器做為網站運作平台,因功能完整又強大,免費架站程式超多!完全沒有版權問題,超強『防駭客攻擊與入侵』及安全防護可以讓你無後顧之憂。

                    架設主機.影片教你維護: http://por.tw/linux/new-E_learning/index.php

Linux主機伺服器架設技術基地  維護團隊  敬上
瀏覽模式: 普通 | 列表

虛擬主機(次網域)設定

虛擬主機(次網域)設定
虛擬主機這功能,可以為本台電腦底下某個 user 的個人網頁賦予正式的網址。
例如,我們可以把 http://por.tw/~【~的目錄名稱】/ 改成 http://【~的目錄名稱】.por.tw。在改造的過程要完成以下幾件事:

attachments/201304/2666978699.jpg

先在修改檔案 etc/bind/db.por.tw(你的網址)
 DNS Server 加一筆DNS 正解記錄:【【~的目錄名稱】.por.tw IN A 113.61.187.47】,與 dns.por.tw 共用相同的 IP。
例如: www.por.tw IN A 113.61.187.47


在 /etc/apache2/sites-available/ 加上 【~的目錄名稱】.por.tw 的站台資料,範例如下 :

建立檔案:【~的目錄名稱】wh2esites-available/【~的目錄名稱】wh2es

<VirtualHost 113.61.187.47>
ServerAdmin 【~的目錄名稱】@por.tw
ServerName 【~的目錄名稱】.por.tw
DocumentRoot /home/【~的目錄名稱】/public_html/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/【~的目錄名稱】/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddType application/x-httpd-php .php
</Directory>

</VirtualHost>

在 /etc/apache2/sites-enabled/ 底下做鍵結
root@dns: # cd /etc/apache2/sites-enabled/
root@dns: /etc/apache2/sites-enabled/ # ln -s /etc/apache2/sites-available/【~的目錄名稱】wh2es

最後重新啟動 DNS 及 Apache2 Server 啟用新設定值
root@dns: # /etc/init.d/bind9 restart
root@dns: # /etc/init.d/apache2 restart

----------------------------------------------------------------------------------------------------

Linux主機(文字輸入下)關機與重新開機指令

Linux主機(文字輸入下)關機與重新開機指令

shutdown:關機

shutdown -參數 時間 訊息

k:並非真正關機,只是送出訊息

r:關機後重新開機

h:關機後不重新開機

例如:
shutdown -h now (立即關機)

f:快速關機

n:快速關機,不要經過init的程序

c:取消關時的程序

t:在警告訊息和刪除信號間做停留
時間可用now或任意數字 (代表分鐘)

 reboot:重新開機

如何使用Linux架設NAT主機(Linux主機伺服器架設技術)

如何使用 Linux 來架設NAT主機,可以解決 IPv4 位址不足的現象。
目前所分配的 IPv4 Address 範圍有限,所建置的 NGN 專案無線 AP ,導致 IPv4 Address 不足。
而 IPv6 Address 尚未普及至全球,若單用 IPv6 Address 會造成某些點連線失敗,因此,我們仍建議可以建置 NAT 主機,以解決此一困境。

attachments/201304/8700375941.jpg

NAT主機基本概念:

 NAT 簡單來講,就是用 Linux Server 來架設一台 IP 分享器。
對外只需1個實體 IP ,對內卻可提供多組的 IP ,供整間電腦教室的電腦及網路設備,以虛擬 IP 上網,如同外面所賣的 IP 分享器一樣,它必須啟用 DHCP Server 以自動配送虛擬 IPv4 位址給終端設備。

Linux Server 的 NAT 功能,是利用 Netfilter 機制以 iptables指令達成的,它除了可以達成 IP 分享器的功能外,也可以鎖網路設備的 MAC 位置,令中毒的機器無法對外攻擊其他電腦。
詳細做法,請參考下文。

實作:

網卡設定

    * 一定要兩張網卡
          NAT 主機對 CPU 與 RAM 的要求不高,但是對網卡的要求較高,因此建議採用 INTEL 或 3COM 的網卡會較好,若真的有困難,至少要 RealTek 的 R8169(GB) 才可以。
          實體網卡的判別很簡單,打開終端機,把網路線插入,再下 dmesg 指令,若在訊息最下面看到「eth0: link becomes ready 」字樣,代表所插入的網卡介面是 eth0 。
          對外網卡使用實體 IPv4 位址
          對內網卡使用虛擬 IP 位址,網卡的設定值不得有 gateway 值
    * 依上述要求,主機網卡設定圖示如下


    * 修改 /etc/network/interfaces 內容示例如下
      root@nat:~# vi /etc/network/interfaces

autleth0 eth1
iface linet loopback

iface eth0 inet static
   address 163.26.108.132
   network 163.26.108.128
   netmask 255.255.255.128
   broadcast 163.26.108.255
   gateway 163.26.108.254

iface eth1 inet static
   address 192.168.1.1
   network 192.168.1.0
   netmask 255.255.255.0
   broadcast 192.168.1.255



啟動DHCP Server

    * 安裝 dhcp3-server 套件
      root@nat:# apt-get install dhcp3-server
    * 修改 /etc/default/dhcp3-server , 把要配送 ip 的網路卡代號寫入, 如下所例

INTERFACES="eth1"

    * Linux sqz 請注意,dhcp3-server 套件已改成 isc-dhcp-server (但安裝時仍是 apt-get install dhcp3-server)
          啟動程式可能變成 /etc/init.d/isc-dhcp-server
            root@dns:~# service isc-dhcp-server start|stop
          設定檔位置會變成 /etc/dhcp
          實際位置可以下指令
            root@dns:~# dpkg -L isc-dhcp-server 列出套件檔案列表得知
    * 修改 /etc/dhcp3/dhcpd.conf , 加至檔尾(以配送 192.168.1.0 為例)

# This is a very basic subnet declaration.
subnet 192.168.1.0 netmask 255.255.255.0 {
 range 192.168.1.51 192.168.1.200 ;
 option broadcast-address 192.168.1.255 ;
 option routers 192.168.1.1 ;
 option domain-name-servers 168.95.1.1, 168.95.192.1 ;
}

# 若要分配的是虛擬 IP, 這邊要手動額外加入網段
subnet 163.26.108.128 netmask 255.255.255.128 {

}


Linux sqz 記得改成 /etc/dhcp/dhcpd.conf



修改防火牆規則列

    * 修改 /etc/rc.local 下面所列的部分,皆是要修改的項目
      root@nat:~# vi /etc/rc.local

# 打開下面這四行
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
......
###-----------------------------------------------------###
# 設定外部網段 IP 及介面
###-----------------------------------------------------###
ech"Set external ......"
echo

# 不要忘了打開 FW_IFACE
FW_IP="163.26.108.132"
FW_IP_RANGE="163.26.108.128/25"
FW_IFACE="eth0"

###-----------------------------------------------------###
# 設定內部網段 IP 及介面
###-----------------------------------------------------###
ech"Set internal ......"
echo

LAN_IP="192.168.1.1"
LAN_IP_RANGE="192.168.1.0/24"
LAN_BCAST_ADRESS="192.168.1.255"
LAN_IFACE="eth1"

......

###-----------------------------------------------------###
# 打開 forward
###-----------------------------------------------------###
#ech"Enable ip_forward ......"
#echo

ech"1" > /proc/sys/net/ipv4/ip_forward

......

###-----------------------------------------------------###
# 啟動內部對外轉址
###-----------------------------------------------------###

$IPTABLES -t nat -A POSTROUTING -$FW_IFACE -j SNAT --to-source $FW_IP

    * 套用新規則列
      root@nat:~# service rc.local start
    * 檢查 NAT 是否已成功設定
      root@dns:~# iptables -t nat -L

    * 注意:改到此為止,只是啟動封包轉送功能,後續的通訊埠控管尚未處理。不過在南縣 NGN 的架構下,筆者建議只要做到此步驟就好,不必再設定通訊埠的控管,免得一些設備無法連線,反而成為網管的困擾。



通訊埠管制
不管制的作法


這個比較簡單,原 Linux 上的 /etc/rc.local 只要修改到可以轉送封包(虛擬 IP 可以上網),後面的規則保留不動,那就對了。


鎖通訊埠作法

    * 繼續修改規則列 /etc/rc.local
    * 維持 INPUT, OUTPUT, FORWARD 是開放,不必改,再把下面紅字的規則列加到範例中所示的位置

......
###-----------------------------------------------------###
# 啟動外部對內部轉址
###-----------------------------------------------------###
# 凡對 $FW_IP:8080 連線者, 則轉址至 192.168.1.3:80
#$IPTABLES -t nat -A PREROUTING -p tcp -d $FW_IP --dport 8080 -j DNAT --t192.168.1.3:80
###-----------------------------------------------------###

###-----------------------------------------------------###
# 拒絕某一內部 IP 使用某一通道
###-----------------------------------------------------###


#--------------------------------------------------------------------
# NAT對外連線鎖 TCP 埠,思考方向:不管進入封包,只管出去封包
# 被動式 ftp 在經過 port 21 協商後,開始傳資料時,會以本地端 1024:65535 對 ftp server:1024:65535溝通,只要限制
# 連線狀態為:「RELATED」及「ESTABLISHED」封包。即可避免 NAT 內電腦對外掃描,又可使用 FTP 服務
#--------------------------------------------------------------------
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 21 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 對外 SSH 連線
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 22 -j ACCEPT
# 對外 SMTP 寄信
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 25 -j ACCEPT
# 對外 DNS 查詢
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 53 -j ACCEPT
# 對外瀏覽網頁(含某些特定通報點採81埠)
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 80:81 -j ACCEPT
# POP3 收信
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 110 -j ACCEPT
# NTPDate 網路校時
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 123 -j ACCEPT
# HTTPS
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 443 -j ACCEPT
# VNC → TCP port range: 5900 ~ 5906
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 5900:5906 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 8080 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 -j DROP

#--------------------------------------------------------------------
# UDP 埠的部分
#--------------------------------------------------------------------
# DNS查詢
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 --dport 53 -j ACCEPT
# VOIP電話
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 --dport 5060:5061 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 --dport 41000:41999 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 --dport 55000:65000 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 -j DROP


###-----------------------------------------------------###
# 拒絕外部 IP 連至內部 port 號
###-----------------------------------------------------###
......
【PHP網頁開啟錯誤的解決方法】Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 7905 bytes) in

總教頭您好:
我網站架設後,出現:Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 7905 bytes) in

PHP網頁開啟錯誤(無法正確顯示)

請問總教頭我該如何處理?


總教頭回覆:
原因:
容許記憶體大小錯誤(容許記憶體不夠大)所產生的錯誤
致命錯誤:容許記憶體大小XXXXXXXX位元組用盡(嘗試配置XXXX位元組)

解決方法,如下:


1.請修改修改 php.ini

php.ini在Linux主機下的路徑:

 /etc/php5/apache2/php.ini

請用搜尋找到以下字串:

  memory_limit =

你會找到以下字串:
memory_limit = 16M      ; Maximum amount of memory a script may consume (16MB)

//找到這行原16M修改為32M

memory_limit = 32M

2.重新啟動apache2

語法:
service apache2 restart


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

【技術回覆】Wrong permissions on configuration file, should not be world writable! 解決之方法

學員來信問道:
想在網站主機下,多增加 phpmyadmin 版本(解決資料庫管理,發生亂碼的問題)時

在網頁形式下(phpmyadmin)瀏覽資料庫時,有時候會出現錯誤:
例如:http://網址或IP/
phpmyadmin

出現:Wrong permissions on configuration file, should not be world writable! 警語
請問總教頭該如何處理?

總教頭回覆:
其實這個錯誤是mysql數據庫的權限設置成了777所造成的,解決辦法就是把數據庫的根目錄權限重新設置成755即可。
請使用FTP或WinSCP連線至你的主機
例如:資料庫管理 phpMyAdmin 的存放目錄是:/var/www/phpmyadmin
那就點選phpmyadmin按右鍵,把屬性改成775按確定即可!
如果使用終端機,則可以進行如下的操作:
sudo chmod -R 755 /var/www/
phpmyadmin ,這樣重新設置後就可以了。

[MySQL改善] -- 如何使用SQL Profiler 效能分析器

mysql 的 sql 效能分析器主要用途是顯示 sql 執行的整個過程中各項資源的使用情況。分析器可以更好的展示出不良 SQL 的效能問題所在。
下面我們舉例介紹一下 MySQL SQL Profiler 的使用方法:

  • 首先,開啟 MySQL SQL Profiler

mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
| 0 |
+-------------+
1 row in set (0.00 sec)
mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
預設情況下 profiling 的值為 0 表示 MySQL SQL Profiler 處於 OFF 狀態,開啟 SQL 效能分析器後 profiling 的值為 1.

  • 通過 sql 效能分析器,我們來對照一下 下列語句前後 2 次執行過程的差異,對我們瞭解 sql 的詳細執行過程是非常有說明的。

mysql> create table t_engines select * from t_engines1;
Query OK, 57344 rows affected (0.10 sec)
Records: 57344 Duplicates: 0 Warnings: 0
mysql> select count(*) from t_engines;
+----------+
| count(*) |
+----------+
| 57344 |
+----------+
1 row in set (0.00 sec)
mysql> select count(*) from t_engines;
+----------+
| count(*) |
+----------+
| 57344 |
+----------+
1 row in set (0.00 sec)
mysql> SHOW PROFILES;
+----------+------------+-------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------------------------------+
| 26 | 0.10213775 | create table t_engines select * from t_engines1 |
| 27 | 0.00032775 | select count(*) from t_engines |
| 28 | 0.00003850 | select count(*) from t_engines |
+----------+------------+-------------------------------------------------+
15 rows in set (0.01 sec)
mysql> SHOW PROFILE FOR QUERY 27;
+--------------------------------+------------+
| Status | Duration |
+--------------------------------+------------+
| (initialization) | 0.00000425 |
| checking query cache for query | 0.00004050 |
| checking permissions | 0.00001050 |
| Opening tables | 0.00018250 |
| System lock | 0.00000450 |
| Table lock | 0.00001775 |
| init | 0.00001075 |
| optimizing | 0.00000550 |
| executing | 0.00002775 |
| end | 0.00000450 |
| query end | 0.00000325 |
| storing result in query cache | 0.00000400 |
| freeing items | 0.00000400 |
| closing tables | 0.00000500 |
| logging slow query | 0.00000300 |
+--------------------------------+------------+
15 rows in set (0.00 sec)
mysql> SHOW PROFILE FOR QUERY 28;
+-------------------------------------+------------+
| Status | Duration |
+-------------------------------------+------------+
| (initialization) | 0.00000350 |
| checking query cache for query | 0.00000750 |
| checking privileges on cached query | 0.00000500 |
| checking permissions | 0.00000525 |
| sending cached result to client | 0.00001275 |
| logging slow query | 0.00000450 |
+-------------------------------------+------------+
6 rows in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =27 ORDER BY SEQ;
+----------+
| DURATION |
+----------+
| 0.000326 |
+----------+
1 row in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =28 ORDER BY SEQ;
+----------+
| DURATION |
+----------+
| 0.000039 |
+----------+
1 row in set (0.00 sec)
mysql>
從上面的例子中我們可以清晰的看出 2 次執行 count 語句的差別, SHOW PROFILE FOR QUERY 27 展現的是第一次 count 統計的執行過程,包括了 Opening tables 、 Table lock 等操作 。而 SHOW PROFILE FOR QUERY 28 展示了第二次 count 統計的執行過程 , 第二次 count 直接從查詢快取中返回 count 統計結果,通過對照 2 次統計的總執行時間發現,快取讀的速度接近物理讀的 10 倍。通過使用 SQL 效能分析器可以說明我們對一些比較難以確定效能問題的 SQL 進行診斷,找出問題根源。

郵件伺服器 Postfix 功能概述

郵件伺服器 Postfix 功能概述

Postfix支援的環境:
Postfix 可以在 AIX、BSD、HP-UX、IRIX、LINUX、MacOS X、Solaris、 Tru64 UNIX,以及其它 UNIX 平台上執行。
它需要 ANSI C、 POSIX.1 函式庫,以及 BSD 通訊插座(sockets)。
要運行 Postfix 的檔案系統必須有以下條件:若變更檔案名稱,其 inode 編號仍能保持不變,而且,在 fsync() 函式成功回傳之後,能正常地儲存信件,甚至當檔案在稍後的時間點改變檔名時亦然。

Postfix的設定方式簡單、進階門檻低,更重要的是,Postfix採用模組化的設計,讓郵件伺服器運作穩定、效能卓越、安全性無虞。
Postfix和DNS、POP3、IMAP、資料庫、LDAP、SASL、Dovecot、SMTP授權認證、TLS憑證等組合應用。
Postfix的傳輸限制和內容過濾功能,協助網管人員阻絕垃圾郵件。
運用外部程式,建立過濾垃圾郵件及病毒信件的機制。
建立DomainKeys、DKIM,以防止網域被人偽造。
使用原始碼編譯安裝Postfix和各種模組的方法。

attachments/201304/2568342678.jpg

以下是 Postfix 主要功能列表:
其中某些功能需要搭配第三方提供的函式庫 (例如: LDAP, SQL, TLS)。
有些功能,必須是作業系統有提供支援,而且 Postfix 知道如何去運用時,才會正常可用。
(例如:IPv6,連接快取)。

Postfix支援的協定:
Postfix 2.2     Connection cache for SMTP
Postfix 2.3     DSN status notifications
Postfix 2.3     Enhanced status codes
Postfix 1.0     ETRN on-demand relay
Postfix 2.2     IP version 6
Postfix 1.0     LMTP client
Postfix 2.0     MIME (including 8BITMIME to 7BIT conversion)
Postfix 1.0     Pipelining (SMTP client and server)
Postfix 1.0     SASL authentication
Postfix 2.2     TLS encryption and authentication
Postfix 1.1     QMQP server
棄置信件控管
Postfix 2.1     Access control per client/sender/recipient/etc.
Postfix 2.1     Address probing callout
Postfix 1.1     Content filter (built-in, external before queue, external after queue)
Postfix 2.1     Greylisting plug-in
Postfix 2.1     SPF plug-in
Postfix 2.2     SMTP server per-client rate and concurrency limits
支援的資料庫
Postfix 1.0     Berkeley DB database
Postfix 2.2     CDB database
Postfix 1.0     DBM database
Postfix 1.0     LDAP database
Postfix 1.0     MySQL database
Postfix 2.0     PostgreSQL database
支援的信箱格式
Postfix 1.0     Maildir and mailbox format
Postfix 1.0     Virtual domains
位址處理
Postfix 2.2     Masquerading addresses in outbound SMTP mail
Postfix 2.2     Selective address rewriting
Postfix 1.1     VERP envelope return addresses

遠端備份(Linux主機伺服器架設技術)

遠端備份(Linux主機伺服器架設技術)

rSync 是遠端備份資料的機制,而且這個機制是跨平台的,也就是不限作業系統類型。
建議的作法是,用 Linux 架一台 rSync Server ,供其他 Linux Server 或 Windows 平台備份資料。

attachments/201304/9782733307.jpg

在架設上,Linux Server 的方式最簡易,但由於其預設檔名編碼為 Big5 碼,鑑於相容,筆者建議採用 Linux 系列來架設。
但是 Linux 上沒有 Linux server 的 rysnc 快速設定工具, 所以若要把 Linux 當成 rsync server, 就得依下面步驟來處理。
rSync伺服器

    * 修改 /etc/default/rsync
      RSYNC_ENABLE=false → 改成RSYNC_ENABLE=true


    * 到現有的 Linux server 產生伺服器設定檔 /etc/rsyncd.conf 及 /etc/rsyncd.secrets 複製到 Linux 的 /etc 底下。再依以下 rsyncd.conf 示例中所示, 必須建立 /mybk1 資料夾來放備份資料。
          o rsyncd.secrets 的內容為「帳號:密碼」, 示例如下

            my_backup:my_backup_passwd

          o 權限改為 400
            user@Linux:# sudo chmod 400 rsyncd.secrets

          o rsyncd.conf 檔示例

log file = /var/log/rsyncd.log
    [mybk1]                   
    path = /mybk1             
    auth users = my_backup    
    uid = root                
    gid = root                
    secrets file = /etc/rsyncd.secrets
    read only = no

    [mybk2]            
    path = /mybk2             
    auth users = my_backup    
    uid = root                
    gid = root                
    secrets file = /etc/rsyncd.secrets
    read only = no

註:[mybk1]是區段名稱, 從[mybk1]至read only = no為一區段, 而一個設定檔, 允許設定多個區段

    *
          o 建立 /mybk1 及 /mybk2 資料夾
            user@Linux:# sudo mkdir /mybk1
            user@Linux:# sudo mkdir /mybk2



rSync客戶端

    * 到現有的 Linux server 產生客戶端執行檔 bk-Linux.sh 及 rsyncd.secrets 丟至 rsync 客戶端電腦上的 /root 底下, 這兩個檔案的擁有者必須為 root , 而且必須 su 至 root 權限來執行
          o Client 端的 rsyncd.secrets 必須注意兩件事
         1. 內容只含密碼

            my_backup_passwd

         2. 檔案權限必須設定為 400 (-r--------)
          o Client 端的 bk-Linux.sh 內容示例如下

#! /bin/sh

/usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /var/www my_backup@rsync.server::mybk1

註:把 /var/www 備份至 rsync.server這台主機的 mybk1 區段

    * 對 bk-Linux.sh 賦予執行權
      user@Linux:# sudo chmod +x /root/bk-Linux.sh

    * 執行備份動作
      user@Linux:# sudo /root/bk-Linux.sh

    * 設定 crontab , 定時執行 /root/bk-Linux.sh
      user@Linux:# sudo crontab -e

      0 3 * * * /root/bk-Linux.sh

      註:每日 3 時執行 bk-Linux.sh 以備份資料


在 Windows 用 rsync 備份至 Linux 上的 rsync server

    * 請參考下列網址:
      http://myip.tw/itsmw/index.php/DeltaCopy

rSync還原

    * 不論您的 client 端為何種 OS,一律建議使用 FileZilla,使用 SFTP 模式取回即可。請參考下面動畫示範:
      http://myip.tw/Linuxdoc/LinuxBase/m6_filezilla_sftp.htm

DNS雙向解析服務(Linux主機伺服器架設技術)Domain Name Server

本文並不在介紹從無到有寫出 dns 完整的設定檔,主要還是先利用 Linux/Linux Server 提供的工具,產生基本設定檔,再進一步解釋其中涵義,以及如何修改新增/修改主機名稱對映。

DNS開啟Port

    * TCP anynet 53
    * UDP anynet 53
    * TCP localhost 953 (管理指令用)

全球DNS管理

DNS是 Domain Name Server 的簡稱,它的功能在於把 IP(v4 and v6) 位址與英文網址建立起對照表,以提供雙向解析的服務。
在 InterNet 上,所有的 DNS Server 是以階層的方式,層層授權,層層管理。例如:「edu.tw」是教育部電算中心的網域,電算中心會為其架 DNS Server,管理所有的學術網路。
由此,教育部的 DNS Server 授權縣教育網路中心的 DNS Server 自行管理【tnc.edu.tw】的網域。
最後再由 dns.tnc.edu.tw 授權各校的 DNS Server 自行管理學校網域。更詳細的資料,請參考上面所列兩篇文章。

 Domain Name 皆是由 dns.tnc.edu.tw (163.26.200.1) 授權出去的【網域】,所以務必要建置 DNS Server 啟用該網域。
至於特定用途的網站,才由 dns.tnc.edu.tw 指定網址。如:《 xoops.tnc.edu.tw 》、《 x.tnc.edu.tw 》、《 freesf.tnc.edu.tw 》等,皆在 163.26.200.1 中直接指定網址。

安裝與初步設定
DNS 查詢指令簡介
Client DNS 查詢過程

在介紹查詢指令前,我們要先了解什麼是 DNS Cache,而它又和 Client 的 DNS 有關,因此本文在此做一簡單說明。
Client 端的 IP查詢過程

別台 DNS Server 會 cache 學校 dns 記錄,因此 dns server 若做任何變動,Client 電腦並不會立即知道(被 cache 騙了)。
因此,若有變更 dns 記錄,除了要修改 serial 外,想查詢是否設定成功,只得對自己查,這也是為何 dig 指令後面必須加上 @163.26.xxx.xxx 參數的原因。

在 Linux 上常用的 DNS 查詢指令

    * nslookup dc1es.tnc.edu.tw
      直接查詢 dc1es.tnc.edu.tw 的 IP 位址
    * dig dc1es.tnc.edu.tw
      查詢 dc1es.tnc.edu.tw 網域狀況,詢問的對象視 /etc/resolv.conf 內 nameserver 的設定值而異
    * dig @163.26.200.1 dc1es.tnc.edu.tw
      向 163.26.200.1 查詢 dc1es.tnc.edu.tw 網域狀況
    * dig @163.26.200.1 dns.dc1es.tnc.edu.tw AAAA
      向 163.26.200.1 查詢 dns.dc1es.tnc.edu.tw 的 IPv6 網址
    * dig -x 163.26.182.1
      查詢 163.26.182.1 的反解記錄
    * dig @163.26.200.1 -x 163.26.182.1
      向 163.26.200.1 查詢 163.26.182.1 的反解記錄
    * dig @163.26.200.1 -x 2001:288:75a6::1
      向 163.26.200.1 查詢 IPv6 2001:288:75a6::1 的反解記錄
    * dig @163.26.182.1 dc1es.tnc.edu.tw MX
      向 163.26.182.1 查詢收件人為 xxx@dc1es.tnc.edu.tw 的信件會轉送至何處
    * dig @163.26.182.1 dns.dc1es.tnc.edu.tw MX
      向 163.26.182.1 查詢收件人為 xxx@dns.dc1es.tnc.edu.tw 的信件會轉送至何處
    * dig @168.95.1.1 yahoo.com NS
      向 168.95.1.1(中華電信 DNS Server) 查詢 yahoo.com 網域是由那些 Name Server 來服務



DNS Server套件

Linux/Linux Server 已預設裝妥 Bind9 這一套 DNS Server 套件及其設定工具 ols3dns ,使用其產生器,所製造出的設定檔結構解釋如下:

    * 設定檔位置在 /etc/bind/ 底下


    * 無限制遞迴查詢(預設值)
          主控檔: named.conf
            其功能在於指定各網域(Zones)的設定檔名稱暨位置,以下各設定檔是以 ols3dns 產生器為例來進行說明,實務上,檔名只要在 named.conf 定義清楚即可,不一定要遵循下面的範例

rndc.key     

遠端控制(Remote Name Daemon Control)金鑰

RNDC詳解: http://dns-learning.twnic.net.tw/bind/security.html#two
named.ca     最頂層 dns server 定義,在 named.conf 設定時必須使用 type hint 來指定
db.xxxx.tnc.edu.tw     IPv4/IPv6共用正解檔
db.163.26.xxx     IPv4反解檔
2001.288.75xx.rev     IPv6反解檔
localhost     IPv4/IPv6 localhost 正解檔
rev-127.0.0     IPv4 localhost 反解檔
rev.local6     IPv6 localhost 反解檔


    * 限制遞迴查詢設定檔結構
          主控檔: named.conf + auth_zones.conf
            named.conf 主內容在限制遞迴查詢,而可查詢的網域改放在 auth_zones.conf
          其他檔案與上面一致


    * port 值: TCP/UDP 53 ; localhost: 953
    * 手動啟動 | 停止 DNS 服務: /etc/init.d/bind9 start | stop | restart


設定檔內關鍵用語解說

筆者整理了 Bind9 各設定檔常出現的關鍵用語如下,請參考:
$TTL 86400     對方主機查詢完畢,其值要保留(快取)的秒數,例:86400秒
$ORIGIN     宣告本設定檔所列之所有記錄出自於那個網域,最後必須以「.」做結尾,否則會自動再加上網域名稱
$ORIGIN subnet     授權自己的子網域給另一台 DNS Server
@     代表「Zone」

以 db.xxx.tnc.edu.tw 設定檔為例,【@】指的是 xxx.tnc.edu.tw。
以 localhost 設定檔為例,【@】指的是 localhost
IN SOA     開始授權(Star of Authority),後面接了兩個參數是指「本 zone 的管理主機名」及「本 zone 的管理者」
IN NS     負責的 Name Server 主機名稱為何?
IN A     為主機名稱賦予 IPv4 位址
IN AAAA     為主機名稱賦予 IPv6 位址
IN CNAME --> 別名     例: www,ftp,s1...皆是 dns 的分身
IN PTR --> 反解     某 IP 所代表的主機名稱
IN MX -->Mail eXchange     轉信,例:
    mail.tw IN MX 0 spamgw.tw
    mail.tw IN MX 10 mail.tw

說明如下:

   1. 把【xxx@mail.tw】信件先轉給【spamgw.tw】(註: 有兩筆 MX 記錄時,數值低的有較高的優先權)
   2. 【spamgw.tw】收了信之後(並處理之),發現原來指定收信人是在【mail.tw】,因此再把它轉回給【mail.tw】
   3. 如果 spamgw 故障,理論上會送至第二優先 mail.tw(它自己),但依游戲規則,就算是 mail.tw 它自己,它還是會去問 dns.tw ,信件 xxx@mail.tw 的 MX 為何?結果 dns.tw 說,要優先送 spamgw.tw。簡言之,設了 MX 之後,最優先的那台主機一定不可以故障,否則會收不到信件

    * 注意:mail 與 dns 同位址時,不可以採用 CNAME 的設法,一定要用 IN A,才可正常收發信件

限制遞迴查詢 vs 不限制

限制遞迴查詢的意思是,本 DNS Server 只回答所轄網域的問題,其餘不答。不限制的話,就沒有上述限制。例如:當一台 client 向 DNS Server(163.26.182.1)詢問 tw.yahoo.com 時,若有做限制,那麼它不會回答,因為 tw.yahoo.com 不歸 dc1es.tnc.edu.tw 所管。反之,若不做任何限制,它會依其根設定檔(named.ca)一層層往上問,幫 client 找到 tw.yahoo.com 的 IP Address 並回覆之。

可是,貴校可能已設妥限制,而且學校的電腦也都以本校的 DNS Server 為查詢主機,為何還是可以查得到 tw.yahoo.com ?那是因為在 named.conf 內的:「acl allow_clients { 127.0.0.1; 163.26.182.0/24; 2001:288:75a6::/48; };」設定中有說明,要開放給校內的機器查詢。

限制遞迴查詢雖然會造成一些不方便,但它會有較高的安全性,尤其是對 ARP 類病毒偽造網址攻擊,有較高的防禦能力。不過未來若 IPv6 only 實施(沒有 ARP 機制,改用 fe80:...機制),其實限制遞迴查詢,就比較沒有存在意義(目前是 IPv4 與 IPv6並存)。


Linux Server初步設定方法

有兩個方式來設定 DNS 參數

   1. 在設定管理密碼(Linux-setup)時勾選【這台主機要擔任 DNS Server 嗎 ?】,就會在 /etc/bind/ 底下產生不限遞迴查詢的相關設定檔
      注意:本方式僅適用於裝完 Linux Server,第一次登入時。因為 Linux-setup 本身會改變很多設定值(不只 dns),若機器已順利運作多時,勿用。
   2. 直接在終端機介面下指令

   1. 不限遞迴查詢: root@dns~# ols3dns
   2. 限制遞迴查詢: root@dns~# ols3dns --no-recursive
   3. 以大成國小為例
      #-----------------------------------------------------#

      # 臥龍小三 工 具 箱 (1.0.7Linux) Copyright 2006 OLS3  #
      # DNS 自動產生器 1.0.7Linux for Linux          #
      # All rights Reserved.                #
      #-----------------------------------------------------#

      請輸入網域名稱? 例如: jmjh.tnc.edu.tw
      dc1es.tnc.edu.tw
      請輸入IP前三個數字? 例如: 163.26.167
      163.26.182
      請輸入第一台主機的第四個IP?
      例如: 163.26.167.1 的 1
      1
      您要架設第二部 DNS 嗎?(Y/N)
      N

      Done!


Linux初步設定方法

與 Linux Server 一樣,有兩個方式來產生基本的 DNS 設定檔

   1. 在設定管理密碼(Linux-csetup-utf8/Linux-csetup)時,在最後一個問題【這台主機要擔任 DNS Server 嗎 ?】回答「Y」,就會在 /etc/bind/ 底下產生不限遞迴查詢的相關設定檔。
      注意:本方式僅適用於裝完 Linux Server,第一次登入時。因為 Linux-setup 本身會改變許多設定值,若機器已順利運作多時勿用。
   2. 先把終端機的字元編碼改為 Big5 ,再下指令

   1. 不限遞迴查詢: root@dns~# ols3dns
   2. 限制遞迴查詢: root@dns~# ols3dns --no-recursive
   3. 設定過程與上例一樣,請參考上面文件



進階設定
IPv4 的正反解
新增一筆IPv4位址正解

要新增一筆正解記錄只要在正解檔「 /etc/bind/db.xxx.tnc.edu.tw 」內,加上一筆 IN A 的記錄,再把 serial n加1,並重新啟動 DNS Server 即可。 下文,筆者以新增 spamfilter.dc1es.tnc.edu.tw 網址,指向 163.26.182.250 IPv4 位址為例進行解說。

   1. 編輯 /etc/bind/db.xxx.tnc.edu.tw

      $TTL 86400
      @  IN  SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (
                 2006030801 ; 這個數字是序號(serial no.) , 每修改一次就要加 1 號
                 86400 ; refresh
                 1800 ; retry
                 1728000 ; expire
                 1200 ; Negative Caching
                 )
         IN   NS dns.dc1es.tnc.edu.tw.
      dns IN A 163.26.182.1
      @ IN MX 0 mail.dc1es.tnc.edu.tw.
      ;網域名稱 dc1es.tnc.edu.tw 也要賦予一組 IPv4 位址
      dc1es.tnc.edu.tw. IN A 163.26.182.1
      ;
      s1     IN   CNAME dns.dc1es.tnc.edu.tw.
      www    IN   CNAME dns.dc1es.tnc.edu.tw.
      ftp    IN   CNAME dns.dc1es.tnc.edu.tw.
      proxy  IN   CNAME dns.dc1es.tnc.edu.tw.
      ;
      mail  IN  A  163.26.182.1
      s2    IN  A  163.26.182.2
      nt    IN  A  163.26.182.3
      s4    IN  A  163.26.182.4
      s5    IN  A  163.26.182.5
      nat   IN  A  163.26.182.234
      ;為 spamfilter 加上 IN A 的記錄
      spamfilter IN A 163.26.182.250  
      註1:正反解設定檔是用「;」來標示註解文字,不是「#」,請勿用錯
      註2:每一行都要靠左,除非本行是上一行的附屬設定

   2. 重新啟動 bind9
      root@dns:~# service bind9 restart
   3. 檢查重新啟動的訊息是否正常
      root@dns:~# tail -50 /var/log/syslog



IPv4反解問題


IPv4正解,可以由上層 DNS Server 授權某任一 IPv4 位址來擔任 DNS 工作,不受 IPv4 網段影響。但反解就不行,因為它受到「至少要一個完整 C Class 網段」的限制。因此,所有分配到 163.26.xxx.1 的學校,可以幫其他前三個數字一致的機器做反解,但 163.26.xxx.129 就不行。這也是為什麼,我們可以向中華電信申請 dns 名稱正解管理權,但反解就不行,只能靠它幫忙代管的原因。

基於上述原因,若貴校有非反解不可的原因,又不在 163.26.xxx.0 網段上,可以連絡教網中心主任協助處理。至於 IPv6 的部分,因為所配發網段皆是完整的 prefix 48 ,所以不會有此一困擾。不過如果貴校如果剛好就分配到 163.26.xxx.0 網段,則可以經由編輯 /etc/bind/db.163.26.xxx 來新增一筆 IPv4 反解記錄。
$TTL 86400

@   IN   SOA   dns.dc1es.tnc.edu.tw.   admin.dns.dc1es.tnc.edu.tw. (
      2000082620  ; serial 要加 1
      86400  ; refresh
      1800  ; retry
      1728000  ; expire
      1200  ; Negative Caching
      )
      IN   NS   dns.dc1es.tnc.edu.tw.

1     IN   PTR   dns.dc1es.tnc.edu.tw.
2     IN   PTR   s2.dc1es.tnc.edu.tw.
3     IN   PTR   nt.dc1es.tnc.edu.tw.
4     IN   PTR   s4.dc1es.tnc.edu.tw.
5     IN   PTR   s5.dc1es.tnc.edu.tw.
234   IN   PTR   nat.dc1es.tnc.edu.tw.
250   IN   PTR   spamfilter.dc1es.tnc.edu.tw.


手動增加 IPv6 的正反解
沒限制遞迴查詢(預設)
修改 named.conf

把紅字的部分, 加至 /etc/bind/named.conf
options {

     directory "/etc/bind";
     allow-transfer {
        163.26.182.2; // Secondary DNS
     };
     listen-on-v6 { any; };
};

logging {
     category lame-servers{null;};
};

zone "." {
     type hint;
     file "named.ca";
};

zone "localhost" {
     type master;
     file "localhost";
};

zone "0.0.127.in-addr.arpa" {
     type master;
     file "rev-127.0.0";
};

zone "dc1es.tnc.edu.tw" {
     type master;
     file "/etc/bind/db.dc1es.tnc.edu.tw";
};

zone "182.26.163.in-addr.arpa" {
     type master;
     file "db.163.26.182";
};

// ::1 的反解檔
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa."{
     type master;
     file "rev.local6";
};

// 2001.288.750b 的反解檔
zone "6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa." {
     type master;
     file "2001.288.75a6.rev";
};


繼續修改 db.xxx.tnc.edu.tw

$TTL 86400
@  IN  SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (
           2006030802 ; serial 要加 1
           86400 ; refresh
           1800 ; retry
           1728000 ; expire
           1200 ; Negative Caching
           )
   IN   NS dns.dc1es.tnc.edu.tw.
dns  IN  A    163.26.182.1
     IN  AAAA 2001:288:75a6::1
;上面 IN AAAA 前面一定要留空白, 代表是要繼續設 dns 主機的 AAAA(IPv6) 記錄
;
@ IN MX 0 mail.dc1es.tnc.edu.tw.
;
dc1es.tnc.edu.tw. IN A 163.26.182.1
      IN  AAAA  2001:288:75a6::1
;上面兩行指「網域名稱 dc1es.tnc.edu.tw 也賦予一組 IPv4 及 IPv6 位址」
;
s1     IN CNAME dns.dc1es.tnc.edu.tw.
www    IN CNAME dns.dc1es.tnc.edu.tw.
ftp    IN CNAME dns.dc1es.tnc.edu.tw.
proxy  IN CNAME dns.dc1es.tnc.edu.tw.
;
mail   IN  A     163.26.182.1
       IN  AAAA  2001:288:75a6::1
s2     IN  A     163.26.182.2
nt     IN  A     163.26.182.3
s4     IN  A     163.26.182.4
s5     IN  A     163.26.182.5
nat    IN A  163.26.182.234
       IN AAAA  2001:288:75a6::234  
spamfilter IN A  163.26.182.250  
;經過修改 spamfilter.dc1es.tnc.edu.tw 便會有 IPv4 及 IPv6 兩筆記錄


修改 localhost 新增 ::1 正解

$TTL 86400
@    IN   SOA    dns.dc1es.tnc.edu.tw.    admin.dns.dc1es.tnc.edu.tw. (
      2000082620 ; serial 要加 1
      86400 ; refresh
      1800 ; retry
      1728000 ; expire
      1200 ; Negative Caching
      )
     IN   NS   dns.dc1es.tnc.edu.tw.
;
localhost. IN  A    127.0.0.1
           IN  AAAA  ::1

    * 註:紅字為修改之處



建立 ::1 及 2001.288.75xx.rev 反解檔

    * 建立 ::1 IPv6 的 localhost 反解
      root@dns~# vi /etc/bind/rev.local6

$TTL 86400
@ IN  SOA  dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (1 15m 5m 30d 1h)
    IN   NS  dns.dc1es.tnc.edu.tw.

; (1 15m 5m 30d 1h) 中的 1 是序號, 每次修改都要加 1

;;

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. IN PTR localhost.

註:除了 IN NS 這一行為 SOA 這一行的附屬參數,所以左側留有空白外,其餘各行前面不可留空白

    * 建立 IPv6 反解檔
      root@dns~# vi /etc/bind/2001.288.75a6.rev

$TTL 86400
$ORIGIN 6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa.
@  IN   SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (1 15m 5m 30d 1h)
   IN   NS   dns.dc1es.tnc.edu.tw.
;;
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  dns.dc1es.tnc.edu.tw.
234.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  nat.dc1es.tnc.edu.tw.

限制遞迴查詢

只需修改下面這兩個設定檔,其餘設定值與不限遞迴查詢一致
修改 named.conf

options {
     directory "/etc/bind";
     allow-transfer {
        163.26.182.2;
     };
     listen-on-v6 { any; }; //要加上這一行
};


logging {
     category lame-servers{null;};
};

// 把學校 IPv6 網段加入可允許查詢區,例:新增 2001:288:75a6::/48;
acl allow_clients { 127.0.0.1; 163.26.182.0/24; 2001:288:75a6::/48; };

// 在 acl 中的 IP 允許的操作
view "recursive" {
     match-clients { allow_clients; };
     recursion yes;
     include "auth_zones.conf";
};

// 未在 acl 中的 IP 拒絕使用遞迴式查詢
view "external" {
     match-clients { any; };
     recursion no;
     include "auth_zones.conf";
};


修改 auth_zones.conf

zone "." {
     type hint;
     file "named.ca";
};

zone "localhost" {
     type master;
     file "localhost";
};

zone "0.0.127.in-addr.arpa" {
     type master;
     file "rev-127.0.0";
};

zone "dc1es.tnc.edu.tw" {
     type master;
     file "/etc/bind/db.dc1es.tnc.edu.tw";
};

zone "182.26.163.in-addr.arpa" {
     type master;
     file "db.163.26.182";
};

// 新增 ::1 的反解檔
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa."{
     type master;
     file "rev.local6";
};

// 新增 2001.288.75a6 的反解檔
zone "6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa." {
     type master;
     file "2001.288.75a6.rev";
};
修改 db.xxx.tnc.edu.tw 正解檔

 與不限遞迴查詢做法相同,請參考前文

建立 ::1 及 2001.288.75xx.rev 反解檔

 與不限遞迴查詢做法相同,請參考前文

Linux主機防火牆規則(Linux主機伺服器架設技術)

Linux 安裝完畢,便已內建基本的防火牆規則,它是採 IPTABLES 來進行封包過濾的動作。
預設的規則列主要在防止外面主機連線至主機,被阻擋的服務有 FTP, SSH, Samba網芳等。


Linux主機防火牆基本原理:

設定檔

設定規則列位置及套用方式是 Linux 專用的方法,與其他 Debian OS 不同。

    * 使用工具: iptables
    * 規則列位置: /etc/rc.local
    * 修改後套用
      root@dns:~# service rc.local start
    * 註: rc.local 原本設計是為開機後要手動執行特定工作的設定區,Linux 把它借來放置防火牆規則列


Linux主機防火牆基本觀念:

    * IPTABLES = "/sbin/iptables"
      這一行是指:設定 IPTABLES 這個變數,以後只要看到 $IPTABLES 這個字串,就代表 /sbin/iptables 這個指令

    * $IPTABLES -F
      這一行是指:把之前所有已設過的規則清空(flush)


Linux主機防火牆封包進出主機方向:

在 /etc/rc.local 內之「設定 filter table 的預設政策」會看到三行設定值,如下:

###-----------------------------------------------------###
# 設定 filter table 的預設政策
###-----------------------------------------------------###
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

筆者將其簡化說明如下:

    * INPUT   --> 外面要進入主機的網路封包,主要用於規範外面如何連線至主機上的各種服務,與 NAT 內網無關
    * OUTPUT  --> 從主機出去的網路封包。
    * FORWARD --> 從 B 網卡轉至 A 網卡,規範於有 NAT 主機或透通式防火牆用途時,內轉外網路封包之控管。
    * 依上例,預設所有的封包皆開放,不阻擋


INPUT規則列的寫法


規則列的寫法,是把預設政策擺在最下面一行,例外規則擺上面,如下所例

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 22 -j DROP


上面的規則列可以用下面這張圖來表達,預設 22 埠是不被連線的,但有四個綠點例外。
Iptables sample.png



進階處理
取消某個通訊埠的阻擋


只要把所有該 port (--dport)的規則列前面加上 # 變成註解,或直接刪除即可,以 FTP 示例如下:

# 只有本主機所屬網段才能連到這台主機的 FTP SERVER port 21
# $IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 --dport 21 -j ACCEPT
# $IPTABLES -A INPUT -p tcp -s 127.0.0.1 --dport 21 -j ACCEPT
# $IPTABLES -A INPUT -p tcp --dport 21 -j DROP

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 22 -j DROP




新增例外連線範圍

若要新增例外連線點,一定要加在相同埠值區塊最後一行之前(建議第一行),假設我們要加中華電信某個網段 59.127.0.0/16 至 Port 22 的例外點上,做法如下:

    * 編輯 /etc/rc.local (紅字為新增部分)
      root@dns:~# vi /etc/rc.local

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 59.127.0.0/16 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 22 -j DROP


    * 套用新規則
      root@dns:~# service rc.local start



新增某個通訊埠連線限制
以 TCP 1723 為例

假設主機有架 VPN 服務,經由「netstat -nlp」查詢後得知其使用的埠值為 TCP 1723。因此,為避免不具善意的網客隨便亂測密碼,我們可以在 /etc/rc.loal加上其連線限制。

假設允許的網段為

   1. 校內: 163.26.182.0/24
   2. 校外某點: 220.130.230.76

    * 編輯 /etc/rc.local,在 IPv4 的設定區(就是 /sbin/ip6tables -F 之上),依 port 值排序,大約在網芳區塊後面加上。
      root@dns:~# vi /etc/rc.local(紅字為新增部分)

 ......

$IPTABLES -A INPUT -p tcp --dport 139 -j DROP
$IPTABLES -A INPUT -p tcp --dport 445 -j DROP
$IPTABLES -A INPUT -p udp --dport 137 -j DROP
$IPTABLES -A INPUT -p udp --dport 138 -j DROP

$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 --dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 --dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 --dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 1723 -j DROP

/sbin/ip6tables -F
/sbin/ip6tables -A INPUT -p tcp --dport 21 -j DROP
/sbin/ip6tables -A INPUT -p tcp --dport 22 -j DROP
/sbin/ip6tables -A INPUT -p tcp --dport 23 -j DROP
 ......


    * 套用新規則列
      root@dns:~# service rc.local start



以 ICMP 為例

預設不讓外面網路任意點可以 PING 本主機,造就本主機不存在的假象,但選定數點開放偵測。假設允許的網段為

   1. 教網中心:163.26.200.0/24
   2. 校內: 163.26.182.0/24
   3. 校外某點: 220.130.230.76


    * 編輯 /etc/rc.local,在 IPv4 的設定區,Port 21 規則列上方。
      root@dns:~# vi /etc/rc.local(紅字為新增部分)

 ......


$IPTABLES -A INPUT -p icmp -s 163.26.182.0/24 -j ACCEPT
$IPTABLES -A INPUT -p icmp -s 163.26.200.0/24 -j ACCEPT
$IPTABLES -A INPUT -p icmp -j DROP

# 只有本主機所屬網段才能連到這台主機的 FTP server port 21
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 --dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 --dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 21 -j DROP
 ......


    * 套用新規則列
      root@dns:~# service rc.local start



防止 DoS 攻擊

筆者朋友主機最近遭到 DoS 攻擊,我本來以 iptables -m limit 來處理,但發現它會不分來源一律阻擋,這樣無辜的 IP Address 也受到限制,非常不公平,思考並搜尋了一個晚上,後來決定以限制單一 IP 同時連線數(connlimit),來處理此類攻擊,它會把單一 IP 來源同時要求服務(--syn)的連線數,限制在一定的數量以內,正常用人工手動點網頁,就算該網頁有 FrameSet ,應也不致於大過 12(自已用手拼命點得到的結論)才對。因此在設定此限制時,以每一個 IP 同時連線數不得超過 15 為參數,並進行後續的觀察。在設定後,經過一段時間的觀察,CPU 再也不會一直維持在 90-100% 高檔了,大約只會偶而跳至 60-70% ,一般皆在 10 % 以內。重點是它只 tcp-reset 有問題的來源,無辜的人仍可享受應有的速度。

設定方式:

    * 請確認 syslog 有下列參數
          o Linux 在 /etc/syslog.conf
          o Ubuntu 在 /etc/rsyslog.d/50-default.conf

# iptables 的記錄可以寫入 /var/log/kern.log
kern.*                          -/var/log/kern.log

    * 先把可能攻擊的 ip 寫入 /var/log/kern.log ,再把它的封包無聲的丟掉;以同時 15 個連線為限。

$IPTABLES -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -j LOG --log-level 4
$IPTABLES -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -j REJECT --reject-with tcp-reset

    * 分析攻擊可能來源
          o 螢幕觀看(以 tab 鍵分隔欄位)
            root@dns:~# cat /var/log/kern.log |awk '{print $1 " " $2 " " $9}'
          o 轉至純文字,以供下載至試算表統計
            root@dns:~# cat /var/log/kern.log |awk '{print $1 " " $2 " " $9}' > /root/dosatt.txt
            呈現的結果部分截取如下:

May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66

    * 鎖了吧,可疑者!
      若某個 IP 來源您不認識,但每天常常超過,人工點網頁的極限(同時超過 15 個連線數),可以再加以下規則,把它鎖了吧!


$IPTABLES -A INPUT -i eth0 -p tcp -s 60.250.xxx.xx --dport 80 -j DROP
本Linux主機伺服器架設基地立志於收集各類Linux主機伺服器架設、網站架設及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!