Linux 防火牆iptables 學習筆記(五)linux+iptables構築防火牆實例

本文旨在用爲公司做防火牆的實例,讓大家對Linux+iptables做防火牆的安裝和配置有一個大致的瞭解,希望能起到拋磚引玉的作用。

先了解一下公司的環境,公司利用2MADSL專線上網,電信分配公用IP 爲218.4.62.12/29,網關爲218.4.62.13,公司有電腦五十多臺,使用DHCP,IP 是192.168.2.XXX,DHCPServer 建在iptables Server 上;另公司有一電腦培訓中心,使用指定固定IP,IP爲192.168.20.XXX,爲了更加快速的瀏覽網頁,我們架了一臺Squid Server,所有電腦通過SquidServer 瀏覽網頁,公司還另有一臺WEB Server+MailServer+FtpServer。其IP 爲218.4.62.18。以上電腦和服務器要求全架在防火牆內。我們規化如下:Iptables Server 上有三塊網卡,eth0上加有二個IP,218.4.62.14和218.4.62.18。其中218.4.62.14爲共享上網,218.4.62.18爲WEBServer 專用,Eth1 的IP爲192..168.2.9;爲了使培訓中心PC與公司PC之間互不訪問,所以直接從Iptables Server接到Switch-B,eth2接至Switch-A,連接培訓中心PC和SquidServer, Web Server。

網絡規化好了後,就開始裝服務器了,IptablesServer 用的系統爲Redhat Linux V7.3。在裝服務器時要注意選上防火牆的安裝包。

 

IPTABLES基礎

Iptables語法:

Iptables [-t TABLE] ACTION [PATTERN] [-j TARGET]

TABLE:

有filter,nat,mangle;若無指定,預設爲filtertable.

ACTION(對Chains 執行的動作):

ACTION 說明

-L Chain 顯示Chain 中的所有規則

-A Chain 對Chain 新增一條規則

-D Chain 刪除Chain 中的一條規則

-I Chain 在Chain 中插入一條規則

-R Chain 替換Chain 中的某一條規則

-P Chain 對Chain 設定的預設的Policy

-F Chain 清除Chain 中的所有規則

-N Chain 自訂一個Chain

-X 清除所有的自訂Chain

CHAINS:

Iptables 有五條默認的Chains(規則鏈),如下表:

Chains 發生的時機

PREROUTING 數據包進入本機後,進入RouteTable 前

INPUT 數據包通過Route Table 後,目地爲本機

OUTPUT 由本機發出,進入Route Table 前

FORWARD 通過Route Table 後,目地不是本機時

POSTROUTING 通過RouteTable 後,送到網卡前

PATTERN(設定條件部份):

參數內容說明

-p Protocol 通訊協議,如tcp,udp,icmp,all等。。。

-s Address 指定的SourceAddress 爲Address

-d Address 指定的DestinationAddress 爲Address

-I Interface 指定數據包進入的網卡

-o Interface 指定數據包輸出的網卡

-m Match 指定高級選項,如mac,state,multiport 等。。。

TARGET(常用的動作):

TARGET 說明

ACCEPT 讓這個數據包通過

DROP 丟棄數據包

RETURN 不作對比直接返回

QUEUE 傳給User-Space 的應用軟件處理這個數據包

SNAT nat 專用:轉譯來源地址

DNAT nat 專用:轉譯目地地址

MASQUERADE nat 專用:轉譯來源地址成爲NIC的MAC

REDIRECT nat 專用:轉送到本機的某個PORT

用/etc/rc.d/init.d/iptablessave 可在/etc/sysconfig/中產生一iptables文件,大家可以看到,它有三個*號開始的行,其每一個以*號開始的行對應一個table,以COMMIT表示此table的結束。可將要定的規則加入到對應的table 中,如下:

[root@jiaoyuang init.d]# ./iptables saveSaving currentrules to
/etc/sysconfig/iptables: [ OK ]
[root@jiaoyuang init.d]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.2.4 on Sat Sep 2816:51:22 2002
*mangle
:PREROUTING ACCEPT [61522:8074850]
:OUTPUT ACCEPT [1079:79301]
COMMIT
# Completed on Sat Sep 28 16:51:22 2002
# Generated by iptables-save v1.2.4 on Sat Sep 2816:51:22 2002
*nat
:PREROUTING ACCEPT [31850:5091703]
:POSTROUTING ACCEPT [20:1240]
:OUTPUT ACCEPT [12:776]
COMMIT
# Completed on Sat Sep 28 16:51:22 2002
# Generated by iptables-save v1.2.4 on Sat Sep 2816:51:22 2002
*filter
:INPUT ACCEPT [61444:8070296]
:FORWARD ACCEPT [34:1984]
:OUTPUT ACCEPT [1079:79301]
COMMIT

安裝並啓動IPTABLES

在安裝RedHat Linux V7.3 後,iptables就已經被安裝了,但默認啓動的是ipchains。你在安裝時所定義的一些規則也在/etc/sysconfig/ipchains 中被定義。我們需要將其停止,才能啓動iptables(注意:雖然不停止ipchains也可以啓動iptables,但這時iptables並沒有真正的起作用。Ipchains和iptables是兩個防火牆,你只能選擇一個)。

