甲板人的腦晶片測試場

關於甲板人的電腦及GNU/Linux測試報告。

星期四, 7月 27, 2006

[紀錄]iptables的使用

1.正文

iptables是Linux 2.6 以後內定的防火牆。其構造主要有三條filter鍊、三條nat鍊與自訂規則為主(詳細情形請看vbird的網站介紹)。一般來說,我方電腦在Output鍊允許,而INPUT鍊拒絕連線情況下,並不代表瀏覽網頁等我方主動對方被動的操作即可順利無虞。因為即使是我方主動連線,對方主機也需要傳送TCP/IP三向交握的另外兩次封包進入主機。因此,需要對SYN之外的封包一一作INPUT規則設定才可以。以下是主要的服務開啟方式(轉自Linux 防火牆入門 - by 臥龍小三 )

開放某一個介面

作法如下:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

註:IPFW 或 Netfilter 的封包流向,local process 不會經過 FORWARD Chain,
因此 lo 只在 INPUT 及 OUTPUT 二個 chain 作用。

iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT

IP 偽裝

使內部網路的封包經過偽裝之後,使用對外的 eth0 網卡當作代表號,對外連線。作法如下:

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

iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/16 -j SNAT --to-source $FW_IP

上述指令意指:把 172.16.0.0/16 這個網段,偽裝成 $FW_IP 出去。
虛擬主機

利用轉址、轉 port 的方式,使外部網路的封包,可以到達內部網路中的伺服主機,俗稱虛擬主機。這種方式可保護伺服主機大部份的 port 不被外界存取,只開放公開服務的通道(如 Web Server port 80),因此安全性甚高。

作法如下:

###-----------------------------------------------------###
# 啟動外部對內部轉址
###-----------------------------------------------------###
# 凡對 $FW_IP:80 連線者, 則轉址至 172.16.255.2:80
iptables -t nat -A PREROUTING -i eth0 -p tcp -d $FW_IP --dport 80 -j DNAT --to-destination 172.16.255.2:80

開放內部主機可以 telnet 至外部的主機

開放內部網路,可以 telnet 至外部主機。

作法如下:(預設 policy 為 DROP)

###-----------------------------------------------------###
# open 外部主機 telnet port 23
###-----------------------------------------------------###

iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT

開放郵包轉遞通道

開放任意的郵件主機送信包給你的 Mail Server,而你的 Mail Server 也可以送信包過去。

作法如下:(預設 policy 為 DROP)

###-----------------------------------------------------###
# open SMTP port 25
###-----------------------------------------------------###

# 以下是:別人可以送信給你
iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 25 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 25 -d any/0 --dport 1024:65535 -j ACCEPT

# 以下是:你可以送信給別人
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65525 -j ACCEPT

開放對外離線下載信件的通道

開放內部網路可以對外部網路的 POP3 server 取信件。

作法如下:(預設 policy 為 DROP)

###-----------------------------------------------------###
# open 對外部主機的 POP3 port 110
###-----------------------------------------------------###

iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 110 -d $FW_IP --dport 1024:65535 -j ACCEPT

開放觀看網頁的通道

開放內部網路可以觀看外部網路的網站。

作法如下:(預設 policy 為 DROP)

###-----------------------------------------------------###
# open 對外部主機的 HTTP port 80
###-----------------------------------------------------###

iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 80 -d $FW_IP --dport 1024:65535 -j ACCEPT

開放查詢外部網路的 DNS 主機

開放內部網路,可以查詢外部網路任何一台 DNS 主機。

作法如下:(預設 policy 為 DROP)

###-----------------------------------------------------###
# open DNS port 53
###-----------------------------------------------------###

# 第一次會用 udp 封包來查詢
iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT

# 若有錯誤,會改用 tcp 封包來查詢
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT

# 開放這台主機上的 DNS 和外部的 DNS 主機互動查詢:使用 udp
iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
# 開放這台主機上的 DNS 和外部的 DNS 主機互動查詢:使用 tcp
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! -y -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT


開放內部主機可以 ssh 至外部的主機

開放內部網路,可以 ssh 至外部主機。

作法如下:(預設 policy 為 DROP)

###-----------------------------------------------------###
# open 外部主機 ssh port 22
###-----------------------------------------------------###

iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1024:65535 -j ACCEPT

