防火牆iptables

Iptables防火牆

1.1Iptables是什麼?

開源的基於數據包過濾的防火牆工具。

還可以做NAT映射:1)網關:局域網共享上網。2IP或端口映射。

Iptables主要工作在OSI七層的二三四層,若果重新編譯內核。

Iptables也可以支持7層(squid代理+iptables).

1.2Iptables企業應用場景

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

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

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

1.3Iptables工作流程

前面介紹已經提到,iptable是採用數據包過濾機制工作的,所以它會對請求的數據包的包頭數據進行分析,並根據我們預先設定的規則進行匹配來決定是否可以進入主機。

 


1.3.1iptables工作流程小結:

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

2、如果匹配上了規則,即明確表明是阻止還是通過,此時數據包就不在向下匹配新規則了。

3、如果所有規則中沒有明確表明是阻止還是通過這個數據包,也就是沒有匹配上規則,向下進行匹配,直到匹配默認規則得到明確的阻止還是通過。

4、防火牆的默認規則是對應鏈的所有的規則執行完以後纔會執行的(最後執行的規則)。

1.4 商用防火牆

華爲 深信服 思科 H3C Juniper天融信 飛塔 網康 綠盟科技 金盾

1.5 iptables(tables)和鏈(chains)

iptables==>4個表(tables)===>5個鏈=(chains)==>規則(policy)

4表

   filter(主機防火牆)

   nat(端口或IP映射或共享上網)

   mangle(配置路由標記 ttl tos mark)

   raw

表:

   filter:INPUT,OUTPUT,FORWARD

   NAT   :POSTROUTING,PREROUTING,OUTPUT

   mangle:INPUT,OUTPUT,FORWARD,POSTROUTING,PREROUTING

   raw

鏈:

   *INPUT:進入主機的數據包。主機防火牆(filter表的INPUT鏈)

   OUTPUT:流出主機的數據包。

   FORWARD:流經主機的數據包。

   *PREROUTING:進入服務器最先經過的鏈,NAT端口或IP映射。(nat表的PREROUTING鏈)

   *POSTROUTING:在流出服務器最後經過的鏈,NAT共享上網。局域網共享上網(nat表的POSTROUTING鏈)

   在默認情況下,Iptables術語後,相信大家對iptables的表和鏈有了初步的瞭解,默認情況下,Iptables根據功能和表的定義劃分包含四個表,filter,nat,mangle,raw其每個表又包含不同的操作鏈(chains)

   下面的表格展示了表和鏈的對應關係

表(tables)

                       鏈(chains)


INPUT

FORWARD

OUTPUT

PREROUTING

POSTROUTING

Filter

  有

   有

  有

   無

   無

Nat

  無

   無

  有

   有

   有

Mangle

  有

   有

  有

   有

   有

 

Filter表:

Filter表是iptables默認使用的表,強調:主要和主機自身有關,真正負責主機防火牆功能的(過濾流入出主機的數據包)。這個表定義了三個鏈(chains);企業工作場景:主機訪火牆功能。


INPUT

負責過濾所有目標是本機地址的數據包,通俗的講,就是過濾進入主機的數據包


FORWARD

負責轉發流經主機的數據包,起轉發作用,和Nat關係很大,後面會詳細介紹,LVS NAT模式 net.ipv4_forward=0


OUTPUT

處理所有源地址是本機地址的數據包,通俗的講,就是處理從主機發出去的數據包。

1.6 iptables表和鏈

spacer.gif 

實戰:

命令:          表上配置           鏈上      規則

Iptables          [-t   table]  -A     chain      rule-specification

Iptables          [-t   table]  -I      chain      rule-specification

Iptables          [-t   table]  -D     chain      rulenum

Iptables          [-t   table]  -D     chain      rule-specification

註釋:

-t  指定表

-A 把規則添加到指定鏈上,默認插入到最後一行

-I  插入規則到第一行

