iptables防火牆


版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 ————— 作者:kirin

1.iptables 執行過程

1.防火牆是層層過濾的,實際是按照配置規則的順序從上到下,從前到后 進行過濾的。
2. 如果匹配成功規則,即明確表示是拒絕(DROP)還是接收(ACCEPT),數 據包就不再向下匹配新的規則。 3. 如果規則中沒有明確表明是阻止還是通過的,也就是沒有匹配規則,向下進行匹配,直到匹配默認規則得到明確的阻止還是通過。 4. 防火牆的默認規則是所有規則都匹配完才會匹配的 

2.表與鏈

1 簡介

iptables 是 4表伍鏈
4表: filter 表 nat表 raw表 mangle表 伍鏈: INPUT OUTPUT FORWARD PREROUTING POSTROUTING pre.... 之前 post .....之后 

2 每個表說明

2.1filter表

實現防火牆功能: 屏蔽或准許 端口 ip 強調:主要和主機自身相關,真正負責主機防火牆功能的 (過濾流入流出主機的數據包) filter表示iptables默認 使用的表,這個表定義了三個鏈(chains) 企業工作場 景:主機防火牆 INPUT鏈:負責過濾所有目標地址是本機地址的數據包 通俗來說: 就是過濾進入主機的數據包 (能否讓數據包進入服務器) 

2.2nat表

實現nat功能 實現共享上網(內網服務器上外網) 端口映射和ip映射 nat:負責網絡地址轉換的,即來源與目的IP地址和port 的轉換。 應用:和主機本身無關,一般用於局域網共享上網 或者特殊的端口轉換服務相關。 工作場景: 1. 用於企業路由(zebra)或網關(iptables),共 享上網(POSTROUTING) 2. 做內部外部IP地址一對一映射(dmz),硬件防 火牆映射IP到內部服務器,ftp服務 (PREROUTING) 3. WEB,單個端口的映射,直接映射80端口 (PREROUTING) 這個表定義了3個鏈,nat功能 相當於網絡的acl控制。和網絡交換機acl類似 PREROUTING鏈:在數據包到達防火牆時,進行路由判斷之前執行的規則,作用是改變數據包的目的地址、目的端口等就是收信時,根據規則重寫收件人的地址。例如:把公網IP:xxx.xxx.xxx.xxx映射到局域網的 xx.xx.xx.xx服務器上。 如果是web服務,可以報80轉換為局域網的服務器 9000端口上 POSTROUTING鏈:在數據包離開防火牆時進行路由判斷之后執行的規 則,作用改變數據包的源地址,源端口等。 寫好發件人的地址,要讓家人回信時能夠有地址可 回。 例如。默認筆記本和虛擬機都是局域網地址,在出 網的時候被路由器將源地址改為了公網地址。 生產應用:局域網共享上網。 

3.環境准備及相關命令

1.環境准備

m01 10.0.0.61;172.16.1.61
web01 10.0.0.7 172.16.1.7
web02 10.0.0.8 172.16.1.8
[root@m01 ~]# yum install -y iptables-services [root@m01 ~]# rpm -ql iptables-services /etc/sysconfig/ip6tables /etc/sysconfig/iptables #防火 牆的配置文件 /usr/lib/systemd/system/ip6tables.service /usr/lib/systemd/system/iptables.service#防火 牆服務配置文件(命令) 
[root@m01 ~]# rpm -ql iptables /usr/sbin/iptables #iptables 命令 添加/刪除/查 看 規則(4表伍鏈) /usr/sbin/iptables-save #iptables規則 輸出(保存) /usr/sbin/iptables-restore # 恢復 

#防火牆相關模塊 加載到內核中(臨時)

[root@m01 ~]# modprobe ip_tables [root@m01 ~]# modprobe iptable_filter [root@m01 ~]# modprobe iptable_nat [root@m01 ~]# modprobe ip_conntrack [root@m01 ~]# modprobe ip_conntrack_ftp [root@m01 ~]# modprobe ip_nat_ftp [root@m01 ~]# modprobe ipt_state 

#永久

[root@m01 ~]# 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 

檢查是否加入

[root@m01 ~]# 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 

關閉自帶防火牆並啟動iptables

[root@m01 ~]# systemctl stop firewalld [root@m01 ~]# systemctl disable firewalld [root@m01 ~]# systemctl start iptables.service [root@m01 ~]# systemctl enable iptables.service Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service. 

#查看filter表中的規則 ,默認查看的是filter表

[root@m01 ~]# iptables -nL

#查看指定表中的規則

[root@m01 ~]# iptables -t nat -nL

2.iptables命令參數

參數 含義
-L 顯示表中的所有規則
-n 不要把端口 或ip反向解析為名字
-t 指定表 不指定默認是filter表
-A 追加 加入准許類規則 使用-A
-I insert 把規則加在鏈的第1條 拒絕類規則放在所有 規則最上面 拒絕類 -I
-D delete 刪除 -D INPUT 1
-p 協議 protocal tcp/udp/icmp/all
–dport 目標端口 dest destination 指定端口 加上協議 -p tcp
–sport 源端口 source 源
-s –source 源ip
-d –destination 目標ip
-m 指定模塊 multiport
-i input 輸入的時候 從哪個網卡進來
-o ouput 輸出的時候 從哪個網卡出去
-j 滿足條件后的動作:DROP/ACCEPT/REJECT DROP REJECT拒絕 DROP 把數據丟掉 不會返回信息給用戶 REJECT 拒絕 返回拒絕信息
-F 清除所有規則,不會處理默認的規則
-X 刪除用戶自定義的鏈
-Z 鏈的計數器清零(數據包計數器與數據包字節計數器)

