2011年12月26日 星期一

設定 DNS

bind9 設定檔位置
$sudo nano /etc/bind/named.conf 

這裡是告訴你 bind9 的設定檔放置的位置



新增 DNS
$sudo nano /etc/bind/named.conf.local

在下面空白處
zone "obf" {                                           --zone 宣告資料庫,obf 為網域名稱
                type master;                          -- 設定為 master ( Primary )
                file "/etc/bind/db.obf";            --儲存 obf 資料的位置
};


設定 obf 資料
$sudo nano /etc/bind/db.obf         --剛剛設定儲存資料的地方

; BIND data file for local loopback interface

$TTL    1800                                                                          --1800 為 cache 存活時間(秒)
@    IN    SOA     dnsserver.obf.    admin.mail.obf.  (              --SOA為管理者資訊,第一段是
                           1            ; Serial                                               主機名稱,第二段是信箱
                           604800          ; Refresh
                           86400            ; Retry
                           2419200        ; Expire
                           604800  )       ; Negative Cache TTL
;
@              IN             NS            dnsserver.obf.      --@代表本機,這裡 NS 是主機名稱+網域
dnsserver      IN         A          192.168.1.10            --前為主機名稱,後面 A 為 主機 IP


重新啟動 DNS
$sudo /etc/init.d/bind9 restart

安裝、檢視 DNS

安裝 DNS
$sudo apt-get install bind9

安裝完畢後
$netstat -an

會看見 udp 53tcp 53 這兩個 port 已經開啟


檢視 DNS
$nslookup
>server

檢視我們的 DNS server 是哪台

詢問 DNS
$nslookup
>set type=soa                --資料的型態
>edu.tw.                          --向 DNS 詢問 edu.tw. 的資料


檢視 Cache  ( DNS 暫存檔 )
$sudo rndc dumpdb -cache                           --將 cache 輸出至檔案
$nl /var/cache/bind/named_dump.db            --檢視輸出檔

裡面可以看到電腦名稱、資料存活時間、型態、IP或網址


清除 cache
$sudo rndc flush

當重新設定完 DNS 後,舊的資料還存留在 cache 中,所以要清除 cache ,讓資料重新抓取

Port Number ( 埠號碼 )

這裡寫一些常用的 Port Number

port   description

 20   : FTP
 21   : FTP
 22   : SSH
 23   : telnet
 25   : SMTP ( 寄 e-mail )
 53   : DNS
 80   : HTTP
110  : POP3 ( 收 e-mail )
443  : HTTPS

2011年12月13日 星期二

檢視檔案內容相關指令 nl、cat、grep...

這裡存放一些用來可以檢視檔案內容的命令

echo
$echo hello                   --在螢幕上顯示 hello

echo 這個指令是將之後的字串顯示在螢幕上,所以並沒有辦法直接看見檔案的內容,不過在編輯檔案時,在檔案裡加上 echo hello 的話,執行檔案時畫面上就會直接顯示出 hello 這個字

nl
$nl abc                       --顯示內容並加上行號

$nl -b a -n rz abc       --以6位數顯示行號如 : 000001、000002

參數:
-b :指定行號指定的方式,主要有兩種:

           -b a :表示不論是否為空行,也同樣列出行號
           -b t  :如果有空行,空的那一行不要列出行號

-n :列出行號表示的方法,主要有三種:

          -n ln :行號在螢幕的最左方顯示
          -n rn :行號在自己欄位的最右方顯示,且不加 0
          -n rz :行號在自己欄位的最右方顯示,且加 0

cat
$cat abc                         --顯示 abc 這個檔案的內容

$cat -n abc                     --顯示出來的內容會加上行號

head
$head -n 10 /var/log/syslog             --只顯示檔案的頭 10 行

$head -n -100 /var/log/syslog          --檔案的後 100 行都不顯示

netstat -an | head -n 10                   --進階用法,顯示 port | 並只顯示前10行

tail
$tail /var/log/messages                   --從檔案的末端開始顯示內容 ( 預設顯示 10 行 )

$tail -n 30 /var/log/messages          --從檔案的末端開始顯示 30 行的內容

grep
$grep 'test' abc                   --將 abc 這個文件裡有 test 這個字的整行顯示出來

$grep 'test' aa bb cc           --從 aa、bb、cc 這三個檔案裡將有 test 這個字的整行顯示出來

基本參數
-i :忽略大小寫的不同,所以大小寫視為相同
-n :順便輸出行號
-v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行
--color=auto : 將找到的關鍵字部分加上顏色的顯示
進階用法
-A :後面可加數字,為 after 的意思,除了列出該行外,後續的 n 行也列出來
-B :後面可加數字,為 befer 的意思,除了列出該行外,前面的 n 行也列出來
--color=auto 可將正確的那個擷取資料列出顏色
 
