顯示具有 系統操作::系統安全 標籤的文章。 顯示所有文章
顯示具有 系統操作::系統安全 標籤的文章。 顯示所有文章

2018年10月29日 星期一

在 CentOS / RHEL 7 上,安裝 FreedIPA 服務

學習目標:
  • 在 CentOS / RHEL 7 Linux 作業系統上,安裝 FreeIPA 服務!
  • 需要先架設好自有 DNS Server !
安裝設定流程:
  1. 安裝相關必要軟體安裝工作!
    # yum -y upgrade
    # reboot
    
  2. 設定主機名稱:
    # hostnamectl set-hostname dns.example.com
    # echo "192.168.100.120 dns.example.com dns" >> /etc/hosts
    # echo "nameserver 127.0.0.1" > /etc/resolv.conf
    
  3. 安裝 IPA Server 套件軟體!
    # yum install -y ipa-server ipa-server-dns
    
  4. 進行設定 IPA Server 工作!
    # ipa-server-install --setup-dns
    (以下就依實際需要修改!)
    Server host name [dns.example.com]:
    Please confirm the domain name [example.com]:
    Please provide a realm name [EXAMPLE.COM]:
    Directory Manager password:
    Password (confirm):
    IPA admin password: 
    Password (confirm):
    Do you want to configure DNS forwarders? [yes]:
    Do you want to configure these servers as DNS forwarders? [yes]: no
    Enter an IP address for a DNS forwarder, or press Enter to skip:
    Do you want to search for missing reverse zones? [yes]:
    Continue to configure the system with these values? [no]: yes
    ...略...
    (看到以下項目,表示安裝成功!)
    ==============================================================================
    Setup complete
    
    Next steps:
     1. You must make sure these network ports are open:
      TCP Ports:
        * 80, 443: HTTP/HTTPS
        * 389, 636: LDAP/LDAPS
        * 88, 464: kerberos
        * 53: bind
      UDP Ports:
        * 88, 464: kerberos
        * 53: bind
        * 123: ntp
    
     2. You can now obtain a kerberos ticket using the command: 'kinit admin'
        This ticket will allow you to use the IPA tools (e.g., ipa user-add)
        and the web user interface.
    
    Be sure to back up the CA certificates stored in /root/cacert.p12
    These files are required to create replicas. The password for these
    files is the Directory Manager password
    
  5. 進行初始化設定:
    # kinit admin
    Password for admin@EXAMPLE.COM:
    
  6. 進行檢查列表:
    # klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: admin@EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    2018-10-29T12:25:08  2018-10-30T12:24:57  krbtgt/EXAMPLE.COM@EXAMPLE.COM
    
  7. 更改常用的 shell :
    # ipa config-mod --defaultshell=/bin/bash 
    
  8. 設定防火牆!
    # firewall-cmd --add-service={http,https,freeipa-ldap,freeipa-ldaps,dns,ntp,kerberos} --permanent
    # firewall-cmd --reload
    

參考文獻:
  • https://www.server-world.info/en/note?os=CentOS_7&p=ipa&f=1
  • https://www.howtoing.com/how-to-set-up-centralized-linux-authentication-with-freeipa-on-centos-7

2015年12月17日 星期四

RHEL7 防火牆設定

