標籤

2011年12月22日 星期四

關於 Fedora 16 架設 SERVER 的過程. 獅子傷羊法

其實這二句, 自從我老婆在網上答覆的一句話. 讓我十分沒力. 又加上原程式寫作十分不順. 遇到十分難解決的問題. 所以心情不好. 昨天自虐了一天, 一口氣裝了 4 台 LINUX Server. 也實驗了無數次種安裝的方法. 這才想起. 在 CENTOS 5 那個年代. 其實我已經做過無數次了. 不幸的是, FEDORA16 安裝過程中. 只覺得我好像是永遠的新手.

無論如何, 我們只寫最簡單的安裝方法. 而且是保證會安裝成功的方法. 我們估且稱為這種安裝方法叫做. "獅子傷羊法". 因為呢, 我老婆是獅子座. 我是牧羊座. 被我老婆一句話傷到自虐才會有以下方法....

首先呢, 如果你之前裝過 CENTOS 5, FEDORA 早期版本等等. 我只能說. 先將一切遺忘吧. 世界已經變的不太一樣了. 純文字的時代過去了. 如果不幸的是, 您和我一樣是LKK一族. 那麼以下的方法就適合您了.

"燒光碟???" 這是什麼年代的事了. 現在那有人在燒光碟. 連作者的筆電都沒有光碟了. (看吧, 之前的方法絕對不適用)

那麼不燒光碟怎麼裝呢?? 答案很簡單, 先下載 FEDORA 16 吧....

http://fedoraproject.org/zh_TW/get-fedora-options#formats



我的習慣是用64BIT 的. 所以呢很明顯. 我會選64 位完的 ISO 下載. 其實 32 和64差異不大啦. 因為當 SERVER 我一向不用圖型控制的. 所以根本沒差.

http://download.fedoraproject.org/pub/fedora/linux/releases/16/Fedora/x86_64/iso/Fedora-16-x86_64-DVD.iso

有這 ISO 檔呢, 您會發現官網上有很詳細的英文介紹, 如何用 USB 碟進行安裝. 但是呢, 小弟可能天生悟性太差. 他寫的很清礎, 我是試了N次都試不出來.


以左邊畫面來說, 似乎他就是要安裝 LIVE 版. 而不是我們想要的 SERVER 版.

一方面我用的是 X64 系統, 無論我左裝, 右裝, 上裝, 下裝. 永遠都是錯誤. 所以呢我也就不用這個方法了. (再試下去怎麼賺錢???)



那麼, 不用這個方法難不成還有其它選擇嗎? 答案是有的. 您可以用 UNetbootin 來進行安裝. 您可在 http://unetbootin.sourceforge.net/ 這邊找到這程式, 現在的免費程式也真的十分講義氣, 您可以直接選您要安裝的版本. 然後就可以裝了, 程式自動替你下載.


十分不幸的是, 似乎太新的 FEDORA是不支援的. 然而大家都知道一個事實, 電腦主機版晶片組規格一大堆, 凡是太新的晶片組根本就跑不起來, 問題會一堆. 所以呢. 全世界都不可能用"剛買"的新電腦來做 SERVER. 不幸的是, 如果你是靠這種案子賺錢的. 您會發先巿面上即使是最舊的電腦, 有時候 FEDORA 也跑的 2 2 6 6 的. 現在出 LIVE 版了, 大家都學聰明了. 幾乎都選用公版的DRIVER. 用公版的模式. 可是呢, 主機版內建的晶片組系統要是認不出來. 您的網路有時候會斷線, 莫名奇妙的問題就會發生.

這種情況, 就大家常常追著最新的 FEDORA 跑的原因, 事實上不是大家想當白老鼠. 而是最新的FEDORA 內核, 支援的硬體比較多... 可以省掉很多麻煩事. (所以不要問我為什麼 CENTOS 那麼好用, 而不使用. 原因很簡單. 因為客戶能買到巿面上的主機版. 通常都要花點時間去找 DRIVER)

好了, 我們前言該說的都說了, 接下來您要準備好 "二支" 隨身碟?. 為什麼是二支, 而不是一支?? 原因十分簡單, 就是因為會有意外. 一般來說. 一支 4G 碟就可以將整片光碟寫入. 然而呢, 在實際的操作面上, 萬一您暫時沒有網路線. 或者系統沒抓到USB碟, 您那即使是高手, 也什麼事都不能做. 為了讓你能工作下去. 那麼我建議您最好有二隻隨身碟.

