Iptables 網絡安全

第1章 Iptables 網絡安全

1.1 Iptables 防火牆介紹

Netfilter/Iptables(如下簡稱Iptables)是unix/linux自帶的一款優秀且開放源代碼的徹底自由的基於包過濾的防火牆工具linux

Netfilter一個系統的內核模塊,經過netfilter內核控制硬件設備nginx

Iptables至關因而一個控制軟件vim

iptables+zebra+squid == 一臺硬件防火牆centos

iptables主要工做在OSI七層的2、3、四層 實現應用層訪問控制:nginx WAF實現應用訪問控制安全

1.1.1 防火牆的基本工做原理

防火牆經過審查通過的每個數據包, 判斷它是否有相匹配的過濾規則, 根據規則的前後順序進行一一比較, 直到知足其中的一條規則爲止, 而後依據控制機制作出相應的動做. 若是都不知足, 則將數據包丟棄, 從而保護網絡的安全。服務器

1.1.2 iptables名詞術語說明

容器:用來包裝或裝載物品的貯存器(如箱、罐、壇)或者成形或柔軟不成形的包覆材料cookie

第一個容器:iptables(表)網絡

第二個容器:表(鏈)併發

第三個容器:鏈(規則)tcp

1.1.3 iptable工做流程(規則)

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

2. 若是匹配上規則,即明確表示是阻止仍是經過,數據包就再也不向下匹配新的規則。

3. 若是規則中沒有明確代表是阻止仍是經過的,也就是沒有匹配規則,向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。

4. 防火牆的默認規則是全部規則執行完才執行的。

1.1.4 Iptables數據包過濾匹配流程

一、數據包從外網傳送到防火牆後, 防火牆搶在IP層向TCP層傳送前, 將數據包轉發給包檢查模塊進行處理.

二、首先與第一個過濾規則比較.

三、若是與第一個模塊相同, 則對它進行審覈, 判斷是否轉發該數據包, 這時審覈結果是轉發數據包, 則將數據包發送到TCP層進行處理, 不然就將它丟棄.

四、若是與第一個過濾規則不一樣, 則接着與第二個規則相比較, 若是相同則對它進行審覈, 過程與(3)相同.

五、若是與第二個過濾規則不一樣, 則繼續與下一個過濾規則比較, 直到與全部過濾規則比較完成. 要是全部過濾規則都不知足, 就將數據包丟棄.

image

 

1.1 iptables服務表和鏈的概念

1.1.1 表和鏈

iptables包含4個表,5個鏈。其中表是按照對數據包的操做區分的,鏈是按照不一樣的Hook點來區分的,表和鏈其實是netfilter的兩個維度。

1.1.2 filter表信息詳細介紹
image
1.1.1 NAT表詳細介紹
image
1.1.2 Mangle表詳細介紹
image

 

1.1 iptables防火牆實踐配置

1.1.1 iptables命令相關參數介紹

iptables -L -n -v --line-number

-L --- 顯示防火牆規則信息,以列表形式顯示

-n --- 顯示防火牆規則信息,以數字形式顯示

-v --- 以更詳細的形式顯示防火牆規則信息(排錯時候有用)

--line-number --- 顯示規則序號信息

iptables -L --- 以列表顯示全部規則信息

iptables -L -n --- 以數字形式顯示IP地址和端口號信息

iptables -nL

iptables -nL -v --- 顯示詳細規則信息

iptables -nL --line-number --- 顯示規則序號信息

1.1.2 iptables防火牆策略清空處理

iptables -F --- 清空全部規則信息

iptables -X --- 清空全部自定義鏈信息

iptables -Z --- 清空計數器信息

計數器1:記錄規則匹配了多少數據包

計數器2:記錄規則匹配了多少流量信息

說明:以上三個清空操做完成,表示防火牆初始化過程完畢

1.1.3 實踐配置01. 阻止用戶訪問22端口服務

iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

-t --- 指定表的信息

-A --- 在指定鏈上,添加規則信息

-p --- 指定協議信息(tcp udp icmp)

--dport -- 指定目標端口信息

--sport -- 指定源端口信息

-j -- 對數據包要作什麼處理(ACCEPT DROP REJECT)

恢復鏈接方式:

01. 重啓iptables,/etc/init.d/iptables restart

02. iptables -F 簡單粗暴(企業中不推薦)

03. 刪除指定有問題規則策略

iptables -t filter -D INPUT -p tcp --dport 22 -j DROP

iptables -t filter -D INPUT 1

1.1.4 實踐配置02:只讓eh0進來的流量能夠訪問22端口

iptables -A INPUT -i eth1 -p tcp --dport 22 -j DROP

-i --- 指定流量進入的接口信息(只能應用在INPUT鏈上)

