CentOS7 自帶防火牆Firewalld的實用命令案例

在CentOS 6和以前的時代,使用Linux自帶的防火牆管理一般都是用iptables來實現,iptables實現是一個很好的方案,內核原生支持,規則靈活準確。唯一不方便的是規則的保存和恢復比較費事,要麼把iptables命令寫入到rc.local,要麼就得使用iptables-save和iptables-restore命令來恢復,不是很方便。另外如果一條命令如果配錯,可能會導致連不上服務器了,需要使用顯示器或者遠程重啓,調試起來也不方便。firewalld就很好的解決了上面的問題,一方面firewalld可以做到像iptables一樣靈活,語法更易讀,而且可以設置timeout選項,讓一條規格有一個失效時間,就像更改顯示器分辨率設置後有個超時自動回退一樣,非常人性化。下面就介紹一些常用的firewalld命令。

很多人對這個功能都是一關了之,這樣一是不利於網絡安全,另一方面也體會不到firewalld的優秀體驗了。

首先要介紹一下zone的概念,一個zone會綁定一張或多張網卡,也就是eth0這樣的。zone有active和非活動之分。需要設置一個default zone,這個default zone的規則會發揮作用,其他zone不發揮作用。每添加一條rule的時候,如果不指定zone那麼就應用到default zone上去。系統默認的default zone是public,並且在使用光盤最小化安裝的時候會安裝上firewalld並且默認public zone。可以從外部訪問SSH服務(也就是22端口),其他端口不允許連入,禁ping。對於出站流量沒有限制。

 

關閉firewalld並使其開機不自啓

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

注意下面的命令,要使其生效執行的話一定要執行reload,不然跟沒做一樣

firewall-cmd --reload

 

如果命令之間添加了--permanent參數,那麼當前的命令會永久生效,即使重啓也不會失效,這一點比iptables要方便

如果命令之間添加了--timeout=時間長度 參數,那麼該命令只會在這個時間長度內生效,超時失效,但是不可以與--permanent參數共用

 

基本操作:

創建一個新zone並設置爲默認

firewall-cmd --permanent --new-zone=testing
firewall-cmd --permanent --set-default-zone=testing

永久放通一個端口

firewall-cmd --permanent --zone=public --add-port=8080/tcp

查看某個zone下放通的全部端口和協議

firewall-cmd --permanent --list-ports

永久放通一個服務(服務會對應着一個或者多個端口)

firewall-cmd --add-service=http

查看所有可用的服務名稱

firewall-cmd --permanent --get-services

RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

查看當前zone開放的服務

firewall-cmd --permanent --list-services

ssh dhcpv6-client

查看所有zone

firewall-cmd --get-zones
firewall-cmd --list-all-zones

查看某個zone下面所有的規則

firewall-cmd --permanent --list-all --zone=public

 

 

NAT操作:

打開NAT功能,

有兩種方式,--add-masquerade或使用--add-rich-rule添加自定義規則

firewall-cmd --permanent --zone=testing --add-masquerade
firewall-cmd --permanent --query-masquerade
firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 masquerade'

添加端口轉發,

有多種方式,既可以直接使用--add-forward-port命令直接添加,也可以通過--add-rich-rule添加自定義規則

firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 forward-port port=22 protocol=tcp to-port=2222 to-addr=10.0.0.10'
firewall-cmd --permanent --zone=testing --list-rich-rules
firewall-cmd --permanent --zone=public --add-forward-port=port=9080:proto=tcp:toport=88:toaddr=192.166.1.187
firewall-cmd --permanent --zone=public --add-forward-port=port=9080:proto=tcp:toport=88
firewall-cmd --permanent --zone=public --remove-forward-port=port=9080

注意如果添加了:toaddr參數,後面跟的IP可以使本地IP(本地主機不同網絡接口的)或者是遠程主機的IP,如果是本地主機那麼訪問被轉發端口如同訪問源端口,如果是遠程主機的IP,需要打開當前主機的NAT轉發功能,如上面提到的,否則端口轉發做了也不通。

 

封禁入站IP:

封禁IP既可以通過--add-rich-rule來使用firewalld的語法,也可以使用 --add-rule來使用iptables的語法,讓習慣iptables的運維人員無縫遷移

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.0.11' reject"
firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.0.10/24 reject'
firewall-cmd --permanent --zone=testing --remove-rich-rule='rule family=ipv4 source address=10.0.0.0/24 destination address=192.168.0.10/32 port port=8080-8090 protocol=tcp accept'
firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 destination address=192.168.0.10/32 port port=8080-8090 protocol=tcp accept'

 

限制出站流量:

(通過主動請求到服務器的反向流量不受影響),下面介紹使用--add-rule命令,模仿iptables的語法

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j DROP
firewall-cmd --permanent --direct --get-all-rules

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章