配置
Linux
防火牆
一
.
包過濾防火牆的通常概念
1.
概念
:
是用一個軟件查看所流經的數據包的包頭
(header),
以決定丟棄仍是接受這個包
2.
工做層次
:
工做在網絡層
3.
包過濾防火牆的工做原理
使用過濾器
:
過濾系統根據過濾規則原則決定是否讓數據包經過,檢查的
IP
頭和
TCP
或
UDP
頭包括
:IP
源地址
,IP
目標地址
,
協議
,TCP
或
UDP
包的源端口,
TCP
或
UDP
包的目標端口
,ICMP
消息類型
,TCP
包中的
ACK
位
,
數據包到達的端口
,
數據包出去的端口
經過屏蔽特定的端口能夠禁止特定的服務
過濾器的實現
:
過濾路由器檢查數據包的特定信息
4.
包過濾操做的基本過程
:
5.
包過濾的優缺點
優勢
:
小型網絡包過濾較容易實現,處理包的速度快
,
提供透明服務
缺點
:
一些包過濾網關不支持有效的用戶認證
規則表很快,會變得很大並且複雜
包過濾防火牆只能阻止外部主機假裝內部主機的
IP
,對於外部主機假裝外部主機的
IP
欺騙卻不能阻止
二
.Netfilter/iptables
1.Netfilter/iptables
是與最新的
2.4.x
版
Linux
內核集成的
IP
信息包過濾系統
2.Netfilter
網絡底層架構
(1).Netfilter
是新的用來實現防火牆的過濾器
.
而
iptables
是用來指定
Netfilter
規則的用戶工具,它爲用戶配置防火牆規則提供了方便
.iptables
能夠加入、插入或刪除核心包過濾表格鏈中的規則。實際執行者是
netfilter
及其相關模塊
(2).Netfilter/IPtables
系統的主要功能:
狀態包過濾
(
鏈接跟蹤
)
各類網絡地址翻譯
靈活、易擴展的急智機制
大量的加強型補丁包
(3).Netfilter/iptables
的用途
:
創建
Internet
防火牆和基於狀態的包過濾
用
NAT
和假裝
(masquerading)
共享上網
用
NAT
實現透明代理
用修改
IP
包頭的
ToS
字段實現更復雜的功能
和
tc_iproute2
配合使用能夠實現
QoS
路由
(4).Netfilter/iptables
系統的優勢
:
它能夠配置有狀態的防火牆,可以指定並記住爲發送或接收信息包所創建的鏈接的狀態,有
4
種有效狀態
,
分別爲
ESTABLISHED
、
INVALID
、
NEW
和
RELATED
3.Netfilter/iptables
的內核空間和用戶空間
netfilter
是內核空間
(KernelSpace)
,是內核的一部分,由一些表組成,每一個表由若干鏈
(chains)
組成,而每條鏈中有一條或數條規則
(rule)
4.Netfilter/iptables
的工做過程
netfilter/iptables IP
信息包過濾系統是一種功能強大的工具,可用於添加、編輯和除去規則,這些規則是在作信息包過濾決定時,防火牆所遵循和組成的規則。這些規則存儲在專用的信息包過濾表中,而這些表集成在
Linux
內核中。在信息包過濾表中,規則被分組放在咱們所謂的鏈(
chain
)中。若是某個信息包與規則匹配,那麼使目標
ACCEPT
容許該信息包經過。還可使用目標
DROP
或
REJECT
來阻塞並殺死信息包。根據規則所處理的信息包的類型,能夠將規則分組在鏈中。處理入站信息包的規則被添加到
INPUT
鏈中。處理出站信息包的規則被添加到
OUTPUT
鏈中。處理正在轉發的信息包的規則被添加到
FORWARD
鏈中。創建規則並將鏈放在適當的位置以後,就能夠開始進行真正的信息包過濾工做了。這時內核空間從用戶空間接管工做。當信息包到達防火牆時,內核先檢查信息包的頭信息,尤爲是信息包的目的地。咱們將這個過程稱爲路由。
安裝
netfilter/iptables
系統
由於
netfilter/iptables
的
netfilter
組件是與內核
2.4.x
集成在一塊兒的,因此只須要下載並安裝
iptables
用戶空間工具。
三
.
安裝和配置
netfilter/iptables
系統:
1.
安裝
netfilter/iptables
硬件:要使用
netfilter/iptables
,須要有一個運行
Linux OS
並鏈接到因特網、
LAN
或
WAN
的系統。
軟件:帶有內核
2.4
或更高版本的任何版本的
Linux OS
。能夠從
[url]http://www.kernel.org[/url]
下載最新版本的內核。
安裝前的準備
在開始安裝
iptables
用戶空間工具以前,須要對系統作某些修改。首先,須要使用
make config
命令來配置內核的選項。在配置期間,必須經過將
CONFIG_NETFILTER
和
CONFIG_IP_NF_IPTABLES
選項設置爲
Y
來打開它們,由於這是使
netfilter/iptables
工做所必需的。
2.
創建規則和鏈
經過向防火牆提供有關對來自某個源、到某個目的地或具備特定協議類型的信息包要作些什麼的指令,規則控制信息包的過濾。經過使用
netfilter/iptables
系統提供的特殊命令
iptables
,創建這些規則,並將其添加到內核空間的特定信息包過濾表內的鏈中。關於添加/除去/編輯規則的命令的通常語法以下:
$ iptables [-t table] command [match] [target]
表(
table
)
[-t table]
選項容許使用標準表以外的任何表。表是包含僅處理特定類型信息包的規則和鏈的信息包過濾表。有三種可用的表選項:
filter
、
nat
和
mangle
。該選項不是必需的,若是未指定,則
filter
用做缺省表。
filter
表用於通常的信息包過濾,它包含
INPUT
、
OUTPUT
和
FORWARD
鏈。
nat
表用於要轉發的信息包,它包含
PREROUTING
、
OUTPUT
和
POSTROUTING
鏈。若是信息包及其頭內進行了任何更改,則使用
mangle
表。該表包含一些規則來標記用於高級路由的信息包,該表包含
PREROUTING
和
OUTPUT
鏈。
注:
PREROUTING
鏈由指定信息包到達防火牆就改變它們的規則所組成,而
POSTROUTING
鏈由指定正當信息包打算離開防火牆時改變它們的規則所組成。
命令(
command
)
上面這條命令中具備強制性的
command
部分是
iptables
命令的最重要部分。它告訴
iptables
命令要作什麼,例如,插入規則、將規則添加到鏈的末尾或刪除規則。如下是最經常使用的一些命令:
-A
或
--append
:該命令將一條規則附加到鏈的末尾。
示例:
$ iptables -A INPUT -s 205.168.0.1 -j ACCEPT
該示例命令將一條規則附加到
INPUT
鏈的末尾,肯定來自源地址
205.168.0.1
的信息包能夠
ACCEPT
。
-D
或
--delete
:經過用
-D
指定要匹配的規則或者指定規則在鏈中的位置編號,該命令從鏈中刪除該規則。下面的示例顯示了這兩種方法。
示例:
$ iptables -D INPUT --dport 80 -j DROP
$ iptables -D OUTPUT 3
第一條命令從
INPUT
鏈刪除規則,它指定
DROP
前往端口
80
的信息包。第二條命令只是從
OUTPUT
鏈刪除編號爲
3
的規則。
-P
或
--policy
:該命令設置鏈的缺省目標,即策略。全部與鏈中任何規則都不匹配的信息包都將被強制使用此鏈的策略。
示例:
$ iptables -P INPUT DROP
該命令將
INPUT
鏈的缺省目標指定爲
DROP
。這意味着,將丟棄全部與
INPUT
鏈中任何規則都不匹配的信息包。
-N
或
--new-chain
:用命令中所指定的名稱建立一個新鏈。
示例:
$ iptables -N allowed-chain
-F
或
--flush
:若是指定鏈名,該命令刪除鏈中的全部規則,若是未指定鏈名,該命令刪除全部鏈中的全部規則。此參數用於快速清除。
示例:
$ iptables -F FORWARD
$ iptables -F
-L
或
--list
:列出指定鏈中的全部規則。
示例:
$ iptables -L allowed-chain
匹配(
match
)
iptables
命令的可選
match
部分指定信息包與規則匹配所應具備的特徵(如源和目的地地址、協議等)。匹配分爲兩大類:通用匹配和特定於協議的匹配。這裏,我將研究可用於採用任何協議的信息包的通用匹配。下面是一些重要的且經常使用的通用匹配及其示例和說明:
-p
或
--protocol
:該通用協議匹配用於檢查某些特定協議。協議示例有
TCP
、
UDP
、
ICMP
、用逗號分隔的任何這三種協議的組合列表以及
ALL
(用於全部協議)。
ALL
是缺省匹配。可使用
!
符號,它表示不與該項匹配。
示例:
$ iptables -A INPUT -p TCP, UDP
$ iptables -A INPUT -p ! ICMP
在上述示例中,這兩條命令都執行同一任務
—
它們指定全部
TCP
和
UDP
信息包都將與該規則匹配。經過指定
! ICMP
,咱們打算容許全部其它協議(在這種狀況下是
TCP
和
UDP
),而將
ICMP
排除在外。
-s
或
--source
:該源匹配用於根據信息包的源
IP
地址來與它們匹配。該匹配還容許對某一範圍內的
IP
地址進行匹配,可使用
!
符號,表示不與該項匹配。缺省源匹配與全部
IP
地址匹配。
示例:
$ iptables -A OUTPUT -s 192.168.1.1
$ iptables -A OUTPUT -s 192.168.0.0/24
$ iptables -A OUTPUT -s ! 203.16.1.89
第二條命令指定該規則與全部來自
192.168.0.0
到
192.168.0.24
的
IP
地址範圍的信息包匹配。第三條命令指定該規則將與除來自源地址
203.16.1.89
外的任何信息包匹配。
-d
或
--destination
:該目的地匹配用於根據信息包的目的地
IP
地址來與它們匹配。該匹配還容許對某一範圍內
IP
地址進行匹配,可使用
!
符號,表示不與該項匹配。
示例:
$ iptables -A INPUT -d 192.168.1.1
$ iptables -A INPUT -d 192.168.0.0/24
$ iptables -A OUTPUT -d ! 203.16.1.89
目標(
target
)
咱們已經知道,目標是由規則指定的操做,對與那些規則匹配的信息包執行這些操做。除了容許用戶定義的目標以外,還有許多可用的目標選項。下面是經常使用的一些目標及其示例和說明:
ACCEPT
:當信息包與具備
ACCEPT
目標的規則徹底匹配時,會被接受(容許它前往目的地),而且它將中止遍歷鏈(雖然該信息包可能遍歷另外一個表中的其它鏈,而且有可能在那裏被丟棄)。該目標被指定爲
-j ACCEPT
。
DROP
:當信息包與具備
DROP
目標的規則徹底匹配時,會阻塞該信息包,而且不對它作進一步處理。該目標被指定爲
-j DROP
。
REJECT
:該目標的工做方式與
DROP
目標相同,但它比
DROP
好。和
DROP
不一樣,
REJECT
不會在服務器和客戶機上留下死套接字。另外,
REJECT
將錯誤消息發回給信息包的發送方。該目標被指定爲
-j REJECT
。
示例:
$ iptables -A FORWARD -p TCP --dport 22 -j REJECT
RETURN
:在規則中設置的
RETURN
目標讓與該規則匹配的信息包中止遍歷包含該規則的鏈。若是鏈是如
INPUT
之類的主鏈,則使用該鏈的缺省策略處理信息包。它被指定爲
-jump RETURN
。示例:
$ iptables -A FORWARD -d 203.16.1.89 -jump RETURN
還有許多用於創建高級規則的其它目標,如
LOG
、
REDIRECT
、
MARK
、
MIRROR
和
MASQUERADE
等。
保存規則
如今,您已經學習瞭如何創建基本的規則和鏈以及如何從信息包過濾表中添加或刪除它們。可是,您應該記住:用上述方法所創建的規則會被保存到內核中,當從新引導系統時,會丟失這些規則。因此,若是您將沒有錯誤的且有效的規則集添加到信息包過濾表,同時但願在從新引導以後再次使用這些規則,那麼必須將該規則集保存在文件中。可使用
iptables-save
命令來作到這一點:
$ iptables-save > iptables-script
如今,信息包過濾表中的全部規則都被保存在文件
iptables-script
中。不管什麼時候再次引導系統,均可以使用
iptables-restore
命令將規則集從該腳本文件恢復到信息包過濾表,以下所示:
$ iptables-restore iptables-script
若是您願意在每次引導系統時自動恢復該規則集,則能夠將上面指定的這條命令放到任何一個初始化
shell
腳本中。
netfilter/iptables
系統的優勢
netfilter/iptables
的最大優勢是它能夠配置有狀態的防火牆,這是
ipfwadm
和
ipchains
等之前的工具都沒法提供的一種重要功能。有狀態的防火牆可以指定並記住爲發送或接收信息包所創建的鏈接的狀態。防火牆能夠從信息包的鏈接跟蹤狀態得到該信息。在決定新的信息包過濾時,防火牆所使用的這些狀態信息能夠增長其效率和速度。這裏有四種有效狀態,名稱分別爲
ESTABLISHED
、
INVALID
、
NEW
和
RELATED
。
狀態
ESTABLISHED
指出該信息包屬於已創建的鏈接,該鏈接一直用於發送和接收信息包而且徹底有效。
INVALID
狀態指出該信息包與任何已知的流或鏈接都不相關聯,它可能包含錯誤的數據或頭。狀態
NEW
意味着該信息包已經或將啓動新的鏈接,或者它與還沒有用於發送和接收信息包的鏈接相關聯。最後,
RELATED
表示該信息包正在啓動新鏈接,以及它與已創建的鏈接相關聯。
netfilter/iptables
的另外一個重要優勢是,它使用戶能夠徹底控制防火牆配置和信息包過濾。您能夠定製本身的規則來知足您的特定需求,從而只容許您想要的網絡流量進入系統。
另外,
netfilter/iptables
是免費的,這對於那些想要節省費用的人來講十分理想,它能夠代替昂貴的防火牆解決方案。
最新的
Linux
內核
2.4.x
具備
netfilter/iptables
系統這種內置的
IP
信息包過濾工具,它使配置防火牆和信息包過濾變得便宜且方便。
netfilter/iptables
系統使其用戶能夠徹底控制防火牆配置和信息包過濾。它容許爲防火牆創建可定製化的規則來控制信息包過濾。它還容許配置有狀態的防火牆。
例
:WWW
服務器
198.168.80.251,FTP
服務器
198.168.80.252,E-mail
服務器
198.168.80.253
,包過濾防火牆的
eth0
與
Internet
相連
#touch /etc/rc.d/rilter-firewall
生成空的腳本,並添加可執行權限
#chmod u+x /etc/rc.d/filter-firewall
#echo "/etc/rc.d/filter-firewal">>/etc/rc.d/rc.local
使腳本能在系統啓動時自動執行
#vi /etc/rc.d/filter-firewall
#!/bin/bash
echo "Starting iptables rules"
在屏幕上顯示信息
echo "1">/proc/sys/net/ipv4/ip_forward
增長系統的
IP
轉發功能
IPT=/sbin/iptables
定義變量
WWW-SERVER=192.168.80.251
FTP-SERVER=192.168.80.252
EMAIL-SERVER=192.168.80.253
IP_RANGE="192.168.80.0/24"
$IPT -F
刷新全部的鏈的規則
$IPT -P FORWARD DROP