-o --- 指定流量出去的接口信息(只能應用在OUTPUT鏈上)

1.1.5 實踐配置03:只讓10.0.0.0/24網段能夠訪問22端口

iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 22 -j DROP

-s --- 指定源地址或源網段信息

-d --- 指定目標地址或目標網段信息

容許172.16.1.9主機能夠訪問172.16.1.8這個地址上的22端口服務

iptables -A INPUT -s 172.16.1.9 -d 172.16.1.8 -p tcp --dport 22 -j ACCEPT

iptables -I INPUT -s 172.16.1.9 -d 172.16.1.8 -p tcp --dport 22 -j ACCEPT

-A --- 追加/附加 將新設置的規則放在已有的規則後面

-I --- 插入 將新設置的規則插入到規則列表中(默認放在全部規則最前面)

-D --- 刪除 刪除指定規則信息

-R --- 替換/修改 修改相應規則策略

1.1.6 實踐配置04:只容許10.0.0.1主機能夠訪問10.0.0.8服務器22端口

iptables -A INPUT -i eth0 -s 10.0.0.1 -d 10.0.0.8 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -i eth0 -s 0.0.0.0/0 -d 10.0.0.8 -p tcp --dport 22 -j DROP

iptables -A INPUT -i eth0 ! -s 10.0.0.1 -d 10.0.0.8 -p tcp --dport 22 -j DROP (centos6)

iptables -A INPUT -i eth0 -s !10.0.0.1 -d 10.0.0.8 -p tcp --dport 22 -j DROP (centos5)

! --- 表示取反,或者排除

1.1.7 實踐案例05:禁止23到80端口,都不容許10.0.0.1主機進行訪問

iptables -A INPUT -i eth0 -s 10.0.0.1 -p tcp --dport 23:80 -j DROP

1.1.8 實踐案例06:禁止23,24,30,80端口,都不容許10.0.0.1主機進行訪問

iptables -A INPUT -i eth0 -s 10.0.0.1 -p tcp -m multiport --dport 23,24,30,80 -j DROP

-m extended match (may load extension) 指定加載擴展功能參數

multiport --- 不連續的多端口配置,擴展參數

icmp --- 進行icmp協議訪問控制

state --- 指定匹配狀態擴展模塊

1.1.9 實踐案例07:匹配ICMP類型

禁止ping策略原則

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

iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP

iptables服務器是ping命令發起者或是接受者

發起者:

input鏈: 禁止icmp-type 0 iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j DROP

output鏈: 禁止icmp-type 8 iptables -A OUTPUT -o eth0 -p icmp --icmp-type 8 -j DROP

接受者:

input鏈: 禁止icmp-type 8 iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP

output鏈: 禁止icmp-type 0 iptables -A OUTPUT -o eth0 -p icmp --icmp-type 0 -j DROP

簡化配置:

iptables -A INPUT -i eth0 -p icmp --icmp-type any -j DROP

iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type any -j DROP

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

說明:只有類型8是真正會影響ping,或者也能夠採用any;瞭解不少icmp類型iptables -p icmp -h

icmp type8:Echo request——回顯請求(Ping請求) 出去的信息

icmp type0: Echo Reply——回顯應答(Ping應答) 回來的信息

1.1.10 實踐案例08:狀態機制配置

NEW

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

ESTABLISHED

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

RELATED

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

INVALID

無效沒法識別的數據包

1.1.11 實踐案例09:FTP服務器配置防火牆策略

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

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

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

實現發現sent_syn狀態

iptables -A INPUT -m state --state NEW -j DROP --- 防火牆所鏈接客戶端上配置

實現發現sent_rcvd狀態

iptables -I INPUT -i eth0 -s 10.0.0.201 -m state --state ESTABLISHED -j DROP --- 防禦牆上配置的

1.1.12 實踐案例10:對數據包進行限速處理

# 限制指定時間包的容許經過數量及併發數

-m limit

--limit n/{second/minute/hour}: --limit 6/min

解釋:指定時間內的請求速率」n」爲速率,後面爲時間分別爲:秒 分 時

--limit-burst [n]

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

實現策略命令:

iptables -A INPUT -s 10.0.0.9 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT

iptables -A INPUT -s 10.0.0.9 -j DROP

1.1.13 實踐案例11:企業防火牆應用案例

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

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

一、默認規則默認是容許的狀態。

二、默認規則默認是不容許的狀態。更安全。

1)保存防火牆配置文件信息

cp /etc/sysconfig/iptables{,.bak}

2)清除配置規則

iptables -F <- 清空iptables全部規則信息(清除filter)

iptables -X <- 清空iptables自定義鏈配置(清除filter)

iptables -Z <- 清空iptables計數器信息(清除filter)

