centos7系統使用firewalld服務替代了iptables服務,但是依然可以使用iptables來管理內核的netfilter
但其實iptables服務和firewalld服務都不是真正的防火牆,只是用來定義防火牆規則功能的管理工具,將定義好的規則交由內核中的netfilter(網絡過濾器來讀取)從而實現真正的防火牆功能
在iptables命令中設置數據過濾或處理數據包的策略叫做規則,將多個規則合成一個鏈。
常見的控制類型
ACCEPT 允許通過
LOG 記錄日志信息,然后傳給下一條規則繼續匹配
REJECT 拒絕通過,必要時給出提示
DROP 直接丟棄,不給出任何回應。
規則鏈則依據處理數據包的位置不同而進行分類
PREROUTING進行路由選擇前處理數據包
INPUT 處理入站數據包
OUTPUT 處理出站數據包
FORWARD 處理轉發的數據包
POSTROUTING 在進行路由選擇后處理數據包
iptables中的規則表是用於容納規則鏈,規則表默認是允許狀態的,那么規則鏈就是設置被禁止的規則,而反之如果規則表是禁止狀態的,那么規則鏈就是設置被允許的規則。
raw表:確定是否對該數據包進行狀態跟蹤
mangle表:為數據包設置標記
nat表:修改數據包中的源,目標IP地址或端口
filter表:確定是否放行該數據包(過濾)
規則表的先后順序:raw-mangle-nat-filter
規則鏈的先后順序:
入站順序:PREROUTING-INPUT
出站順序:OUTPUT-POSTROUTING
轉發順序:PREROUTING-FORWARD-POSTROUTING
注意事項
沒有指定規則表則默認指filter表。
不指定規則鏈則指表內所有的規則鏈。
在規則鏈中匹配規則時會依次檢查,匹配即停止(LOG規則除外),若沒匹配項則按鏈的默認狀態處理。
基本的命令參數
iptables命令用於管理防火牆的規則策略,格式為:“iptables [-t 表名] 選項[鏈名][條件] [-j 控制類型]”不指定表,默認netfilter
禁止所有的ping操作
iptables -I INPUT -p icmp -j DROP
firewalld防火牆
區域規則
firewall-cmd
很多人因為防火牆的設置太繁雜,所以經常直接systemctl stop firewalld關閉防火牆。
其實這樣是不安全的,關閉防火牆之后,不法分子就可以輕易的攻擊服務器了。
下面我以開啟http為例子,展示如何讓http能通過防火牆
firewall-cmd --list-all獲取當前的防火牆規則
我的是dmz
firewall-cmd --add-service=http
如果是success,那么服務器上的http服務就能通過防火牆了。但是只是暫時的。
firewall-cmd --permanent --zone=dmz --add-service=http
如果是開放某個端口
firewall-cmd --permanent --zone=dmz --add-port=xxx/tcp