iptables網絡安全服務詳細使用

iptables防火牆概念說明

開源的基於數據包過濾的網絡安全策略控制工具。web

centos6.9  --- 默認防火牆工具軟件iptablesshell

centos7    --- 默認防火牆工具軟件firewalld(zone)vim

iptables主要工做在OSI七層的2、3、四層,若是從新編譯內核,iptables也能夠支持7層控制(squid代理+iptables)。centos

iptables工做流程(規則匹配流程)

iptables是採用數據包過濾機制工做的,因此它會對請求的數據包的包頭數據進行分析,並根據咱們預先設定的規則進行匹配來決定是否能夠進入主機。安全

iptables工做流程小結

一、防火牆是一層層過濾的。實際是按照配置規則的順序從上到下,從前到後進行過濾的。服務器

二、若是匹配上了規則,即明確代表是阻止仍是經過,此時數據包就不在向下匹配新規則了。網絡

三、若是全部規則中沒有明確代表是阻止仍是經過這個數據包,也就是沒有匹配上規則,向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。架構

四、防火牆的默認規則是對應鏈的全部的規則執行完之後纔會執行的(最後執行的規則)。ssh

 iptables四表五鏈概念

表(tablessocket

鏈(chains

Filter

This is the default table (if no -t option is passed) 這是默認表

INPUT

for packets destined to local sockets

對於指定到本地套接字的包,即到達本地防火牆服務器的數據包

FORWARD

for packets being routed through the box

路由穿過的數據包,即通過本地防火牆服務器的數據包

OUTPUT

for locally-generated packets

本地建立的數據包

NAT

This table is consulted when a packet that creates a new connection is encountered 當遇到新建立的數據包鏈接時將參考這個表

PREROUTING

for altering packets as soon as they come in

一進來就對數據包進行改變

OUTPUT

or altering locally-generated packets before routing

本地建立的數據包在路由以前進行改變

POSTROUTING

for altering packets as they are about to go out

在數據包即將出去時改變數據包信息

Managle

This table is used for specialized packet alteration

這個表專門用於改變數據包

INPUT

for packets coming into the box itself

進入到設備自己的包

FORWARD

for altering packets being routed through the box

對路由後的數據包信息進行修改

PREROUTING

for altering incoming packets before routing

在路由以前更改傳入的包

OUTPUT

for altering locally-generated packets before routing

本地建立的數據包在路由以前進行改變

POSTROUTING

for altering packets as they are about to go out

在數據包即將離開時更改數據包信息

raw

此表用處較少,能夠忽略不計

 四表

filter    (做用:主機防火牆) 默認的表。*****
nat        (做用:端口或IP映射或共享上網)*****
mangle    (配置路由標記 ttl tos mark)
raw        (忽略)

iptables的幾個表以及每一個表對應鏈的做用

filter表(默認的表,做用:主機防火牆)
    INPUT:進入主機的數據包
    OUTPUT:本地建立的數據包
    FORWARD:路由穿過的數據包,即通過本地防火牆服務器的數據包

NAT表(做用:端口或IP映射或共享上網)
    PREROUTING:一進來就對數據包進行改變
    OUTPUT:本地建立的數據包在路由以前進行改變
    POSTROUTING:在數據包即將出去時改變數據包信息
    
mangle表(配置路由標記 ttl tos mark)
    INPUT:進入到設備自己的包
    FORWARD:對路由後的數據包信息進行修改
    PREROUTING:在路由以前更改傳入的包
    OUTPUT:本地建立的數據包在路由以前進行改變
    POSTROUTING:在數據包即將離開時更改數據包信息

filter表信息詳細介紹

filter

強調:主要和主機自身相關,真正負責主機防火牆功能的(過濾流入流出,流經主機的數據包)filter表示iptables默認使用的表,這個表定義了三個鏈(chains )

企業工做場景:主機防火牆

INPUT

負責過濾全部目標地址是本機地址的數據包

通俗來講:就是過濾進入主機的數據包

FORWARD

負責轉發流經主機的數據包。起轉發的做用,和NAT關係很大,後面會詳細介紹 LVS NAT 模式,net ipv4.ip_forward=l

OUTPUT

處理全部源地址是本機地址的數據包

通俗的講:就是處理從主機發出去的數據包

 NAT表信息詳細介紹

NAT

負責網絡地址轉換的,即來源與目的IP地址和port的轉換。

應用:和主機自己無關,通常用於局域網共享上網或者特殊的端□轉換服務相關。

工做場票:

1.   用於企業路由(zebra )或網關(iptables),共享上網(POSTROUTING)

2.   作內部外部IP地址一對一映射(dmz),硬件防火牆映射IP到內部服務器,ftp服務 (PREROUTING )

3.   WEB,單個端口的映射,直接映射80端口( PREROUTING )這個表走義了3個鏈,nat功能至關於網絡的acl控制。和網絡交換機acl相似。

OUTPUT

和主機放出去的數據包有關,改變主機發出數據包的目的地址。

PREROUTING

在數據包到達防火牆時,進行路甶判斷以前執行的規則,做用是改變數據包的目的地址、目的端□等就是收信時,根據規則重寫收件人的地址。

例如:把公網IP : XXX.XXX.XXX.XXX映射到局域網的XX.XX.XX.XX服務器上。

若是是web服務,能夠報80轉換爲局域網的服務器9000端□上

POSTROUTING

在數據包離開防火牆時進行路由判斷以後執行的規則,做用改變數據包的源地址,源端口等。

寫好發件人的地址,要讓家人回信時可以有地址可回。

例如。默認筆記本和虛擬機都是局域網地址,在出網的時候被路甶器將源地址改成了公網地址。

生產應用:局域網共享上網。

iptanles企業應用場景

一、主機防火牆(filter表的INPUT鏈)。

二、局域網共享上網(nat表的POSTROUTING鏈)。半個路由器,NAT功能。

三、端口及IP映射(nat表的PREROUTING鏈),硬防的NAT功能。

四、IP一對一映射。

iptables工做原理

iptables基本語法

-I(大寫i  插入) -A(追加) -R(替換) -D(刪除) -L(列表顯示)

-I將會把規則放在第一行,-A將會放在最後一行。

例子:

iptables –t filter  -A INPUT  -p  tcp  --dport  22  -j DROP    
iptables –t filter  -A INPUT  -p  tcp  --dport  3306  -j DROP
iptables –t filter  -I  INPUT  -p  tcp  --dport  80  -j DROP   
說明:前兩句就算是先執行,第三句也會是第一行

查看防火牆規則

-L         查看iptables控制策略列表信息

-n              查看iptables控制策略列表裏面的ip地址和端口信息,不翻譯,以數字表示

--line-number       查看iptables策略信息時,顯示每條規則序號信息

-v             查看iptables策略詳細信息(進出口)

[root@iptables ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination  

清除防火牆規則

-F             清除全部規則,不會處理默認的規則

-X             刪除用戶自定義的鏈

-Z             清除鏈的計數器(數據包計數器與數據包字節計數器)

其他參數

-A            向指定鏈添加相應規則,默認從規則號結尾進行添加(添加最後)

-I             向指定鏈中插入規則,默認插入到第一條規則之上

-p              指定訪問數據的協議類型(tcp、udp、icmp)

--dport      指定目標端口信息

--sport       指定源端口信息

-j               執行操做的動做(ACCEPT、DROP(丟棄)、REJECT(拒絕))

-D             刪除指定鏈裏面的規則策略

-i               指定數據流量進入接口信息(只能配置在INPUT鏈)

-o              指定數據流量流出接口信息(只能配置在OUTPUT鏈)

-s              指定數據流量源地址或網段信息

-d              指定數據流量目標地址或網段信息

!               表示控制策略取反

-m            表示增長擴展匹配功能

參數說明

禁止10.0.0.0網段連入:

iptables -t filter -A INPUT -i eth0 -s 10.0.0.0/24 -j DROP 
能夠不指定 -t filter 由於默認就是filter表

-i:流量進入的接口(從eth0進入)

-s:源地址

源地址不是10.0.0.150的單個IP的禁止鏈接:

iptables -t filter -A INPUT -i eth0 !-s 10.0.0.150 -j DROP

禁用icmp協議:

iptables -t filter -A INPUT -p icmp --icmp-type 8 -i eth0 -s 10.0.0.0/24 -j DROP

禁止訪問響應服務端口:

     以22端口爲例

iptables -A INPUT -p tcp --dport 22 -j DROP       在默認表中的INPUT鏈中追加策略:禁止22端口訪問

刪除某規則:

iptables -D INPUT -p tcp --dport 22 -j ACCEPT   --- 刪除指定規則
iptables -D INPUT 2     --- 根據規則行號,刪除相應的規則

禁止網段連入:

    例子:禁止192.168.17.0網段訪問10.0.0.7主機

iptables -A INPUT  -s 192.168.17.0/24 -d 10.0.0.7 -j DROP 

   例子:禁止某個192.168.17.0網段不能訪問服務器主機的22端口

iptables -A INPUT -s 192.168.17.0/24 -d 10.0.0.7 -p tcp --dport 22 -j DROP

匹配指定協議之外的全部協議:

    ! 表示取反

iptables -A INPUT ! –p tcp –s 10.0.0.0/24 -j DROP     centos6寫法
-p ! tcp      centos5寫法

設置連續多端口控制策略:

iptables -A INPUT -p tcp --dport 22:80 -j DROP

設置不連續多端口控制策略:

iptables -A INPUT -p tcp -m multiport  --dport 22,80 -j DROP 

-m      --- 表示增長擴展匹配功能  multiport   實現不連續多端口擴展匹配

對網絡數據傳輸進行限速:

iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT
iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -j DROP

--limit n/{second/minute/hour}:
解釋:指定時間內的請求速率」n」爲速率,後面爲時間分別爲:秒 分 時

--limit-burst [n]
解釋:在同一時間內容許經過的請求」n」爲數字,不指定默認爲5

企業級防火牆部署案例

兩種思想:對於默認策略爲容許狀態,防火牆規則就至關於黑名單;對於默認策略爲禁止狀態,防火牆規則就至關於白名單。

首先清空默認規則,而後設置遠程鏈接規則,防止本身被踢出,更改默認規則

iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   --- 防止被踢出門外
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

被指安全白名單策略

iptables -A INPUT -i lo -j ACCEPT     --- 讓本身能夠ping本身
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT    --- 容許哪些網站服務能夠訪問
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT     --- 容許架構內部服務進行訪問
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT       --- 容許一些合做企業的外網服務器進行訪問

這幾條就是最簡單的企業防火牆部署

防火牆配置永久生效方法

第一種方式

[root@iptables ~]# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@iptables ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Jan 17 16:12:23 2018
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [82:9632]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT 
-A INPUT -s 172.16.1.0/24 -j ACCEPT 
COMMIT
# Completed on Wed Jan 17 16:12:23 2018

第二種方式

iptables-save >/etc/sysconfig/iptables

狀態機制配置

# 容許關聯的狀態包經過(web服務不要使用FTP服務)

NEW

new說明這個包是咱們看到的第一個包,意思就是,這是conntrack模塊看到的某個鏈接的第一個包,它即將被匹配了。好比,咱們看到一個SYN包,是咱們所留意的鏈接的第一個包,就要匹配它。

表示新創建鏈接的數據包狀態

ESTABLISHED

ESTABLISHED已經注意到兩個方向上的數據傳輸,並且會繼續匹配這個鏈接的包。處於ESTABLISHED狀態的鏈接是很是容易理解的。只要發送並接到應答,鏈接就是ESTABLISHED的了。一個鏈接要從new變爲ESTABLISHED,只須要接到應答包便可,無論這個包是發往防火牆的,仍是要由防火牆轉發的。ICMP的錯誤和重定向信息包也被看做是ESTABLISHED,只要他們是咱們所發出的信息的應答。

表示新創建鏈接數據包發送以後,回覆響應的數據包狀態

RELATED

RELATED是個比較麻煩的狀態,當一個鏈接和某個已處於ESTABLISHED狀態的鏈接有關係時,就會被認爲是RELATED的了。換句話說,一個鏈接要想是RELATED的,首先要有一個ESTABLISHED的鏈接。這個ESTABLISHED鏈接再產生一個主鏈接以外的鏈接,這個新的鏈接就是RELATED的了,固然前提是conntarck模塊要能理解RELATED。

表示藉助已經創建的鏈路,發送新的鏈接數據包

INVALID

INVALID說明數據包不能被識別屬於哪一個鏈接或沒有任何狀態。有幾個緣由能夠產生這種狀況,好比,內存溢出,收到不知屬於哪一個鏈接的ICMP錯誤信息。通常地,咱們DROP這個狀態的任何東西,由於防火牆任務這是不安全的東西。

無效沒法識別的數據包

 

防火牆服務配置在FTP服務器上時,須要配置如下策略

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables NAT實踐過程

配置內網服務器利用iptables服務器外網網卡上網

route add default gw 172.16.1.200    --- 首先在內網服務器設置網關(網關爲擁有外網網卡的防火牆服務器內網地址)

在防火牆服務器開啓路由轉發功能

[root@iptables ~]# vim /etc/sysctl.conf
[root@iptables ~]# sysctl -p
net.ipv4.ip_forward = 1

實現內網訪問外網的NAT映射

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.200
-s 172.16.1.0/24            --- 指定將哪些內網網段進行映射轉換
-o eth0                     --- 指定在共享上網哪一個網卡接口上作NAT地址轉換
-j SNAT                     --- 將源地址進行轉換變動
-j DNAT                     --- 將目標地址進行轉換變動
--to-source ip地址           --- 將源地址映射爲何IP地址
--to-destination ip地址      --- 將目標地址映射爲何IP地址

iptables實現外網IP的端口映射到內網IP的端口

需求:將網關的IP和9000端口映射到內網服務器的22端口

端口映射 10.0.0.88:9000 -->172.16.1.8:22

實現命令:

iptables -t nat -A PREROUTING -d 10.0.0.88 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.8:22
-d 10.0.0.8目標地址
-j DNAT 目的地址改寫

效果:鏈接88服務器的9000端口,會自動跳轉鏈接到8服務器的22端口

[e:\~]$ ssh 10.0.0.88 9000

Connecting to 10.0.0.88:9000...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Wed Jan 17 09:48:56 2018 from 172.16.1.88
[root@web01 ~]#
相關文章
相關標籤/搜索