首先我們使用第一隻隨身碟, 讓 UNETBOOTIN做出開機 USB. 選 DISKIMAGE ISO 那個選項. 然後呢就載入您下載的 ISO. 接下來就讓程式去寫完吧 (事實上過程就像做 WINPE 差不多)

那第二隻要做什麼呢?. 您只要將 ISO 檔整個 COPY 進去就好了.

不要讓MONITOR 上的畫面騙了你. 所謂的 INSTALLATION TREE. 指的是 ISO 檔. 而不是解壓縮後的目錄.

OK. 再來呢, 就開機吧 (說真的, 幾百年沒組裝電腦, 差點被 CPU 的風扇搞瘋了. 如果沒壓風扇的話, 您是裝不進去的, 最好是在光華就請他們裝好).

接下來呢, 您會看到很多選項, 上面沒有一項預設選項是您能用的. (笑) 因為您必須自己修改參數才能實現本地硬碟安裝.

我的建議是, 您找到 Install or upgrade 那個選項, 然後按下 TAB 鍵. 然後去掉 quiet 改成 askmethod. (如果您想網路安裝, 那也不是問題, 如果您的網速很快的話, 但是網速再怎麼快, 也沒有USB 讀取資料的快, 所以啦, 我建議就直接用 askmethod 的方式)

您可能會遇到要等很久, 這看您的 USB 和系統相容度. 萬一是 3.0 USB. 最後可能因為晶片組不相容, 結果只能用 USB 1.1 的方式讀取, 反而更慢. (別忘了, 這是為什麼我們通常選最新內核的原因)

好了, 接下來的安裝就應該不是什麼大問題了, 如果您是 LKK 級的裝機手. 應該可以沒有壓力的完成. 那第二隻 USB 碟做什麼用??

其實在你選安裝模式的情況下, 如果預計的 harddrive  安裝沒抓到USB 碟時, 您可以將第二隻碟插入. 然後會出現 SDB 或 SDC 等等碟. 至於目錄呢, 就不用輸入了, 因為您的 ISO 檔案就在根目錄. LINUX 會自己抓.

再下來就和之前光碟安裝一樣了.

如果您是只想裝 SERVER, 不用浪費太多空簡. 在安裝模式時, 當然是選 "最小化". 此時只需要裝 200個左右的套件就 OK 了.

重新開機之後呢, 您會發現網路卡都沒有啟動. 所以即使用 ROOT 進入之後仍然無法使用網路. 其實這才是好現像, 因為什麼亂七八糟的東西都沒有裝進去呢.

請按下面方式執行.

cd /etc/sysconfig/network-scripts
ls ifcfg-*

您會發現系統自動將抓到的網路卡存成 ifcfg-XXX.
所以您要動現手腳

vim ifcfg-XXX

之後改 ONBOOT=yes
和確認 NM_CONTROLLED=yes
看一下是不是 DHCP 如果是就可以存檔了. (存檔是 w 萬一您連怎麼用 vi 都忘記了 :))

如果您有二張網路卡, 想做防火牆. 那麼只要修改您內部網卡即可.
之後連上內部網路.

ifup XXXX

所謂的 XXXX 就是系統抓到的裝置代號. 例如 p1p1 p33p1 eth0 ...... 等等.
您會看到網路啟動了. 如果沒有啟動, 您會看到 check cable?

再來呢, 問一下電腦取得的內部 IP 是幾號. 然後就可泡杯茶, 回到自己的座位上. 讓我們快樂的用 SSH 來完成一切吧!

------------------- 這部份只是小弟的操作過程, 應該依您自己的需求來改 -----------


首先我們將新增使用者吧. 因為root太容易被攻擊了.
 
useradd fedora
passwd fedora
 
vi /etc/group
=============
#第11 行左右
wheel:x:10:root,fedora
 =============
vi /etc/pam.d/su
#通常是最後一個 #號去除


vi /etc/aliases
=============
#最後一行 改由 fedora 使用者收 root 信件
root:  fedora 
 =============

內建的防裝牆難用死了.
systemctl stop iptables.service
systemctl stop ip6tables.service
systemctl disable iptables.service
systemctl disable ip6tables.service

Selinux 算了吧, 不習慣用
vi /etc/sysconfig/selinux
=============
SELINUX=disabled
=============