firewalld 服務概觀
  • RHEL7 預設使用 firewalld 服務管理主機層級的防火牆服務

  • firewalld 管理核心的 netfilter 功能,下轄三個指令與服務:
    • iptables
    • ip6tables
    • ebtables

    ※PS:以上三種服務會互相干擾,須要使用 systemctl mask 指令來隔開!

  • firewalld 區分所有的流量進到 zone (區域)裡面,而每個 zone 裡面,均有不同的 rule (規則)!

  • firewalld 區分進來的封包該進到哪一個 zone,其運作邏輯如下列順序:
    1. 若進來的封包,其來源位址符合某一 zone 內的某一針對來源位址所設定的規則,則該封包將被繞送經過該 zone !
    2. 若接受封包進來的介面符合某一 zone 內所設定的過濾器,則使用該 zone 進行封包過濾!
    3. 其他狀況,使用 Default Zone !! 通常 Default Zone 名為 public ,但管理者可指定其他的 zone 為 Default Zone!

  • firewalld 預設的 zone:
    名稱 預設內容
    trusted 允許所有進入的流量
    home 退回進入的流量!除了與出去的流量相關封包,或是 ssh, mdns, ipp-client, samba-client, 或者 dhcpv6-client 等預設的服務!
    internal 退回進入的流量!除了與出去的流量相關封包,或是 ssh, mdns, ipp-client, samba-client, 或者 dhcpv6-client 等預設的服務!(預設值與home相同!)
    work 退回進入的流量!除了與出去的流量相關封包,或是 ssh, ipp-client, 或者 dhcpv6-client 等預設的服務!
    public 退回進入的流量!除了與出去的流量相關封包,或是 ssh, 或者 dhcpv6-client 等預設的服務!為所有新增網路卡介面的 Default Zone!
    external 退回進入的流量!除了與出去的流量相關封包,或是 ssh 等預設的服務!要出去的 IPv4 流量封包被轉到這裡,將會進行 IP 來源位置的偽裝!
    dmz 退回進入的流量!除了與出去的流量相關封包,或是 ssh 等預設的服務!
    block 退回所有進入的流量!除了與出去的流量相關封包!
    drop 排除所有進入的流量!除了與出去的流量相關封包!

管理 firewalld 服務
  • 管理 firewalld 有下列三種方式:
    1. 使用 firewall-cmd 文字指令!
    2. 使用 firewall-config 圖形介面!
    3. 使用 /etc/firewalld/ 目錄下的檔案!

  • 當 firewalld 套件被安裝好之後, firewall-cmd 即已經存在!

  • 參數使用須知:
    • 使用的參數中,如未指定 --permanent,則預設會是 runtime 狀態!如未指定 zone 名稱,則所有規則,將用在 public zone 上!
    • 如果使用 --permanent 參數後,要立即生效,則必須下 firewall-cmd --reload 指令,重新導入規則內容!
    • 如果只是暫時使用的規則,可以設定 --timeout= 參數!時間到,自動移除!

  • 常用參數列表:
    參數名稱 內容說明
    --get-default-zone
    --set-default-zone=
    --get-zones 列出所有的 zone !!
    --get-services 列出所有預設的服務!
    --get-active-zones 列出所有正在使用中的 zone ,連同介面以及來源資訊!
    --add-source= [--zone=] 繞送由該 IP address 或 network/netmask 進來的封包,進入指定的 zone !!
    --remove-source= [--zone=] 移除由上項新增的規則!
    --add-interface= [--zone=] 繞送由該介面進來的封包,進入指定的 zone !!
    --change-interface= [--zone=] 將上項新增的規則,更換指定的 zone !!
    --list-all [--zone=] 列出某一 zone 內所有的介面、來源設定、服務設定以及 ports 的設定!
    --list-all-zones 列出所有 zone 內所有的介面、來源設定、服務設定以及 ports 的設定!
    --add-service= [--zone=] 允許流量進入該服務
    --remove-service= [--zone=] 移除由上項新增的規則!
    --add-port= [--zone=] 允許流量進入該埠!協定可以是 tcp、udp、icmp 等等
    --remove-port= [--zone=] 移除由上項新增的規則!

  • 範例:
    • # firewall-cmd --set-default-zone=dmz
    • # firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
    • # firewall-cmd --permanent --zone=internal --add-service=mysql
    • # firewall-cmd --reload

  • firewalld 設定目錄:
    • /etc/firewalld
    • /usr/lib/firewalld
    • 若兩目錄內有相同檔案名稱,將只使用 /etc/firewalld 目錄內的檔案!

