1. 程式人生 > >Linux防火牆iptables學習筆記(五)linux+iptables構築防火牆例項

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

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

系統環境與網路規化

先了解一下公司的環境,公司利用2M ADSL專線上網,電信分配公用IP為218.4.62.12/29,閘道器為218.4.62.13,公司有電腦五十多臺,使用DHCP,IP是192.168.2.XXX,DHCP Server建在iptablesServer上;另公司有一電腦培訓中心,使用指定固定IP,IP為192.168.20.XXX,為了更加快速的瀏覽網頁,我們架了一臺SquidServer,所有電腦通過Squid Server瀏覽網頁,公司還另有一臺WEB Server+Mail Server+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之間互不訪問,所以直接從IptablesServer接到Switch-B,eth2接至Switch-A,連線培訓中心PC和Squid Server, Web Server。

網路規化好了後,就開始裝伺服器了,Iptables Server 用的系統為Redhat Linux V7.3。在裝伺服器時要注意選上防火牆的安裝包。

IPTABLES基礎

Iptables語法:

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

TABLE:

有filter,nat,mangle;若無指定,預設為filter table.

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 資料包進入本機後,進入Route Table前

INPUT 資料包通過Route Table後,目地為本機

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

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

POSTROUTING 通過Route Table後,送到網絡卡前

PATTERN(設定條件部份):

引數 內容 說明

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

-s Address 指定的Source Address為Address

-d Address 指定的Destination Address為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中,如下:

[[email protected]]# ./iptables saveSaving current rules to/etc/sysconfig/iptables: [ OK ][[email protected] init.d]# cat/etc/sysconfig/iptables

# Generated by iptables-save v1.2.4 on Sat Sep 28 16: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 28 16: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 28 16:51:22 2002

*filter

:INPUT ACCEPT [61444:8070296]

:FORWARD ACCEPT [34:1984]

:OUTPUT ACCEPT [1079:79301]

COMMIT

安裝並啟動IPTABLES

在安裝RedHatLinuxV7.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中的nat table內:

-A PREROUTING -d 218.4.62.18 -j DNAT --to-destination 192.168.20.254

-A POSTROUTING -s 192.168.2.254 -j SNAT --to-source 218.4.62.18

第一行為將至伺服器的所有目地地址為218.4.62.18的包都NAT為192.168.2.254,第二行為將至伺服器的所有源地址為192.168.2.254的包為NAT到218.4.62.18。請把WEB Server 的閘道器設為192.168.20.9。

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

-A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-source 218.4.62.14

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

-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/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 –j ACCEPT-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 –port 3128,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是squid server的proxyport。我們用它去共享上網,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 –m multiport –port 53 –j ACCEPT

-A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –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改為:0

-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。共享上網的辦法還有一個就是用iptablesserver的Owner,但由於linux沒有像win2k那樣的驗證模式,在驗證owner時有些困難。本人正在測試,但目前還沒有比較好的解決辦法,哪位兄弟搞定的話請Mail小弟,小弟將不勝感激。值得注意的是在做NAT時,客戶端的閘道器一定要是iptagles的IP。

相關推薦

Linux防火牆iptables學習筆記linux+iptables構築防火牆例項

本文旨在用為公司做防火牆的例項,讓大家對Linux+iptables做防火牆的安裝和配置有一個大致的瞭解,希望能起到拋磚引玉的作用。 系統環境與網路規化 先了解一下公司的環境,公司利用2M ADSL專線上網,電信分配公用IP為218.4.62.12/29,閘道器為218.4.62.13,公司有電腦

鳥哥的Linux私房菜學習筆記Linux 檔案、目錄與磁碟格式 —— Linux檔案與目錄管理

4.檔案與目錄的預設許可權與隱藏許可權1) 檔案預設許可權:umaskumask 就是檢視或指定 『目前使用者在建立檔案或目錄時候的許可權預設值』[[email protected] ~]# umask[[email protected] ~]# umask -S查閱的方式有兩種,一種可以

Linux入門學習筆記--Shell指令碼編寫

Shell指令碼的HelloWorld:     cd /自己的路徑下     vi helloworld.sh 進入之後,預設是命令狀態,按i進入編輯模式     內容:         #! /bin/bash         echo "Hello World!"   

Linux視訊學習筆記--許可權管理命令、檔案搜尋命令、幫助命令、使用者管理命令、壓縮解壓命令

宣告:本系列文章是博主根據 “兄弟連新版Linux視訊教程”做的筆記和視訊截圖,只為學習和教學使用,不適用任何商業用途。 PS:文章基於Linux版本CentOS6.9,如果對Linux感興趣,建議去看《細說Linux》,沈超老師和李明老師的教學風格我很喜歡:) 4.

Linux學習筆記

1.拷貝和移動檔案補充 序號 命令 對應英文 作用 01 tree [目錄名] tree 以樹狀圖列出檔案目錄結構 02 cp 原始檔 目

Linux 學習筆記 檔案許可權

1. 粗略的結論 home is writable, but not outside 使用者在自己的主目錄是有寫許可權的,其它的地方則沒有 eg: 當不在使用者主目錄建立檔案的時候會報錯: 非要

數據結構學習筆記 樹的創建和遍歷

一個 後序遍歷 for -1 堆棧 nor ext cnblogs 復制 創建(先序創建和根據先序和中序進行創建)和遍歷(先序遍歷、中序遍歷、後序遍歷、非遞歸堆棧遍歷、層次遍歷):    package tree; public class XianCreateTree

最優化學習筆記牛頓法及擬牛頓法

div size -a article fonts alt water src jsb 最優化學習筆記(五)牛頓法及擬牛頓法

javascript學習筆記:異常捕獲和事件處理

log 類型 按鈕 輸入 button lan yellow logs 代碼 異常捕獲 Try{   發生異常的代碼塊 }catch(err){   異常信息處理 } 1 <!DOCTYPE html> 2 <html> 3 <head

Spring 學習筆記—— Bean之間的關系、作用域、自動裝配

mar byname pps etc 有時 sysman 對象實例 構造 encoding 繼承   Spring提供了配置信息的繼承機制,可以通過為<bean>元素指定parent值重用已有的<bean>元素的配置信息。 <?xml

Go語言學習筆記文件操作

see 大小 unix rdo 筆記 不能 hid code lag 加 Golang學習 QQ群共同學習進步成家立業工作 ^-^ 群號:96933959 文件讀取 os.File 封裝了文件相關操作 type File File代表一個打開的文件對象。

Unity3D之Mecanim動畫系統學習筆記:Animator Controller

浮點 key 發現 菜單 融合 stat mon 好的 project 簡介 Animator Controller在Unity中是作為一種單獨的配置文件存在的文件類型,其後綴為controller,Animator Controller包含了以下幾種功能: 可以對

Python學習筆記OOP

默認 tro acl 引入 支持 不同 post set 成像 模塊 使用模塊import 模塊名。有的僅僅導入了某個模塊的一個類或者函數,使用from 模塊名 import 函數或類名實現。為了避免模塊名沖突。Python引入了按文件夾來組織模塊的方

如鵬網學習筆記MySql基礎

修改列 記錄 tex 令行 金額 升序 查詢 自動遞增 col MySQL基礎 一、數據庫概念  1,網友裝備信息、論壇帖子信息、QQ好友關系信息、學籍管理系統中的學生信息等都要“持久化”的保存到一個地方,    如果通過IO寫到文件中,那麽會非常麻煩,而且不利於多人共享數

docker學習筆記——Docker常用命令總結

docker學習筆記 docker常用命令總結 1. 開啟/停止/重啟container(start/stop/restart)容器可以通過run新建一個來運行,也可以重新start已經停止的container,但start不能夠再指定容器啟動時運行的指令,因為docker只能有一個前臺進程。容器st

jQuery學習筆記

加載 complete += ron 序列 border () ajaxstart 單選 jQuery與Ajax的應用 Ajax的優勢和不足 Ajax的優勢 a)不需要插件支持 b)優秀的用戶體驗 c)提高Web程序的性能 d)減輕服務器和寬帶的負擔 Ajax的不

流暢的python和cookbook學習筆記

pytho col () 學習 util 學習筆記 取出 minute python 1.隨機選擇   python中生成隨機數使用random模塊。   1.從序列中隨機挑選元素,使用random.choice() >>> import random

Oracle 學習筆記

采樣 flash 全表掃描 group space 表空間 manage 授權 個數 --表空間,auto: 自動管理, manual: 手動管理 create tablespace tsp1 datafile ‘D:\ORACLE\ORADATA\O10\tsp1.

Hibernate學習筆記 --- 創建基於中間關聯表的多對多映射關系

mys 兩個 override pac tid 一對多 main ber different 多對多映射是在實際數據庫表關系之間比較常見的一種,仍然以電影為例,一部電影可以有多個演員,一個演員也可以參演多部電影,電影表和演員表之間就是“多對多”的關系 針對多對多的映射關系,

Java8學習筆記--Stream API詳解[轉]

有效 編程效率 實時處理 phaser 綜合 files -- bin 並發模式 為什麽要使用StreamStream 作為 Java 8 的一大亮點,它與 java.io 包裏的 InputStream 和 OutputStream 是完全不同的概念。它也不同於 StAX