歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> linux防火牆基礎知識以及如何管理設置iptables規則

linux防火牆基礎知識以及如何管理設置iptables規則

日期:2017/3/3 16:00:39   编辑:關於Linux

一、linux防火牆基礎

防火牆分為硬件防火牆和軟件防火牆。

1.概述

linux 防火牆體系主要工作在網絡層,針對TCP/IP數據包實施過濾和限制,屬於典型的包過濾防火牆。

包過濾機制:netfilter

管理防火牆規則命令工具:iptables

netfilter 指linux內核中實現包過濾防火牆的內部結構,不依程序或文件的形式存在,屬於“內核態”的防火牆功能體系

iptables 指管理linux防火牆的命令工具,屬於“用戶態”的防火牆管理體系

2.iptables的規則表、鏈結構

iptables的作用在於為包過濾機制的實現提供規則,通過不同的規則作出不同的反應.

iptables管理4個表、以及他們的規則鏈

filter,用於路由網絡數據包。

INPUT 網絡數據包流向服務器

OUTPUT 網絡數據包從服務器流出

FORWARD 網絡數據包經服務器路由

nat,用於NAT表.NAT(Net Address Translation )是一種IP地址轉換方法。

PREROUTING 網絡數據包到達服務器時可以被修改

POSTROUTING 網絡數據包在即將從服務器發出時可以被修改

OUTPUT 網絡數據包流出服務器

mangle,用於修改網絡數據包的表,如TOS(Type Of Service),TTL(Time To Live),等

INPUT 網絡數據包流向服務器

OUTPUT 網絡數據包流出服務器

FORWARD 網絡數據包經由服務器轉發

PREROUTING 網絡數據包到達服務器時可以被修改

POSTROUTING 網絡數據包在即將從服務器發出時可以被修改

raw, 用於決定數據包是否被跟蹤機制處理

OUTPUT 網絡數據包流出服務器

PREROUTING 網絡數據包到達服務器時可以被修改

3.數據包過濾匹配流程

1>.規則表之間的優先順序

依次應用:raw、mangle、nat、filter表

2>.規則鏈之間的優先順序

入站數據流向

轉發數據流向

出站數據流向

3>.規則鏈內部各條防火牆規則之間的優先順序

二、管理和配置Iptables規則

1.iptables的基本語法格式

iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-] 目標動作或跳轉

本文URL地址:http://www.bianceng.cn/OS/Linux/201410/45496.htm

表名鏈名用於指定iptables命令所做對象,未指定默認filter表,命令選項指於管理iptables規則的方式(插入、刪除··);條件匹配指定對條件的符合而處理;目標動作或跳轉指定數據包的處理方式。

2.管理iptables規則

控制選項

-A 在鏈尾添加一條規則

 -D 從鏈中刪除一條規則

-I 在鏈中插入一條規則

-R 修改、替換某鏈的某規則

-L 列出某個鏈上的規則

-F 清空鏈,刪除鏈上的所有規則

-N 創建一個新鏈

-X 刪除某個規則鏈

-P 定義某個鏈的默認策略

-n 數字形式顯示結果

-v 查看規則列表詳細信息

-V 查看iptables命令工具版本

-h 查看命令幫助信息

-line-numbers 查看規則列表,顯示順序號

增加、插入、刪除和替換規則

相關規則定義的格式為:

iptables [-t表名] <-A | I | D | R> 鏈名 [規則編號] [-i | o 網卡名稱] [-p 協議類型] [-s 源IP地址 | 源子網] [--sport 源端口號] [-d目標IP地址 | 目標子網] [--dport目標端口號] <-j動作>

參數說明如下。

[-t表名]:定義默認策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認使用filter表。

-A:新增加一條規則,該規則將會增加到規則列表的最後一行,該參數不能使用規則編號。

-I:插入一條規則,原本該位置上的規則將會往後順序移動,如果沒有指定規則編號,則在第一條規則前插入。

-D:從規則列表中刪除一條規則,可以輸入完整規則,或直接指定規則編號加以刪除。