如果你的機子想當 ROUTER 的話 您要設定好內部 IP 將您的 網卡設定固定 IP  也就是前二年不改, 後面改成下面的範例
=============
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=yes
IPADDR=192.168.1.1
NETMASK=255.255.255.0
TYPE=Ethernet
DNS1=168.95.1.1
IPV6INIT=no
USERCTL=no
PREFIX=24
=============
chkconfig network on
大致上看一下系統所用的服務. 不需要的關一關
systemctl -t service

老一輩的人. 會發現 /etc/init.d/XXXX 都沒有了. 取代的就是 systemctl
systemctl -t service
systemctl stop sendmail.service
systemctl disable sendmail.service
chkconfig --list
chkconfig netfs off
上面這段範例呢, 您就知道新版是怎麼控制服務的

新版的 yum 呢, 有多了一個套件, 似乎不錯用. 我們也來裝一下

yum -y install yum-plugin-fastestmirror
yum -y update

這樣子系統就更新完成了, 之所以不建議全裝後更新也是這樣子. 因為最後還是幾乎會重新更新的.
讓VI 變成彩色的吧
yum -y install vim-enhanced
vi /etc/profile
-------
alias vi='vim'
-------
source /etc/profile

預設值就是 UTF8 所以我們不改 VIM 的內容了.

vi /etc/ssh/sshd_config
============
41 行, 禁止 root 登入
 PermitRootLogin no

64 行 禁止空白密碼 和必須驗證
 PermitEmptyPasswords no
 PasswordAuthentication yes
============
systemctl restart sshd.service

花了大把銀子, 當然最少要能當 ADSL ROUTER
yum -y install dhcp
參考內容
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
#   see dhcpd.conf(5) man page
#
# create new
# specify domain name
option domain-name "myhome.router";
# pecify DNS's hostname or IP address
option domain-name-servers 168.95.1.1;
# default lease time
default-lease-time 600;
# max lease time
max-lease-time 7200;
# this DHCP server to be declared valid
authoritative;
# specify network address and subnet mask
subnet 192.168.1.0 netmask 255.255.255.0 {
# specify the range of lease IP address
range dynamic-bootp 192.168.1.200 192.168.1.250;
# specify broadcast address
option broadcast-address 192.168.1.255;
# specify default gateway
option routers 192.168.1.1;
}
=====

別忘了, 我們曾經關掉防火牆, 所以要自架防火牆. 我比較建議您用鳥哥的方法.
還好 IPTABLES 沒變. 其中不能用的我去掉了.

=== 例子 ===
#!/bin/bash
#
# ========================================================
# 程式說明:
# 歡迎使用 iptables.rule 這個 script 來建立您的防火牆!
# 這支 script 還需要您的額外設定方可適合您的主機環境!
# 基本規則定義為『拒絕所有,開放特定』的模式!
# 
# 強烈建議:
# 不了解 Linux 防火牆機制 iptables 的朋友使用這支 script
# 可能會不太瞭解每個指令列的意義,果真如此的話,
# 歡迎參考底下幾個網頁:
# http://www.study-area.org/linux/servers/linux_nat.htm
# http://linux.vbird.org/linux_server/0210network-secure.php
# http://linux.vbird.org/linux_server/0250simple_firewall.php
#
# 使用說明:
# 確定這個程式僅有 Linux 的斷行字元:
# dos2unix iptables.rule
# 請先將這個 scripts 的權限更改為可執行:
#       chmod 755 iptables.rule
# 在將這個程式放置在 /usr/local/virus/iptables 目錄下:
#       mkdir -p /usr/local/virus/iptables
#       mv /完整的路徑/iptables.rule /usr/local/virus/iptables
# 執行測試:
#       /usr/local/virus/iptables/iptables.rule
#       iptables -L -n   (這個動作在檢查防火牆規則)
# 將底下這一行加入 /etc/rc.d/rc.local 當中
#       /usr/local/virus/iptables/iptables.rule
# 取消防火牆:
#       iptables -F
#       iptables -X
#       iptables -t nat -F
#       iptables -t nat -X
#
# ========================================================
# 版權宣告:
# 這支程式為 GPL 授權,任何人皆可使用,
# 然,若使用本 scripts 發生問題時,本人不負任何責任
# VBird <vbird@mail.vbird.idv.tw>
# ========================================================
#
# 歷史紀錄:
# 2002/08/20    VBird   首次釋出
# 2003/04/26    VBird   加入砍站軟體的相關執行檔案!
# 2003/08/25    VBird   修改 INPUT 的 Policy 成為 DROP
# 2006/09/13 VBird 重新修訂,加入一些核心參數 /proc/sys/net/ipv4/*
# 2006/09/15 VBird   加入關於 NAT 主機後端伺服器的轉址功能。
# 2006/09/30 VBird 加入每個設定項目的英文說明!!
# 2006/11/08 VBird 參考朋友們發現的 PPPoE 導致 MTU 的問題,增加一條規則!在 NAT 的部分。
# 2011/02/07 VBird 讓服務的來源端埠口變成 1024:65534 的設定
#
###########################################################################################

