前言:
以Linux架設Firewall算是一個蠻物美價廉的方案,因為筆者在真實的環境中利用PIII這種老機器架設Firewall ,發覺還挺穩定的,使用到現在還沒發現有任何的問題,因此若您手邊有一些退役的機器,不如將它當成Firewall來用,給它個第二春吧!好了,廢話不多說,您可以參考以下的文件,快速建立一台Linux的Firewall。
概念:
這裡要介紹的是所謂的閘道式防火牆,目的在於隔開內外網路的連線,需求如下:
外部主機 -> 防火牆主機 (不可)
內部主機 -> 防火牆主機 (不可)
外部主機 -> 內部主機 (不可)
內部主機 -> 外部主機 (可, 但應只開放某些對外的連線)
事實上這種設定的方法,還說不上真正的安全!因為對內部的主機我採用的是完全信任的方案,但所謂:內賊難防!最好的方法還是要對內部主機採取安全控管,不過因為筆者是在家中自行架設並測試的,所以我就採用了較鬆散的方法,這一點請原諒。
環境:
eth0 外部網路 (10.6.7.0/24)-----Linux Firewall----- eth1內部網(172.17.2.0/24)
開啟ip_forwarding的功能:
# vi /etc/sysctl.conf
net.ipv4.ip_forward=1
# sysctl –p
# vi /etc/init.d/boot.local
sysctl –p
設定iptables的相關規則:
預設阻擋所有連線之基本原則:
# iptables –P INPUT DROP
# iptables –P FORWARD DROP
允許loopback介面的連線:
#iptables –A INPUT –i lo –j ACCEPT
阻擋非loopback介面但確是127.0.0.0/8的IP
# iptables –A INPUT –i ! lo –s 127.0.0.0/8 –j DROP
# iptables –A OUTPUT –o ! lo –s 127.0.0.0/8 –j DROP
允許後續連線:
# iptables –A INPUT –m state --state RELATED,ESTABLISHED –j ACCEPT
# iptables –A FORWARD –m state --state RELATED,ESTABLISHED –j ACCEPT
阻擋可疑的封包:
# iptables –A INPUT –m state --state INVALID –j DROP
# iptables –A FORWARD –m state --state INVALID –j DROP
阻擋TCP第一個連線非SYN類型的封包:
# iptables –A INPUT –p tcp ! –syn –m state --state NEW –j DROP
# iptables –A FORWARD –p tcp ! –syn –m state --state NEW –j DROP
允許內部主機對外的連線:
# iptables –A FORWARD –i eth1 –o eth0 –j ACCEPT
設定NAT規則:
# iptables –t nat –A POSTROUTING –o eth0 –s 172.17.2.0/24 –j MASQUERADE
以上是iptables的相關設定,第一次接觸的iptables的人可能會罵,到底你是在寫什麼東西呀!有看沒有懂,這點也是非常抱歉,網路上已經有許多先進撰寫過很多很棒的iptables規則說明與基本語法了,請您不妨利用google大神,去尋找吧!這裡講求的是快速架設,所以不會多加論述背後的原理。
辛辛苦苦打了這麼多指令,重開機是否會不見呢?答案是會的!如果您沒有將其存起來,當您重開機時是會叫苦連天的,所以請您依照以下的方法,將它先存成一個文字檔,待開機時再將它載入。
# iptables-save > /etc/sysconfig/iptables.save (將iptables的規則存成一文字檔)
# vi /etc/init.d/boot.local
iptables-restore < /etc/sysconfig/iptables.save (開機時將iptables的規則從檔案讀入)
後記:
以上便是快速架設Linux Firewall的方法,強烈建議您先懂原理再來實作將會讓您對於iptables更加了解,用起來也會順手些,畢竟iptables的語法看起來是有那麼一點小複雜。
Monday, March 26, 2007
Thursday, March 22, 2007
OSX Startup keyboard commands help in troubleshooting
亂逛時不小心看到的,覺得挺實用所以趕緊po上來。
When troubleshooting, performing maintenance, or otherwise starting up your Mac OSX computer in an abnormal fashion, there are a few keyboard shortcuts that you may or may not know about that can help you. Below is a list of them with an explanation of what they do:
When troubleshooting, performing maintenance, or otherwise starting up your Mac OSX computer in an abnormal fashion, there are a few keyboard shortcuts that you may or may not know about that can help you. Below is a list of them with an explanation of what they do:
- X = Force Mac OS X startup
- Option = Brings up a screen with startup volume choices (slow process, may take a while)
- Option+Command+Shift+Delete = Bypass primary startup volume and seek a different startup volume (such as a CD or external disk)
- C = Start up from a CD that has a system folder
- N = Attempt to start up from a compatible network server (NetBoot)
- T = Start up in FireWire Target Disk mode (very handy for plugging your Mac into another as an external hard drive)
- Shift = start up in Safe Boot mode and temporarily disable login items and non-essential kernel extension files (Mac OS X 10.2 and later)
- Command+V = Start up in Verbose mode.
- Command+S = Start up in Single-User mode
- Command+Option+p+r = Zap PRAM. Hold down until second chime.
- Command+Option+n+v = Clear NV RAM. Similar to reset-all in Open Firmware.
- Command+Option+o+f = Boot into open firmware
- Hold mouse button down = Force eject a CD/DVD
調查利用 | (pipe) 連結各指令的執行結果
相信大家在Linux下都使用過|(pipe)來連結過指令, 比如 cat docu.txt | wc -l 可以得知docu.txt有幾行, 但是如果今天串連了許多指令,系統確告知指令不能正確被執行時該怎麼辦呢? 到底是卡在那一個了呢?
此時便可以透過PIPESTATUS這個"陣列變數"來得到每一個指令執行的結果是否正確!
看看以下的例子您便能明白:
[root@localhost ~]# cat docu.txt | wc -l
41
[root@localhost ~]# rm docu.txt
rm: remove regular file `docu.txt'? y
[root@localhost ~]# cat docu.txt | wc -l
cat: docu.txt: No such file or directory
0
[root@localhost ~]# echo ${PIPESTATUS[0]}
1
這樣應該瞭解了吧! 從這可知道各指令執行後的結果由0開始, 所以cat docu.txt的執行結果將存在PIPESTATUS[0]中,而wc -l則存放在PIPESTATUS[1]中,如此方便debug用.
Note: 指令若能正確被執行,則$?變數便會是0,非0則代表指令執行有誤,在這個例子中,您並不能以$?來找出那一段的指令執行錯誤,因為利用|(PIPE)所串連起來的指令,$?將會存放最後一個指令執行後的結果.
Note: PIPESTATUS的值將隨著每次指令的執行而異動!
此時便可以透過PIPESTATUS這個"陣列變數"來得到每一個指令執行的結果是否正確!
看看以下的例子您便能明白:
[root@localhost ~]# cat docu.txt | wc -l
41
[root@localhost ~]# rm docu.txt
rm: remove regular file `docu.txt'? y
[root@localhost ~]# cat docu.txt | wc -l
cat: docu.txt: No such file or directory
0
[root@localhost ~]# echo ${PIPESTATUS[0]}
1
這樣應該瞭解了吧! 從這可知道各指令執行後的結果由0開始, 所以cat docu.txt的執行結果將存在PIPESTATUS[0]中,而wc -l則存放在PIPESTATUS[1]中,如此方便debug用.
Note: 指令若能正確被執行,則$?變數便會是0,非0則代表指令執行有誤,在這個例子中,您並不能以$?來找出那一段的指令執行錯誤,因為利用|(PIPE)所串連起來的指令,$?將會存放最後一個指令執行後的結果.
Note: PIPESTATUS的值將隨著每次指令的執行而異動!
Wednesday, March 21, 2007
建構RHEL5的網路安裝Server
與RHEL4不一樣的是,RHEL5不需要將iso image mount起來,只要將iso image透過NFS Server export出來就可以了,所以說RHEL5變簡單了(笑~)。不過萬一您手上只有安裝光碟的時候,這怎麼辦呢? 請依以下的作法製作iso image吧!
For DVD:
# dd if=/dev/dvd of=/NFS/RHEL5/RHEL5.iso
For CD-ROMs:
# dd if=/dev/cdrom of=/NFS/RHEL5/RHEL5_diskX.iso
Note: X代表第幾片光碟。
設定並啟動NFS Server:
# vi /etc/exports
/NFS/RHEL5 *(ro,sync)
# service nfs start; chkconfig nfs on
For DVD:
# dd if=/dev/dvd of=/NFS/RHEL5/RHEL5.iso
For CD-ROMs:
# dd if=/dev/cdrom of=/NFS/RHEL5/RHEL5_diskX.iso
Note: X代表第幾片光碟。
設定並啟動NFS Server:
# vi /etc/exports
/NFS/RHEL5 *(ro,sync)
# service nfs start; chkconfig nfs on
Saturday, March 17, 2007
紅帽推出企業Linux 5 賽門鐵克來相挺-旗下儲存管理產品將支援RHEL 5
就在 紅帽 ( Red Hat )正式推出最新版旗艦作業系統 - Red Hat Enterprise Linux 5( RHEL 5)之後, 賽門鐵克 也宣布旗下儲存管理產品也將支援RHEL 5。
賽門鐵克表示,他們的Veritas Storage Foundation、Veritas Cluster Server以及Veritas NetBackup產品都將在90內完全支援紅帽最新旗艦Linux作業系統。為了協助紅帽用戶來更佳管理他們的資料中心,賽門鐵克將把開原碼Xen伺服 器虛擬工具列入RHEL 5內一起推出。
此外,賽門鐵克與紅帽也推出共同客戶服務方案,用來提供更快速更周詳的客戶支援。新的共同服務方案乃是藉由給予技術支援來讓工程師可以遠端遙控讀取賽門鐵克與紅帽的測試實驗室環境,結合雙方伺服器及儲存基礎架構來充分傳達客戶支援需求。
出處: CPRO 資傳網 http://cpro.com.tw/channel/news/content/?news_id=54431&cid=A0000
賽門鐵克表示,他們的Veritas Storage Foundation、Veritas Cluster Server以及Veritas NetBackup產品都將在90內完全支援紅帽最新旗艦Linux作業系統。為了協助紅帽用戶來更佳管理他們的資料中心,賽門鐵克將把開原碼Xen伺服 器虛擬工具列入RHEL 5內一起推出。
此外,賽門鐵克與紅帽也推出共同客戶服務方案,用來提供更快速更周詳的客戶支援。新的共同服務方案乃是藉由給予技術支援來讓工程師可以遠端遙控讀取賽門鐵克與紅帽的測試實驗室環境,結合雙方伺服器及儲存基礎架構來充分傳達客戶支援需求。
出處: CPRO 資傳網 http://cpro.com.tw/channel/news/content/?news_id=54431&cid=A0000
Friday, March 16, 2007
定期檢查系統中SUID的檔案
Linux系統中,凡具有SUID權限的檔案,可說是兩面刀呀! 好處是在某些時候可以讓user執行某些只有root可執行的檔案 (如: passwd, ping mount)~但壞處是萬一這個執行檔有"洞",就會讓有心人士有機會侵入到Linux作業系統,所以身為系統管理者的我們,必需要對SUID的檔案特別留意,也因此讓我想到,應該讓系統每天檢查SUID的檔案們是不是有被動過手腳:
-首先,在裝完OS後,先執行以下的命令:
find / -path '/proc' -prune -or -perm -u+s -exec ls -l {} \; > /tmp/suidlist-init
簡單的說就是利用find指令將除了/proc目錄外,所有具有suid權限的檔案找出來,並且存到/tmp/suidlist-init中
-撰寫scripr file:
# vi /root/bin/checksuid.sh
#!/bin/bash
LOGFILE="/tmp/suidlist-`date +%Y-%m-%d`"
RESULTFILE="/tmp/suid_check_result-`date +%Y-%m-%d`"
find / -path '/proc' -prune -or -perm -u+s -exec ls -l {} \; > $LOGFILE
diff /tmp/suidlist-init "$LOGFILE" > $RESULTFILE
mutt -s "SUID CHECK RESULT" root < $RESULTFILE
-定期每天AM 3點檢查,並將結果mail給root
#crontab -e
0 3 * * * /root/bin/checksuid.sh
這麼一來,每天收收信就可以知道目前所有具SUID檔案的狀況了!
-首先,在裝完OS後,先執行以下的命令:
find / -path '/proc' -prune -or -perm -u+s -exec ls -l {} \; > /tmp/suidlist-init
簡單的說就是利用find指令將除了/proc目錄外,所有具有suid權限的檔案找出來,並且存到/tmp/suidlist-init中
-撰寫scripr file:
# vi /root/bin/checksuid.sh
#!/bin/bash
LOGFILE="/tmp/suidlist-`date +%Y-%m-%d`"
RESULTFILE="/tmp/suid_check_result-`date +%Y-%m-%d`"
find / -path '/proc' -prune -or -perm -u+s -exec ls -l {} \; > $LOGFILE
diff /tmp/suidlist-init "$LOGFILE" > $RESULTFILE
mutt -s "SUID CHECK RESULT" root < $RESULTFILE
-定期每天AM 3點檢查,並將結果mail給root
#crontab -e
0 3 * * * /root/bin/checksuid.sh
這麼一來,每天收收信就可以知道目前所有具SUID檔案的狀況了!
Thursday, March 15, 2007
bash下array的幾種使用方法
#!/bin/bash
#一舉將變數設定到陣列中
array=(Redhat Novell MicroSoft Sun IBM HP Dell)
#利用for loop將陣列中的變數印出
for i in 0 1 2 3 4 5 6
do
echo "array[$i]=${array[$i]}"
done
#設定間隔符號為: 搭配$*將陣列的值一口氣輸出
IFS=:
echo "${array[*]}"
#設定間隔符號為換行,搭配$*將陣列的值一口氣輸出
IFS=$'\n'
echo "${array[*]}"
#將陣列中的值利用$@一口氣輸出與$*不同的是,不會將值合併成單一字串
echo "${array[@]}"
#印出陣列中有幾筆資料
echo "${#array[@]}"
執行結果:
array[0]=Redhat
array[1]=Novell
array[2]=MicroSoft
array[3]=Sun
array[4]=IBM
array[5]=HP
array[6]=Dell
Redhat:Novell:MicroSoft:Sun:IBM:HP:Dell
Redhat
Novell
MicroSoft
Sun
IBM
HP
Dell
Redhat Novell MicroSoft Sun IBM HP Dell
7
#一舉將變數設定到陣列中
array=(Redhat Novell MicroSoft Sun IBM HP Dell)
#利用for loop將陣列中的變數印出
for i in 0 1 2 3 4 5 6
do
echo "array[$i]=${array[$i]}"
done
#設定間隔符號為: 搭配$*將陣列的值一口氣輸出
IFS=:
echo "${array[*]}"
#設定間隔符號為換行,搭配$*將陣列的值一口氣輸出
IFS=$'\n'
echo "${array[*]}"
#將陣列中的值利用$@一口氣輸出與$*不同的是,不會將值合併成單一字串
echo "${array[@]}"
#印出陣列中有幾筆資料
echo "${#array[@]}"
執行結果:
array[0]=Redhat
array[1]=Novell
array[2]=MicroSoft
array[3]=Sun
array[4]=IBM
array[5]=HP
array[6]=Dell
Redhat:Novell:MicroSoft:Sun:IBM:HP:Dell
Redhat
Novell
MicroSoft
Sun
IBM
HP
Dell
Redhat Novell MicroSoft Sun IBM HP Dell
7
Wednesday, March 14, 2007
半價網
這個網站挺吸引人的,把供應商跟消費者完完全全結合在一起......
如果真得可以半價買的夢想中的商品,那是多麼地令人興奮呀!! 也因此帽客預約了Apple iMac 2.0Ghz MA590TA/A, 呵~原價42900半價21900, 能成功嗎? 期待中 =)
半價網 http://www.50100.com.tw
如果真得可以半價買的夢想中的商品,那是多麼地令人興奮呀!! 也因此帽客預約了Apple iMac 2.0Ghz MA590TA/A, 呵~原價42900半價21900, 能成功嗎? 期待中 =)
半價網 http://www.50100.com.tw
Monday, March 12, 2007
Redhat Enterprise Linux 5.0 蓄勢待發!
Redhat 計畫在美國時間3月14日推出它的旗艦作業系統最新版本 - Red Hat Enterprise Linux 5。
RHEL 5以連結伺服器虛擬與紅帽的叢集支援來整合Xen架構伺服器與儲存虛擬方案。此外,RHEL 5具有虛擬管理功能,能夠使得安裝及管理Xen虛擬機器變得更容易。新版本RHEL從Linux核心2.6.9版升級至2.6.18版,紅帽更宣稱延伸強 化了作業系統的網路與I/O子系統。
資料來源: CPRO 資傳網 http://cpro.com.tw/channel/news/content/?news_id=54344
RHEL 5以連結伺服器虛擬與紅帽的叢集支援來整合Xen架構伺服器與儲存虛擬方案。此外,RHEL 5具有虛擬管理功能,能夠使得安裝及管理Xen虛擬機器變得更容易。新版本RHEL從Linux核心2.6.9版升級至2.6.18版,紅帽更宣稱延伸強 化了作業系統的網路與I/O子系統。
資料來源: CPRO 資傳網 http://cpro.com.tw/channel/news/content/?news_id=54344
Wednesday, March 07, 2007
利用Kickstart安裝Redhat Linux
我想這不是一個很高深的技術,但確是非常實用且方便的方法,最近買了一堆IBM HP and Dell的Server,要帽客自己一台一台手動安裝Redhat嗎? 實在是沒那個美國時間, 所以就利用kickstart來幫我這麼忙囉! 帽客的作法是: 將kickstart configure file放在NFS Server上, 當然這台NFS Server也同樣是Installation Server, 待用第一片開機片開機時,打入以下的指令: linux ks=nfs:IP address:/Share folder/ks.cfg 這麼一來,人就可以不用待在機房在那邊按來按去囉!
Note: ks.cfg這個檔案是依據手動安裝時所選取的選項與設定,自行產生的範例檔, 原來的檔名與位置是在 /root/anaconda-ks.cfg.
Note: ks.cfg這個檔案是依據手動安裝時所選取的選項與設定,自行產生的範例檔, 原來的檔名與位置是在 /root/anaconda-ks.cfg.
Monday, March 05, 2007
Linux下的備份利器-cpio
說到在Linux下備份檔案,最常用的就是使用tar來備份檔案,不過有的時候在某些特定的需求下,是需要利用到其它的工具來備份,比如: 如果將來要回復*.conf的檔案時,利用tar的話就遇到瓶頸了,不過也不必擔心,還有一個好用的備份壓縮工具cpio可以幫我們達成這個需求!
1.首先,先將/etc完整備份到/tmp下:
# cd /etc;find . -print | cpio -oa > /tmp/etc_backup.cpio
2.將*.conf回復到/tmp下:
# cd /tmp; cpio -im "*.conf" < /tmp/etc_backup.cpio
附帶提一下常見的壓縮工具,它們的壓縮比(優到劣)通常是: tar.bz2 > tgz > tar > cpio > dump
1.首先,先將/etc完整備份到/tmp下:
# cd /etc;find . -print | cpio -oa > /tmp/etc_backup.cpio
2.將*.conf回復到/tmp下:
# cd /tmp; cpio -im "*.conf" < /tmp/etc_backup.cpio
附帶提一下常見的壓縮工具,它們的壓縮比(優到劣)通常是: tar.bz2 > tgz > tar > cpio > dump
Thursday, March 01, 2007
Tuesday, January 30, 2007
誰佔用我的硬碟空間??
帽客的小黑X24,用了三年多了,安裝CentOS也跑了兩年多了(都沒重灌唷!),近日覺得"/"的空間有點不大夠用了.....於是乎下達 du -csh /* 來找看看那個目錄佔用我最多的空間,看了一看覺得為何/var會如此肥大? 進到此目錄後,在用剛剛的指令檢查看看,哇! 果然讓我抓到了兇手了, /var/cache/yum竟然有700M那麼大,原來以前用yum升級套件時,忘了把抓下來的packages移除,趕緊用 yum clean all清一下,嗯~好多了!
PS 其實兇手是我自己 =.=" 趕快改寫一下crontable囉~~~
PS 其實兇手是我自己 =.=" 趕快改寫一下crontable囉~~~
Friday, January 26, 2007
NTOP
前些日子把3條ADSL合併在一台Linux的機器,當然想看看traffic的情況,本想用MRTG來看,後來想想還是用NTOP好了,NTOP的確能分析到更多的東西,但不是說MRTG不好,目前我也用MRTG monitor數10台switch的流量,跑了很久也一直很穩定,工具不分好壞能達到目的就好了!
Monday, January 22, 2007
Linux合併頻寬
上星期因為工作需求去K了一下如何用Linux合併三條ADSL線路,公司的應用真的是太吃頻寬了!
我選用CentOS搭配iproute2與iptables來做,不過.....我只能說我做對了一半.....對外都沒有問題,但是如果要透過它連到內部的FTP Server,三條線路就時通時不通了!這點就很奇怪了,讓我有點confuse...... 這樣的下法應該是work的呀.....
iptables -t nat -A PREROUTING -s eth1 -p tcp --dport 21 -j DNAT --to 192.168.1.100:21
iptables -t nat -A PREROUTING -s eth2 -p tcp --dport 21 -j DNAT --to 192.168.1.100:21
iptables -t nat -A PREROUTING -s eth3 -p tcp --dport 21 -j DNAT --to 192.168.1.100:21
我選用CentOS搭配iproute2與iptables來做,不過.....我只能說我做對了一半.....對外都沒有問題,但是如果要透過它連到內部的FTP Server,三條線路就時通時不通了!這點就很奇怪了,讓我有點confuse...... 這樣的下法應該是work的呀.....
iptables -t nat -A PREROUTING -s eth1 -p tcp --dport 21 -j DNAT --to 192.168.1.100:21
iptables -t nat -A PREROUTING -s eth2 -p tcp --dport 21 -j DNAT --to 192.168.1.100:21
iptables -t nat -A PREROUTING -s eth3 -p tcp --dport 21 -j DNAT --to 192.168.1.100:21
Friday, January 12, 2007
改變預設smtp port
SMTP default port是25,今天在裝公司某樣產品時要求要將port 25改成2500,用google找到了方法,趕快先po上來,因為這實在太少用了!
Add a line to your /etc/services:
smtp2 5000/tcp
Now edit your master.cf so the smtpd line starts with smtp2:
smtp2 inet n - n - - smtpd
service postfix restart
原文網址
Add a line to your /etc/services:
smtp2 5000/tcp
Now edit your master.cf so the smtpd line starts with smtp2:
smtp2 inet n - n - - smtpd
service postfix restart
原文網址
Monday, January 08, 2007
小小改造Mac CLI
Mac預設的CLI(console),是不支援中文且ls的輸出也是沒有顏色的,利用以下的方法可以讓CLI變成彩色且支援中文語系:
$ sudo vi /etc/bashrc
alias ll='ls -l -w -G'
alias ls='ls -w -G'
$ sudo vi /etc/bashrc
alias ll='ls -l -w -G'
alias ls='ls -w -G'
Wednesday, December 27, 2006
Linux Transparent Firewall架設完全攻略
前言:
很多時候,在不想變動原本的網路架構下,如果有需要將網路隔離開時,就需用到透通式的防火牆,所謂的透通式的防火牆它是個in-line mode的裝置,你可以把它想成是一個Bridge裝置,但確有可以過濾封包的功能,提醒一下既然是Bridge裝置,當然它就是屬於Layer 2那一層囉!
Environment:
以下是筆者所測試的環境:
Server ---------- Firewall ---------- Client
Server IP address: 192.168.1.100
Client IP address: 192.168.1.200
Firewall IP address: 192.168.1.1
Objective:
只允許Server可以透過網芳將檔案傳送到Client端(單向),Server與Client可互相透過icmp echo request確認彼此間的連線 (雙向) 。
Setup Procedure:
1.Bind兩張網卡成一個bridge interface:
Firewall至少要有兩張網卡,然後只要將它們bind起來,Firewall就可以成了一個Bridge裝置。首先要安裝bridge-utils與bridge-utils-devel這兩個套件,這兩個套件可以把eth0與eth1 bind成一個bridge裝置,正好符合我們以上的需求,筆者是用RHEL4.4架設的,非常方便的是這兩個套件在安裝光碟裡面就有。
# rpm –ivh bridge-utils-*
緊接著將eth0與eth1 bind成bri0 interface.
# ifconfig eth0 0.0.0.0
# ifconfig eth1 0.0.0.0
# brctl addbr bri0
# brctl addif bri0 eth0
# brctl addif bri0 eth1
執行brctl show確認一下:
# brctl show
bridge name bridge id STP enabled interfaces
bri0 8000.00034730c5b3 no eth0
eth1
好了問題來了,既然bri0 interface已經建置好了,那麼是否可以在上面設定IP呢?答案當然是可以的囉~不然怎麼remote control它呢? 至於設定的方法有兩種,一種是設定Static IP,另一種是透過DHCP Server get到IP,以下是設定的方法:
Static IP:
# ifconfig bri0 192.168.1.1 netmask 255.255.255.0 up
DHCP Client:
# dhclient bri0
以上的所有動作您可以把它寫成一個shell script file,並讓它在開機時自動執行,以RHEL的話是放在/etc/rc.local,順便一提SLES是/etc/init.d/boot.local
2. Allow IP forwarding
# vi /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
#sysctl –p
請測試一下,目前Server與Client的網路是相通的。
3. 設定Policy
重頭戲來了,如何設定Policy? 一般來說Linux firewall的設定是透過iptables,iptables預設分為3個table,5個chain,我要把rule設定在那個table及那個chain是一開始該有的認知。先提醒一個觀念,iptables比對的順序為mangle->nat->filter,這是什麼意思?事實上mangle,nat與filter就是預設的三個table,若前面的規則是allow,到了後面的table卻是deny的話,那就是deny! 反之若前面是deny而後面是allow的話,那就是allow! 這是套用於不同table時,規則相互抵觸時的法則,想一想有沒有可能在相同的chain中,設定相互抵觸的規則?當然是有可能的囉!這時是first match! 當hit到規則後,則不在進行比對,這點請特別注意!
可以確定的是,利用filter table就可以設定我們的policy,接下來考慮一下要設定在那個chain? INPUT OUTPUT FORWARD? 答案是 FORWARD,別忘了!它是個Bridge裝置,封包當然是透過eth0到eth1或是eth1到eth0囉!
為了最高安全指導原則,首先要把 FORWARD default policy設定為DROP,只放行SMB protocol與icmp echo request.
# iptables –P FORWARD DROP
測試一下 Server與Client目前應該是完全不通!
設定允許n個封包之後的連線:
# iptables –A FORWARD –m state –state RELATED,ESTABLISHED –j ACCEPT
設定允許icmp echo request:
# iptables –A FORWARD –s 192.168.1.0/24 –p icmp –icmp-type 8 –j ACCEPT
設定只有Server可以透過網芳將檔案傳送到Client:
# iptables –A FORWARD –s 192.168.1.100/32 –d 192.168.1.200/32 –p tcp –dport 139 –j ACCEPT
# iptables –A FORWARD –s 192.168.1.100/32 –d 192.168.1.200/32 –p tcp –dport 445 –j ACCEPT
這樣一來便可達到我們的需求!
歡迎轉載,不過請註明出處唷~ ^^
筆者簡介:
Lawrence Chiu – 已取得RHCE與NCLP認證,曾任職於D-Link testing engineer負責資安產品的測試,現任職於TrendMicro Anti-Spam Lab administrator。
很多時候,在不想變動原本的網路架構下,如果有需要將網路隔離開時,就需用到透通式的防火牆,所謂的透通式的防火牆它是個in-line mode的裝置,你可以把它想成是一個Bridge裝置,但確有可以過濾封包的功能,提醒一下既然是Bridge裝置,當然它就是屬於Layer 2那一層囉!
Environment:
以下是筆者所測試的環境:
Server ---------- Firewall ---------- Client
Server IP address: 192.168.1.100
Client IP address: 192.168.1.200
Firewall IP address: 192.168.1.1
Objective:
只允許Server可以透過網芳將檔案傳送到Client端(單向),Server與Client可互相透過icmp echo request確認彼此間的連線 (雙向) 。
Setup Procedure:
1.Bind兩張網卡成一個bridge interface:
Firewall至少要有兩張網卡,然後只要將它們bind起來,Firewall就可以成了一個Bridge裝置。首先要安裝bridge-utils與bridge-utils-devel這兩個套件,這兩個套件可以把eth0與eth1 bind成一個bridge裝置,正好符合我們以上的需求,筆者是用RHEL4.4架設的,非常方便的是這兩個套件在安裝光碟裡面就有。
# rpm –ivh bridge-utils-*
緊接著將eth0與eth1 bind成bri0 interface.
# ifconfig eth0 0.0.0.0
# ifconfig eth1 0.0.0.0
# brctl addbr bri0
# brctl addif bri0 eth0
# brctl addif bri0 eth1
執行brctl show確認一下:
# brctl show
bridge name bridge id STP enabled interfaces
bri0 8000.00034730c5b3 no eth0
eth1
好了問題來了,既然bri0 interface已經建置好了,那麼是否可以在上面設定IP呢?答案當然是可以的囉~不然怎麼remote control它呢? 至於設定的方法有兩種,一種是設定Static IP,另一種是透過DHCP Server get到IP,以下是設定的方法:
Static IP:
# ifconfig bri0 192.168.1.1 netmask 255.255.255.0 up
DHCP Client:
# dhclient bri0
以上的所有動作您可以把它寫成一個shell script file,並讓它在開機時自動執行,以RHEL的話是放在/etc/rc.local,順便一提SLES是/etc/init.d/boot.local
2. Allow IP forwarding
# vi /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
#sysctl –p
請測試一下,目前Server與Client的網路是相通的。
3. 設定Policy
重頭戲來了,如何設定Policy? 一般來說Linux firewall的設定是透過iptables,iptables預設分為3個table,5個chain,我要把rule設定在那個table及那個chain是一開始該有的認知。先提醒一個觀念,iptables比對的順序為mangle->nat->filter,這是什麼意思?事實上mangle,nat與filter就是預設的三個table,若前面的規則是allow,到了後面的table卻是deny的話,那就是deny! 反之若前面是deny而後面是allow的話,那就是allow! 這是套用於不同table時,規則相互抵觸時的法則,想一想有沒有可能在相同的chain中,設定相互抵觸的規則?當然是有可能的囉!這時是first match! 當hit到規則後,則不在進行比對,這點請特別注意!
可以確定的是,利用filter table就可以設定我們的policy,接下來考慮一下要設定在那個chain? INPUT OUTPUT FORWARD? 答案是 FORWARD,別忘了!它是個Bridge裝置,封包當然是透過eth0到eth1或是eth1到eth0囉!
為了最高安全指導原則,首先要把 FORWARD default policy設定為DROP,只放行SMB protocol與icmp echo request.
# iptables –P FORWARD DROP
測試一下 Server與Client目前應該是完全不通!
設定允許n個封包之後的連線:
# iptables –A FORWARD –m state –state RELATED,ESTABLISHED –j ACCEPT
設定允許icmp echo request:
# iptables –A FORWARD –s 192.168.1.0/24 –p icmp –icmp-type 8 –j ACCEPT
設定只有Server可以透過網芳將檔案傳送到Client:
# iptables –A FORWARD –s 192.168.1.100/32 –d 192.168.1.200/32 –p tcp –dport 139 –j ACCEPT
# iptables –A FORWARD –s 192.168.1.100/32 –d 192.168.1.200/32 –p tcp –dport 445 –j ACCEPT
這樣一來便可達到我們的需求!
歡迎轉載,不過請註明出處唷~ ^^
筆者簡介:
Lawrence Chiu – 已取得RHCE與NCLP認證,曾任職於D-Link testing engineer負責資安產品的測試,現任職於TrendMicro Anti-Spam Lab administrator。
利用Linux架設Transparent Firewall
前幾天帽客利用一台PIII的機器,安裝好Linux後並設定成透通式防火牆,架設在公司網路裡面使用,在不想改變現有的環境下,而又想阻擋某些對外連線時,這是一個好方法,經過這幾天的觀察,發覺還挺穩的,因為網路流量挺大的,還在擔心這台老機器會不會撐不住,呵~ 果然是我想太多了! Linux就是棒呀! 就算是老機器給它灌上Linux也能有第二春!
Tuesday, December 19, 2006
設定DHCP Server只由某張網卡分配出去
是的,帽客在家及在公司都已經有架設起一台NAT Server以供測試,下一個問題當然是架設起DHCP Server的服務,但總不能讓它兩張網卡都分配出去IP吧! 如果我要限定只從某個網卡分配出去呢? 該怎麼辦? 問了問Google大神,果然找到的解決的方法,以下是Redhat說明:
- 開啟 /etc/init.d/dhcpd
- 找到 daemon /usr/sbin/dhcpd ${DHCPDARGS} 2>/dev/null 修改為 daemon /usr/sbin/dhcpd eth1 ${DHCPDARGS} 2>/dev/null
- # service dhcpd start; chkconfig dhcpd on
這麼一來DHCP Server就只會從eth1分配IP出去!
至於SLES10,很簡單的囉~ 使用yast2來設定就好了,這裡就不多加詳述了.
- 開啟 /etc/init.d/dhcpd
- 找到 daemon /usr/sbin/dhcpd ${DHCPDARGS} 2>/dev/null 修改為 daemon /usr/sbin/dhcpd eth1 ${DHCPDARGS} 2>/dev/null
- # service dhcpd start; chkconfig dhcpd on
這麼一來DHCP Server就只會從eth1分配IP出去!
至於SLES10,很簡單的囉~ 使用yast2來設定就好了,這裡就不多加詳述了.
Subscribe to:
Posts (Atom)