service ipchains stop (停止ipchains)
chkconfig --level 2345 ipchains off (使ipchains系統啓動時不自動啓動)
chkconfig --level 2345 iptables on (使iptables在系統啓動時自動啓動)
vi /etc/rc.d/rc.local (編輯rc.local,將下面四行加到最後)
ifconfig eth0 add 218.4.62.18 netmask 255.255.255.248
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
echo “1” > /proc/sys/net/ipv4/ip_forward

(第一行是在eth0 上再加一個IP:218.4.62.18,因在安裝時只能設一個IP:

218.4.62.14。Ip_conntrack_ftp和ip_nat_ftp爲iptables運得必須的兩個模塊;最後一行爲使開啓服務器IP 轉發功能。)

(如果你將iptables 的模塊加到了內核中,以上第二,三行可省略。)

配置DHCP Server,以便讓公司PC自動獲得IP和網關,網關爲192.168.2.9。具體的方法請參見相關資料,本文不作詳述。

reboot

重新啓動服務器後,Iptables 就已經開始運行了。

配置IPTABLES

對iptables 有了一個基本的瞭解後,我們就可以來配置我們的服務器了。首先要發佈我們的WEB Server,將以下二行加入/etc/sysconfig/iptables中的nattable 內:

-A PREROUTING -d 218.4.62.18 -j DNAT --to-destination192.168.20.254
-A POSTROUTING -s 192.168.2.254 -j SNAT --to-source218.4.62.18

第一行爲將至服務器的所有目地地址爲218.4.62.18的包都NAT爲192.168.2.254,

第二行爲將至服務器的所有源地址爲192.168.2.254的包爲NAT到218.4.62.18。請把WEBServer 的網關設爲192.168.20.9。

下面我們將所有從服務器共享出去的包都SNAT爲218.4.62.14,就可完成共享上網的功能了:

-A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-source218.4.62.14

將下面的規則加入到/etc/sysconfig/iptables 中的filtertables 內:

-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit6/min --limit-burst 2 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT--reject-with icmp-port-unreachable

以上兩行是爲了防止Dos 攻擊做的一個簡單的處理,大家對於各種攻擊可做出相應的處理。

-A INPUT –i eth0 –m state –state ESTABLISHED,RELATED –jACCEPT-A INPUT –i eth0 –j DROP

以上兩行是做了一個INPUT 狀態防火牆的處理,其主要作用爲防止外部的連接和攻擊,因其接受ESTABLISHED,RELATED 狀態(一個包分爲NEW,ESTABLISHED,RELATED,INVALID四種狀態)的包,故又不妨礙從本機出去的連接。

由於並不是所有的電腦都可以上網,所以還要對共享上網的電腦做一個限制:

IP 限制:

-A FORWARD –s 192.168.2.0/29 –p udp –m multiport –port 53–j ACCEPT
-A FORWARD –s 192.168.2.0/29 –p tcp –m multiport –port3128,110,25 –j ACCEPT
-A FORWARD –s 192.168.20.253 –j ACCEPT

充許192.168.2.0~192.168.2.7 和192.168.20.253(squidserver)的電腦可上網和發郵件。3128 是squidserver 的proxy port。我們用它去共享上網,110爲pop3,25爲smtp。Udp的53爲DNS所要的port。不過由於使用的是DHCP,可能每次得到的IP都不一樣,所以我們就要用下面一種MAC 限制的方法了。

MAC 限制:

-A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –mmultiport –port 53 –j ACCEPT
-A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –mmultiport –port 3128,110,25 –j ACCEPT

如上就可通過網卡來控制上網了,但現在電腦高手多多,改一個MAC的地址好像也不是什麼難事了,怎麼辦呢?那就用我們的第三種方法吧。

MAC+IP 限制:

更改/etc/dhcpd.conf,如果MAC與IP綁定:

subnet 192.168.2.0
netmask 255.255.255.0{
range 192.168.2.30 192.168.2.230;
option broadcast-address 192.168.2.255;
option routers 192.168.2.9;
option domain-name-servers 212.132.16.163;
host meeting-room {
hardware ethernet 00:50:ba:c8:4b:3a;
fixed-address 192.168.2.35;
}}

我們的Iptables 改爲:

-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX–p udp –m multiport –port 53 –j ACCEPT
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX–p tcp –m multiport –port 3128,110,25 –j ACCEPT

這樣做之後,高手也無能爲力了,不過公司有位MM是兄臺的GF,上班的時候想和她聊聊天,培養培養感情;怎麼辦呢?我們知道QQ 用的是udp的4000端口,如佔用則4002,4003。。。那麼就如下了:

-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX–p udp –m multiport –port 53,4000,4001,4002,4003,4004,4005 –j ACCEPT
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX–p tcp –m multiport –port 3128,110,25 –j ACCEPT

最後加一句:

-A FORWARD –s 192.168.0.0/16 –j DROP

由於前面應該開的都開了,所以最後全部禁止。

總結

世界上沒有絕對安全的防火牆,安全永遠是相對的。配置iptables的思路是先ACCEPT再DROP。共享上網的辦法還有一個就是用iptables server 的Owner,但由於linux沒有像win2k那樣的驗證模式,在驗證owner 時有些困難。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章