# 請先輸入您的相關參數,不要輸入錯誤了!
# English: Please input your networks parameters ( including your LAN NIC )
  EXTIF="ppp0"    # 這個是可以連上 Public IP 的網路介面,也可能是 ppp0
     # This is your NIC, connect to internet. Such as ppp0...
  INIF="p1p1"    # 內部 LAN 的連接介面;若無 LAN ,填寫成 INIF=""
     # This is your LAN NIC.  If you don't have a LAN, input INIF="" please.
  INNET="192.168.1.0/24"  # 若有兩個以上的網域,可以用 INNET="192.168.1.0/24 192.168.100.0/24"
     # 若無內部網域介面,請填寫成 INNET=""
     # This is your LAN's Network.  If you have to private network, 
     # input as INNET="192.168.1.0/24 192.168.100.0/24".
  export EXTIF INIF INNET

# 個人化設定啊!請自行填寫您自己想要預先啟動的一些基礎資料。
# These settings is about yourself's paramters.
  allowname='' # 允許登入本機的 hostname ,必須是 Internet 找的到的 hostname。
  allowip=""
  if [ "$allowname" != "" ]; then
    for siteiptmp in `echo $allowname`
    do
          siteip=`/usr/bin/host $siteiptmp 168.95.1.1 | grep address|tail -n 1 | awk '{print $4}'`
          testip=`echo $siteip | grep [^0-9.]`
          if [ "$testip" == "" ]; then
               allowip="$allowip  $siteip"
          fi
    done
  fi
  export allowip