# 以下是 ssh protocol 比較不同的地方
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1020:1023 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1020:1023 -j ACCEPT

開放內部主機可以 ftp 至外部的主機

開放內部網路,可以 ftp 至外部主機。

作法如下:(預設 policy 為 DROP)

###-----------------------------------------------------###
# open 對外部主機 ftp port 21
###-----------------------------------------------------###

# 以下是打開命令 channel 21
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 21 -d $FW_IP --dport 1024:65535 -j ACCEPT

# 以下是打開資料 channel 20
iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 20 -d $FW_IP --dport 1024:65535 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 1024:65535 -d any/0 --dport 20 -j ACCEPT

# 以下是打開 passive mode FTP 資料通道
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 1024:65535 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 1024:65535 -d $FW_IP --dport 1024:65535 -j ACCEPT

開放 ping

可以對外 ping 任何一台主機。

作法如下:(預設 policy 為 DROP)

iptables -A OUTPUT -o eth0 -p icmp -s $FW_IP --icmp-type 8 -d any/0 -j ACCEPT
iptables -A INPUT -i eth0 -p icm -s any/0 --icmp-type 0 -d $FW_IP -j ACCEPT
2.相關連結

Linux學習第一站:鳥哥的私房菜
OLS3的網路管理技術文件

星期四, 7月 13, 2006

[紀錄]新Xorg的NVIDIA問題

1.正文

最近新的Xorg改變目錄與模組放置位置,導致啟動X時找不到NVIDIA驅動模組產生的位置。
解決辦法是改變連結,如下所示

ln -s /usr/X11R6/lib/modules/drivers/nvidia_drv.o /usr/lib/xorg/modules/drivers/nvidia_drv.o
ln -s /usr/X11R6/lib/modules/drivers/nvidia_drv.so /usr/lib/xorg/modules/drivers/nvidia_drv.so

這樣就可以正常啟動了。

星期日, 7月 09, 2006

[紀錄]如果ADSL連不上

1.正文

如果編譯新核心之後,發現ADSL連不上,有可能是因為兩個問題。
  • 網路卡的模組沒有編譯到
  • PPP編成模組,不是編進核心
解法很簡單,但也很麻煩,重編...。

星期一, 6月 26, 2006

[感想]翻譯、編譯fluxbox1.0rc

0.因為看到fluxbox有zh_CN,卻沒有zh_TW,又看「菜單」看的很不習慣,因此手動翻譯、編譯。

我的系統是 Debian/GNU Linux testing ,採用基本系統,所以缺很多東西。

注意!以下文章部份夾雜想罵人的情緒,因此不想心情被破壞的人士請止步。

1.編譯相依性問題:「Fluxbox need X-Window headers and libraries...」
Fluxbox wiki 對這個問題的解法是安裝xlibs-dev或x-window-system-dev或類似的套件。但,xlibs-dev在Debian/GNU Linux testing 中被移除。因此,編譯fluxbox不會過。x-window-system-dev情況也是如此。故將 sources.list 調整至 stable,安裝,觀察其依賴包 如下所示

您僅要求對單一套件進行操作,這極有可能是因為
該套件無法安裝,您最好提交一個針對這個套件
的臭蟲報告。
底下的資訊有助於解決現在的情況:

下列的套件有無法滿足的依存關係:
xlibs-dev: 依存關係: libice-dev 但是它卻不會被安裝。
依存關係: libsm-dev 但是它卻不會被安裝。
依存關係: libxmu-dev 但是它卻不會被安裝。
依存關係: libxmuu-dev 但是它卻不會被安裝。
依存關係: libxp-dev 但是它卻不會被安裝。
依存關係: libxrandr-dev 但是它卻不會被安裝。
依存關係: libxt-dev 但是它卻不會被安裝。
依存關係: libxtrap-dev 但是它卻不會被安裝。
依存關係: libxtst-dev 但是它卻不會被安裝。
依存關係: libxv-dev 但是它卻不會被安裝。
依存關係: x-dev 但是它卻不會被安裝。
E: 損毀的套件

根據上述列表,依序嘗試安裝後編譯,安裝到libxmu-dev時 configure 過。

(感想:最近我弄 testing 跟 X 相關的東西都沒好事,包括新版的 xorg 和這個 dev 包,真想罵人!)