$ifconfig -a | grep -A1 eth0       --抓取 eth0 那行並將後面一行也顯示出來 

cut
$cat abc | cut -d -f ':' 2,3          --顯示 abc 的內容並以 : 號為分界只抓取第二段及第三段


-d :後面接分隔字元。與 -f 一起使用
-f :依據 -d 的分隔字元將一段訊息分割成為數段,用 -f 取出第幾段的意思
-c :以字元 (characters) 的單位取出固定字元區間

變數處裡
${  }          --專門用在處理變數上

$user = a01 : a02 : a03
$echo ${user#*:}             --從左至右尋找第一個 : 字號並刪除 : 字前面的字元 ( * 為萬用字元 )
a02 : a03                        --顯示結果

$user = a01 : a02 : a03

$echo ${user##*:}           --從左至右尋找最後一個 : 字號並刪除 : 字前面的字元
a03                                 --顯示結果

$user = a01 : a02 : a03
$echo ${user%:*}            --從右至左尋找第一個 : 字號並刪除 : 字後面的字元 ( * 為萬用字元 )
a01 : a02                         --顯示結果

$user = a01 : a02 : a03
$echo ${user%%:*}         --從右至左尋找最後一個 : 字號並刪除 : 字後面的字元
a01                                  --顯示結果

範例 : 
$name = $(cat /etc/passwd | grep student)      --顯示帳號檔案並只抓取有 student 的行列放進
                                                                             name 這個變數中
$() : 是變數中用來處理命令的方式

$n1 = ${name%%:*}     --從 name 變數中從右至左尋找最後一個 : 字號並刪除 : 字後面的字

$echo $n1                    --顯示 n1 裡的內容
student                         --顯示結果,這行只剩下 student ,其他的都被刪除了

遠端登入 SSH

下載 SSH
$sudo apt-get update
$sudo apt-get install ssh

一般 Ubuntu 剛裝好時服務預設都是關閉的,所以要安裝 SSH 的相關套件才行,連線及被連線的主機都要有安裝 SSH 才能正常連線

SSH 連線
$ssh student@192.168.1.10

student : 對方的使用者帳號

192.168.1.10 : 對方主機的 IP

目標IP轉換 DNAT

NAT (Network Address Translation) ,是一種在IP封包在通過路由器時,重新設定 IP 來源或 IP 目的地的技術,通常使用在有多台主機,但是卻只有一、兩個公有 IP 的私有網路中

跟 SNAT 相反,SNAT 是內部要連接到外部是做轉換,而 DNAT 則是外部要連接要內部的私有 IP 時做轉換

SNAT ( 目的地 IP 轉換 )
iptables -t nat -A POSTROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to 192.168.1.10:80

--dport 8080 : 當使用 8080 這個 port 進來時

--to 192.168.1.10:80 : 引導到此 IP


這行指令時指,當有人連線到這台主機的 8080 這個 port 時,會經由 DNAT 轉送到 192.168.1.10:80 這個地方去

來源IP轉換 SNAT

NAT (Network Address Translation) ,是一種在IP封包在通過路由器時,重新設定 IP 來源或 IP 目的地的技術,通常使用在有多台主機,但是卻只有一、兩個公有 IP 的私有網路中

SNAT ( 來源IP轉換 ) 
$sudo nano /etc/rc.local            -- Ubuntu 的防火牆

列表的最下面 ~~ exit 0 的上面,中間空白處加上下列指令


動態轉換
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

-o eth0 : 這裡設定的是要對外連線的網路卡,也就是使用公有 IP 的網路卡

MASQUERADE : IP偽裝

使用這指令的話,不管內部的私有網路設定的IP是哪種,通通都會經過 NAT 轉換



指定來源 IP 轉換
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

iptables -t nat -A POSTROUTING -s 192.168.1.1 -o eth0 -j MASQUERADE

iptables -t nat -A POSTROUTING -s 192.168.1.1-192.168.1.10 -o eth0 -j MASQUERADE

-s 192.168.1.0/24 : 指定要轉換的來源 IP

使用這指令的話,只有來源是 192.168.1.0/24 的 IP 會進行 NAT 的轉換,第二條跟第三條指令則是指定轉換的範圍 ( 2.3 尚未實驗過... )



指定轉換後的 IP
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.254

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.200-192.168.1.254

-j SNAT --to-source 192.168.1.254 : 指定轉換後的IP

使用第一個指令的話,所有的經過 NAT 的 IP 都會轉換成 192.168.1.254,第二個指令則是會隨機使用 200 ~ 254 之間的IP



指定來源 IP 及轉換後的 IP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 192.168.1.254

同時應用上面的方式,指定來源 IP 的範圍及轉換後的 IP


NAT 中文 WIKI : 網路地址轉換
NAT 英文 WIKI : Network Address Translation