3)別把本身踢出到門外

iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT

4)配置防火牆filter上各個鏈的默認規則

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

-P --- 指定相應鏈的默認規則策略,是容許仍是阻止

5)容許iptables服務端ping本身的網卡地址

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.1.0/24 -j ACCEPT

iptables -A INPUT -s 10.0.2.0/24 -j ACCEPT

若是防火牆上配置了FTP服務,須要配置網絡狀態機制(容許相應流量返回)

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

實現iptables策略配置永久保存

①. 利用防火牆啓動腳本命令參數,實現永久保存

/etc/init.d/iptables save

②. 利用防火牆配置信息保存命令,實現永久保存

iptables-save >/etc/sysconfig/iptables

 
1.1.14 實例拓展:避免本身被踢出門外

01. 去機房重啓系統或者登錄服務器刪除剛纔的禁止規則。

02. 讓機房人員重啓服務器或者讓機房人員拿用戶密碼登陸進去

03. 經過服務器的遠程管理卡管理(推薦)

04. 先寫一個定時任務,每5分鐘就中止防火牆

05. 測試環境測試好,寫成腳本,批量執行

1.2 防火牆NAT表配置說明

1.2.1 NAT表的做用

iptables NAT:(配置NAT表示就是配置如下兩個鏈)

01. postrouting(內網---外網-NAT 源私網IP地址---源公網IP地址 端口轉化)

路由以後,進行地址映射轉換,把源地址進行轉換(源私網地址==>源公網地址)

02. prerouting(外網---內網-NAT 目標公網IP地址---目標私網IP地址 映射目標端口)

路由以前,進行地址映射轉換,把目標地址進行轉換(目標公網地址==>目標變爲私網地址)

1.2.2 iptables實現共享上網方法(postrouting)

配置內網主機

第一個歷程:配置內網服務器,設置網關地址

/etc/init.d/iptables stop --- 內網服務器中止防火牆服務

ifdown eth0 --- 模擬關閉內網服務器外網網卡

setup --- 修改內網網卡網關和DNS地址信息

[root@oldboyedu42-lnb-02 ~]# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1

0.0.0.0 172.16.1.7 0.0.0.0 UG 0 0 0 eth1

說明:內網服務器網關地址指定爲共享上網服務器內網網卡地址

配置iptables服務器

第一個歷程:配置共享上網服務器,開啓共享上網服務器路由轉發功能

[root@oldboyedu42-lnb-02 ~]# vim /etc/sysctl.conf

[root@oldboyedu42-lnb-02 ~]# 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.8

-s 172.16.1.0/24 --- 指定將哪些內網網段進行映射轉換

-o eth0 --- 指定在共享上網哪一個網卡接口上作NAT地址轉換

-j SNAT --- 將源地址進行轉換變動

-j DNAT --- 將目標地址進行轉換變動

--to-source ip地址 --- 將源地址映射爲何IP地址

--to-destination ip地址 --- 將目標地址映射爲何IP地址

擴展若是開啓:forward默認drop策略,若是配置forward鏈

iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT

iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT

iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT

iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE <- 假裝共享上網

說明:在企業中如何沒有固定外網IP地址,能夠採起以上假裝映射的方式進行共享上網

總結:配置映射方法

01. 指定哪些網段須要進行映射 -s 172.16.1.0/24

02. 指定在哪作映射 -o eth0

03. 用什麼方法作映射 -j SNAT/DNAT

04. 映射成什麼地址 --to-source ip地址/--to-destination ip地址

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

10.0.0.8 9000 === 172.16.1.9 22

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

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

實現命令:

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

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

(1)-d 10.0.0.8目標地址。

(2)-j DNAT 目的地址改寫。

1.2.4 IP一對一映射

172.16.1.10 == 10.0.0.10

輔助IP:

ip addr add 10.0.0.81/24 dev eth0 label eth0:0 #<==輔助IP

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 -t

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

telnet 10.0.0.81 873(51上提早配好)

1.2.5 映射多個外網IP上網

方法1:

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

三層交換機或路由器,劃分VLAN。

方法2:

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

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

擴大子網,增長廣播風暴。

1.3 系統防火牆與網絡內核優化標準參數

有關iptables的內核優化

調整內核參數文件/etc/sysctl.conf

如下是個人生產環境的某個服務器的配置:

------------解決time-wait過多-------------

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_max_tw_buckets = 36000

----------------------------------

net.ipv4.ip_local_port_range = 4000 65000

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.route.gc_timeout = 100

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

----------------------------------

#dmesg裏面顯示 ip_conntrack: table full, dropping packet.的錯誤提示,什麼緣由?如何解決?

#iptables優化

net.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_tcp_timeout_established = 180

net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

相關文章
相關標籤/搜索