2.fluxbox 內翻譯不採用 po 、 mo等檔案,必須手動修改 Translation.m 後,編成 Makefile.in 與其他檔案。但是,整個 fluxbox 檔案夾內毫無關於建立 Makefile.in 的資訊 。雖然依Makefile.am猜測為 automake 相關,但實在太多東西了,因此也沒用。最後找完整個 mailing list (連這個也沒有 !)與 CVS (說明文件部份完全沒有) ,才在其 SVN tags/Release-1_0rc/nls/ 資料夾底下找到 translator.txt, 依據裡面的資訊想執行 autogen.sh,然後發現官網下載的 1.0rc 根本沒有這個sh檔,必須從SVN下載。

(感想:缺乏說明文件真的會死人。不能要求一個翻譯者僅僅為了翻譯一個檔案把 GNU automake 整個弄懂阿...)

3.製作Makefile.in 時 aclocal 一直出現錯誤:AM_GTK..... 沒有找到。經過搜尋,在 /usr/share/aclocal資料夾中必須存在gtk.m4。這表示gtk1.2-dev沒有安裝。但我懷疑是必須用gtk1,或是gtk2也可以?


4.結論:弄了一個下午,真的很生氣。為了怕這些與努力不成正比的微薄收穫流失,記下來。也不知道到底有沒有學到東西。

星期六, 6月 24, 2006

[反省]不順的重灌作業

1.正文

這次重灌桌電, 足足弄了24個小時還沒法弄成滿意的地步。實在讓我意外又生氣。總結來說,這次重灌Debian出現以下問題
  • Debian 3.1rc不能使用linux2.6核心安裝,否則安裝 testing 的任何一個東西都會要求移除kernel-image-2.6.8。如果選擇No取消移除,則整個dpkg都會處於 error、broken狀態,根本無法再安裝任何軟體。
  • 上面那個問題導致我必須自己手動編譯linux-2.6版本。然後,在編譯過程中,產生前一篇文章所述,編譯檔案系統為模組造成無法開機之問題。
  • 最近 testing 的 xorg 進入 xorg 7.0,這造成許多以前沒有的問題。首先,只安裝 xserver-xorg-input-all、xserver-xorg-video-vesa(或其他任何單一模組) 、 xbase-clients 與 xfonts-base 這三者在現在絕對無法成功啟動 X(即使這三者看來似乎構成了完整系統)。因為系統會告訴你找不到/etc/X11/X,也沒有任何 xorg.conf檔案產生。
  • 就算補救上述問題而安裝xserver-xorg或甚至x-window-system-core,也還有個問題揮之不去:現在使用dpkg-reconfigure xserver-xorg設定出來的值,除非在初次安裝,否則根本無法寫入xorg.conf(系統會警告該檔案已經「Customed」,並且不寫入)。
  • 當X好不容易完整可啟動之後,我發現安裝的fluxbox缺少很多themes,而且字體似乎不會根據xorg.conf、/etc/fonts/font.conf的順序設定。這應該不是發行版本的問題,而是我自己找不到此類資訊的問題。但是一周前,同樣 testing 安裝的 fluxbox 卻完全沒有這些問題。
  • 最後完完全全是運氣問題:今天我突然連不上 www.kernel.org 與 ftp.debian.org,偏偏都在我要用的時候。

[記事]編譯Kernel 2.6.17問題與解決

1.正文

系統:Debian GNU/Linux 3.1 testing
現有核心:Linux 2.4.27
編譯前須安裝套件
  • libncurses5-dev
  • make
  • gcc

編譯指令(純文字操作狀態)
  1. (ncftp或w3m下載新的kernel*.tar.bz)->/usr/src
  2. /usr/src# tar jxvf ./linux-2.6.17.1.tar.bz (解開壓縮檔)
  3. /usr/src# cd ./linux-2.6.17.1
  4. /usr/src/linux-2.6.17.1# make menuconfig
進入選單後,有幾個注意事項
  • 預設的config下Processor一律當成386,如果要指定CPU型號的要注意手動選擇。
  • 這非常重要:在File System選項裡,EXT2、EXT3與Reiserfs(如果你要用的話)一定不要編成模組,否則開機會出問題。其它JFS或XFS則是需要決定。
  • 預設的config會自動將Old CD Rom Device (Not ATA or SCSI )全部選上。這通常是不需要的。當然個人硬體狀況不同。
  • 同樣被預設,但我不需要的選項還有ISDN、Wireless整個裝置選項,與部份Graphic裝置選項。
  • 在Sound部分,ALSA並沒有被預設值選取,這個其實關係到系統能不能使用音效,請將之選取,並選擇自己硬體所使用的音效裝置。
  • 如果需要,可以將Frambuff選上。
