iptables防火牆規則

weixin_45048541發表於2020-12-02

什麼是防火牆

  • 一道保護性的安全屏障
  • 保護、隔離

Linux包過濾防火牆

RHEL7預設使用firewalld做為防火牆
但firewalld底層還是呼叫包過濾防火牆iptables

一、iptables 規則瞭解

iptables的表、鏈結構

1)iptables的4個表(區分大小寫):

iptables預設有4個表,nat表(地址轉換表)、filter表(資料過濾表)、raw表(狀態跟蹤表)、mangle表(包標記表)。
2)iptables的5個鏈(區分大小寫): //資料包傳輸的方向
INPUT鏈(入站規則)
OUTPUT鏈(出站規則)
FORWARD鏈(轉發規則)
PREROUTING鏈(路由前規則)
POSTROUTING鏈(路由後規則)

包過濾匹配流程

規則鏈內的匹配順序
順序對比,匹配即停止(LOG除外)
若無任何匹配,則按該鏈的預設策略處理

iptables用法解析

iptables基本用法

管理程式位置
/sbin/iptables
指令組成
iptables [-t表名] 選項 [鏈名] [條件] [-j目標操作]

注意事項/整體規律

可以不指定表,預設為filter表
可以不指定鏈,預設為對應表的所有鏈
如果沒有匹配的規則,則使用防火牆預設的規則
選項/鏈名/目標操作用大寫字母,其餘都小寫字母

基本的目標操作

ACCEPT:允許通過/放行
DROP:直接丟棄,不給出任何回應
REJECT:拒絕通過,必要時會給出提示
LOG:記錄日誌,然後傳給下一條規則
在這裡插入圖片描述
(1)往該主機的filter(資料包過濾表)表中插入INPUT(入站)鏈,寫入規則是拒絕(REJECT)所有從本機進入的icmp包(ping)

[root@ip51 ~]# iptables -t filter -I INPUT -p icmp -j REJECT

(2)測試

[root@ip52 ~]# ping 192.168.4.51
PING 192.168.4.51 (192.168.4.51) 56(84) bytes of data.
From 192.168.4.51 icmp_seq=1 Destination Port Unreachable

(3)往本機filter表中的第一個序號處插入一條規則,允許22埠進

[root@ip51 ~]# iptables -t filter -I INPUT 1 -p 22 -j ACCEPT

(4)檢視filter表中所有的規則

[root@ip51 ~]# iptables -t filter -nL --line-numbers

(5)清除filter表中編號為1的規則

[root@ip51 ~]# iptables -t filter -D INPUT 1

(6)清除filter表的所有規則

[root@ip51 ~]# iptables -t filter -F
[root@ip51 ~]# iptables -F //預設清空filter表

(7)清空四個表的規則

[root@ip51 ~]# iptables -t filter  -F
[root@ip51 ~]# iptables -t nat  -F
[root@ip51 ~]# iptables -t mangle  -F
[root@ip51 ~]# iptables -t raw  -F

設定預設規則

所有鏈的初始預設規則均為ACCEPT
通過-P選項可重置預設規則
ACCEPT或者DROP

防護型別及條件

根據防火牆保護的物件不同,防火牆可以分為主機型防火牆與網路型防火牆,如圖所示。

主機型防火牆,主要保護的是伺服器本機(過濾威脅本機的資料包)。
網路防火牆,主要保護的是防火牆後面的其他伺服器,如web伺服器、FTP伺服器等。
開啟核心的IP轉發

做為閘道器、路由的必要條件

