iptables 防火墙(上)
iptables 防火墻(上)
1. 防火墻概述
1.1 概念與作用
網絡中的防火墻是一種將內部網絡和外部網絡分開的方法,是一種隔離技術。防火墻在內網與外網通信時進行訪問控制,依據所設置的規則對數據包作出判斷,最大限度地阻止網絡中的黑客破壞企業網絡,從而加強企業網絡安全。
1.2 防火墻分類
1.2.1 硬件防火墻
如思科的ASA防火墻,H3C的Sepath防火墻等。
1.2.2 軟件防火墻
如iptables等。
按架設的位置,可以分為主機防火墻,網關防火墻
1.3 iptables防火墻
Linux操作系統中默認內置一個軟件防火墻, 即iptables防火墻
1.3.1 netfilter
位于Linux內核中的包過濾功能體系,稱為Linux防火墻的“內核態”
1.3.2 iptables
位于/sbin/iptables,用來管理防火墻規則的工具,稱為Linux防火墻的“用戶態”
1.4 包過濾的工作層次
主要是網絡層,針對IP數據包,體現在對包內的IP地址,端口等信息的處理上。
2. iptables規則鏈
2.1 規則鏈
- 規則的作用:對數據包進行過濾或處理
- 鏈的作用:容納各種防火墻規則
- 鏈的分類依據:處理數據包的不同時機
2.2 默認包括5種規則鏈
- INPUT:處理入站數據包
- OUTPUT:處理出站數據包
- FORWARD:處理轉發數據包
- POSTROUTING:在進行路由選擇后處理數據包
- PREROUTING:在進行路由選擇前處理數據包
3. iptables規則表
3.1 規則表
- 表的作用: 容納各種規則鏈
- 表的劃分依據:防火墻規則的動作相似
3.2 默認包括4個規則表
- raw表:確定是否對該數據包進行狀態跟蹤
- mangle表:為數據包設置標記
- nat表:修改數據包中的源、目標IP地址或端口
- filter表:確定是否被放行該數據包(過濾)
3.3 鏈表結構關系圖
4. iptables匹配流程
4.1 規則表之間的順序:
raw--->mangle--->nat--->filter
4.2 規則鏈之間的順序:
- 入站: PREROUTING--->INPUT
- 出站: OUTPUT--->POSTROUTING
- 轉發: PREROUTING--->FORWARD--->POSTROUTING
4.3 規則鏈內的匹配順序
- 按順序依次檢查,匹配即停止(LOG 策略例外)
- 若找不到相匹配規則,按該鏈的默認策略處理
5. iptables命令
5.1 語法構成
iptables[-t表名]選項[鏈名] [條件] [j控制類型]
注意事項:
- 不指定表名時,默認指filter 表
- 不指定鏈名時,默認指表內的所有鏈
- 除非設置鏈的默認策略,否則必須指定匹配條件
- 選項、鏈名、控制類型使用大寫字母,其余均為小寫
5.2 數據包的常見控制類型
- ACCEPT: 允許通過
- DROP: 直接丟棄,不給出任何回應
- REJECT: 拒絕通過,必要時會給出提示
- LOG: 記錄日志信息,然后傳給下一條規則繼續匹配
5.3 命令簡介
5.3.1 查看規則
[root@iptables01 /]# iptables -L -nv #查看規則(默認查看filter表) Chain INPUT (policy ACCEPT 97 packets, 7567 bytes)pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 59 packets, 6728 bytes)pkts bytes target prot opt in out source destination [root@iptables01 /]# iptables -t nat -L #指定查看nat表 Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination5.3.2 清空規則
[root@iptables01 /]# iptables -F #清空規則 [root@iptables01 /]# service iptables stop #清空的更徹底5.4 項目小實戰(一)
項目要求:查出xshell的連接鏈
5.4.1 已知現表規則
[root@iptables01 ~]# iptables -L 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 destination5.4.2 禁掉轉發鏈FORWARD
[root@iptables01 /]# iptables -P FORWARD DROP [root@iptables01 /]# [root@iptables01 /]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destinationxshell依據存活,說明它的連接跟FORWARD沒關系
5.4.3 禁掉進站鏈INPUT(或出站鏈OUTPUT)
[root@iptables01 /]# iptables -P INPUT DROP [root@iptables01 /]# Socket error Event: 32 Error: 10053. Connection closing...Socket close.Connection closed by foreign host.Disconnected from remote host(iptables01) at 15:26:29.Type `help' to learn how to use Xshell prompt. [C:\~]$ Reconnecting in 3 seconds. Press any key to exit local shell. ...xshell掉了,說明它的連接直接與進站鏈(出站鏈)有關
- 重啟iptables即可恢復連接
5.5 命令演練
5.5.1 DROP
[root@iptables01 ~]# iptables -I INPUT -p icmp -j DROP #禁掉ping的本機IP [root@iptables01 ~]# iptables -F #清空鏈規則 #清空規則后,本機IP又可以ping的通了5.5.2 REJECT
[root@iptables01 ~]# iptables -I INPUT -p icmp -j REJECT #禁掉ping的本機IP(但是有提示) [root@iptables01 ~]# iptables -F #清空鏈規則 #清空規則后,本機IP又可以ping的通了小結:由此可以看出DROP與REJECT的區別,DROP無回復,REJECT拒絕,但有回復
6. 常用選項
6.1 增加新的規則
- A:在鏈的末尾追加一條規則
- I:在鏈的開頭(或指定序號)插入一條規則
6.2 實戰演練
[root@iptables01 ~]# iptables -A INPUT -p icmp -j ACCEPT [root@iptables01 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT icmp -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@iptables01 ~]# iptables -I INPUT -p tcp -j ACCEPT [root@iptables01 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere #在這里 ACCEPT icmp -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@iptables01 ~]# iptables -I INPUT 2 -p udp -j ACCEPT [root@iptables01 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere ACCEPT udp -- anywhere anywhere #在這里 ACCEPT icmp -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination6.3 查看規則列表
- L: 列出所有的規則條目
- n: 以數字形式顯示地址、端口等信息
- V: 以更詳細的方式顯示規則信息
- line-numbers: 查看規則時,顯示規則的序號。-line 與之同效
6.4 刪除、清空規則
- D: 刪除鏈內指定序號(或內容)的一條規則
- F: 清空所有的規則
6.5 修改、替換規則
R: 修改替換規則
6.6 設置默認規則
P:為指定的鏈設置默認規則
6.7 項目小實戰(二)
項目要求:在三條鏈都DROP的情況下,如可保證xshell的正常連接
[root@iptables01 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@iptables01 ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT #設置tcp協議22端口 [root@iptables01 ~]# iptables -P INPUT DROP [root@iptables01 ~]# [root@iptables01 ~]# #xshell正常工作 [root@iptables01 ~]# [root@iptables01 ~]# iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination需要注意的是:若要設置filter 表中INPUT鏈或者OUTPUT鏈的默認規則為DROP時,要先設置tcp協議22端口(ssh 遠程連接)為ACCEPT,否則通過遠程操控的主機將斷開連接,若在真實生產環境中,需要到服務器所在機房重新設置才可以,造成不必要的麻煩。
7. 規則的匹配類型
7.1 通用匹配
- 可直接使用,不依賴與其他條件或擴展
- 包括網絡協議、IP 地址、網絡接口等條件
7.2 隱含匹配
- 要求以特定的協議匹配作為前提
- 包含端口、TCP標記、ICMP 類型等條件
7.3 顯式匹配
- 要求以“-m擴展模塊”的形式明確指出類型
- 包括多端口、MAC地址、IP 范圍、數據包狀態等條件
7.4 常用管理選項匯總表
8. 常見的通用匹配條件:
8.1 協議匹配: -p 協議名
上圖為:除了icmp協議,其他都丟棄
8.2 地址匹配:-s 源地址,-d 目的地址
8.3 接口匹配: -i入站網卡、-0出站網卡
9. 項目實戰
項目要求:三臺主機,要求其中兩臺主機可以在不同網段下互ping,其中一臺模擬網關轉換
9.1 部署環境
| iptables01 | 192.168.200.99 | NET8 | 192.168.200.100 | ||
| iptables02 | 192.168.200.100 | 192.168.100.100 | NET8 | NET1(僅主機) | |
| iptables03 | 192.168.100.110 | NET8 | 192.168.100.100 |
9.2 部署網卡配置文件
9.2.1 iptables01的網卡配置文件
[root@iptables01 network-scripts]# pwd /etc/sysconfig/network-scripts [root@iptables01 network-scripts]# cat ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.200.99 #本主機的IP NETMASK=255.255.255.0 GATEWAY=192.168.200.100 #本主機的網關,iptables02第一個網卡的IP9.2.2 iptables02的網卡配置文件
[root@iptables02 network-scripts]# pwd /etc/sysconfig/network-scripts [root@iptables02 network-scripts]# cat ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.200.100 #本主機的IP,iptables01的網關 NETMASK=255.255.255.0[root@iptables02 network-scripts]# cat ifcfg-eth1 DEVICE=eth1 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.100.100 #本主機的IP,iptables03的網關 NETMASK=255.255.255.09.2.3 iptables03的網卡配置文件
[root@iptables03 network-scripts]# pwd /etc/sysconfig/network-scripts [root@iptables03 network-scripts]# cat ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.100.110 #本主機的IP NETMASK=255.255.255.0 GATEWAY=192.168.100.100 #本主機的網關,iptables02第二個網卡的IP9.3 修改iptables02轉發的配置
[root@iptables02 /]# sed -n '7p' /etc/sysctl.conf net.ipv4.ip_forward = 1 #修改成19.4 實驗如下
[root@iptables01 /]# ping 192.168.100.110 PING 192.168.100.110 (192.168.100.110) 56(84) bytes of data. 64 bytes from 192.168.100.110: icmp_seq=1 ttl=63 time=62.5 ms 64 bytes from 192.168.100.110: icmp_seq=2 ttl=63 time=0.851 ms 64 bytes from 192.168.100.110: icmp_seq=3 ttl=63 time=0.935 ms ^C --- 192.168.100.110 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2585ms rtt min/avg/max/mdev = 0.851/21.430/62.504/29.043 ms [root@iptables03 /]# ping 192.168.200.99 PING 192.168.200.99 (192.168.200.99) 56(84) bytes of data. 64 bytes from 192.168.200.99: icmp_seq=1 ttl=63 time=0.473 ms 64 bytes from 192.168.200.99: icmp_seq=2 ttl=63 time=2.37 ms 64 bytes from 192.168.200.99: icmp_seq=3 ttl=63 time=0.880 ms ^C --- 192.168.200.99 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2316ms rtt min/avg/max/mdev = 0.473/1.242/2.373/0.816 ms轉載于:https://www.cnblogs.com/ywb123/p/11219633.html
總結
以上是生活随笔為你收集整理的iptables 防火墙(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring 注解编程之 Annotat
- 下一篇: kafka入门之broker--日志存储