使用 firewalld 客製化規則

  • 管理員還有其他兩項方式,可以滿足管理防火牆的需求:direct rules 以及 rich rules !!

  • Direct Rules
    • 允許管理員直接手動寫 {ip,ip6,eb}tables 規則到 firewalld 所管理的防火牆內容中!
    • 但當強力的規則無法出現在規則列表中,這些規則將很難管理!
    • Direct Rules 的使用彈性比起標準的規則或是 Rich Rules,都是比較差的!
    • Direct Rules 只要不是嵌入在 zone 內,就會在 firewalld 規則之前被導入引用!
    • 範例:
      # firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
      # firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.1.0/24 -j blacklist
      # firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted "
      # firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP

  • Rich Rules
    • Rich Rules 給予管理員一種撰寫防火牆規則的方式!而該方式是無法用基本防火牆的語法來達成。
    • 語法上,不僅可以使用基本的允許/拒絕功能,還可以使用記錄、製作port 轉向、IP 偽裝、或是速率上的限制!
    • 基本語法:
      rule
        [source] 
        [destination]
        service|port|protocol|icmp-block|masquerade|forward-port
        [log]
        [audit]
        [accept|reject|drop]

    • 設定格式:rule option=value
      • family=ipv4 | ipv6
      • source | destination address=<CIDR>
      • service name=http | ftp ...| <SERVICE_NAME>
      • port port=<PORT NUMBER>
      • protocol=tcp | udp |...

    • 規則判斷順序:每個 zone 內的判斷順序均相同!
      1. 為該 zone 所設定的任何 port 轉換與偽裝規則!
      2. 針對該 zone 所設定的記錄規則!
      3. 為該 zone 所設定的允許規則!
      4. 為該 zone 所設定的拒絕規則!
    • 如果有封包不符合任何 zone 內的任何規則,將該封包將會被拒絕!
    • Rich Rules 配合 firewall-cmd 指令的常用參數:
      參數名稱 內容說明
      --add-rich-rule='<RULE>' 新增<RULE>到指定的 zone 內!
      --remove-rich-rule='<RULE>' 移除指定 zone 內的<RULE>!
      --query-rich-rule='<RULE>' 查詢指定 zone 內的<RULE>!
      --list-rich-rule='<RULE>' 列出指定 zone 內的所有<RULE>!

    • 範例:
      # firewall-cmd --permanent --zone=classroom --add-rich-rule='rule family=ipv4 source address=192.168.1.111/32 reject'
      # firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'
      # firewall-cmd --permanent --add-rich-rule='rule protocol value=esp drop'
      # firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept

  • Rich Rule 的使用記錄
    • 使用 syslogd :
      # log [prefix="<PREFIX TEXT>"] [level=<LOGLEVEL>] [limit value="<RATE/DURATION>"]

    • 使用 auditd :

    • 可以做限制,避免檔案空間被塞滿!



使用 firewalld 網路 NAT 功能

  • 練習:把 4321 port 轉到 80 port (只針對 192.168.1.0/24 網段)
    # firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 forward-port port=4321 protocol=tcp to-port=80'

管理 SELinux Port 標籤

2015年11月10日 星期二

CentOS/RHEL7 的 SELinux 運作說明與設定

章節目標:
  • SELinux 基本運作方式說明!
  • 說明 Centos 7 上的 SELinux 運作與設定方式!
SELinux 運作方式說明:
  • 設定檔:/etc/sysconfig/selinux
    • SELINUX=enforcing
    • SELINUX=permissive
    • SELINUX=disabled

2015年8月5日 星期三

RHEL 7 / CentOS 7 忘記密碼

RHEL 7 / CentOS 7 忘記 root 密碼的解開方式:


  1. 先確認有沒有鎖 BIOS 或是 「開機選單」密碼,都沒有,才可以利用下列方式解碼!
  2. 開機選單 --> 按 「e」
  3. 選擇  linux 開頭的項目名稱 
  4. 在 Linux 開頭項目的行尾,加上 「rd.break」項目
  5. 按下 Ctrl + x 開機
  6. 輸入  mount  -o  remount,rw   /sysroot
  7. 輸入  chroot  /sysroot
  8. 輸入 passwd
  9. 輸入兩次密碼!注意:密碼輸入過程中,游標是不會移動的!
  10. 輸入  touch  /.autorelabel    --> 請注意,不要打錯字!
  11. 輸入  exit
  12. 輸入  mount  -o  remount,ro   /sysroot
  13. 輸入  exit  後,重開機!

只要「黑屏」,表示上述步驟有錯!再來一次即可,不用重裝系統!

如果有鎖 BIOS 密碼,記得替主機板放電!

如果有鎖開機選單密碼,只能使用光碟或 USB 開機!開機後,照上述的步驟方式執行,亦可解開 root 帳密!