Linux学习整理-网络防火墙firewalld
1 概念
1-1. firewall簡介
firewalld是Linux系統的一款防火墻管理工具。通過充當netfilter的前端來提供防火墻功能,默認后端是iptables/ntftables。開發語言是python。firewalld=firewall+daemon。實際上就是一個守護進程。操作firewalld的是firewalld-cmd命令。
CentOS Ubuntu★ openSUSE+--------------+ +------------+ +---------------------+ -*-| firewall-cmd | | ufw | | SUSEfirewall2 | |+--------------+ +------------+ +---------------------+ |用戶空間+-----------------------------------------------------------+ || iptables command | |+-----------------------------------------------------------+ -*-+-----------------------------------------------------------+ -*-| | || OS(Netfilter) | 內核空間| | |+-----------------------------------------------------------+ -*-firewalld主要是在centos7以后才作為默認的防火墻管理工具的。像Ubuntu,Debian也可以安裝firewalld。
- firewall-cmd 是一個命令行的客戶端,通過D-Bus來操作后端。
- firewall-config是一個圖形界面的客戶端,也是通過D-Bus來操作后端。
- firewall-applet也是一個圖形界面客戶端,也是通過D-Bus來操作后端。
firewall-applet是firewalld中可選的狀態欄小圖標程序,它能夠顯示防火墻日志通知,同時也是一種打開 firewall-config 的快捷方式
- firewall-offline-cmd是一個命令行客戶端,不需要通過D-Bus來操作后端。
firewalld?的配置儲存在?/usr/lib/firewalld/?和?/etc/firewalld/?里的各種 XML 文件里,這樣保持了這些文件被編輯、寫入、備份的極大的靈活性,使之可作為其他安裝的備份等等。
1-2. 運行時和永久
- 運行時(runtime)
firewalld配置的防火墻策略默認為運行時(Runtime)模式,就是設置完立刻生效,但是系統的重啟會導致失效。要想設置完立刻生效,重啟也不失效需要--runtime-to-permanent屬性。
- 永久(permanent)
如果想讓配置策略一直存在,方法就是在firewall-cmd命令后面添加–permanent屬性,這樣配置的防火墻策略就可以永久生效了。但是,永久生效模式有一個“不近人情”的特點,就是使用它設置的策略只有在系統重啟后才會生效。如果想讓配置的永久策略立即生效,需要手動執行firewall-cmd --reload命令。
1-3. 對網絡區域的理解
firewalld的網絡區域可以理解成windows聯網時,彈出來的對話框,讓選擇網絡。
?
- drop(丟棄)
任何接收的網絡數據包都被丟棄,沒有任何回復。僅能有發送出去的網絡連接。
可以用firewall-cmd --list-all-zones來查看各個網絡區域的設置。
droptarget: DROPicmp-block-inversion: nointerfaces: sources: services: ports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:- block(限制)
任何接收的網絡連接都被?IPv4?的?icmp-host-prohibited?信息和?IPv6?的?icmp6-adm-prohibited?信息所拒絕。
blocktarget: %%REJECT%%icmp-block-inversion: nointerfaces: sources: services: ports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:- public(公共)
在公共區域內使用,不能相信網絡內的其他計算機不會對您的計算機造成危害,只能接收經過選取的連接。
public (active)target: defaulticmp-block-inversion: nointerfaces: ens33sources: services: dhcpv6-client http sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:- external(外部)
特別是為路由器啟用了偽裝功能的外部網。您不能信任來自網絡的其他計算,不能相信它們不會對您的計算機造成危害,只能接收經過選擇的連接。
externaltarget: defaulticmp-block-inversion: nointerfaces: sources: services: sshports: protocols: masquerade: yesforward-ports: source-ports: icmp-blocks: rich rules:- dmz(非軍事區)
用于您的非軍事區內的電腦,此區域內可公開訪問,可以有限地進入您的內部網絡,僅僅接收經過選擇的連接。
dmztarget: defaulticmp-block-inversion: nointerfaces: sources: services: sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:- work(工作)
用于工作區。您可以基本相信網絡內的其他電腦不會危害您的電腦。僅僅接收經過選擇的連接。
worktarget: defaulticmp-block-inversion: nointerfaces: sources: services: dhcpv6-client sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:- home(家庭)
用于家庭網絡。您可以基本信任網絡內的其他計算機不會危害您的計算機。僅僅接收經過選擇的連接。
hometarget: defaulticmp-block-inversion: nointerfaces: sources: services: dhcpv6-client mdns samba-client sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:- internal(內部)
用于內部網絡。您可以基本上信任網絡內的其他計算機不會威脅您的計算機。僅僅接受經過選擇的連接。
internaltarget: defaulticmp-block-inversion: nointerfaces: sources: services: dhcpv6-client mdns samba-client sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:- trusted(信任)
可接受所有的網絡連接。
trustedtarget: ACCEPTicmp-block-inversion: nointerfaces: sources: services: ports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:1-4. 總結
- target
target: { default , ACCEPT , DROP , REJECT }
| DROP | 拒絕請求,不會回復信息,訪問者處于等待狀態,直到timeout |
| REJECT | 拒絕請求,會明確告訴訪問者,請求被拒絕 |
| ACCEPT | 接受請求。 |
| default(默認跟REJECT一樣) |
- icmp-block-inversion
icmp-block-inversion: { yes , no }
| yes | icmp-blocks里面記述的接受,沒記述的拒絕,也就是反轉 |
| no | icmp-blocks里面記述的拒絕。 |
- ?interfaces
interfaces: { 網卡名稱?}
用ifconfig或者ip addr查詢到的網卡名稱
例:interfaces: ens33
- sources?
sources: { IP or CIDR}
例:sources:192.168.0.211
? ? ? ?sources:192.168.0.0/24
- services
?services: { servicetype}
firewall-cmd --get-services命令 可以查詢到所有的service。但是只能看到名字。除了大家熟悉的http,ssh等,其余的可以去/usr/lib/firewalld/services/ 下查詢。
例:zabbix-server 可以用?cat /usr/lib/firewalld/services/zabbix-server.xml 去看端口號
- ports?
ports: { port/protocol }
像http,https,ssh一類的可以用上面的services來定義。
像一些非常用端口,比如20001一類的,可以用ports定義。
例:ports:20001/tcp
- protocols
?protocols: { protocol }
protocol協議就是普通的熟知的協議,比如說tcp udp icmp。
- masquerade
?這個東西是端口地址轉發用的,比如說從別的機器訪問本機的9090端口相當于訪問另一臺機器的80端口。這種情況下,需要開啟masquerade,當數據流量返回來的時候可以自動返回。
例:也就是說目標地址轉換以后,從A(訪問機)->B(本機)->C(地址轉換后的機器),這個route是通的,但是數據從C(地址轉換后的機器)->B(本機)->A(訪問機),如果不開啟masquerade,就需要源地址轉換。
firewall-cmd --add-masquerade? ? ? ?開啟
firewall-cmd --remove-masquerade 關閉
- forward-ports
?forward-ports: { port=port:proto=protocol:toport=轉換后的端口:toaddr=轉換后的IP }
例:forward-ports: port=8080:proto=tcp:toport=80:toaddr=192.168.1.1
就是到達本機8080端口的數據都會轉發到192.168.1.1:80。這個時候如果上面的masquerade不開啟,從192.168.1.1:80返回的數據就不能到達本機的8080端口。
- source-ports
?source-ports:{ port/protocol }
跟前面的ports一樣的格式,這個指的是源port,ports指的是本機的port。
- icmp-blocks?
icmp-blocks: { ICMP Type }
ICMP type 可以用?firewall-cmd --get-icmptypes 來查看。具體的定義情報的話 參照
/usr/lib/firewalld/icmptype 下的xml文件
- rich-rules?
rich-rules: {rich rule}
前面的那些屬性設置不了規則了,可以用這個屬性來設置詳細規則。
例:firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.200.0/24 port port=135 protocol=tcp accept'
來自192.168.200.0/24網段的訪問本機端口135的tcp協議,都接受。
充分理解上面的東西以后剩下的就是命令的用法了。
2 firewalld的啟動和關閉
# firewalld狀態查詢(兩個都可以) firewall-cmd --state systemctl status firewalld#firewalld啟動 systemctl start firewalld#firewalld開機啟動 systemctl enable firewalld#firewalld關閉 systemctl stop firewalld3 firewalld的命令使用
3-1. 更改運行時設置,然后將它們永久化
firewall-cmd <other options> firewall-cmd --runtime-to-permanent3-2.?設置永久設置并將設置重新加載到運行時模式
firewall-cmd --permanent <other options> firewall-cmd --reload3-3. 小技巧,規則過期,例如下面的例子,增加ssh的規則,但是15分之后失效。
firewall-cmd --add-service=ssh --timeout 15m3-4. 列出當前active zone的全屬性
firewall-cmd --list-all# 擴展 # 列出指定zone的全屬性 firewall-cmd --list-all --zone=block#列出所有的zone的全屬性 firewall-cmd --list-all-zones3-5. 列出當前active zone的各種屬性值
firewall-cmd --list-[option]
option可以取下面的值
? interfaces
? sources?
? services
? ports
? protocols
? forward-ports
? source-ports
? icmp-blocks
? rich-rules
3-6. 其它的command可以用下面的命令來看幫助文檔。
man firewall-cmdfirewall-cmd --help總結
以上是生活随笔為你收集整理的Linux学习整理-网络防火墙firewalld的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拯救者win10重置系统出现“初始化出现
- 下一篇: linux 其他常用命令