- http://daniel719350.blogspot.tw
- http://novice0309.blogspot.tw
2016年1月17日 星期日
2016年1月10日 星期日
在 CentOS7/RHEL7 上架設 Proftpd Server
基本安裝流程:
基本設定方式:
<TLS 加密連線機制:>
<基本安全連線限制:>
使用 SQL 來當 Backend !!
-
安裝 EPEL 套件:
#rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-
安裝 proftpd 相關套件:
#yum install -y proftpd-*
-
開啟防火牆:
#firewall-cmd --permanent --add-service=ftp #firewall-cmd --reload
-
啟動與執行 proftpd :
#systemctl enable proftpd.service #systemctl start proftpd
-
取消與關閉 proftpd :
#systemctl disable proftpd.service #systemctl stop proftpd
-
重新執行 proftpd :
#systemctl restart proftpd
基本設定方式:
-
修改 /etc/proftpd.conf 檔案內容:
#基本功能設定項目: ServerName "猛鬼小紀的 FTP Server" ServerIdent on "歡迎光臨本站!本站正在監視你!不爽,可以離開!" ServerAdmin antallen@gmail.com ##指定為預設的站台,如果有不明的連線,亦會連進預設站台! DefaultServer on ##設定使用者 chroot 功能,除了 adm 之外,其餘使用者均登入自己家目錄 DefaultRoot ~ !adm ##使用系統 PAM 功能,進行功能授權與身份驗證 AuthPAMConfig proftpd AuthOrder mod_auth_pam.c* mod_auth_unix.c ##不使用 DNS 反查功能 UseReverseDNS off ##以何種身份在系統上執行 proftpd 程序 User nobody Group nobody ##限定連線數量,以預防 DDoS 攻擊 MaxInstances 20 ##預防使用 ftpwho 及 ftptop 指令時,會中斷檔案傳輸 UseSendfile off ##定義記錄檔格式 LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s" ##定義預設的記錄檔 TransferLog /var/log/proftpd/xferlog ExtendedLog /var/log/proftpd/access_log WRITE,READ write ExtendedLog /var/log/proftpd/auth_log AUTH auth ExtendedLog /var/log/proftpd/paranoid_log ALL default ##限制只有 root 才能掛載與缷載模組!一般使用者只能查詢掛載哪些模組 ModuleControlsACLs insmod,rmmod allow user root ModuleControlsACLs lsmod allow user *
導入模組方式:##導入管理控制模組,管理人員可使用 ftpdctl 指令進行管理行為 LoadModule mod_ctrls_admin.c ##開啟上述功能模組,啟動 ftpdctl 指令的基本控制項目 ControlsEngine on ControlsACLs all allow user root ControlsSocketACL allow user * ControlsLog /var/log/proftpd/controls.log ##經由 ftpdctl 指令,開啟管理控制項目 <IfModule mod_ctrls_admin.c> AdminControlsEngine on AdminControlsACLs all allow user root </IfModule> ##導入限制目錄模組,使登入的人,限制在指定的家目錄內 LoadModule mod_vroot.c ###啟動上述模組,其功能相容性好過 PAM 功能 <IfModule mod_vroot.c> VRootEngine on </IfModule>
-
開啟 SELinux 限制:
# setsebool -P allow_ftpd_full_access=1
-
啟動 Proftp 測試:
# systemctl start proftpd
<TLS 加密連線機制:>
-
安裝 openssl 套件:
# yum -y install openssl
-
產生金鑰對:
# openssl req -x509 -newkey rsa:1024 -keyout /etc/proftpd.d/proftpd.key -out /etc/proftpd.d/proftpd.crt -nodes -days 365 產生下列資料: Generating a 1024 bit RSA private key ............................................++++++ .++++++ writing new private key to '/etc/proftpd.d/proftpd.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:TW State or Province Name (full name) []:Taiwan Locality Name (eg, city) [Default City]:Kaohsiung Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []:
-
修改安全權限:
# chmod 600 proftpd.*
在 /etc/proftpd.conf 檔案中,加入TLS模組功能:
-
設定防火牆:
# firewall-cmd --permanent --add-port=6000-6100/tcp # firewall-cmd --reload
-
重新啟動:
# systemctl restart proftpd
##導入TLS模組,啟動 FTPs 功能! ##定義 PASV 模式所需使用的 port 號 PassivePorts 6000 6100 <IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log ##定義 SSL/TLS 協助應該使用哪一個版本,共有SSLv23 SSLv3 TLSv1 等三種 TLSProtocol SSLv23 ##定義公私鑰放置目錄位置 TLSRSACertificateFile /etc/proftpd.d/proftpd.crt TLSRSACertificateKeyFile /etc/proftpd.d/proftpd.key ##定義 mod_tls 行為模式 TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired ##建立 SSL/TLS session之後,不再驗證認證功能 TLSVerifyClient off ##開啟 ftp 控制與資料通道均使用 SSL/TLS 功能 TLSRequired on ##開啟 SSL/TLS 重議功能 TLSRenegotiate required on </IfModule>
<基本安全連線限制:>
-
修改 /etc/proftpd.conf 檔案內容:
#密碼錯誤次數 MaxLoginAttempts 3 #最大連線數量(可減緩DDoS攻擊造成的影響) MaxInstances 100 #每個使用者最大連線數,最後一個參數是顯示訊息! MaxHostsPerUser 1 "Sorry, you may not connect more than one time." #每一部主部,最大的連線數量! MaxClientsPerHost 1 "Sorry, Only %m connections per host allowed." #每秒新增多少個 TCP 連線數! MaxConnectionRate 5
-
重新啟動 Proftpd 服務
# systemctl restart proftpd
使用 SQL 來當 Backend !!
-
修改 /etc/proftpd.conf 檔案內容:
#使用動態導入模組,引入 SQL 模組 <IfModule mod_dso.c> LoadModule mod_sql.c LoadModule mod_sql_mysql.c </IfModule> ##設定記錄檔 SQLLogFile /var/log/proftpd/mysql ##設定驗證模組使用順序 AuthOrder mod_sql.c ##驗證時的密碼資料形態 SQLAuthTypes Plaintext ##設定 SQL 身份驗證查詢 SQLAuthenticate users groups ##連接資料庫的帳密與資料庫名稱,[資料庫@主機][帳號][密碼] SQLConnectInfo ftp@localhost ftpuser ftpuser@1234 ##指定使用者表格與欄位名稱 SQLUserInfo ftpuser userid passwd uid gid homedir shell ##指定群組表格與欄位名稱 SQLGroupInfo ftpgroup groupname gid members ##指定登入系統後的使用者ID號碼 SQLMinID 1000
-
登入資料庫後,新增下列表格:
CREATE TABLE ftpgroup ( groupname varchar(16) NOT NULL default '', gid smallint(6) NOT NULL default '5500', members varchar(16) NOT NULL default '', KEY groupname (groupname) ) TYPE=MyISAM COMMENT='ProFTP group table';
CREATE TABLE ftpuser ( id int(10) unsigned NOT NULL auto_increment, userid varchar(32) NOT NULL default '', passwd varchar(32) NOT NULL default '', uid smallint(6) NOT NULL default '5500', gid smallint(6) NOT NULL default '5500', homedir varchar(255) NOT NULL default '', shell varchar(16) NOT NULL default '/sbin/nologin', count int(11) NOT NULL default '0', accessed datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (id), UNIQUE KEY userid (userid) ) TYPE=MyISAM COMMENT='ProFTP user table';
- 重新啟動 proftpd 服務,即可驗證看看!
2016年1月9日 星期六
OpenStack 線上相關資源
https://kairen.gitbooks.io/openstack/content/openstack_introduction.html
https://www.gitbook.com/book/kairen/openstack/details
http://docs.openstack.org/openstack-ops/content/
https://www.gitbook.com/book/kairen/openstack/details
http://docs.openstack.org/openstack-ops/content/
2015年12月31日 星期四
2015年12月17日 星期四
RHEL7 防火牆設定
firewalld 服務概觀
管理 firewalld 服務
使用 firewalld 客製化規則
使用 firewalld 網路 NAT 功能
管理 SELinux Port 標籤
- RHEL7 預設使用 firewalld 服務管理主機層級的防火牆服務
- firewalld 管理核心的 netfilter 功能,下轄三個指令與服務:
- iptables
- ip6tables
- ebtables
※PS:以上三種服務會互相干擾,須要使用 systemctl mask 指令來隔開! - firewalld 區分所有的流量進到 zone (區域)裡面,而每個 zone 裡面,均有不同的 rule (規則)!
- firewalld 區分進來的封包該進到哪一個 zone,其運作邏輯如下列順序:
- 若進來的封包,其來源位址符合某一 zone 內的某一針對來源位址所設定的規則,則該封包將被繞送經過該 zone !
- 若接受封包進來的介面符合某一 zone 內所設定的過濾器,則使用該 zone 進行封包過濾!
- 其他狀況,使用 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 有下列三種方式:
- 使用 firewall-cmd 文字指令!
- 使用 firewall-config 圖形介面!
- 使用 /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 內的判斷順序均相同!
- 為該 zone 所設定的任何 port 轉換與偽裝規則!
- 針對該 zone 所設定的記錄規則!
- 為該 zone 所設定的允許規則!
- 為該 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 :
- 可以做限制,避免檔案空間被塞滿!
- 使用 syslogd :
使用 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年12月11日 星期五
RHEL 的 OpenStack (十二)--管理 Heat Orchestration 服務
Heat Orchestration 服務
Heat Orchestration 服務是為了 OpenStack 雲,提供一種基於樣板的編制工程方式,用於建立、管理雲端架構資源!
Hear Orchestration 服務,由下列幾項元件組成:
設定Heat Orchestration 服務
設定檔包含項目:
啟動與驗證 Stack
太複雜,先跳過...
練習3:
練習4:
Heat Orchestration 服務是為了 OpenStack 雲,提供一種基於樣板的編制工程方式,用於建立、管理雲端架構資源!
Hear Orchestration 服務,由下列幾項元件組成:
- heat-cfn
- heat-api
- heat-api-cfn
- heat-engine
- heat-api-cloudwatch
- heat-cfntools 以及 cloud-init 套件
- # source /root/keystonerc_admin
- # yum list openstack-heat* python-heatclient heat-cfntools
- # grep 10.1.1.1 /etc/heat/heat.conf
- # keystone user-get heat
- # keystone service-get heat
- # keystone catalog --service orchestration
- # keystone user-get heat-cfn
- # keystone service-get heat-cfn
- # keystone catalog --service cloudformation
- # keystone user-role-list --user heat --tenant services
- # openstack-service status heat
設定Heat Orchestration 服務
設定檔包含項目:
- 建立預設的 Nova 浮動IP池,Heat 將會從這個池分配浮動IP
- 指定預設的浮動IP池
- 設定 DNS 轉址
- 建立各式 Nova 樣板,管理員可以用於 Heat 樣板中
- 建立 Heat 可用的 Keystone 使用者
- # source /root/keystonerc_admin
- # nova floating-ip-pool-list
- # crudini --get /etc/nova/nova.conf DEFAULT default_floating_pool
- # crudini --set /etc/nova/nova.conf DEFAULT default_floating_pool public
- # openstack-service restart nova
- # crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dnsmasq_dns_servers 10.1.1.254
- # openstack-service restart neutron --> 另一部主機也需要做
- # nova flavor-create web.tiny auto 1024 20 1
- # keystone tenant-create --name heatproject
- # keystone user-create --name heatuser --pass redhat
- # keystone user-role-add --user heatuser --role _member_ --tenant heatproject
- # keystone user-role-add --user heatuser --tenant heatproject --role heat_stack_owner
- # vim /root/keystonerc_heatuser
- # source /root/keystonerc_heatuser
- # glance image-list
- # neutron net-list
- # neutron net-create net1
- # neutron subnet-create --name subnet1 net1 192.168.0.0/24
- # neutron router-create router1
- # neutron router-gateway-set router1 public
- # neutron router-interface-add router1
- # nova keypair-add --pub-key /root/.ssh/id_rsa.pub heatkey
- # nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
- # nova secgroup-add-rule default tcp 80 80 0.0.0.0/0
- # nova secgroup-add-rule default tcp 443 443 0.0.0.0/0
- # nova secgroup-add-rule default tcp 3306 3306 0.0.0.0/0
- # nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
啟動與驗證 Stack
太複雜,先跳過...
練習3:
- 先編好一個檔案:multi.template
- # source /root/keystonerc_heatuser
- # neutron subnet-list
- # neutron net-list
- # vim /root/env.yaml
parameters:
key_name: heatkey
public_net_id: <上一項指令的ID>
private_net_id: <上一項指令的ID>
private_subnet_id: <上兩項指令的ID>
- # heat stack-create -r -f multi.tempate -e /root/env.yaml multi
- # heat stack-list
- 在一部主機上 # virsh list
- # heat stack-show multi
- # heat event-list multi
- # nova list
- # ssh root@10.1.1.10
- # ssh ec2-user@10.1.1.10
- $ su -
- # systemctl status httpd.service
- # exit
- $ exit
- # ssh ec2-user@10.1.1.11
- $ sudo systemctl status mariadb.service
- $ exit
- 移除 Stack
- # heat stack-delete multi
練習4:
RHEL 的 OpenStack (十一)--管理 Ceilometer 遙測技術服務
Ceilometer 的作用
提供 API 以及客戶端指令,去收集系統上的資料,用於客戶帳單、系統監視或是警告!
遙測技術(telemetry)服務由下列幾個元件組成:
Ceilometer 的基本觀念
Ceilometer 與監測不同的地方
已加入 Ceilometer 的 OpenStack 元件
ceilometer 指令來自於 python-ceilometerclient RPM套件!
常用指令:
練習3:
提供 API 以及客戶端指令,去收集系統上的資料,用於客戶帳單、系統監視或是警告!
遙測技術(telemetry)服務由下列幾個元件組成:
- ceilometer-agent-compute : 運作於每一個計算節點上,做資源使用的統計調查
- ceilometer-agent-central : 運作於中央管理主機上,做非計算節點或實體的資源統計資料調查!
- ceilometer-collector : 運作於一個或多個中央管理主機上,監控訊息佇列!通知訊息將會被處理成遙測技術訊息,並且被儲存起來!
- Mongo database : 收集儲存樣品資料
- API Server: 運作於一個或多個中央管理主機,用來提供存取已收集的資料!
Ceilometer 的基本觀念
Ceilometer 與監測不同的地方
已加入 Ceilometer 的 OpenStack 元件
- Nova
- Neutron
- Glance
- Cinder
- Swift
- 累積式(Cumulative)
- 標準式(Gauge):用於浮動式IP、影像上傳、硬碟I/O等
- 時變式(Delta)
- # source /root/keystonerc_admin
- # yum list installed "ceilometer" mongodb-server mongodb
- # cat /etc/mongodb.conf
- # systemctl status mongod
- # grep 10.1.1.1 /etc/ceilometer/ceilometer.conf
- # keystone user-get ceilometer
- # keystone tenant-get services
- # keystone service-get ceilometer
- # keystone catalog --service metering
- # keystone user-role-list --user ceilometer --tenant services
- # openstack-service restart ceilometer
- # systemctl status openstack-ceilometer-alarm-evaluator.service
- # systemctl status openstack-ceilometer-alarm-notifier.service
- # systemctl status openstack-ceilometer-api.service
- # systemctl status openstack-ceilometer-central.service
- # systemctl status openstack-ceilometer-collector.service
- # systemctl status openstack-ceilometer-compute.service
- # systemctl status openstack-ceilometer-notification.service
ceilometer 指令來自於 python-ceilometerclient RPM套件!
常用指令:
- ceilometer meter-list
- ceilometer sample-list -m image
- ceilometer statistics -m image
- # source /root/keystonerc_admin
- # glance image-create --name ceilometertest --is-public True --disk-format qcow2 --container-format bare --copy-from http://demo.example.com/pub/small.img
- # ceilometer meter-list
- # ceilometer meter-list | grep image
- # ceilometer sample-list -m image
- # ceilometer alarm-threshold-create --name monitor-image --description 'monitor image' --meter-name image.update --threshold 1 --comparison-operator ge --statistic count --period 60 --evaluation-period 1 --alarm-action 'log://'
- # ceilometer alarm-list
- # glance image-update --name ceilometer ceilometertest
- # sleep 1m && ceilometer alarm-list
- # ceilometer alarm-history <上項指出現的ID值>
練習3:
訂閱:
文章 (Atom)