Linux防火牆firewalld/iptables使用教程
一、Firewalld(iptables)命令介紹
1、Firewalld(iptables)語法規則
# iptables [-t 表名] 選項 [鏈名] 條件匹配 -j 執行動作 #表名不寫的話預設為filter表
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT #為filter表的INPUT鏈增加規則,當目標埠為80並且為tcp協議則放行
2、Firewalld(iptables)常用選項
-A |-D |-I [CHAINS]:給指定的鏈增加或者刪除或者插入一個規則
iptables -A INPUT -p tcp --dport 80 -j DROP #增加一條規則用於測試
iptables -L --line-numbers #加上--line-numbers引數可以顯示規則的編號,可以看到之前設定的編號為1
iptables -D INPUT 1 #刪除編號為1的規則
-L:顯示所有鏈下的所有規則,預設是filter表,可以用-t選項指定其他表。還可以跟上-n選項,對主機或埠資訊不做反向解析;-v顯示更詳細資訊;--line-numbers顯示行號
iptables -t filter -L -n
Chain INPUT (policy ACCEPT) #INPUT鏈下的規則
target prot opt source destination
Chain FORWARD (policy ACCEPT) #FORWARD鏈下的規則
target prot opt source destination
Chain OUTPUT (policy ACCEPT) #OUTPUT鏈下的規則
target prot opt source destination
-N:建立自定義鏈,針對不同的場景創造不同的鏈,方便管理
iptables -I INPUT -p tcp --dport 80 -j IN_WEB #將80請求轉發給自定義鏈IN_WEB
iptables -N IN_WEB #建立自定義鏈
iptables -I IN_WEB -s 192.168.1.0/24 -j ACCEPT #定義自定義鏈的具體規則
-X:清空使用者自定義鏈
-Z:計數器歸零
-F:清空所有規則或者指定規則
iptables -F #清空所有規則
iptables -F INPUT #清空filter表INPUT鏈中的規則
iptables -t nat -F PREROUTING #清空nat表PREROUTING中的規則
-j ACCEPT | DROP | REJECT | DNAT | SNAT | MASQUERADE | MARK:指定防火牆的行為,ACCEPT是允許;DROP是丟棄(放棄響應對方請求且不作答覆);REJECT是拒絕(會明確給對方一個訊息說自己拒絕請求);DNAT為目標地址轉換;SNAT為源地址轉換;MASQUERADE是地址偽裝;MARK防火牆標記,可用於LVS持久連線
-p(小寫):指定協議,如tcp、udp、icmp、all
-i:指定網路裝置,如eth0
-P(大寫):指定預設的規則。在生產環境中可以把預設規則設定為拒絕,然後對需要放行的服務設定允許規則,不過做這個設定時要注意把22埠放行,不然自己就無法遠端上伺服器了
iptables -P INPUT DROP #把INPUT鏈的預設規則改為DROP
-s:指定客戶端源地址,通常是對訪問來源做限制
-s 192.168.0.1 #匹配來自192.168.0.1的資料包
-s 192.168.1.0/24 #匹配來自192.168.1.0/24的資料包
--dport:指定目標埠,需配合-p選項。通常是對訪問的埠做限制,可以指定連續的埠。
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -I INPUT -p tcp --dport 10000:10010 -j DROP
--sport:指定源埠,需配合-p選項。
--dport 80
--dport 1000:2000
--dport :3000
· -m multiport:可以定義多個埠或者範圍,最多指定15個
[!] --sports port[,port|,port:port]...:指定多個源埠
[!] --dports port[,port|,port:port]...:指定多個目標埠
[!] --ports port[,port|,port:port]...:同時指定源埠和目標埠
iptables -t filter -A INPUT -s 192.168.100.10 -d 192.168.100.20 -p tcp -m multiport --dports 22,80 -j ACCEPT
· -m iprange:指明連續的IP地址範圍
[!] --src-range from[-to]:源IP地址
[!] --dst-range from[-to]:目標IP地址
iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 192.168.100.50-192.168.100.60 -j DROP #拒絕192.168.100.50-60這幾個IP對80埠的訪問
· -m connlimit:根據客戶端IP併發連線數做限制
--connlimit-upto n:連線的數量小於等於n時匹配
--connlimit-above n:連線的數量大於n時匹配
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP #對80埠連線數大於10個就拒絕
· -m limit:基於速率做限制
--limit N[/second|/minute|/hour|/day]:平均速率,比如每分鐘允許N個請求
--limit-burstnumber:初始放行數量
iptables -I INPUT -d 192.168.100.10 -p icmp -m limit --limit 3/minute #每個客戶端每分鐘只能有3次請求
· -m string:根據字串進行匹配
iptables -I INPUT -p tcp --dport 80 -m string --algo bm --string 'www.baidu.com' -j DROP #不允許訪問baidu.com,--alog bm是一種演算法
· -m time:根據時間進行匹配
-m time --datestart 2019-05-01 --datestop 2019-05-04 #匹配五一節
iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 12:30 --timestop 13:30 --kerneltz 2019-05-04 -j DROP #午休拒絕上網
· -m state:根據連線追蹤機制檢查連線的狀態
[!] --statestate:state包含以下幾種狀態
NEW:新請求
ESTABLISHED:NEW狀態後所建立好的連線
RELATED:相關聯的連線,如FTP服務有2個埠且相關
INVALID:無效連線
iptables -A INPUT -d 192.168.100.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
二、Firewalld(iptables)使用示例
1、單伺服器防護,對明確埠的服務放行,其他全部拒絕
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #放行ssh服務
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 443,80 -j ACCEPT #放行443,80埠
iptables -A INPUT -p tcp -dport 3306 -m iprange --src-range 192.168.1.201-192.168.1.210 -j ACCEPT #允許特定IP訪問3306埠
iptables -A OUTPUT -p tcp -dport 3306 -m iprange --dst-range 192.168.1.201-192.168.1.210 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT #本地連線都允許
iptables -A OUTPUT -i lo -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #根據連線狀態放行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
2、區域網共享一個公網地址實現上網。將一臺擁有內網、外網雙網絡卡的伺服器作為路由器,配置iptables規則,區域網內其他機器將閘道器地址指向到該路由器內網網絡卡地址即可
iptables -t nat POSTROUTING -s 192.169.1.100 -o eth0 -j SNAT -to-source 222.201.178.10
3、跳板機功能
# 開啟系統IP轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward #臨時開啟
#永久生效
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
#請求本機21022埠將跳轉到192.168.17.47:3306埠
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21022 -j DNAT --to-destination 192.168.17.47:3306
#如果客戶端172.20.1.132訪問172.20.7.101:3306埠,將轉發到172.20.7.100:3311埠,該配置是在172.20.7.101完成
iptables -t nat -A PREROUTING -d 172.20.7.101 -p tcp -s 172.20.1.132 --dport 3312 -j DNAT --to-destination 172.20.7.100:3311
iptables -t nat -A POSTROUTING -d 172.20.7.100 -p tcp --dport 3311 -j SNAT --to-source 172.20.7.101
三、Firewalld(iptables)規則的儲存與恢復
iptables-save把規則儲存到檔案中,再由目錄rc.d下的指令碼(/etc/rc.d/init.d/iptables)自動裝載
使用命令iptables-save來儲存規則。一般用
iptables-save > /etc/sysconfig/iptables
生成儲存規則的檔案/etc/sysconfig/iptables,
也可以用
service iptables save
它能把規則自動儲存在/etc/sysconfig/iptables中。
當計算機啟動時,rc.d下的指令碼將用命令iptables-restore呼叫這個檔案,從而就自動恢復了規則。
四、Firewalld(iptables)安裝、啟動
檢視狀態: systemctl status firewalld
關閉: systemctl stop firewalld
安裝:yum install iptables-services
開機禁用 : systemctl disable firewalld
開機啟用 : systemctl enable firewalld
儲存: service iptables save
啟動: systemctl start firewalld