[root@ip51 ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf 
或者
[root@ip51 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
基本的匹配條件

通用匹配
可直接使用,不依賴於其他條件或擴充套件
包括網路協議、IP地址、網路介面等條件
隱含匹配
要求以特定的協議匹配作為前提
包括埠、TCP標記、ICMP型別等條件
在這裡插入圖片描述
注:需要條件取反時,用前面加!,如 !-p tcp,就是除tcp之外的協議
(1)配置51主機往filter表中的INPUT鏈中新增策略,允許tcp協議的22埠的資料包通過

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

(2)將本機的預設策略修改為DROP

[root@ip51 ~]# iptables -t filter -P INPUT DROP

(3)檢視策略

[root@ip51 ~]# iptables -t filter -nL --line-numbers

(4)使用50主機ssh 51主機

[root@ip50 ~]# ssh 192.168.4.51

(5)禁止50主機ssh 51

[root@ip51 ~]# iptables -t filter -I INPUT -s 192.168.4.50 -p tcp --dport 22 -j DROP

(6)允許外網訪問本機的80埠

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

(7)將防火牆配置規則永久儲存

[root@ip51 ~]# iptables-save > /etc/sysconfig/iptables

(8)由於OUTPUT預設的規則是ACCEPT,所以新增如下規則,允許本機的ping包進來,就會達到本機能ping外主機,外主機不能ping本機的效果

[root@ip51 ~]# iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

(9)永久儲存配置

[root@ip51 ~]# iptables-save > /etc/sysconfig/iptables

擴充套件匹配
擴充套件條件的方法

前提條件
有對應的防火牆模組支援
基本用法
-m 擴充套件模組 --擴充套件條件 條件值
示例: -m mac --mac-source 00:0C:29:74:BE:21
常見的擴充套件條件型別

選項用法
MAC地址匹配-m mac --mac-source MAC地址
多埠匹配-m multiport --sports 源埠列表
-m multiport --dports 目標埠列表
IP範圍匹配-m iprange --src-range IP1-IP2
-m iprange --dst-range IP1-IP2

(1)新增多埠的過濾規則

[root@ip51 ~]# iptables -t filter -I INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT

(2)刪除單條的22跟80的tcp的過濾規則,使用上一條規則代替

[root@ip51 ~]# iptables -t filter -D INPUT 3

(3)新增允許250~254主機的ping包進來

[root@ip51 ~]# iptables -t filter -I INPUT -p icmp --icmp-type echo-request  -m iprange --src-range  192.168.4.250-192.168.4.254 -j ACCEPT

(4)根據MAC地址封鎖主機

[root@ip51 ~]# arp -n    //獲取ping過本主機的其他主機對應的mac地址
[root@ip51 ~]# iptables -t filter -I INPUT 4 -p icmp --icmp-type echo-request -m mac --mac-source 52:54:00:37:78:11 -j DROP     //新增到上一條配置ip範圍的過濾規則之前

NAT轉換原理

私有地址的侷限性

從區域網訪問網際網路的時候
比如看網頁、收郵件、。。。。。
源地址為私有地址,伺服器如何正確的給出回應?
SNAT源地址轉換

Source Network Address Translation
修改資料包的源地址
僅用於nat表的POSTROUTING鏈
一,修改2-54主機閘道器(eth0:192.168.4.54,eth1:192.168.2.54)

[root@ip2-54 ~]# systemctl stop NetworkManager

//設定閘道器
[root@ip2-54 ~]# route add default gw 192.168.2.52
//刪除閘道器
[root@ip2-54 ~]# route add default gw 192.168.2.52

//檢視閘道器
[root@ip2-54 ~]# route -n

二,修改閘道器裝置的防火牆規則(eth0:192.168.4.52,eth1:192.168.2.52)

(1)開啟路由轉發功能

[root@ip52 ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf 

(2)配置防火牆的nat規則

[root@ip52 ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.4.52 
[root@ip52 ~]# iptables-save > /etc/sysconfig/iptables
[root@ip52 ~]# iptables -t nat -nL

(3)客戶端測試

[root@ip2-54 ~]# curl 192.168.4.51

地址偽裝策略

共享動態公網IP地址實現上網
主要針對外網介面的IP地址不固定的情況
將SNAT改為MASQUERADE即可
對於ADSL寬頻撥號連線,網路介面可寫為ppp+

[root@ip52 ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE   //指定閘道器域名跟外網網路卡(eth0)

相關文章