3 配置filter表規則

3.1正式配置之前先清空規則

[root@m01 ~]# iptables -F [root@m01 ~]# iptables -X [root@m01 ~]# iptables -Z [root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

3.2禁止訪問22端口

[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP ###拒絕用戶訪問22端口(危險,一會要跑機房) #此時發現Xshell已經無法進行操作了 #進入機房 #查看規則並加上序號 [root@m01 ~]# iptables -t filter -nL --line-number #刪除規則 iptables -t filter -D INPUT 1 #根據序號刪除

3.3 封ip 屏蔽某個ip

#拒絕10.0.0.7訪問     

[root@m01 ~]# iptables -t filter -I INPUT -s 10.0.0.7 -j DROP [root@m01 ~]# iptables -t filter -nL --line-number Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP all -- 10.0.0.7 0.0.0.0/0 Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination 

#拒絕某個網段的訪問

[root@m01 ~]# iptables -I INPUT -s 172.16.1.0/24 -j DROP [root@m01 ~]# iptables -t filter -nL --line-number Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP all -- 172.16.1.0/24 0.0.0.0/0 2 DROP all -- 10.0.0.7 0.0.0.0/0 Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination 

#禁止網段連入(禁止10.0.0.0/24網段訪問 8888端口)

[root@m01 ~]# iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP [root@m01 ~]# iptables -t filter -nL --line-number Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP tcp -- 10.0.0.0/24 0.0.0.0/0 tcp dpt:8080 2 DROP all -- 172.16.1.0/24 0.0.0.0/0 3 DROP all -- 10.0.0.7 0.0.0.0/0 Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination 

3.4只允許指定網段連入(允許172.16.1.0網段)

#方法1: 利用 ! 進行排除

[root@m01 ~]# iptables -I INPUT ! -s 172.16.1.0/24 -j DROP

#方法2: 修改鏈默認規則 修改為拒絕 添加准許

[root@m01 ~]# iptables -P INPUT DROP [root@m01 ~]# iptables -nL Chain INPUT (policy DROP)####已經變為拒絕了 target prot opt source destination ACCEPT all -- 10.0.0.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination #測試完成后 修改回去 [root@m01 ~]# iptables -P INPUT ACCEPT [root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 10.0.0.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

3.5 指定多個端口

#指定多個端口

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

3.6匹配ICMP類型

###通過防火牆設置

[root@m01 ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP [root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

###通過內核參數設置

[root@m01 ~]# echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf [root@m01 ~]# sysctl -p net.ipv4.icmp_echo_ignore_all = 1 [root@m01 ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all 1 

3.7 限制並發及速率

-m limit 限制模塊

-m limit –limit 10/minute     #每分鍾只能有10個數據包 每6秒 生成

iptables -I INPUT  -p icmp  -m limit –limit 10/minute    –limit-burst 5   -j ACCEPT

3.8 防火牆規則的保存與恢復

iptables-save 默認輸出到屏幕

iptables-restore 加上文件

寫入到/etc/sysconfig/iptables

####保存

[root@m01 ~]# iptables-save >/etc/sysconfig/iptables [root@m01 ~]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.21 on Fri May 28 16:52:58 2021 *nat :PREROUTING ACCEPT [55:8594] :INPUT ACCEPT [27:6329] :OUTPUT ACCEPT [113:7357] :POSTROUTING ACCEPT [113:7357] COMMIT # Completed on Fri May 28 16:52:58 2021 # Generated by iptables-save v1.4.21 on Fri May 28 16:52:58 2021 *filter :INPUT ACCEPT [30:2576] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [364:46616] -A INPUT -s 10.0.0.0/24 -j ACCEPT -A INPUT -s 10.0.0.0/24 -p icmp -m icmp --icmp-type 8 -j DROP COMMIT # Completed on Fri May 28 16:52:58 2021 

###刪除后的恢復

[root@m01 ~]# iptables -D INPUT 1 [root@m01 ~]# iptables -D INPUT 1 [root@m01 ~]# iptables -D INPUT 1 iptables: Index of deletion too big. [root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@m01 ~]# iptables-restore < /etc/sysconfig/iptables [root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 10.0.0.0/24 0.0.0.0/0 DROP icmp -- 10.0.0.0/24 0.0.0.0/0 icmptype 8 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

4. nat表規則

4.1 實現共享上網

##防火牆配置

[root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.7 -j SNAT --to-source 10.0.0.61 [root@m01 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf [root@m01 ~]# sysctl -p net.ipv4.icmp_echo_ignore_all = 1 net.ipv4.ip_forward = 1 

##web端配置

[root@web01 ~]# echo GATEWAY=172.16.1.61 >> /etc/sysconfig/network-scripts/ifcfg-eth1 [root@web01 ~]# ifdown eth1 && ifup eth1

4.2 實現端口轉發

##防火牆配置

[root@mb01 ~]# iptables -t nat -I PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22 [root@mb01 ~]# sysctl -p net.ipv4.icmp_echo_ignore_all = 1 net.ipv4.ip_forward = 1 ###然后用xshell連接測試一下吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM