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