# 第一部份,針對本機的防火牆設定!#########################################################
# First, your server's firewall settings.
# 1. 先設定好核心的網路功能:
# 1. the kernel's firewall settings.
  # 開啟 TCP Flooding 的 DoS 攻擊抵擋機制,但這個設定不適合 loading 已經很高的主機!!!
  # TCP Flooding's setting.  this setting is no good for high loading servers
  echo "1" > /proc/sys/net/ipv4/tcp_syncookies
  # 取消 ping 廣播的回應;
  # unset reply of ping.
  echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  # 開啟逆向路徑過濾,以符合 IP 封包與網路介面的設定;
  # 
  for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
 echo "1" > $i
  done
  # 開啟記錄有問題的封包
  # record some problems packets.
  for i in /proc/sys/net/ipv4/conf/*/log_martians; do
 echo "1" > $i
  done
  # 取消來源路由,這個設定值是可以取消的;
  for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do
 echo "0" > $i
  done
  # 取消重新宣告路徑的功能。
  for i in /proc/sys/net/ipv4/conf/*/accept_redirects; do
 echo "0" > $i
  done
  # 取消傳送重新宣告路徑的功能。
  for i in /proc/sys/net/ipv4/conf/*/send_redirects; do
 echo "0" > $i
  done

# 2. 清除規則、設定預設政策及開放 lo 與相關的設定值
# 2. clear rule, set the policy rule and allow lo connect.
  PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH
  iptables -F
  iptables -X
  iptables -Z
  iptables -P INPUT   DROP
  iptables -P OUTPUT  ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 3. 啟動額外的防火牆 script 模組
# 3. other shell scripts, written by VBird.
  # 預設抵擋的主機
  if [ -f /usr/local/virus/iptables/iptables.deny ]; then
 sh /usr/local/virus/iptables/iptables.deny
  fi
  # 預設開放的主機
  if [ -f /usr/local/virus/iptables/iptables.allow ]; then
 sh /usr/local/virus/iptables/iptables.allow
  fi
  # 透過 WWW 砍站軟體分析的抵擋機制
  if [ -f /usr/local/virus/httpd-err/iptables.http ]; then
        sh /usr/local/virus/httpd-err/iptables.http
  fi

# 4. 允許某些類型的 ICMP 封包進入
# 4. allow some types of ICMP
  AICMP="0 3 3/4 4 11 12 14 16 18"
  for tyicmp in $AICMP 
  do 
 iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
  done

# 5. 允許某些服務的進入
 iptables -A INPUT -p TCP -i $EXTIF --dport  20  --sport 1024:65534 -j ACCEPT   # FTP
 iptables -A INPUT -p TCP -i $EXTIF --dport  21  --sport 1024:65534 -j ACCEPT # FTP
 iptables -A INPUT -p TCP -i $EXTIF --dport  22  --sport 1024:65534 -j ACCEPT # SSH
 iptables -A INPUT -p TCP -i $EXTIF --dport  25  --sport 1024:65534 -j ACCEPT # SMTP
 iptables -A INPUT -p UDP -i $EXTIF --dport  53  --sport 1024:65534 -j ACCEPT # DNS
 iptables -A INPUT -p TCP -i $EXTIF --dport  53  --sport 1024:65534 -j ACCEPT # DNS
 iptables -A INPUT -p TCP -i $EXTIF --dport  80  --sport 1024:65534 -j ACCEPT # WWW 
 iptables -A INPUT -p TCP -i $EXTIF --dport 110  --sport 1024:65534 -j ACCEPT # POP3
 iptables -A INPUT -p TCP -i $EXTIF --dport 443  --sport 1024:65534 -j ACCEPT # HTTPS 
 iptables -A INPUT -p TCP -i $EXTIF --dport 993  --sport 1024:65534 -j ACCEPT   # HTTPS
 iptables -A INPUT -p TCP -i $EXTIF --dport 995  --sport 1024:65534 -j ACCEPT   # HTTPS
 
#iptables -A INPUT -p TCP -i $EXTIF --dport 10000  --sport 1024:65534 -j ACCEPT   # HTTPS
#ptables -A INPUT -p UDP -i $EXTIF --dport 3456  --sport 1024:65534 -j ACCEPT   # HTTPS
# 第二部份,針對後端主機的防火牆設定!#########################################################
# Second, the NAT settings.
# 1. 先載入一些有用的模組
# 1. loading some good modules of iptables.
  modules="ip_tables iptable_nat ip_nat_ftp ip_nat_irc ip_conntrack ip_conntrack_ftp ip_conntrack_irc"
  for mod in $modules
  do
 testmod=`lsmod | grep "^${mod} " | awk '{print $1}'`
 if [ "$testmod" == "" ]; then
  modprobe $mod
 fi
  done

# 2. 清除 NAT table 的規則吧!
# 2. clean NAT table's rule
  iptables -F -t nat
  iptables -X -t nat
  iptables -Z -t nat
  iptables -t nat -P PREROUTING  ACCEPT
  iptables -t nat -P POSTROUTING ACCEPT
  iptables -t nat -P OUTPUT      ACCEPT

# 3. 開放成為路由器,且為 IP 分享器!
# 3. NAT server's settings
  if [ "$INIF" != "" ]; then
   iptables -A INPUT -i $INIF -j ACCEPT
 echo "1" > /proc/sys/net/ipv4/ip_forward
 if [ "$INNET" != "" ]; then
  for innet in $INNET
  do
   iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE
  done
 fi
  fi
  # 如果你的 MSN 一直無法連線,或者是某些網站 OK 某些網站不 OK,可能是 MTU 的問題,
  # 那你可以將底下這一行給他取消註解來啟動 MTU 限制範圍
  # iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu

# 4. NAT 主機後端的 LAN 內對外之伺服器設定
# iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 -j DNAT --to-destination 192.168.1.210:80 # WWW

# 5.  特殊的功能,包括 Windows 遠端桌面所產生的規則,假設桌面主機為 1.2.3.4,你區網內的主機為 192.168.1.100
  #iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --dport 6000 -j DNAT --to-destination 192.168.1.100
  #iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --sport 3389 -j DNAT --to-destination 192.168.1.100

# 最終將這些功能儲存下來吧!

=======
 
最後, 好像忘記撥接了 哈哈.

yum -y install rp-pppoe

然後呢, 使用 pppoe-setup (以前使用 adsl-setup 還是什麼的, 總之幾乎都不能用了)

如果您要用 HTTPD 和 其它種種東西. 事實上都沒有變化. 都統一用 YUM 裝就對了. 命令幾乎沒變.

那這篇就到這結束好了.


沒有留言:

張貼留言