選完後存檔,依序下指令
  1. make bzImage
  2. make modules
  3. make modules_install
  4. make install
  5. (調整grub或lilo的選單以使用新核心開機)
這邊要注意的是,make modules有時會出問題。所以當編譯過程出現 "depmod ......."等訊息,而不是正常的編譯過程時,就算成功回到shell底下,編出來的東西也不能用。這時,由於我沒有辦法一一研究整個核心原始碼(不知有多少人有能耐...),只能夠重新 make menuconfig ,把一些之前去除或改編成模組的選項編入核心,然後再次 make modules。

最後是調整開機時所用到的initrd.img,這非常重要,因為沒有這一步,核心會找不到模組而無法開機。
  1. mkinitrd -k -o /boot/initrd.img-2.6.17.1 /dev/hdX 2.6.17.1 (hdX->你的系統分區;2.6.17->核心版號)
大致上就是這樣。今天運氣不好,ftp.debian.org與www.kernel.org都有陣子連不上...

星期日, 5月 14, 2006

[感想]界面華麗之後



1.正文

原本想貼在其他討論區,但我並不想予小白們一個大肆胡鬧的藉口,因此還是貼在這,減少糾紛發生的機率。

GNU/Linux 的圖形使用者介面,或說桌面環境,經過這幾年的發展,可以說越來越華麗,甚至大大超過WindowsXP的程度。這樣的趨勢,從某種角度來說,的確表示開發人員逐漸重視一般使用者使用的友好度。但遺憾的,目前這種趨勢似乎已經超過與速度、友善保持平衡並進的方向。

首先,GNOME與KDE正是介面方便、華麗統合的極致。雖然有人說e17才是第一華麗的桌面,但是前述兩者並不只是一個WM,而是包含各種圖形介面工作的環境。比如配合Nautils或Konqueror,可以很方便的利用HAL的特點管理USB熱插拔功能,更不用說結合瀏覽器、可執行程式關聯、預覽檔案內容等功能;再如桌面管理程式、多媒體框架、GDM/KDM之登入管理程式、字型管理程式、控制中心等等各種應用的組合,以此二者作為能達到方便華麗兩方面之極致,應是毋庸置疑。

但是在這樣的成就之後,我們擁有的是臃腫的桌面,GNU/Linux諸多優點之一,可在新舊配備上運作皆無大礙的目標卻逐漸消失。在我PIII-800、128MB的機器上跑GNOME或KDE可說痛苦至極。雖然我可以選用Xfce、Fluxbox、IceWM甚至FVWM等作為我X環境工作的輔助介面,但是這些程式構成的桌面環境在方便度上卻不如GNOME與KDE。這也就是說,我要不就捨棄速度遷就方便與(不太需要的)華麗,要就捨棄方便就滿意的速度與稍差的美觀。而至前不久,我以為這種趨勢的取捨是無可改進的。甚至可以從Knoppix、B2D等LiveCD看出,整個圖形介面的發展的確達到必須取捨的地步。Knoppix到了必須以DVD燒錄的容量,而B2D,甚至為了將GNOME與KDE合在一片光碟上,捨棄直接整合OpenOffice.org等軟體。

然而除了DSLinux等走反省極端輕薄的GNU/Linux外,終於最近兩大桌面環境開始反省速度上的損失。除GNOME在2.14版中強調改進了速度外,採用Qt4開發的KDE亦預期在使用速度上有所改進。我們可以期待下一代GNU/Linux在桌面環境華麗、使用方便外,亦有相當剽悍的速度。

2.相關連結

Knoppix:LiveCD始祖
GNOME 2.14:改進了速度
KDE 4 的新聞:一次關於KDE 4的訪問中,其開發人員提到速度的改進
Fluxbox:輕巧易用,好WM(中文支援除外)
B2D中文Linux版本:最近發行了KdeGnomeB2d版
DSL:追求短小精悍的版本
Xfce:輕巧方便適中的WM環境