-D 刪除鏈上的規則

1.7啓動iptables

1.7.1啓動iptables

[root@web01 ~]# /etc/init.d/iptables start

iptables: Applying firewall rules:                         [  OK  ]

1.7.2查看啓動狀態命令:

iptables -nL --line-number

-n            #<==以數字的形式顯示規則

-L            #<==列表鏈裏的所有規則

--line-number #<==打印規則序號

-t 指定表(default: `filter')

[root@web01 ~]# iptables -nL

Chain INPUT (policy DROP)

target     prot opt source               destination         

ACCEPT     tcp  --  10.0.0.0/24          0.0.0.0/0           tcp dpt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 80,443

ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0           

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

 

Chain FORWARD (policy DROP)

target     prot opt source               destination         

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

 

-iptables -D INPUT 4 #<==4是規則號。

 

-F #<==清除一個鏈或所有鏈上的規則

-Z #<==鏈的記數器清零

-X #<==刪除用戶自定義的鏈。

 

實踐:

[root@web02 ~]# iptables -Z

[root@web02 ~]# iptables -X

[root@web02 ~]# iptables -F

[root@web02 ~]# iptables -nL

1.7.3 22端口的方法

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

規則註釋:

-p       #<==指定過濾的協議-p(tcp,udp,icmp,all)

--dport  #<==指定目標端口(用戶請求的端口)。

-j       #<==對規則的具體處理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)

--sport #<==指定源端口。

1.7.4 禁止10.0.0.253訪問

[root@web01 ~]# iptables -I INPUT -p tcp -s 10.0.0.253 -i eth0 -j DROP

[root@web02 ~]# iptables -A INPUT -p tcp ! -s 10.0.0.2 -i eth0 -j DROP

-s       #<==指定源地址。 ! 取反。

-d       #<==指定目的地址。

-i       #<==進入的網絡接口(eth0,eth1)。

-o       #<==出去的網絡接口(eth0,eth1)。

1.7.5匹配端口範圍:

iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP

iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT

iptables -I INPUT -p tcp --dport 18:80 -j DROP  #<==最佳

1.7.3匹配ICMP類型

iptables -A INPUT -p icmp --icmp-type 8

例:iptables -A INPUT -p icmp --icmp-type 8 -j DROP

iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT

 

 

1.7.4匹配網絡狀態

-m state --state

    NEW:已經或將啓動新的連接

    ESTABLISHED:已建立的連接

    RELATED:正在啓動的新連接

    INVALID:非法或無法識別的

1.7.5允許關聯的狀態包 ftp協議

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

 

 

1.7.6限制指定時間包的允許通過數量及併發數

-m limit --limit n/{second/minute/hour}:

指定時間內的請求速率"n"爲速率,後面爲時間分別爲:秒、分、時

iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min -j DROP

 

--limit-burst [n]

1.7.7在同一時間內允許通過的請求"n"爲數字,不指定默認爲5

iptables -I INPUT -s 10.0.0.0/24 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT

http://blog.csdn.net/gnicky/article/details/51334793

部署一個最安全的企業級防火牆(案例

兩種思想:針對默認規則而言。

  逛公園:

   1、默認規則默認是允許的狀態。

  看電影:

   2、默認規則默認是不允許的狀態。更安全。

 

看電影的思想更安全。

 

實戰部署:

[root@web02 ~]# iptables -F

[root@web02 ~]# iptables -X

[root@web02 ~]# iptables -Z

[root@web02 ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT

 

 

[root@web02 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

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

[root@web02 ~]# iptables -P FORWARD DROP

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

[root@web02 ~]# iptables -nL

Chain INPUT (policy DROP)

target     prot opt source               destination         

ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

 

Chain FORWARD (policy DROP)

target     prot opt source               destination

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

 

 

[root@web02 ~]# iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT

[root@web02 ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT

[root@web02 ~]# iptables -A INPUT -i lo -j ACCEPT

[root@web02 ~]# iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

 

命令都在內存中生效。

1.7.8掃描測試:使用雲主機部署,用筆記本虛擬機掃描

[root@web02 ~]# nmap www.baidu.com

Starting Nmap 5.51 ( http://nmap.org ) at 2017-04-04 12:23 CST

Nmap scan report for www.baidu.com (119.75.217.109)

Host is up (0.020s latency).

Other addresses for www.baidu.com (not scanned): 119.75.218.70

Not shown: 998 filtered ports

PORT    STATE SERVICE

80/tcp  open  http

443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 13.60 seconds

 

 

 

 

永久生效:

[root@web02 ~]# /etc/init.d/iptables save

iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

[root@web02 ~]# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Tue Apr  4 12:24:43 2017

*filter

:INPUT DROP [0:0]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [159:10664]

-A INPUT -s 10.0.0.0/24 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

-A INPUT -s 172.16.1.0/24 -j ACCEPT

-A INPUT -i lo -j ACCEPT

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

COMMIT

# Completed on Tue Apr  4 12:24:43 2017

1.7.9生產維護iptables

1、日常改/etc/sysconfig/iptables配置

-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

 

生效:

1/etc/init.d/iptables reload

2iptables -I INPUT 3 -p tcp -m tcp --dport 3306 -j ACCEPT

  

2、臨時封Ip-I

iptables -I INPUT -s 203.71.78.10 -j DROP

 

 

3、常用的規則放在前面生效

[root@web01 ~]# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Mon Apr 17 12:03:54 2017

*filter

:INPUT DROP [0:0]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [371:25376]

-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

-A INPUT -s 172.16.1.0/24 -j ACCEPT

-A INPUT -s 10.0.0.0/24 -j ACCEPT

-A INPUT -i lo -j ACCEPT

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

COMMIT

# Completed on Mon Apr 17 12:03:54 2017

 

 

寫成腳本:

#!/bin/bash

#this is a server firewall created by  oldboy  17:03 2006-7-26

#updated by oldboy on 10:30 2009-6-23

#http://blog.etiantian.org

#qq:49000448

#define variable PATH

IPT=/sbin/iptables

 

#Remove any existing rules

$IPT -F

$IPT -X

$IPT -Z

 

#setting default firewall policy

$IPT --policy OUTPUT ACCEPT

$IPT --policy FORWARD DROP

$IPT -P INPUT DROP

 

#setting for loopback interface

$IPT -A INPUT -i lo -j ACCEPT

 

#setting access rules

#one,ip access rules,allow all the ips of

$IPT -A INPUT -s 202.81.17.0/24 -p all -j ACCEPT

$IPT -A INPUT -s 202.81.18.0/24 -p all -j ACCEPT

$IPT -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT

$IPT -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT

$IPT -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT

 

#icmp

$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

 

#others RELATED

$IPT -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

 

/etc/init.d/iptables save

#iptables-save >/etc/sysconfig/iptables

生產案例:

1、局域網共享上網項目案例

iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.7

 

2、端口映射 10.0.0.7:9000 -->172.16.1.51:22

實現命令:

iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.51:22

 

3IP一對一映射(DMZ)

ip addr add 10.0.0.81/24 dev eth0 label eth0:0

iptables  -t nat -I POSTROUTING -s 10.0.0.0/255.255.240.0 -d 10.0.0.81 -j SNAT --to-source 10.0.0.2

 

 

iptables  -t nat -I PREROUTING -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51

iptables  -t nat -I POSTROUTING -s 172.16.1.51 -o eth0 -j SNAT --to-source 10.0.0.81

 

檢查:

ping 10.0.0.81

tcpdump|grep -i icmp(兩臺機器上分別監測)

telnet 10.0.0.81 873(51上提前配好)

1.7.9映射多個外網IP上網

iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16

 

iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.11

iptables -t nat -A POSTROUTING -s 10.0.2.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.12


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