紅帽學習記錄[RHCE] 防火牆與網絡合做

防火牆

基本介紹

使用firewalld對防火牆進行管理。firewalldRed Hat Enterprise Linux 7用於管理主機級別防火牆的默認方法。bash

注:firewalld.serviceiptables.serviceip6tables.serviceebtables.service服務彼此衝突,因此爲了防止意外啓動其中一個,能夠把他們mask服務器

systemctl mask iptablesmarkdown

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 未來自 的流量路由到指區域,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,並輸出log
firewall-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
相關文章
相關標籤/搜索