1. 程式人生 > 其它 >防火牆基礎筆記

防火牆基礎筆記

防火牆基礎概念

Netfilter/iptables 是unix/linux自帶的一款優秀且開放原始碼的完全自由的基於包過濾的防火牆工具

iptables防火牆功能十分強大,使用非常靈活.可以對流入和流出服務的資料包進行很精細的控制

主要工作在OSI7層模型二,三 ,四層.可以對防火牆服務核心進行重新編譯,可以支援7層防護(squid+iptables=waf)

防火牆表

防火牆進行防護的策略維度 4個維度

filter表

防火牆使用的預設表。可以實現對資料包過濾處理

表下面含有的鏈:

INPUT:對訪問進入防火牆服務的流量進行管理控制 外面人 -INPUT-> 房子(防火牆)

FORWARD:對訪問經過防火牆流量進行管理控制 外面人 - 房子(FORWARD) - 後花園(架構中內部主機) nat配合

OUTPUT:對內部訪問外部流量進行管理控制 房子(人) -OUTPUT-> 外面世界

nat表

可以將訪問目標或源資訊進行轉換(對映)

PREROUTING:在進行資料包路由轉發之前,對資料包裡面目標地址(IP)或者目標埠進行轉換

POSTROUTING:在進行資料包路由轉發之後,對資料包裡面源地址(IP)或者源埠進行轉換

mangle表

可以專門用於改寫資料包資訊(此表用處較少,可以忽略不計)

raw表

可以去除一定的資訊(此表用處較少,可以忽略不計)

防火牆配置命令

iptables -t 表資訊 -p 鏈資訊 具體規則資訊

需求01:禁止某個服務不要被外網訪問

```
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
```



需求02:禁止指定地址可以訪問,其餘地址不能訪問

```
iptables -t filter -I INPUT -s 10.0.0.1 -p tcp --dport 80 -j DROP


需求03:如何對網段資訊進行配置?

```
iptables -t filter -I INPUT -s 10.0
.0.0/24 -p tcp --dport 80 -j DROP ``` 需求04:只允許指定網段可連入;只允許10.0.0.0/24網段裡面的主機可以訪問 ``` iptables -t filter -A INPUT ! -s 10.0.0.0/24 -p tcp --dport 23 -j DROP ``` 需求05:多埠訪問策略配置 - **連續多埠配置 22-80** ``` iptables -A INPUT -s 10.0.0.10 -p tcp --dport 22:80 -j ACCEPT ``` - **間隔多埠配置 22 24 26 80** ``` iptables -A INPUT -m multiport -s 10.0.0.10 -p tcp --dport 22,24,26,80 -j ACCEPT ``` 需求06:實現訪問測試禁ping功能 ``` # 方式一: 對ICMP請求的流量進行阻止 實現禁ping iptables -A INPUT -p icmp --icmp-type 8 -j DROP # 方式二: 對ICMP響應的流量進行阻止 實現禁ping iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP # 簡單配置方法: iptables -A INPUT -p icmp --icmp-type any -j DROP ``` 需求07:設定網路限制策略(限制資料傳輸頻率) -m limit --limit n/(second/minute/hour) : 指定單位時間內可以接收或輸出多少個數據包 --limit-burst n : 指定達到策略限制標準 ``` 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 2 -s 10.0.0.7 -p icmp --icmp-type 8 -j DROP
命令示例
第一個步驟:對內網主機設定內網閘道器

```
# tail -2 /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.61
DNS1=223.5.5.5

ifdown eth1 && ifup eth1
```



第二個步驟:在防火牆伺服器上開啟路由轉發功能

```
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
```



第三個步驟:配置NAT地址對映功能

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


需求09:如何實現外網主機訪問埠對映 

A主機  ---  (10.0.0.61)防火牆(172.16.1.61) ----  內部伺服器(172.16.1.822)

   D:10.0.0.61:9000 --> 172.16.1.8:22

第一個步驟:在防火牆伺服器上開啟路由轉發功能

```shell
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
```



第二個步驟:在防火牆伺服器上設定埠或地址對映功能

```
iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22
示例2

防火牆自定義鏈

iptables -N syn-flood
# 建立一個syn-flood自定義鏈
iptables -A INPUT -i eth0 -syn -j syn-flood
# 將INPUT鏈中抓取的syn資料流量都放入到syn-flood自定義鏈中
iptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURN
# 一旦獲取到流量大於每秒5000,併發大於200時,就執行下一條規則
iptables -A syn-flood -j DROP
# 丟棄syn-flood鏈上的資料
說明:自定義鏈避免syn的泛洪攻擊

什麼是自定義鏈:
iptables -N port-info
iptables -A port-info -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j port-info
iptables -R INPUT -s 11.0.0.0/8 -j port-info
iptables -A INPUT -s 192.168.1.0/24 -j port-info