2010年12月1日 星期三

CD router 路由軟體(6)防火牆

打從 linux 存在以來?

似乎沒有內建過其他 firewall ,一直都是 iptables 當家?或以「firewall」為主修改條件!

反觀「Free BSD」就有「 ipfw、ipnat、ipfilter」有幾大類專屬指令,也讓 freebsd 在設置上,變得輕鬆?

不管,反正是以 iptables 為主,沒其他問題!

國內除了鳥哥之外?「Linux 講解的一個好站!」

有詳細說明「iptables 的指令參數」要好好看ㄉ
http://www.weithenn.org/cgi-bin/wiki.pl?IPTables-Linux_Firewall
鳥哥的防火牆
http://linux.vbird.org/linux_server/0250simple_firewall.php
藍天工作室,過程非常完整唷!
http://itzone.hk/article/index.php?tid=14


先說明一些網路上看到的實用用技巧!
http://metavige.blogspot.com/2008/06/firestarter-iptables.html 


先是[ -F -X -Z ]清除預設防火牆原則

iptables -F
iptables -X
iptables -Z



設置允許公用 -P 訊息 「三個生效原則」

iptables -P INPUT DROP                     「進入消除」
iptables -P OUTPUT ACCEPT           「送出允許」
iptables -P FORWARD ACCEPT      「轉發允許」


設置 Loopback 的進出允許

iptables -A INPUT -i lo -j ACCEPT

設置各網路卡「eth0 | wlan0 | vmnet1 | vmnet8」生效的方式,用「替代字元 $ifcards」這招很讚!直接解決問題。

ifcards="eth0 wlan0 vmnet1 vmnet8"
for ifcard in $ifcards
do

建立 $ifcard 網路卡的連線生效

iptables -A INPUT -i $ifcard -m state --state RELATED,ESTABLISHED -j ACCEPT
done



回想關於鳥哥的硬體設置方式

EXTIF="eth1"           # 這個是可以連上 公用 IP 的網路介面
INIF="eth0"               # 內部 LAN 的連接介面;若無請填 ""
INIF="eth1"               # 內部 LAN 的連接介面;若無請填 ""
INIF="eth2"               # 內部 LAN 的連接介面;若無請填 ""

INNET="192.168.1.0/24"       # 內部 LAN 的網域,若沒有內部 LAN 請設定為 ""
export EXTIF INIF INNET       # 執行生效


-------------------------------------------------
CD router - iptables 設置 注意事項
-------------------------------------------------


我們要在 CD router 設置自己的 iptables 防火牆,為此?要先有一點步驟!

A.檢查網路結構

建議順序是「網路卡、外網、內網、路由表」設置是否生效,若未生效?就重新設置。


B.問題的根源,你有幾個網路通道,要開啟?

iptables 情況下?每多增加一張網路卡,就必須要多設置一種條件嗎?
iptables 環境下?每一個訊息正常訊息,什麼是「目標對象、目標來源、目標結果」的執行。

C.其他詭異問題?當設備不存在時,啟動 iptables 就不在管理當中?

案例:啟動 iptables 完成,在進行 re-pppoe-start 連線 ADSL 是否會正常?
答案:ppp+ 會被 iptables 排除在外,因此要先啟動 ADSL 在啟動「iptables」很這是很多人架設「IP分享」失敗的關鍵。


D.關於echo 1 > /proc/sys/net/ipv4/ip_forward 的迷失 NAT 技巧?


設置外網裝置eth0 10.1.1.1 對內廣播
同時設置
dhcpd 10.1.1.1
gw 10.1.1.1

即可經由 eth0 連線外網,但仍要說「這不安全」。
網路上已經有人說明過這種現象,因此?一般市面售出的「 IP 分享器」都有同樣的缺陷。
不論內建任何「簡易防火牆原則」,也都難以不被透析內部網路。

現象證明1;取自藍森林 自由軟件「http://www.lslnet.com/linux/f/docs1/i28/big5227931.htm」
-------------------------------------------------------------------------

用linux做NAT最後都要用上面一句話打開ip轉發。

昨天做了個實驗無意中發現,這個好像不是我想的那樣工作的。
1,本來是想做NAT的,但是忘了加iptables,只
 

echo 1 > /proc/sys/net/ipv4/ip_forward了
 

網關eth0 192.168.0.10  |  eth1 192.168.1.1
 

eth0連到公司網絡,相對來說是外網了(192.168.0.0/24),eth1連到我們這個部門,相對來說是內網了 (192.168.1.0/24)沒有加Iptables當然不能出去了,但是我發現,內網可以訪問外網的一台機器 192.168.0.31,ping,telnet,ftp都可以,其他外網機器不能訪問!!!,現在沒有做任何iptables啊,為了確信沒有 iptables,我iptables -t nat -F,清了一次,還是可以通,不能理解!!!
 

乾脆我到192.168.0.31上,試著ping 192.168.1.X內網的機器,居然是通的,各種服務都可以!!!這還有什麼安全性可言啊。檢查192.168.0.31的設置,發現它的 default gw 是192.168.0.10,我猜想是不是ip_forward,打開以後就分別轉發來自兩個端口的包?
 

2,加了iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE以後,NAT正常,外網機器都能訪問,只是只要外網以192.168.0.10做缺省路由,就可以自由訪問內網任何機器了,不需要什麼端口映射了。 

到這裡我覺得這樣是不是有些不安全,假如,通過這樣一個NAT放在公網上,只要別人與你的公網IP在一個網段,以你的NAT公網IP為缺省路由,不是內網全部暴露在它面前了?


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

-------------------------------------------------------------------------
現象證明2「http://lists.debian.org/debian-firewall/2000/01/msg00021.html


其中有一篇關於「ip_forward」內外網區隔的原文敘述,在原意上?

條件近似

dns192.168.1.1
mask 255.255.255.0
gw 192.168.1.254
dhcpd broadcast 192.168.1.255

會發生「 111.112.113.114 」的原理是什麼?重新計算路由又會改變條件,使人不得不思考,正確的配置是什麼?

通常很多人喜歡「預設配置」gw = dhcpd 的現象,來接通外部網路,在比照「大型網路、企業網路、網管技術」的實現上?這非常不安全。

因此?建立 proxy 伺服器,來避免這個不安全,轉移網路不安全的焦點。
不禁使人問「proxy = 網路代理伺服器」是安全的嗎?

曾在 2002、2004、2005、2007年,申請多組免費伺服器,架設多台「虛擬 proxy 」作為跳板,完成一些有趣的模式,可見得網路上的免費資源?非常好用,而且可匿名登記,只要E-mail檢查過關即可(免費 email 許多地方都能申請到),至於網路流量?就要自己「多方」設法解決。

但若真的要「偷懶」 dhcpd = gw 也無不可啦!

因此可以獲知「eth1」「dhcpd server router=192.168.1.1 廣播 192.168.1.255」
但設置「eth0\pppoe\ADSL」取得外網「gw 214.21.18.50」不合理。

因此?
#router  default gateway "eth0 ppp+ adsl+ isdn+" 一類的設備窗口

要有效管理「Router」作正確規劃?
因此 default gateway 仍是內部虛設的條件?
一切採取「網路卡實體」來區分,實體設置交換網路訊息................

http://eoffice.im.fju.edu.tw/phpbb/viewtopic.php?t=1550 「不解的新手請閱覽」

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


請參考

Red Hat Enterprise Linux 4 的線上教程,去進行施作,並確保上面描述的過程,各位就能夠體會 iptables 操作技巧了。

紅帽企業版 Linux 4 第七章 「防火牆」

請詳盡的看完第七章節全部
http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-zh_tw-4/ch-fw.html
若沒有問題?就去挑戰「鳥哥」的防火牆設置模式。
-------------------------------------------------------------------------


鳥哥的防火牆設置
http://linux.vbird.org/download/ 有鳥哥防火牆 firewall 文件,可以下載來參考!


#!/bin/bash

# 請先輸入您的相關參數,不要輸入錯誤了!
EXTIF="eth1" # 這個是可以連上 Public IP 的網路介面
INIF="eth0" # 內部 LAN 的連接介面;若無請填 ""
INNET="192.168.1.0/24" # 內部 LAN 的網域,若沒有內部 LAN 請設定為 ""
export EXTIF INIF INNET

# 第一部份,針對本機的防火牆設定!###########################
# 1. 先設定好核心的網路功能:

echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "1" > $i
done
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 與相關的設定值
PATH=/sbin:/usr/sbin:/bin:/usr/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 -j ACCEPT

# 3. 啟動額外的防火牆 script 模組 
# 3. iptables.deny | iptables.allow 檔案請到 http://linux.vbird.org/download/ 下載  
 
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
if [ -f /usr/local/virus/httpd-err/iptables.http ]; then
sh /usr/local/virus/httpd-err/iptables.http
fi
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

# 4. 允許某些類型的 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 22 -j ACCEPT # SSH
# iptables -A INPUT -p TCP -i $EXTIF --dport 25 -j ACCEPT # SMTP
# iptables -A INPUT -p UDP -i $EXTIF --sport 53 -j ACCEPT # DNS
# iptables -A INPUT -p TCP -i $EXTIF --sport 53 -j ACCEPT # DNS
# iptables -A INPUT -p TCP -i $EXTIF --dport 80 -j ACCEPT # WWW
# iptables -A INPUT -p TCP -i $EXTIF --dport 110 -j ACCEPT # POP3
# iptables -A INPUT -p TCP -i $EXTIF --dport 443 -j ACCEPT # HTTPS

# 第二部份,針對後端主機的防火牆設定!##############################
# 1. 先載入一些有用的模組

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} "`
if [ "$testmod" == "" ]; then
modprobe $mod
fi
done

# 2. 清除 NAT table 的規則吧!
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 分享器!
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. 內部伺服器的設定:
# iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 \
# -j DNAT --to 192.168.1.210:80
 
 
 
後面開始?就是其他「軟路由軟體」 的實務架設。

HR , NO!Human Resources,NO!

※※ 這樣內容,上手會困難嗎?※※ 我想到什麼?就寫什麼!※※

※對於資訊!我想到什麼?就寫什麼!

如果困難的話?
歡迎來信討論或發表意見,我會儘快回覆。

也歡迎來 YAHOO 知識家,集思廣益!

我的YAHOO 知識家 首頁:
Yahoo 知識+ 2013年改版前 (網域似乎已作廢)
YAHOO 知識家+ 2013年改版後

有需要技術文件 DarkMan 蒐集了不少!
存在FTP共享。想下載?請洽DarkMan信箱取得下載帳號。※

人性的理由
上句:不修一切法,如如是己身。傳其法,授其使,說其名,淪為其用。
下句:你寫得出來其意就傳你【大神威、大魔法,無上魔道。】