目錄html
使用firewalld
對防火牆進行管理。firewalld
是Red Hat Enterprise Linux 7
用於管理主機級別防火牆的默認方法。bash
注:firewalld.service
與 iptables.service
、ip6tables.service
、ebtables.service
服務彼此衝突,因此爲了防止意外啓動其中一個,能夠把他們mask
掉服務器
systemctl mask iptables
markdown
systemctl mask ip6tables
網絡
systemctl mask ebtables
負載均衡
firewalld
區域zone
firewalld
將傳入的流量劃分紅不一樣的區域zone
,不一樣的zone能夠配置不一樣的規則。ssh
zone
的規則在起做用?`按照以下的規則匹配,優先級依次下降` 1. 若是傳入包的原地址與區域中某個原規則設置相匹配,該包將經過該`zone`路由 2. 若是包的傳入的接口與`zone`的過濾器設置匹配,該包將經過該`zone`路由 3. 若是都沒匹配的話會使用默認的`zone`,默認安裝時的默認`zone`是`public`能夠更改
firewalld
區域的默認配置# trusted 容許全部流量傳入 # home 除非與傳出流量相關,或與ssh\mdns\ipp-client\samba-client\dhcpv6-client預約義服務匹配不然拒絕傳入流量 # internal 開始時與`home`配置相同 # work 除非與傳出流量相關,或與ssh\ipp-client\dhcpv6-client預約義服務匹配不然拒絕傳入流量 # public 除非與傳出流量相關,或與ssh\dhcpv6-client預約義服務匹配不然拒絕傳入流量
firewalld
1. 使用命令行工具`firewalld-cmd`。須要安裝推行界面 2. 使用圖形工具`firewall-config` 3. 直接更改`/etc/firewalld`配置文件。不建議。
firewall-cmd
命令介紹命令 | 說明 |
---|---|
--get-default-zone | 查詢當前默認區域 |
--set-default-zone= | 設置默認區域 |
--get-zones | 列出全部可用區域 |
--get-services | 列出全部預約義服務 |
--get-active-zones | 列出當前正在使用的全部區域 |
--add-source=
|
未來自IP地址或網絡、子網掩碼的全部流量指定到區域 |
--remove-source | 刪除 |
--add-interface | 未來自
|
--change-interface | 修改 |
--list-all --zone=
|
列出全部配置默認zone 可指定 |
--list-all-zones | 列出全部的zone的配置 |
--add-service | 容許某個service的流量 |
--remove-service | 刪除 |
--add-port | 增長端口。格式[222/tcp] |
--remove-port | 刪除 |
--reload | 從新加載防禦牆配置 |
--permanent | 永久修改防禦牆配置 |
修改防火牆配置必定要有兩步臨時修改
與永久修改
curl
1. 永久修改一次臨時修改一次 firewall-cmd --set-default-zone firewall-cmd --set-default-zone trusted --permanent 2. 永久修改一次,reload一下 firewall-cmd --set-fefault-zone trusted --permanent
富規則爲管理員提供了一種表達性的語言,來定義防火牆自身帶有以外的規則。例如:容許單IP地址
。富規則能夠表達容許、拒絕
規則,也能夠配置記錄
、端口轉發
、假裝
、速率限制
等。tcp
firewalld
操做富規則的命令1. --add-rich-rule 2. --remove-rich-rule 3. --query-rich-rul 4. --list-rich-rules
可查看 man 5 firewalld.richlanguage
工具
General rule structure rule [source] [destination] service|port|protocol|icmp-block|masquerade|forward-port [log] [audit] [accept|reject|drop]
1. rule: rule [family="ipv4|ipv6"] 2. [source] 可選,連接的來源ip source address="ip/mask" 3. [Destination]可選,目的 destination address="ip/mask" 4. service|port|protocol|icmp-block|masquerade|forward-port 必選服務、端口、協議、假裝、端口轉發 5. [log] 可選, 記錄進來的連接[prefix=前綴[level=級別limit value=rate/duration頻次每duration最多rate次 6. [audit] 7. [accept|reject|drop] 接受、拒絕、丟棄
httpd
,並輸出logfirewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.143.11/24 service name="http" log level=notice prefix="Test log" limit value="1/s" accept' firewall-cmd --reload # 在服務器192.168.143.11上 curl 192.168.143.10 [root@rhel2 ~]# curl 192.168.143.10 # 檢測192.168.143.10 /var/log/messages [root@rhel1 Desktop]# grep "Test log" /var/log/messages Nov 25 19:22:20 rhel1 kernel: Test logIN=eno16777736 OUT= MAC=00:0c:29:fb:7d:19:00:0c:29:10:6a:95:08:00 SRC=192.168.143.11 DST=192.168.143.10 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=28126 DF PROTO=TCP SPT=35439 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0
ip
訪問10的http服務# 刪除剛纔的富規則,添加以下規則、 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.143.11/24 service name="http" reject' firewall-cmd --reload # 再經過11服務器訪問 [root@rhel2 ~]# curl 192.168.143.10 curl: (7) Failed connect to 192.168.143.10:80; Connection refused
IP
假裝,將內部IP假裝成某個IP發送出去# 將局域網中的 IP `192.168.143.10[RHEL1]` 假裝成`192.168.245.11[RHEL2]`發送出去 firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.143.12/24 masquerade" firewall-cmd --reload # 咱們在rhel1上 ssh到 192.168.245.10[RHEL3]這個ip上 # 咱們在RHEL3上對 ssh服務作了log [root@rhel3 ~]# grep "SSH" /var/log/messages Nov 25 19:05:05 rhel3 kernel: SSH LOG:IN=eno50332216 OUT= MAC=00:0c:29:07:88:32:00:0c:29:10:6a:a9:08:00 SRC=192.168.245.11 DST=192.168.245.10 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=63405 DF PROTO=TCP SPT=46855 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0 # 能夠看到SRC是 192.168.245.11
# 在RHEL2上提供httpd服務 ## 別忘了防火牆放行 [root@rhel2 html]# curl localhost rhel2 # 在RHEL3 上一樣提供httpd服務 ## 別忘了防火牆放行 [root@rhel3 html]# curl localhost rhel3 # 在RHEL2上 開啓端口轉發 [root@rhel2 ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.245.10 success # 在RHEL1上訪問 [root@rhel1 Desktop]# curl 192.168.140.11 rhel3
經過網絡合做,以一種邏輯方式將兩塊網卡綁在一塊兒對外服務,實現故障轉移與更高的吞吐量。這個邏輯方式就是網絡組
RHEL1
上再準備兩塊網卡[root@rhel1 Desktop]# nmcli device show GENERAL.DEVICE: eno67109440 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:0C:29:FB:7D:37 GENERAL.MTU: 1500 GENERAL.STATE: 30 (disconnected) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- WIRED-PROPERTIES.CARRIER: on GENERAL.DEVICE: eno83886664 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:0C:29:FB:7D:41 GENERAL.MTU: 1500 GENERAL.STATE: 30 (disconnected) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- WIRED-PROPERTIES.CARRIER: on
team0
# 建立組接口時經過`config`指定 ## 語法 config '{"runner":{"name":"METHOD"}}' ## 類型 broadcast:廣播模式,只有冗餘機制,有點浪費資源 roundrobin:輪詢調度,把請求輪流費賠給內部服務器 activebackup:主備,只有一個內部服務器保持工做,故障轉移 loadbalance:負載均衡,監控流量嘗試在選擇傳輸端口的時候達到完美均衡 lacp:利用LACP協議進行聚合
# 建立一個主備模式的 網絡組 nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}' # 分配IP地址 # ip隨便配一個 nmcli connection modify team0 ipv4.addresses "192.168.200.100/24" ipv4.method manual
接口
添加到team0
上nmcli connect add type team-slave con-name team0-port1 ifname eno67109440 master team0 nmcli connect add type team-slave con-name team0-port2 ifname eno83886664 master team0 # 查看當前網絡組的狀態,能夠看到當前工做的是 eno67109440 [root@rhel1 Desktop]# teamdctl team0 state setup: runner: activebackup ports: eno67109440 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up eno83886664 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up runner: active port: eno67109440
# 經過team0 ping本地網關 ping -I team0 0.0.0.0 [root@rhel1 Desktop]# nmcli device disconnect eno67109440 [root@rhel1 Desktop]# teamdctl team0 state setup: runner: activebackup ports: eno83886664 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up runner: active port: eno83886664 # 而另外一邊的ping命令沒有斷
[root@rhel1 .ssh]# cat /etc/sysconfig/network-scripts/ifcfg-team0 DEVICE=team0 TEAM_CONFIG="{\"runner\":{\"name\":\"activebackup\"}}" DEVICETYPE=Team BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=team0 UUID=5d30ce30-7c39-44ea-b170-04dd21d2a3fd ONBOOT=yes IPADDR0=192.168.200.100 PREFIX0=24 GATEWAY0=192.168.200.1 IPV6_PEERDNS=yes IPV6_PEERROUTES=yes
teamnl teamdctl
網橋是一個鏈路層設備,可基於MAC地址在網絡之間轉發流量。
# 再次添加一個網卡 nmcli device show GENERAL.DEVICE: eno100663888 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:0C:29:FB:7D:4B GENERAL.MTU: 1500 GENERAL.STATE: 30 (disconnected) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- WIRED-PROPERTIES.CARRIER: on # 增長一個網橋 ## 在建立的時候就指定好 ipv4 後來modify不起做用 nmcli connection add type bridge con-name br0 ifname br0 ip4 192.168.150.100/24 gw4 192.168.150.1 # 添加接口 nmcli connection add type bridge-slave con-name br0-port0 ifname eno100663888 master br0 # 檢查是否能ping通本地網關 [root@rhel1 Desktop]# ping -I br0 0.0.0.0