用linux構建路由器
網絡結構如圖,Linux路由器這臺計算機標識爲A,它與三個網段相連,192.168.2.0/24,192.168.3.0./24,192.168.1.0/24。
A計算機必須擁有三塊網卡,分別與三個網段相連。
假設:
eth0與192.168.1.0相連,
eth1與192.168.2.0相連,
eth2與192.168.3.0相連。
備註:
由於這臺PC機的網絡接口比較多,所以在連接每個段的網絡時,注意使用#route命令。
這樣可以判斷哪個網絡接口是對外的。
首先來配置eth0。給這個網絡接口分配地址192.168.1.15,運行下列命令:
# ifconfig eth0 192.168.1.15 netmask 255.255.255.0
或#ifconfig eth0 192.168.1.15 broadcast 192.168.1.255 netmask 255.255.255.0
爲了使這個地址不再計算機重新啓動後消失,編輯/etc/sysconfig/network-scripts/ifcfg-eth0文件
增加一條靜態路由:
# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
服務器端核心的兩句:
①打開LINUX的路由功能:
#echo 1 >/proc/sys/net/ipv4/ip_forward
②將局域網中所有機器的數據包都通過eth1所做的透明網關送出去,不做任何限制
或者說:IP僞裝,使內部網路的封包經過僞裝之後,使用對外的 eth1 網卡當作代表號,對外連線(啓動內部對外轉址)。
#iptables -t nat -A POSTROUTING -o eth1 -s 192.168.2.0/24 -j SNAT
--to 192.168.1.15
# ptables -t nat -A POSTROUTING -o eth1 -s 192.168.2.0/24 -j SNAT
--to 192.168.1.15
③設置防火牆,增加規則
將會阻止來自某一特定IP範圍內(92.168.2.0/24)數據包,因爲該IP地址範圍被管理員懷疑有大量惡意***者在活動:
#iptables -t filter -A INPUT -s 192.168.2.0/24 -j DROP
若想要取消的話,則刪除規則
#iptables -t filter -D INPUT -s 192.168.2.0/24 -j DROP
④缺省的策略(一般不要設,會導致網絡不通),最基本的原則是“先拒絕所有的數據包,然後再允許需要的”。下面來爲每一個鏈設置缺省的規則:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
這樣會導致客戶端不能訪問服務器,服務器也不能上網
或者預設全部接受∶
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
⑤如果我們的Linux機器配置有防火牆,爲防止防火牆將通過177端口(即xdmcp服務)的數據過慮,我們必須加上如下的規則:
#iptables -A INPUT -p udp -s 0/0 -d 0/0 --dport 177 -j ACCEPT
這個命令使iptables增加一條規則到INPUT,用以接受從所有的源(-s 0/0)到所有的目標(-d 0/0)通過端口177的數據包
或者用
#iptables -I INPUT -i eth0 -p udp 192.168.2.155 --dport 177 -j DROP(關閉177端口)
#iptables -I INPUT -i eth0 -p udp 192.168.2.155 --dport 177 -j
ACCEPT(打開177端口)
說明 插入一條規則,原本該位置上的規則將會往後移動一個順位。
⑥一般被保護的內部網絡可分成兩部分,一部分是內部通訊區,只允許內部用戶訪問,絕對禁止外部用戶訪問,另一部分是停火區DMZ,對外提供有條件的服務。前者是系統的核心子網,後者易受到外部的***,是一個比較危險的子網環境。一方面要求嚴格保護內部子網,另一方面又要滿足DMZ對外提供服務的需要,因此,必須採用分別保護的策略,對上述兩個區域進行保護。兩個區域要儘量獨立,即使DMZ受到外部***,內部子網仍處於防火牆的保護之下。
⑦防火牆規則
#iptables -A INPUT -i eth1 -s 0.0.0 .0/0 -p ICMP -j DROP(將所有從外網進來的ping包都統統丟棄,不允許從外網向內網發ping)
#iptables –A INPUT –i eth1 –s 0.0.0 .0/0 –p TCP –port ! 80 –j DROP(將所有由外網發起的非80端口的請求都統統丟棄, 只允許外網訪問內網的HTTP服務)
補充說明:
⑴添加廣播路由
#route add -host 255.255.255.255 -dev eth1(內網機器連在eth1網卡上)
若要系統啓動後自動添加路由,需要修改/etc/rc.local
⑵配置iptables,設置DNAT功能
# iptables –A PREROUTING -t nat -p tcp -s ! 192.168.0.0/24 --dport 4899 -j DNAT --to 192.168.0.2:4899
此功能是將訪問LINUX機器TCP協議4899端口(內網除外)的所有連接轉到內網的192.168.0.2的4899端口上
⑶filter是最常用的表,在filter表中最常用的三個目標是ACCEPT、DROP和REJECT。DROP會丟棄數據包,不再對其進行任何處理。REJECT會把出錯信息傳送至發送數據包的主機。
⑷增加規則
將會阻止來自某一特定IP範圍內的數據包,因爲該IP地址範圍被管理員懷疑有大量惡意***者在活動:
# iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP
也可以很輕易地阻止所有流向***者IP地址的數據包,該命令稍有不同:
# iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP
注意這裏的A選項,使用它說明是給現有的鏈添加規則。
⑸刪除規則
網絡上的惡意***者總是在變化的,因此需要不斷改變IP。假設一個網上***者轉移到新的IP地址,而其老的IP地址被分配給一些清白的用戶,那麼這時這些用戶的數據包將無法通過你的網絡。這種情況下,可以使用帶-D選項的命令來刪除現有的規則:
# iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP
⑹缺省的策略
創建一個具有很好靈活性、可以抵禦各種意外事件的規則需要大量的時間。對於那些沒有時間這樣做的人,最基本的原則是“先拒絕所有的數據包,然後再允許需要的”。下面來爲每一個鏈設置缺省的規則:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
這裏選項-P用於設置鏈的策略,只有三個內建的鏈纔有策略。這些策略可以讓信息毫無限制地流出,但不允許信息流入。很多時候需要接收外部信息,則可使用以下命令:
# iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT
⑺清除所有的規則
#iptables –F(清除預設表 filter 中,所有規則鏈中的規則)
#iptables -F -t nat(清除nat表中,所有規則鏈中的規則)