15firewalld和iptables
阿新 • • 發佈:2021-11-08
複習
1、keepalived的作用是什麼?
在叢集中生成VIP,主要用於高可用。
2、keepalived腦裂怎麼解決?
通過keepalived自帶的指令碼執行功能,不停的檢測代理的服務,如果不正常做對應的處理。
3、keepalived搶佔式與非搶佔式之間的區別
搶佔式是按照優先順序分配VIP,非搶佔式一旦得到VIP,就在改變了。非搶佔式不會造成延時或者錯誤。
4、Nginx重定向的關鍵字
rewrite [正則表示式] [重定向到的URL]
return [狀態碼] [重定向到的URL]
5、重定向的四種模式
last 本條規則匹配完成後,停止匹配,不再匹配後面的規則
break 本條規則匹配完成後,停止匹配,不再匹配後面的規則
redirect 返回302臨時重定向,位址列會顯示跳轉後的地址
permanent 返回301永久重定向,位址列會顯示跳轉後的地址
一、防火牆基本概述
防止惡意流量訪問的軟體就叫做防火牆。
在CentOS7系統中集成了多款防火牆管理工具,預設啟用的是firewalld(動態防火牆管理器)防火牆管理工具,Firewalld支援CLI(命令列)以及GUI(圖形)的兩種管理方式。
對於接觸Linux較早的人員對Iptables比較熟悉,但由於Iptables的規則比較的麻煩,並且對網路有一定要求,所以學習成本較高。但firewalld的學習對網路並沒有那麼高的要求,相對iptables來說要簡單不少,所以建議剛接觸CentOS7系統的人員直接學習Firewalld。
需要注意的是:如果開啟防火牆工具,並且沒有配置任何允許的規則,那麼從外部訪問防火牆裝置預設會被阻止,但是如果直接從防火牆內部往外部流出的流量預設會被允許。
firewalld 只能做和IP/Port相關的限制,web相關的限制無法實現。
二、防火牆區域管理
那麼相較於傳統的Iptables防火牆,firewalld支援動態更新,並加入了區域zone的概念
簡單來說,區域就是firewalld預先準備了幾套防火牆策略集合(策略模板),使用者可以根據不同的場景選擇不同的策略模板,從而實現防火牆策略之間的快速切換
區域選項 | 預設規則策略 |
---|---|
trusted | 允許所有的資料包流入流出 |
home | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、mdns、ipp-client、amba-client與dhcpv6-client服務相關,則允許流量 |
internal | 等同於home區域 |
work | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、ipp-client、dhcpv6-client服務相關,則允許流量 |
public | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、dhcpv6-client服務相關,則允許流量 |
external | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 |
dmz | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 |
block | 拒絕流入的流量,除非與流出的流量相關 |
drop | 拒絕流入的流量,除非與流出的流量相關 |
#必須記住的三個區域,其他的可以不記
trusted 白名單
public 預設區域
drop 黑名單
三、防火牆基本指令引數
1.firewall-cmd命令分類列表
引數 | 作用 |
---|---|
zone區域相關指令 | |
–get-default-zone | 獲取預設的區域名稱 |
–set-default-zone=<區域名稱> | 設定預設的區域,使其永久生效 |
–get-active-zones | 顯示當前正在使用的區域與網絡卡名稱 |
–get-zones | 顯示總共可用的區域 |
–new-zone= | 新增區域 |
services服務相關命令 | |
–get-services | 列出服務列表中所有可管理的服務 |
–add-service= | 設定預設區域允許該填加服務的流量 |
–remove-service= | 設定預設區域不允許該刪除服務的流量 |
Port埠相關指令 | |
–add-port=<埠號/協議> | 設定預設區域允許該填加埠的流量 |
–remove-port=<埠號/協議> | 置預設區域不允許該刪除埠的流量 |
Interface網站相關指令 | |
–add-interface=<網絡卡名稱> | 將源自該網絡卡的所有流量都導向某個指定區域 |
–change-interface=<網絡卡名稱> | 將某個網絡卡與區域進行關聯 |
source相關指令 | |
–add-source=<IP/子網掩碼> | 一般配置在女預設區域的富規則中或者黑白名單中 |
–remove-source=<IP/子網掩碼> | |
其他相關指令 | |
–list-all | 顯示當前區域的網絡卡配置引數、資源、埠以及服務等資訊 |
–reload | 讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則 |
四、防火牆區域配置策略
1.禁用與取消禁用防火牆
#禁用防火牆
[root@web01 ~]# systemctl mask iptables
Created symlink from /etc/systemd/system/iptables.service to /dev/null.
#取消禁用防火牆
[root@web01 services]# systemctl unmask iptables
Removed symlink /etc/systemd/system/iptables.service
2.操作防火牆
[root@web01 ~]# systemctl start firewalld
[root@web01 ~]# systemctl enable firewalld
[root@web01 ~]# systemctl stop firewalld
#過載防火牆配置或清理臨時的防火牆配置
[root@web01 ~]# firewalld-cmd --reload
3.firewalld常用命令
1)檢視預設使用的區域
[root@web01 ~]# firewall-cmd --get-default-zone
public
2)檢視預設區域的規則
[root@web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
3)檢視指定區域的預設規則
[root@web01 ~]# firewall-cmd --list-all --zone=trusted
trusted #區域的名字
target: ACCEPT #狀態:允許
icmp-block-inversion: no #icmp塊設定
interfaces: #區域繫結的網絡卡
sources: #允許流量通過的網段
services: #允許流量通過的服務
ports: #允許流量通過的埠
protocols: #允許流量通過的協議
masquerade: no #IP偽裝
forward-ports: #埠轉發
source-ports: #埠轉發的來源埠
icmp-blocks: #icmp塊設定
rich rules: #富規則
4)檢視區域是否允許某服務
[root@m01 ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@m01 ~]# firewall-cmd --zone=public --query-service=https
no
五、防火牆配置
1.firewalld放行服務
1)firewalld放行一個服務
[root@web01 ~]# firewall-cmd --add-service=http
success
2)firewalld放行多個服務
[root@web01 ~]# firewall-cmd --add-service={http,nginx}
success
3)自己新增服務,配置規則
[root@web01 ~]# cp /usr/lib/firewalld/services/{http.xml,suibian.xml}
[root@web01 ~]# firewall-cmd --reload
success
[root@web01 ~]# firewall-cmd --add-service=suibian
success
2.firewalld放行埠
1)firewalld放行一個埠
[root@web01 ~]# firewall-cmd --add-port=80/tcp
success
2)firewalld放行多個埠
[root@web01 ~]# firewall-cmd --add-port={81/tcp,82/tcp}
success
3.firewalld放行網段
[root@web01 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
success
4.配置測試
#要求:使用firewalld各個區域規則結合配置,調整預設public區域拒絕所有流量,但如果來源IP是10.0.0.0/24網段則允許
1.去除配置中的規則
[root@web01 ~]# firewall-cmd --remove-service=ssh
success
2.配置允許10.0.0.0/24網段
[root@web01 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
success
六、防火牆配置埠轉發
埠轉發是指傳統的目標地址對映,實現外網訪問內網資源
流量轉發命令語法為:
firewalld-cmd --permanent --zone=<區域> --add-forward-port=port=<源埠號>:proto=<協議>:toport=<目標埠號>:toaddr=<目標IP地址>
1.埠轉發實踐
例項:需要將本地的192.168.15.7:5555埠轉發至192.168.14.5:22埠
#1.新增埠轉發
[root@web01 ~]# firewall-cmd --add-forward-port=port=5555:proto=tcp:toport=22:toaddr=192.168.14.5
success
#2.開啟ip偽裝
[root@web01 ~]# firewall-cmd --add-masquerade
success
#3.檢視防火牆配置
[root@web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services:
ports:
protocols:
masquerade: yes
forward-ports: port=5555:proto=tcp:toport=22:toaddr=192.168.14.5
source-ports:
icmp-blocks:
rich rules:
#4.測試連線
[C:\~]$ ssh 192.168.15.7 5555
Connecting to 192.168.15.7:5555...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Mon Dec 14 10:59:58 2020 from 192.168.15.1
[root@lb01 ~]#
七、防火牆富規則
firewalld中的富語言規則表示更細緻,更詳細的防火牆策略配置,他可以針對系統服務、埠號、原地址和目標地址等諸多資訊進行更有針對性的策略配置,優先順序在所有的防火牆策略中也是最高的,下面為firewalld富語言規則幫助手冊
[root@m01 ~]# man firewall-cmd
[root@m01 ~]# man firewalld.richlanguage
rule
[source]
[destination]
service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
[log]
[audit]
[accept|reject|drop|mark]
rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
accept | reject [type="reject type"] | drop
#富語言規則相關命令
--add-rich-rule='<RULE>' #在指定的區域新增一條富語言規則
--remove-rich-rule='<RULE>' #在指定的區刪除一條富語言規則
--query-rich-rule='<RULE>' #找到規則返回0,找不到返回1
--list-rich-rules #列出指定區裡的所有富語言規則
1.例項一
允許10.0.0.1主機能夠訪問http服務,允許172.16.1.0/24能訪問111埠
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=http accept'
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port=111 protocol=tcp accept'
success
[root@web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="10.0.0.1" service name="http" accept
rule family="ipv4" source address="172.16.1.0/24" port port="111" protocol="tcp" accept
2.例項二
預設public區域對外開放所有人能通過ssh服務連線,但拒絕172.16.1.0/24網段通過ssh連線伺服器
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh reject'
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh drop'
success
#drop和reject
drop直接丟棄,不返回任何內容
reject是拒絕,會返回拒絕的內容
3.例項三
使用firewalld,允許所有人能訪問http,https服務,但只有10.0.0.1主機可以訪問ssh服務
[root@web01 ~]# firewall-cmd --add-service={http,https}
success
[root@web01 ~]# firewall-cmd --remove-service=ssh
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=ssh accept'
4.例項四
當用戶來源IP地址是10.0.0.1主機,則將使用者請求的5555埠轉發至後端172.16.1.4的22埠
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 forward-port port=5555 protocol=tcp to-port=22 to-addr=172.16.1.4'
[root@web01 ~]# firewall-cmd --add-masquerade
success
6.檢視富規則
[root@web01 ~]# firewall-cmd --list-rich-rules
[root@web01 ~]# firewall-cmd --list-all
7.禁ping
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'
8.開啟vrrp協議
firewall-cmd --zone=public --add-protocol=vrrp --permanent
八、防火牆備份
我們的防火牆規則,配置永久生效後,會儲存在 /etc/firewalld/zones/ 目錄下,我們如果要進行同樣的防火牆配置,只需要將該檔案推送至新伺服器,並啟動防火牆即可
如果要備份,備份的也是 /etc/firewalld/zones/ 目錄
九、防火牆內部共享上網
在指定的帶有公網IP的例項上啟動Firewalld防火牆的NAT地址轉換,以此達到內部主機上網。
1.開啟ip偽裝
[root@lb01 ~]# firewall-cmd --add-masquerade
[root@lb01 ~]# firewall-cmd --add-masquerade --permanent
2.開啟核心轉發
[root@lb01 ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
#CentOS 6 系統需要手動開啟,CentOS 7 預設就是開啟的
[root@lb01 ~]# sysctl -p
3.修改內網伺服器的網絡卡
[root@web01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.4
DNS1=223.5.5.5
#重啟網絡卡
[root@web01 ~]# ifdown eth1 && ifup eth1
4.測試
[root@web01 ~]# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8e:6b:41 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8e:6b:4b brd ff:ff:ff:ff:ff:ff
inet 172.16.1.7/24 brd 172.16.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe8e:6b4b/64 scope link
valid_lft forever preferred_lft forever
[root@web01 ~]# ping www.baidu.com
PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data.
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=127 time=11.7 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=127 time=9.53 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=3 ttl=127 time=9.20 ms
Iptables 防火牆
一、Iptables防火牆概述
1.應用場景
1.主機安全
2.內部共享上網
3.埠或IP轉發
2.iptables注意事項
1.匹配規則是從上往下一次執行的
2.只要匹配上規則,就不會在往下執行
3.如果都沒有匹配到規則,就執行預設規則
4.預設規則最後執行,預設允許所有
5.經常使用的規則往前放
二、iptables 四表五鏈
1.四表五鏈
#四表:
filter: 負責過濾資料包:INPUT、OUTPUT、FORWARD
nat: 負責網路地址轉換:PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 負責修改資料包內容、服務型別、TTL、並且可以配置路由實現QOS:PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
raw: 決定資料包是否被狀態跟蹤機制處理PREROUTING、OUTPUT
#五鏈:
INPUT鏈 進來的資料包應用此規則鏈中的策略
OUTPUT鏈 外出的資料包應用此規則鏈中的策略
FORWARD鏈 轉發資料包時應用此規則鏈中的策略
PREROUTING鏈 對資料包作路由選擇前應用此鏈中的規則(所有的資料包進來的時侯都先由這個鏈處理)
POSTROUTING鏈 對資料包作路由選擇後應用此鏈中的規則(所有的資料包出來的時侯都先由這個鏈處理)
1) PREROUTING: 主機外報文進入位置,允許的表mangle, nat(目標地址轉換,把本機地址轉換為真正的目標機地址,通常指響應報文)
2) INPUT:報文進入本機使用者空間位置,允許的表filter, mangle
3) OUTPUT:報文從本機使用者空間出去的位置,允許filter, mangle, nat
4) FORWARD:報文經過路由並且發覺不是本機決定轉發但還不知道從哪個網絡卡出去,允許filter, mangle
5) POSTROUTING:報文經過路由被轉發出去,允許mangle,nat(源地址轉換,把原始地址轉換為轉發主
機出口網絡卡地址)
filter: INPUT ------------------> FORWARD ---------------> OUTPUT
nat: PREROUTING ----------> INPUT ----------> OUTPUT -----------> POSTROUTING
mangle: PREROUTING ---------> INPUT --------> FORWARD -------> OUTPUT --------> POSTROUTING
raw : PREROUTING ---------> OUTPUT
2.filter表
#過濾資料包,主要作用就是阻止和允許訪問
1.INPUT鏈:過濾流入主機的資料包
2.OUTPUT鏈:過濾流出主機的資料包
3.FORWARD鏈:負責轉發流經主機的資料包
3.Nat表
#用於網路地址轉換,主要作用就是埠轉發和ip轉發
1.OUTPUT鏈:過濾流出主機的資料包
2.PREROUTING鏈:資料包到達防火牆時進行判斷,改寫資料包的地址或或埠(進)
3.POSTROUTING鏈:資料包到達防火牆時進行判斷,改寫資料包的地址或或埠(出)
總結:表的作用各有不同,鏈的位置各有不同。表中的鏈就是將表的功能放到鏈的具體位置去執行
4、什麼是規則
防火牆規則稱之為防火牆策略,主要是描述執行什麼防火牆功能的記錄。
三、iptables安裝
1.安裝
[root@lb01 ~]# yum install -y iptables-services
2.啟動
[root@lb01 ~]# systemctl start iptables.service
3.iptables常用引數
1.鏈管理:
-N:new, 自定義一條新的規則鏈;
-X:delete,刪除自定義的規則鏈;
注意:僅能刪除 使用者自定義的 引用計數為0的 空的 鏈;
-P:Policy,設定預設策略;對filter表中的鏈而言,其預設策略有:
ACCEPT:接受
DROP:丟棄
REJECT:拒絕
-E:重新命名自定義鏈;引用計數不為0的自定義鏈不能夠被重新命名,也不能被刪除;
2.規則管理:
1.檢視:
-t: 指定操作的表(預設的表是:filter )
-L:list, 列出指定鏈上的所有規則;
-n:numberic,以數字格式顯示地址和埠號;
-v:verbose,詳細資訊;
-vv, -vvv
-x:exactly,顯示計數器結果的精確值;
--line-numbers:顯示規則的序號;
-S, --list-rules 列出所有的規則
2.增加:
-A:append,追加
3.插入
-I:insert, 插入,要指明位置,省略時表示第一條
4.刪除
-D:delete,刪除;
(1) 指明規則序號;
(2) 指明規則本身;
-F:flush,清空指定的規則鏈;
5.修改
-R:replace,替換指定鏈上的指定規則;
6.置零
-Z:zero,置零;
iptables的每條規則都有兩個計數器:
(1) 匹配到的報文的個數;
(2) 匹配到的所有報文的大小之和;
四、iptables常用操作
1.檢視防火牆策略(filter)
[root@lb01 ~]# iptables -nL
2.檢視指定表
-t 指定表
[root@lb01 ~]# iptables -nL -t nat
3.清空防火牆規則
#刪除規則
[root@lb01 ~]# iptables -F
#刪除自定義的鏈
[root@lb01 ~]# iptables -X
#計數器清零
[root@lb01 ~]# iptables -Z
4.新增防火牆規則
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
iptables #命令
-t #指定表
filter #指定鏈
-A #新增規則
INPUT #鏈的名字
-p #指定協議
tcp #tcp協議
--dport #指定埠
22 #埠
-j #指定動作
DROP #丟棄
-i : 進來的網絡卡
-o : 出去的網絡卡
-m : 指定模組
-j : 轉發模式
-p : 指定對應的管理流量型別
TCP
UDP
ICMP : ping
ALL : 所有協議
-j : 指定動作,轉發模式
ACCEPT : 允許通過
DROP : 不允許通過
-s 源地址
-d 目標地址
--sport 源埠
--dport 目標埠
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61
iptables -t nat -I POSTROUTING -s 172.31.0.0/20 -j SNAT --to-source 47.242.159.82
5.刪除防火牆規則
#1.檢視防火牆規則序號
[root@lb01 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
#2.刪除防火牆規則
[root@lb01 ~]# iptables -D INPUT 1
#3.再次檢視
[root@lb01 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
五、防火牆配置例項
1.不允許訪問本機
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -j DROP
2.要求172.16.1.0可以訪問web01,其他的請求全部拒絕
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -s 172.16.1.0/20 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -j DROP
3.要求在案例2的基礎上,允許192.168.15.66可以訪問
[root@lb01 ~]# iptables -t filter -I INPUT -p ALL -s 192.168.15.66 -j ACCEPT
4.只允許其他網路ping web01
[root@lb01 ~]# iptables -t filter -I INPUT -p ICMP -s 192.168.15.7 -j ACCEPT
5、要求只有172.16.0.0網段的能夠登入web01
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -s 172.16.0.0/20 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -j DROP
6、訪問web01的8080埠轉發至80埠
[root@lb01 ~]# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
5.禁止埠訪問
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp --dport 111 -j DROP
6.拒絕IP訪問
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -i eth0 -j DROP
-i 指定網絡卡
-s 指定源地址IP
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -i eth0 -j REJECT
7.禁止IP網段訪問
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j REJECT
8.只允許某個IP訪問
#正規的使用方法
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -i eth0 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP
#取反的使用
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP
#新增允許的ip時
[root@lb01 ~]# iptables -t filter -I INPUT -p tcp -s 10.0.0.7 -i eth0 -j ACCEPT
-I 向上新增規則
六、防火牆模組
1.multiport
解釋:連續匹配多個埠
案例1:要求192.168.15.0/24網段的所有IP只能夠訪問22,80,443埠,其他的取決。
iptables -t filter -A INPUT -p TCP --dport 22 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 80 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 443 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
iptables -t filter -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
案例2:要求192.168.15.0/24網段的所有IP只能夠訪問70-90埠,其他拒絕
iptables -t filter -A INPUT -p tcp -m multiport --dports 10000:30000 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport --dports 10:30 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
2.iprange模組
解釋:連續匹配多個IP
引數:
--src-range from[-to]: 源地址範圍
--dst-range from[-to] 目標地址範圍
案例1:要求只有192.168.15.7到192.168.15.66能夠通過22埠登入,其他的拒絕
iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.15.7 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.15.66 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.15.7-192.168.15.66 -j ACCEPT
3.string模組
解釋:按照內容進行匹配
引數:
--string pattern # 指定要匹配的字串
--algo {bm|kmp} # 配的查詢演算法
案例1:要求訪問的內容中包含HelloWorld的內容不允許訪問,其他的可以。
iptables -t filter -A OUTPUT -p tcp -m string --string "hello" --algo kmp -j DROP
4.time模組(UTC)
解釋:根據時間來控制訪問(UTC)
引數:
--timestart hh:mm[:ss] # 開始時間
--timestop hh:mm[:ss] # 結束時間
--monthdays day[,day...] # 指定一個月的某一天
--weekdays day[,day...] # 指定周 還是 周天
案例1:要求上午的 08:00 到 上午的 10:22 不允許訪問,其他時間可以。
iptables -t filter -A INPUT -p tcp -m time --timestart 00:00 --timestop 02:22 -j DROP
5.icmp模組
解釋:控制icmp協議
引數:
--icmp-type {type[/code]|typename}
echo-request (8) 請求(我可以ping別人,別人休想ping我)
echo-reply (0) 迴應(別人可以ping我,我休想ping別人)
案例1:禁止別人ping我,但我可以ping別人
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j DROP
6.connlimit模組
# 控制併發數
引數:
--connlimit-upto n # 如果現有連線數小於或等於 n 則 匹配
--connlimit-above n # 如果現有連線數大於n 則匹配
ACCEPT 將資料包放行,進行完此處理動作後,將不再比對其它規則,直接跳往下一個規則鏈。
REJECT 攔阻該資料包,並傳送資料包通知對方。
DROP 丟棄包不予處理,進行完此處理動作後,將不再比對其它規則,直接中斷過濾程式。
REDIRECT 將包重新導向到另一個埠,進行完此處理動作後,將會繼續比對其它規則。
案例1:要求登入192.168.15.5的視窗最多有兩個
iptables -t filter -A INPUT -p ALL --dport 22 -m connlimit --connlimit-above 2 -j REJECT
7.limit模組
# 針對 報文速率 進行限制。 秒、分鐘、小時、天。
--limit rate[/second|/minute|/hour|/day] # 報文數量
--limit-burst number # 報文數量(預設:5)
網速 * 1000 / 1500 = 資料包數量
2.允許10個數據報文快速通過,超過的資料報文 1/m
iptables -t filter -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -t filter -A INPUT -p icmp -j DROP
3.限速:限制傳輸的頻寬不可以超過500k(500 * 1000 / 1500 = 333 包)
案例1:要求每秒只能夠傳輸500k大小資料
iptables -t filter -A INPUT -p tcp -m limit --limit 333/s -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
8、防火牆的案例
1.對所有的地址開放本機的tcp(80、22、8080-9090)埠的訪問
iptables -t filter -A INPUT -p tcp -m multiport --dports 80,22,8080:9090 -j ACCEPT
2.允許對所有的地址開放本機的基於ICMP協議的資料包訪問
iptables -t filter -A INPUT -p icmp -j ACCEPT
3.其他未被允許的埠禁止訪問
iptables -t filter -A INPUT -p tcp -j DROP
七、企業一般配置
1.配置前考慮下
1.考慮防火牆開在哪臺機器上
2.這臺機器部署了哪些服務
nginx
keepalive
3.服務對應的埠和協議
80
443
vrrp
22
4.配置預設拒絕所有
#配置
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p vrrp -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 172.16.1.7 --dport 22 -j ACCEPT
[root@lb01 ~]# iptables -P INPUT DROP
#注意天坑:
配置好以後,不要清空防火牆規則,小心刪除規則,因為我們最後一條配置的是預設拒絕所有,而清空防火牆規則不會更改其狀態,還是預設拒絕所有,所以完犢子了
[root@lb01 ~]# iptables -P INPUT ACCEPT
2.防火牆規則永久生效
#配置完防火牆,執行以下操作,將自己配置的規則新增到防火牆的配置檔案中
[root@lb01 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@lb01 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Wed Dec 16 15:39:15 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:176]
:POSTROUTING ACCEPT [1:176]
COMMIT
# Completed on Wed Dec 16 15:39:15 2020
# Generated by iptables-save v1.4.21 on Wed Dec 16 15:39:15 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5168]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -s 10.0.0.1/32 -i eth0 -p tcp -j ACCEPT
-A INPUT -s 10.0.0.0/24 -i eth0 -p tcp -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Dec 16 15:39:15 2020