iptables防火墻
- 1. 防火墻概述
- 2. 防火墻
- 2.1 防火墻種類及使用說明
- 2.2 必須熟悉的名詞
- 2.3 iptables 執行過程※※※※※
- 2.4 表與鏈※※※※※
- 2.4.1 簡介
- 2.4.2 每個表說明
- 2.4.2.1 filter表 :star::star::star::star::star:
- 2.4.2.2 nat表
- 2.5 環境準備及命令
- 2.6 案例01::star::star::star::star::star:禁止訪問22端口
- 2.7 案例02: :star::star::star::star::star:屏蔽對應的ip
- 2.8 案例03::star::star::star::star::star:禁ping
- 2.9 案例04::star::star::star:禁止10.0.0.0/24內網訪問22端口
- 2.10 案例05: :star: 指定多個端口屏蔽
- 2.11 案例06::star::star::star::star::star: 防火墻規則的保存生效與備份恢復
- 2.12 案例07::star::star: 收尾設置鏈的默認規則
1. 防火墻概述
- 目標:
- 封或開啟端口
- 封或開啟ip
2. 防火墻
2.1 防火墻種類及使用說明
- 硬件: 整個企業入口
- 三層路由: H3C 華為 Cisco(思科)
- 硬件防火墻: 深信服,綠盟,奇安信…
- 棱鏡門 0day. 勒索病毒。 國內互聯網企業去IOE運動。
Juniper
- 軟件: 開源軟件 網站內部 封ip 封ip
- iptables 寫入到Linux內核中 以后服務docker 工作在 4層(大部分)
- firewalld C7 底層也是iptables.
- nftalbes C8
- ufw (ubuntu firewall) Ubuntu
- 云防火墻(公有云)
- 阿里云:
- 安全組 (封ip,封端口)
- NAT網關(共享上網,端口映射…)
- waf應用防火墻
- 阿里云:
- waf防火墻(應用防火墻,處理7層的攻擊) SQL注入,等攻擊.
- 書寫規則(描述攻擊過程,關鍵提示,關鍵操作.)
企業選型建議:
中小企業: 使用公有云,安全組,waf防火墻,態勢感知.
訪問量巨大: 使用硬件防火墻,waf防火墻,硬件服務器+云服務器
2.2 必須熟悉的名詞
- 容器: 瓶子 罐子 存放東西
- 表(table): 存放==鏈==的容器,防火墻最大概念
- 鏈(chain): 存放==規則==的容器
- 規則(policy): 準許或拒絕規則 ,未來書寫的防火墻條件就是各種防火墻規則
掌握表和鏈之間聯系即可。
Netfilter | 表(tables) | 鏈(chains) | 規則(Policy) |
---|---|---|---|
一棟樓 | 樓里的房子 | 房子里的柜子 | 柜子里衣服,擺放規則 |
2.3 iptables 執行過程※※※※※
工作流程小結:※※※※※
- 防火墻是層層過濾的,實際是按照配置規則的順序從上到下,從前到后進行過濾的。
- 如果**匹配成功規則,即明確表示是拒絕(DROP)還是接收(ACCEPT)**,數據包就不再向下匹配新的規則。
- 如果規則中沒有明確表明是阻止還是通過的,也就是沒有匹配規則,向下進行匹配,直到**匹配默認規則**得到明確的阻止還是通過。
- 防火墻的**默認規則是所有規則都匹配完才會匹配的**。
2.4 表與鏈※※※※※
2.4.1 簡介
-
表(table)是對功能的分類,防火墻功能(filter表),共享上網,端口轉發(nat表)
-
鏈對數據流進行處理,需要使用不同的鏈(數據流入(INPUT),數據流出(OUTPUT))
-
iptables 是4表5鏈
-
4表: filter 表 nat表 raw表 mangle表
-
伍鏈: INPUT OUTPUT FORWARD PREROUTING POSTROUTING
2.4.2 每個表說明
2.4.2.1 filter表 ??????????
- 是iptables默認的表,filter表示過濾.
- 實現防火墻功能:(對數據包的filter過濾)屏蔽或準許,端口,ip.
filter 表 | 強調:主要和主機自身相關,真正負責主機防火墻功能的(過濾流入流出主機的數據包) filter表示iptables默認使用的表,這個表定義了三個鏈(chains) 企業工作場景:主機防火墻 |
---|---|
INPUT ?????????? | 負責過濾所有目標地址是本機地址的數據包 通俗來說:就是過濾進入主機的數據包 (能否讓數據包進入服務器) |
FORWARD | 路過: 負責轉發流經主機的數據包。起轉發的作用,和NAT關系很大,后面會詳細介紹 LVS NAT模式,net.ipv4.ip_forward=0 |
OUTPUT | 處理所有源地址是本機地址的數據包 通俗的講:就是處理從主機發出去的數據包 |
2.4.2.2 nat表
- 實現nat功能
- 實現共享上網(內網服務器上外網)
- 端口映射和ip映射
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端口上 10.0.0.61 8080(目標端口) ----nat—à 10.0.0.7 22 |
POSTROUTING | 在數據包離開防火墻時進行路由判斷之后執行的規則,作用改變數據包的源地址,源端口等。 寫好發件人的地址,要讓家人回信時能夠有地址可回。 例如。默認筆記本和虛擬機都是局域網地址,在出網的時候被路由器將源地址改為了公網地址。 生產應用:局域網共享上網。 |
課外了解: 官方最全超級詳解傳送門
2.5 環境準備及命令
iptables iptables啟動或關閉的命令
oldboy-bao 10.0.0.61 172.16.1.61
-
為了使用systemctl管理安裝的軟件:
yum install -y iptables-services
-
檢查結果
[root@oldboy-bao ~] rpm -qa |grep iptables iptables-services-1.4.21-35.el7.x86_64 #我們安裝的。 iptables-1.4.21-35.el7.x86_64 #系統自帶
-
啟動iptables 內核模塊
手動加載iptables內核模塊(直接復制到虛擬機上就好了)modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_state
-
讓配置永久生效
chmod +x /etc/rc.d/rc.local cat >>/etc/rc.local<<EOF modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_state EOF
-
檢查是否加載防火墻iptables 模塊
[root@oldboy-bao ~] lsmod |egrep 'filter|nat|ipt' nf_nat_ftp 12809 0 nf_conntrack_ftp 18478 1 nf_nat_ftp iptable_nat 12875 0 nf_nat_ipv4 14115 1 iptable_nat nf_nat 26583 2 nf_nat_ftp,nf_nat_ipv4 nf_conntrack 139264 6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4 iptable_filter 12810 0 ip_tables 27126 2 iptable_filter,iptable_nat libcrc32c 12644 3 xfs,nf_nat,nf_conntrack [root@oldboy-bao ~] lsmod |egrep 'filter|nat|ipt' |wc -l 9
-
關閉已有的firewalld防火墻:
systemctl stop firewalld
+systemctl disable firewalld
-
清空iptables自帶規則
- 查看規則:
iptables -t filter -nL
- 清空規則
iptables -t filter -F #flush清空規則 iptables -X #刪除定義的鏈。 iptables -Z #清空計數器。
- 查看規則:
2.6 案例01:??????????禁止訪問22端口
-
在filter表的INPUT連上新加1條拒絕規則,拒絕所有目標端口是22的請求。
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP iptables -t filter -nL --line-number #顯示規則并添加序號 iptables -t filter -D INPUT 1 #刪除filter表INPUT鏈的第1個規則
2.7 案例02: ??????????屏蔽對應的ip
- DOS拒絕式服務攻擊。特點就是某幾個ip不斷訪問。
- 在filter表的INPUT鏈上添加拒絕規則,拒絕源ip是10.0.0.1的訪問。
屏蔽來自于10.0.0.1的訪問
iptables -I INPUT -s 10.0.0.1 -j DROP
iptables -t filter -nL --line-number #顯示規則并添加序號
iptables -t filter -D INPUT 1 #刪除filter表INPUT鏈的第1個規則
2.8 案例03:??????????禁ping
- 我們需要禁止任何人ping ip,讓用戶無法ping通。
- ping背后是使用icmp協議(數據包)。
- 實現方法:
-
🅰? ? 通過Iptables實現。
-
🅱?通過Linux內核參數實現。
iptables -I INPUT -p icmp -j DROP 開啟另一個機器ping。
-
2.9 案例04:??????禁止10.0.0.0/24內網訪問22端口
- 實現22端口只能通過堡壘機訪問或只能通過內網訪問。
- 未來可以改為只通過內網訪問,準許172.16.1.0/24訪問22端口。
- 翻譯:添加filter表INPUT鏈接拒絕規則,禁止源ip是10.0.0.0/24網段訪問目標端口是22,協議tcp.
- 環境準備
- 雙網卡 eth0 10, eth1 172(lan區段)
環境準備 | 需求 | 細節 |
---|---|---|
oldboy-bao | 雙網卡 | eth0 10(外網) eth1 172(內網) |
oldboy-docker | 雙網卡 | eth0 10(外網) eth1 172(內網) |
-
添加網卡設置lan區段:添加到和堡壘機相同的區段
-
書寫網卡配置文件
oldboy-docker[root@oldboy-docker ~] cat /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 NAME=eth1 BOOTPROTO=none ONBOOT=yes IPADDR=172.16.1.62 PREFIX=24 [root@oldboy-docker ~] systemctl restart network
-
配置規則之前測試
ssh -p22 10.0.0.61 #ctrl + d 退出 ssh -p22 172.16.1.61 都可以鏈接與訪問。
-
進行配置
翻譯:添加filter表INPUT鏈接拒絕規則,禁止源ip是10.0.0.0/24網段訪問目標端口是22,協議tcp. iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
-
配置規則之后測試
ssh -p22 10.0.0.61 訪問失敗 ssh -p22 172.16.1.61 訪問成功 都可以鏈接與訪問。
經過漫長等待,10網段訪問失敗。
2.10 案例05: ?? 指定多個端口屏蔽
- 禁止80,443訪問。
--dport默認只能指定1個端口或指定端口范文 通過:(冒號)實現。 iptables -I INPUT -p tcp --dport 1:1024 -j DROP使用multiport模塊,就可以指定多個端口 iptables -I INPUT -p tcp -m multiport --dport 80,443 -j DROP
2.11 案例06:?????????? 防火墻規則的保存生效與備份恢復
- 配置的防火墻規則重啟Linux或iptables服務后是否仍然生效
iptables -I INPUT -s 10.0.0.1 -j ACCEPT iptables -I INPUT -p icmp -j DROP iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT iptables -I INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
- 通過iptables-save輸出/etc/sysconfig/iptables文件
備份原有的 cp /etc/sysconfig/iptables{,.bak} iptables-save >/etc/sysconfig/iptables
- 恢復默認配置: 讀取/etc/sysconfig/iptables文件并加載防火墻配置
systemctl restart iptables
2.12 案例07:???? 收尾設置鏈的默認規則
???? 修改默認規則之前,要測試之前的準許的規則。
iptables -t filter -P INPUT DROP
修改之后一點點添加放行規則
iptables -I INPUT -s 10.0.0.1 -j ACCEPT
iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT# -i 數據進入的時候
iptables -A INPUT -i lo -j ACCEPT
# -o 數據流出的時候
iptables -A OUTPUT -o lo -j ACCEPT#匹配連接狀態
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #放行tcp連接狀態
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@oldboy-bao ~] iptables-save
# Generated by iptables-save v1.4.21 on Thu Aug 10 12:00:05 2023
*nat
:PREROUTING ACCEPT [2:458]
:INPUT ACCEPT [2:458]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Thu Aug 10 12:00:05 2023
# Generated by iptables-save v1.4.21 on Thu Aug 10 12:00:05 2023
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -j DROP
-A INPUT -s 10.0.0.1/32 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Aug 10 12:00:05 2023