Firewalld防火墙应用
防火墻的介紹小弟就不在這里做詳細的講解了,那么我們直奔主題吧!
?
Firewalld的網絡區域:
| ?????? 區域?? ???????????????????????????????????????說明 ???????????????????? | |
| trusted(信任區域) | 可接收所有的網絡 |
| public(公共區域) | 除非與傳出的流量相關,或與ssh或dhcpv6-client預定義服務匹配,否則拒絕流量傳入。在公共區域內,不能相信網絡內的其他計算機不會對計算機造成危害,只能接收經過選擇的連接。并且,該區域是新添加網絡接口的默認區域。 |
| work(工作區域) | 除非與傳出流量相關,或與ssh、ipp-client、dhcpv6-client預定于服務匹配,否則拒絕流量傳入,用于工作區。信任網絡內的其他計算機不會危害計算機,僅接收經過選擇的連接 |
| home(家庭區域) | 除非與傳出流量相關,或者與ssh、ipp-client、mdns、samba-client、dhepv6-client預定義服務匹配,否則拒絕流量傳入,用于家庭網絡。信任網絡內的其他計算機不會危害計算機,僅接收經過選擇的連接 |
| internal(內部區域) | 除非與傳出流量相關,或者ssh、ipp-client、mdns、samba-client、dhcpv6-client預定義服務匹配,否則拒絕流量傳入,用于內部網絡。信任網絡內的其他計算機不會危害計算機,僅接收進經過選擇的連接 |
| external(外部區域) | 除非與傳出流量相關,或與ssh預定義服務匹配,否則拒絕流量傳入。通過此區域轉發的ipv4傳出流最終將進行地址偽裝,可用于為路由器啟用了偽裝功能的外部網絡 |
| Dmz(隔離區域,也叫非軍事區域) | 除非與傳出的流量相關,或與ssh預定義服務匹配,否則拒絕流量傳入 |
| Block(限制區域) | 除非與傳出流量相關,否則拒絕所有傳入流量 |
| Drop(丟棄區域) | 除非與傳出流量相關,否則丟棄所有傳入流量,并且不產生包含ICMP(Intermet Control Message Protocol,互聯網控制報文協議)的錯誤響應 |
?
不知道各位大哥看沒看懂上面的區域介紹,這時候在心里默念沒看懂得的,請回過頭去繼續看,否則不要往下看。小弟也是有脾氣的
?
下面我們開始講解firewalld命令(本來還有圖形化管理的;但是,要那玩意干啥)
?
Firewalld命令:
開啟、關閉、查看firewalld狀態
??在安裝centos7系統時,會自動安裝firewalld服務程序和圖形化工具firewalld-config。執行以下命令可以啟動,停止,查看firewalld服務狀態,并為它設置開機自啟動
[root@localhost ~]# systemctl start firewalld????? //啟動服務
[root@localhost ~]# systemctl stop firewalld????? //停止服務
[root@localhost ~]# systemctl enable firewalld????? //開機自啟動
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
[root@localhost ~]# systemctl status firewalld?? ???//查看firewalld狀態
● firewalld.service - firewalld - dynamic firewall daemon
?? Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
?? Active: active (running) since 一 2019-07-22 21:29:40 CST; 48s ago
???? Docs: man:firewalld(1)
?Main PID: 1732 (firewalld)
?? CGroup: /system.slice/firewalld.service
?????????? └─1732 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
?
7月 22 21:29:39 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
7月 22 21:29:40 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
?
?
獲取firewalld預定義信息:
??Firewalld-cmd預定義信息主要包括三種,可用區域,可用的服務以及可用的ICMP阻塞類型。查看具體命令如下
[root@localhost ~]# firewall-cmd --get-zones???? //顯示預定義區域
block dmz drop external home internal public trusted work
?
[root@localhost ~]# firewall-cmd --get-service??? //顯示預定義的服務
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
?
[root@localhost ~]# firewall-cmd --get-icmptypes????? //顯示預定義icmp類型
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown
?host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
firewall-cmd --get-icmptypes命令的執行結果中的各種阻塞的含義:
l? destination-unreachable??? 目的地不可達
l? echo-reply?????????????? 應答回應(pong)
l? parameter-problem??????? 參數問題
l? redirect???????????????? 重新定向
l? router-advertisement????? 路由器通告
l? router-solicitation???????? 路由器征詢
l? source-quench?????????? 源端抑制
l? time-execeded?????????? 超時
l? timestamp-reply????????? 時間戳應答回應
l? timestamp-request??????? 時間戳請求
?
區域管理
?
使用firewall-cmd命令可以實現獲取和管理區域,為指定區域綁定網絡接口等功能,在下面的表中列出了firewall-cmd命令的區域管理選項說明。
| 選項 | 說明 |
| --get-default-zone | 顯示網絡連接或接口的默認區域 |
| --set-default-zone=<zone> | 設置網絡連接或接口的默認區域 |
| --get-active-zones | 顯示已激活的所有區域 |
| --get-zone-of-interface=<interface> | 顯示制定接口綁定的區域 |
| --zone=<zone> --add-interface=<interface> | 為指定的接口綁定區域 |
| --zone=<zone> --change-interface=<interface> | 為指定的區域更改綁定的網絡接口 |
| --zone=<zone> --remove-interface=<interface> | 為指定的區域刪除綁定的網絡接口 |
| --list-all-zones | 顯示所有的區域及其規則 |
| [--zone=<zone> --list-all] | 顯示所有指定區域的所有規則,省略--zone=<zone>時表示對默認區域進行操作 |
?
本來應該給各位大哥做演示的,但是想想大哥們的智商應該比我高一些,所以不需要做演示了,能看到這一步,你們應該都自己做了演示!
?
?
服務管理:
??為了方便管理,firewalld預先定義了很多服務,存放在/usr/lib/firewalld/services/目錄中,服務通過單個的xml配置文件來指定,這些配置文件則按以下格式命名:service-name.xml,每個文件對應一項具體的網絡服務,如ssh服務等。與之對應的配置文件中記錄了各項服務所使用的tcp/udp端口,在最新版本的firewalld中默認定義了70多種服務供我們使用,對于每個網絡服務區域,均可以配置允許訪問的服務。當默認提供的服務不適用或者不需要自定義某項的端口時,我們需要將service配置文件放置在/etc/firewalld/services/目錄中,service具有以下優點:
?
下表列出了firewall-cmd命令區域中服務管理的常規選項說明:
| 選項 | 說明 |
| [--zone=<zone>] --list-services | 顯示指定區域內允許訪問的所有服務 |
| [--zone=<zone>] --add-service=<service> | 為指定區域設置允許訪問的某項服務 |
| [--zone=<zone>] --remove-service=<service> | 刪除指定區域已設置的允許訪問的某項服務 |
| [--zone=<zone>] --list-ports | 顯示指定區域內允許訪問的所有端口 |
| [--zone=<zone>] --add-port=<port>[portid]/<protocol> | 為指定區域設置允許訪問某個/某段端口號(包括協議名) |
| [--zone=<zone>] --remove-port=<port>[portid]/<protocol> | 刪除指定區域已設置的允許訪問的端口號(包括協議名) |
| [--zone=<zone>] --list-icmp-blocks | 顯示指定區域內拒絕訪問的所有icmp類型 |
| [--zone=<zone>] –add-icmp-block=<icmptype> | 為指定區域設置拒絕訪問的某項icmp類型 |
| [--zone=<zone>] --remove-icmp-block=<icmptype> | 刪除指定區域已設置的拒絕訪問的某項ICMP類型,省略--zone=<zone>時表示對默認區域進行操作 |
具體操作如下:
?
[root@localhost services]# firewall-cmd --get-default-zone???? //查看系統當前的默認區域
Public
?
[root@localhost services]# firewall-cmd --list-services??? //顯示默認區域允許訪問的所有服務
ssh dhcpv6-client
?
[root@localhost services]# firewall-cmd --add-service=https?? //配置默認區域允許訪問https服務
Success
?
[root@localhost services]# firewall-cmd --list-services
ssh dhcpv6-client https
?
配置internal區域允許訪問mysql服務
[root@localhost services]# firewall-cmd --zone=internal --add-service=mysql
success
?
????????
[root@localhost services]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client mysql
?
設置internal區域不允許訪問samba-client服務
(解析:在internal區域中沒有的服務都是禁止的,所以我們將samba-client移除就可以了)
[root@localhost services]# firewall-cmd --zone=internal --remove-service=samba-client
Success
?
[root@localhost services]# firewall-cmd --zone=internal --list-services
ssh mdns dhcpv6-client mysql
?
端口管理
??在進行服務配置時,預定義的網絡服務可以使用服務名配置,服務所涉及的端口就會自動打開。但是,對于非預定義的服務,只能手動為指定的區域添加端口。例如,執行以下操作可實現在internal區域打開443/tcp端口
?
[root@localhost services]# firewall-cmd --zone=internal --list-ports
?
[root@localhost services]# firewall-cmd --zone=internal --add-port=443/tcp
success
[root@localhost services]# firewall-cmd --zone=internal --list-ports
443/tcp
如果希望在internal禁止接口,將它移除就可以了
[root@localhost services]# firewall-cmd --zone=internal --remove-port=443/tcp
success
?
兩種配置模式:
??firewall-cmd命令工具有兩種配置模式。運行模式(runtime mode)表示當內存中運行防火墻配置,在系統或firewalld服務重啟,停止時將永久失效,永久模式(permanent mode)表示在重啟防火墻或重新加載防火墻時規則配置,是永久存儲在配置文件中的。
? Firewall-cmd命令工具與配置模式相關的選項有三個:
1.--reload:重新加載防火墻規則并保持狀態信息,即將永久配置應用為運行時配置
2.--permanent:帶有此選項的命令用于配置永久性規則,這些規則只有在重新啟動firewalld或則重新加載防火墻規則時才會生效,若不帶此選項,表示用于運行時規則
3.--runtime-to-permanent:將當前的運行時配置寫入規則配置文件中,使之成為永久性配置
?
?
?
Firewalld實戰:
??聽了小弟介紹這么九,那么,這個舞臺交給你們了。
?
實驗需求:
?
需求給你們了,按照需求來做吧。
?
網關服務器開啟路由轉發功能:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
其他的就是一些firewall策略,你們懂的
?
?
Firealld高級配置
?
?
IP地址與端口轉發簡介:(一段不說小弟很難懂,雖然你們能看懂,但是我就是要寫出來)
在互聯網發展初期,設計者們并沒有想到互聯網發展到現在這空前繁榮的階段。所以設計Ipv4地址空間只有32位bit。但是隨著互聯網的發展,IP地址變得嚴重缺乏,并且地址分配不均勻。所以就在原有的ipv4地址空間的基礎上劃分出來三段私網地址空間。10.0.0.0/8,127.16.0.0/12和192.168.0.0/16。這些地址可以在企業或者公司內部重復使用。但是不能用于互聯網,因為上述三個范圍的地址無法在internet上被路由。
?于是NAT(網絡地址轉換)技術便產生了。當用戶數據包經過NAT設備時,NAT設備將源地址替換為公網IP地址。而返回的數據包九可以被路由。NAT技術一般都是在企業邊界路由器或者防火墻來配置。
Firewalld支持兩種類型的NAT:IP地址偽裝和端口轉發
?
1、? IP地址偽裝
IP地址偽裝(masquerade),通過地址偽裝。NAT設備將經過設備的包轉發到指定接收方。同時將通過數據包的源地址更改為其自己的接口地址。當返回數據包到達時。會將目的dizhi 修改為原始主機的地址并進行路由。地址偽裝可以實現局域網多個地址共享單一公網地址上網。類似于NAT技術中的端口多路復用(PAT),IP地址偽裝僅支持Ipv4,不支持Ipv6.
2、? 端口轉發
端口轉發(Forward-port),也稱為目的地址轉換或端口映射。通過端口轉發,將指定IP地址及端口的流量轉發到相同計算機的不同端口,或不同計算機上的端口,企業內網的服務器一般都采用私網地址,可以通過端口轉發將使用私網地址的服務器發布到公網,以便讓互聯網用戶進行訪問,例如:當接收互聯網用戶的http請求時,網關服務器判斷數據包的目標地址與目標端口。一旦匹配指定規則,則將其目標地址修改為內網真正的服務器地址,從而建立有效的HTTP協議連接。
?
Firewalld-cmd高級配置
?
Firewalld的富語言(rich language)提供了一種不需要了解iptables語法的通過高級語言配置復雜Ipv4和Ipv6防火墻規則的機制,為管理員提供了一種表達性語言,同故宮這種語言可以表達firewalld的基本語法中為涵蓋的自定義防火墻規則。例如:僅允許從單個IP地址(而非同故宮某個區域路由的所有IP地址)連接到服務
富規則可用于表達基本的允許/拒絕規則,也可以用于配置記錄(面向syslog和auditd),以及端口轉發,偽裝和速率限制。下面是表達富規則的基本語法:
rule [family=”<rule family>”]
[source address=”<address>”[invert=”True”]]
[destination address=”<address>”[invert=”True”]]
[<element>]
[log [perfix=”<perfix text>”] [level=”<log level>”] [limit value=”rate/duration”]]
[audit]
[accept|reject|drop]
規則的每一個單一元素都能夠以option=value的形式來采用附加參數
?
2.1)規則順序
??一旦向某個區域(一般指防火墻)中添加了多個規則,規則的排序會在很大程度上影響防火墻的行為,對于所有的區域,區域內的規則的基本配許是相同的。如果區域中的任何規則與包均不匹配,通常會拒絕該包。此外,在匹配某個記錄規則后將繼續正常處理包。
??直接規則是個例外,大部分直接規則將首先進行解析,然后由firewalld進行其他處理,但是直接規則語法允許管理員在任何區域中的任何位置插入任何規則。
?
2.2)測試與調試
??為了便于測試和調試,幾乎所有的規則都可以與超時一起添加到運行配置。當包含超時的規則添加到防火墻是。計時器便正對該規則開始倒計時,一旦規則的計時器達到0秒,便從運行時配置中刪除該規則。
??在使用遠程防火墻是,使用超時會是一種及其有用的工具,特別是在測試更復雜達到規則集時,如果規則有效,則掛歷元可以再次添加該規則,如果規則沒有按照預期運行,甚至可能將管理員鎖定而使用其服務進入系統,那么規則將會被自動刪除,以允許管理員可以繼續工作。
??通過在啟用規則的firewall-cmd命令的結尾加選項—timeout=<TIMEINSECONDS>可向運行時規則中添加超時。
2.3)理解富規則命令
??Firewall-cmd有四個通項可以用于處理富規則,所有這些項都可以通常規的—permanent或--zone=<ZONE>選項出合使用。
| 選項 | 說明 |
| --add-rich-rule=’RULE’ | 向指定區域中添加RULE,如果沒有指定區域,則為默認區域 |
| --remove-rich-rule=’RULE’ | 從指定區域中刪除RULE,如果沒有指定區域,則默認區域 |
| --query-rich-rule=’RULE’ | 查詢RULE是否已添加到指定區域,如果未指定區域,則為默認區域,規則存在則返回0,否則返回1 |
| --list-rich-rules | 輸出指定區域的所有富規則,如果未指定區域,則為默認區域 |
??任何已配置的富規則都會顯示在firewall-cmd --list-all和firewall-cmd –list-all-zones輸出結果。具體語法解釋如下。
l? source:限制源IP地址,源地址可以是一個Ipv4、Ipv6地址或者一個網絡地址段。
l? destination:限制目標地址,目標地址使用跟源地址相同的語法。
l? element:要素,該項只能是以下幾種要素類型之一service、port、protocol、icmp-block、masquerade和forward-port
l? log:注冊有內核日志的連接請求到規則中、如系統日志,可以定義一個前綴文本把日志信息作為前綴加入,日志等級可以是emerg、alert、crit、error、warning、notice、into或debug中的一個。可以選擇日志的用法,按以下方式限制日志:log [perfix=perfix text] [level=log level] limit value=rate/duration。持續的單位為s、m、h、d、s表示秒,m表示分鐘、h表示小時、d表示天數。最大限定值是1/d(每天最多有一條日志進入)。
l? addit:審核,審核類型可以是accept、reject或drop中的一種,但不能在audit命令或指定。因為審核類型將會從規則動作中自動收集。審核不包括自身參數,但可以選擇性的增加限制。審核的使用是可選擇的。
l? accpt|reject|drop:可以是accept、reject、或者drop中的一個行為。命令格式為accept|reject [type=reject type] |drop。指定accept時,所有新的連接請求都將被允許。指定reject時,連接將被拒絕,發起端接到一個拒絕信息。指定drop時,所有數據包會被丟棄,并且不會向發起段發送任何信息。
?
2.4)配置規則舉例
?
[root@localhost ~]# firewall-cmd --add-rich-rule='rule protocol value=ah accept'
Success
?
[root@localhost ~]# firewall-cmd --add-rich-rule='rule service name=ftplog limit value=1/m audit accept'
Success
?
3.允許來自192.168.0.0/24地址的tftp協議的ipv4連接并且使用系統日志沒分鐘記錄一次。
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept'
success
4.為RADIUS協議拒絕所有來自1:2:3:4:5:6::的新ipv6連接,日志前綴為“dns”,級別為“info”,并且每分鐘最多記錄三次,接收來自其他發起端新的ipv6地址。
[root@localhost ~]# firewall-cmd --add-rich-rule="rule family="ipv6" source address="1:2:3:4:5:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" accept"
success
5.將源192.168.2.2 地址加入白名單,一允許來自這個源地址的所有連接。
[root@localhost ~]# firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.2" accept"
Success
6.拒絕來自public區域中IP地址192.168.0.11的所有流量。
[root@localhost ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.11" reject"
Success
7.丟棄來自默認區域中任何位置的所有傳入的ipsec esp協議包。
[root@localhost ~]# firewall-cmd --zone=public --add-rich-rule='rule protocol value="esp" drop'
Success
8.查詢默認區域所有的富規則:
[root@localhost ~]# firewall-cmd --list-rich-rule
rule protocol value="ah" accept
rule service name="ftplog" audit limit value="1/m" accept
rule family="ipv6" source address="1:2:3:4:5:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" accept
rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept
rule family="ipv4" source address="192.168.2.2" accept
rule family="ipv4" source address="192.168.0.11" reject
rule protocol value="esp" drop
?
?
好了,以上就是我對firewalld的總結了,希望對你們有幫助。
?
?
轉載于:https://www.cnblogs.com/JIAlinux/p/11236114.html
總結
以上是生活随笔為你收集整理的Firewalld防火墙应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MEF初体验之五:Lazy Export
- 下一篇: pip配置永久国内源