-R:替換某條規則,規則被替換並不會改變順序,必須要指定替換的規則編號。

<鏈名>:指定查看指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。

[規則編號]:規則編號用於插入、刪除和替換規則時用,編號是按照規則列表的順序排列,規則列表中第一條規則的編號為1。

[-i | o 網卡名稱]:i是指定數據包從哪塊網卡進入,o是指定數據包從哪塊網卡輸出。網卡名稱可以使用ppp0、eth0和eth1等。

[-p 協議類型]:可以指定規則應用的協議,包含TCP、UDP和ICMP等。

[-s 源IP地址 | 源子網]:源主機的IP地址或子網地址。

[--sport 源端口號]:數據包的IP的源端口號。

[-d目標IP地址 | 目標子網]:目標主機的IP地址或子網地址。

[--dport目標端口號]:數據包的IP的目標端口號。

<-j動作>:處理數據包的動作,各個動作的詳細說明可以參考表10-3。

1>.添加及插入規則

在Filter表的INPUT鏈的末尾添加一條防護牆規則

[root@s2 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

在Filter表的INPUT鏈中插入一條防護牆規則

[root@s2 ~]# iptables -I INPUT -p udp -j ACCEPT

在在Filter表的INPUT鏈中插入一條防護牆規則(為鏈中第二條規則)

[root@s2 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT

2>.查看規則表

查看Filter表的INPUT鏈中的所有規則,同時顯示順序號

[root@s2 ~]# iptables -L INPUT --line-numbers

Chain INPUT (policy ACCEPT)

num target prot opt source destination

1 ACCEPT udp -- anywhere anywhere

2 ACCEPT icmp -- anywhere anywhere

3 REJECT icmp -- anywhere anywhere

查看filter表各鏈中所有規則的詳細信息,以數字形式顯示地址和端口信息

[root@s2 ~]# iptables -vnL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

1189 154K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0

0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

2449 221K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0

3>.刪除、清空規則

刪除Filter表的INPUT鏈中的第2條規則

[root@s2 ~]# iptables -D INPUT 2

清空filter表、nat表、mangle表各鏈中的所有規則

[root@s2 ~]# iptables -F

[root@s2 ~]# iptables -t nat -F

[root@s2 ~]# iptables -t mangle -F

4>.設置規則鏈的默認策略

最基本的兩種策略為ACCEPT(允許)、DROP(丟棄)

將filter表中的FORWARD規則鏈的默認策略設為 DROP

[root@s2 ~]# iptables -t filter -P FORWARD DROP

將filter表中的 OUTPUT規則鏈的默認策略設為 ACCEPT

[root@s2 ~]# iptables -P OUTPUT ACCEPT

5>.獲得iptables相關選項用法的幫助信息

查看iptables命令中關於icmp協議的信息

[root@s2 ~]# iptables -p icmp -h

6>.新增、刪除自定義規則鏈

清空raw表中自定義的所有規則鏈

[root@s2 ~]# iptables -t raw -X

3.條件匹配

1>.通用條件匹配

一般直接使用,而不依賴於其他的條件匹配及其擴展。常見匹配方式如下:

協議匹配:用於檢查數據包的網絡協議

拒絕進入防火牆的所有icmp協議數據包

[root@s2 ~]# iptables -I INPUT -p icmp -j REJECT

允許防火牆轉發除icmp協議以外的所有數據包(“!”反取)

[root@s2 ~]# iptables -A FORWARD -p ! icmp -j ACCEPT

[root@s2 ~]# iptables -L FORWARD

Chain FORWARD (policy DROP)

本文URL地址:http://www.bianceng.cn/OS/Linux/201410/45496.htm

target prot opt source destination

ACCEPT !icmp -- anywhere anywhere

地址匹配:用於檢查數據包的IP地址、網絡地址。

拒絕轉發來自192.168.1.11主機的數據,允許來自192.168.0.0/24網段數據

[root@s2 ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT

[root@s2 ~]# iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

網絡接口匹配:用於檢查數據包從防火牆的哪個接口進入或離開

丟棄從外網接口(eth1)進入防火牆本機的源地址為私網地址的數據包

[root@s2 ~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

[root@s2 ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

[root@s2 ~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

封堵IP地址段!並2小時後解鎖

[root@s2 ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP

[root@s2 ~]# iptables -I FORWARD -s 10.20.30.0/24 -j DROP

[root@s2 ~]# at now +2 hours

at> iptables -D INPUT 1

at> iptables -D FORWARD 1

at> <EOT>

job 1 at 2010-04-25 17:43

2>.隱含條件匹配

通常需要以指定的協議匹配為前提,對應功能由iptables自動裝載內核。常見的隱含匹配方式如下:

端口匹配:用於檢查數據包的TCP或UDP端口號

僅允許系統管理員從202.13.0.0/16網段使用SSH方式遠程登錄防火牆主機

[root@s2 ~]# iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT

[root@s2 ~]# iptables -A INPUT -p tcp --dport 22 -j DROP

允許本機開放TCP端口的 20 ~ 1024 提供的應用服務

[root@s2 ~]# iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT

[root@s2 ~]# iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

允許轉發來自192.168.0.0/24局域網段的DNS解析請求數據包

[root@s2 ~]# iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT

[root@s2 ~]# iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

TCP標記匹配:用於檢查數據包的TCP標記位

拒絕從外網接口(eth1)直接訪問防火牆本機的數據包,但允許響應防火牆TCP請求的數據包進入

[root@s2 ~]# iptables -P INPUT DROP

[root@s2 ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN, RST, ACK SYN -j REJECT

[root@s2 ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags ! --syn -j ACCEPT

ICMP類型匹配:用於檢查ICMP數據包

禁止其他主機ping防火牆主機,但是允許防火牆能ping其他主機

[root@s2 ~]# iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP

[root@s2 ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT

[root@s2 ~]# iptables -A INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT

顯示條件匹配:需要額外的內核模塊提供,因此需要手工指定匹配方式

MAC地址匹配:主要檢查數據包的源MAC地址

[root@s2 ~]# iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP

多端口匹配:檢查數據包的源端口、目標端口時,用於匹配多個不連續的端口號。

[root@s2 ~]# iptables -A INPUT -p tcp -m multiport --dport 20.21.24.11.1250:1280 -j ACCEPT

多IP地址匹配:檢查數據包的源地址、目標地址時,用於匹配一段范圍內的IP地址

[root@s2 ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

狀態匹配:基於iptables的狀態跟蹤機制,檢查數據包的連接狀態

禁止轉發與正常TCP連接無關的非--syn請求數據包

[root@s2 ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

4.數據包控制

最常見處理方式;

ACCEPT:允許數據包通過

DROP:直接丟棄數據包,不給任何回應信息

REJECT:拒絕數據包通過,必要時發個響應信息

LOG: 記錄日志信息,將數據包遞給下一條規則

對於嘗試通過SSH方式登錄防火牆主機的訪問數據,記錄日志信息並禁止訪問

[root@s2 ~]# iptables -I INPUT -p tcp --dport 22 -j DROP

[root@s2 ~]# iptables -I INPUT -p tcp --dport 22 -j LOG

用戶自定義鏈:將數據傳給用戶自定義的鏈進行處理

自定義一個鏈MYLAN 轉發至192.168.1.0/24 網段數據包交給該鏈中的規則處理。

[root@s2 ~]# iptables -t filter -N MYLAN

[root@s2 ~]# iptables -A FORWARD -s 192.168.1.0/24 -j MYLAN

[root@s2 ~]# iptables -A FORWARD -d 192.168.1.0/24 -j MYLAN

[root@s2 ~]# iptables -A MYLAN -p icmp -j DROP

SNAT:(源地址轉換)修改數據包的源IP地址

DNAT:(目標地址轉換)修改數據包的目標IP地址

本文出自 “Hello_小壯” 博客,請務必保留此出處http://xiaozhuang.blog.51cto.com/4396589/874244

Copyright © Linux教程網 All Rights Reserved