MacOS启用root账户

MacOSX启用root用户最简捷的方法:

首先,给一个非root用户设置一个密码(如果没有设置的话),这个用户必须是管理员类型。

然后,在终端执行以下命令:

sudo passwd root

接下来,系统会要求你输入密码,此密码是你的用户密码,并非root密码。

如果你自己的用户没有密码,而什么都不输入则无法继续,只要把你的密码输入后即可进入修改root用户密码的界面。

输入两次root用户的密码,即启用了root用户。

用su试一下,是不是提示符前面由“$”变成“#”啦?这说明root用户已经启用了。

nginx SSL 评分A 配置及兼容列表

server {
listen 443;
server_name ali-test.xxx.com;
ssl on;
ssl_certificate /opt/nginx/certs/STAR.xxx.crt;
ssl_certificate_key /opt/nginx/certs/STAR.xxx.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES256-SHA;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://101.201.28.36:3000/emm/;
proxy_read_timeout 3600s;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log /opt/nginx/log/iws8.xxx-3000.access.log;
error_log /opt/nginx/log/iws8.xxx-3000.error_log;
}

 

 

Certificate #1: RSA 2048 bits (SHA256withRSA)

Server Key and Certificate #1
Subject *.zhizhangyi.com
Fingerprint SHA256: c372eb817d76bda86197d8ff1b52d16393fa1558c5f426a725862dea7d85ab04
Pin SHA256: i065XLDqlVVhpQFllF3b/jFXg+HX9wcta4tFmfjwG7c=
Common names *.zhizhangyi.com
Alternative names *.zhizhangyi.com zhizhangyi.com
Serial Number 009742f12c09b448ededc0e54a561805cb
Valid from Wed, 17 May 2017 00:00:00 UTC
Valid until Sat, 16 May 2020 23:59:59 UTC (expires in 1 year and 9 months)
Key RSA 2048 bits (e 65537)
Weak key (Debian) No
Issuer COMODO RSA Domain Validation Secure Server CA
AIA: http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt
Signature algorithm SHA256withRSA
Extended Validation No
Certificate Transparency No
OCSP Must Staple No
Revocation information CRL, OCSP
CRL: http://crl.comodoca.com/COMODORSADomainValidationSecureServerCA.crl
OCSP: http://ocsp.comodoca.com
Revocation status Good (not revoked)
DNS CAA No (more info)
Trusted Yes 
Mozilla  Apple  Android  Java  Windows 

Additional Certificates (if supplied)
Certificates provided 3 (4319 bytes)
Chain issues None
#2
Subject COMODO RSA Domain Validation Secure Server CA
Fingerprint SHA256: 02ab57e4e67a0cb48dd2ff34830e8ac40f4476fb08ca6be3f5cd846f646840f0
Pin SHA256: klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=
Valid until Sun, 11 Feb 2029 23:59:59 UTC (expires in 10 years and 6 months)
Key RSA 2048 bits (e 65537)
Issuer COMODO RSA Certification Authority
Signature algorithm SHA384withRSA
#3
Subject COMODO RSA Certification Authority
Fingerprint SHA256: 4f32d5dc00f715250abcc486511e37f501a899deb3bf7ea8adbbd3aef1c412da
Pin SHA256: grX4Ta9HpZx6tSHkmCrvpApTQGo67CYDnvprLg5yRME=
Valid until Sat, 30 May 2020 10:48:38 UTC (expires in 1 year and 9 months)
Key RSA 4096 bits (e 65537)
Issuer AddTrust External CA Root
Signature algorithm SHA384withRSA

Certification Paths

Click here to expand

Configuration

Protocols
TLS 1.3 No
TLS 1.2 Yes
TLS 1.1 Yes
TLS 1.0 Yes
SSL 3 No
SSL 2 No
For TLS 1.3 tests, we currently support draft version 28.

Cipher Suites

# TLS 1.2 (suites in server-preferred order)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)   ECDH secp256r1 (eq. 3072 bits RSA)   FS 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)   ECDH secp256r1 (eq. 3072 bits RSA)   FS 128
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)   ECDH secp256r1 (eq. 3072 bits RSA)   FS 256
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c)   WEAK 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)   ECDH secp256r1 (eq. 3072 bits RSA)   FS 128
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)   WEAK 256

# TLS 1.1 (suites in server-preferred order)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)   ECDH secp256r1 (eq. 3072 bits RSA)   FS 256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)   ECDH secp256r1 (eq. 3072 bits RSA)   FS 128
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)   WEAK 256

# TLS 1.0 (suites in server-preferred order)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)   ECDH secp256r1 (eq. 3072 bits RSA)   FS 256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)   ECDH secp256r1 (eq. 3072 bits RSA)   FS 128
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)   WEAK 256

Handshake Simulation
Android 2.3.7   No SNI 2 Server sent fatal alert: handshake_failure
Android 4.0.4 RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
Android 4.1.1 RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
Android 4.2.2 RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
Android 4.3 RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
Android 4.4.2 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Android 5.0.0 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Android 6.0 RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Android 7.0 RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Baidu Jan 2015 RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
BingPreview Jan 2015 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Chrome 49 / XP SP3 RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Chrome 69 / Win 7  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Firefox 31.3.0 ESR / Win 7 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Firefox 47 / Win 7  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Firefox 49 / XP SP3 RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Firefox 62 / Win 7  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Googlebot Feb 2018 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
IE 7 / Vista RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
IE 8 / XP   No FS 1   No SNI 2 Server sent fatal alert: handshake_failure
IE 8-10 / Win 7  R RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
IE 11 / Win 7  R RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
IE 11 / Win 8.1  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
IE 10 / Win Phone 8.0 RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
IE 11 / Win Phone 8.1  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
IE 11 / Win Phone 8.1 Update  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
IE 11 / Win 10  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Edge 15 / Win 10  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Edge 13 / Win Phone 10  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Java 6u45   No SNI 2 Server sent fatal alert: handshake_failure
Java 7u25 RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA   ECDH secp256r1  FS
Java 8u161 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
OpenSSL 0.9.8y RSA 2048 (SHA256)   TLS 1.0 TLS_RSA_WITH_AES_256_CBC_SHA  No FS
OpenSSL 1.0.1l  R RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
OpenSSL 1.0.2e  R RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Safari 5.1.9 / OS X 10.6.8 RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
Safari 6 / iOS 6.0.1 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
Safari 6.0.4 / OS X 10.8.4  R RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA   ECDH secp256r1  FS
Safari 7 / iOS 7.1  R RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
Safari 7 / OS X 10.9  R RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
Safari 8 / iOS 8.4  R RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
Safari 8 / OS X 10.10  R RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   ECDH secp256r1  FS
Safari 9 / iOS 9  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Safari 9 / OS X 10.11  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Safari 10 / iOS 10  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Safari 10 / OS X 10.12  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Apple ATS 9 / iOS 9  R RSA 2048 (SHA256)   TLS 1.2 > http/1.1   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
Yahoo Slurp Jan 2015 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS
YandexBot Jan 2015 RSA 2048 (SHA256)   TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS

# Not simulated clients (Protocol mismatch)
IE 6 / XP   No FS 1   No SNI 2 Protocol mismatch (not simulated)
(1) Clients that do not support Forward Secrecy (FS) are excluded when determining support for it.
(2) No support for virtual SSL hosting (SNI). Connects to the default site if the server uses SNI.
(3) Only first connection attempt simulated. Browsers sometimes retry with a lower protocol version.
(R) Denotes a reference browser or client, with which we expect better effective security.
(All) We use defaults, but some platforms do not use their best protocols and features (e.g., Java 6 & 7, older IE).
(All) Certificate trust is not checked in handshake simulation, we only perform TLS handshake.

Protocol Details
DROWN No, server keys and hostname not seen elsewhere with SSLv2

(1) For a better understanding of this test, please read this longer explanation
(2) Key usage data kindly provided by the Censys network search engine; original DROWN website here
(3) Censys data is only indicative of possible key and certificate reuse; possibly out-of-date and not complete

 

Secure Renegotiation Supported
Secure Client-Initiated Renegotiation No
Insecure Client-Initiated Renegotiation No
BEAST attack Not mitigated server-side (more info)   TLS 1.0: 0xc014
POODLE (SSLv3) No, SSL 3 not supported (more info)
POODLE (TLS) No (more info)
Downgrade attack prevention Yes, TLS_FALLBACK_SCSV supported (more info)
SSL/TLS compression No
RC4 No
Heartbeat (extension) Yes
Heartbleed (vulnerability) No (more info)
Ticketbleed (vulnerability) No (more info)
OpenSSL CCS vuln. (CVE-2014-0224) No (more info)
OpenSSL Padding Oracle vuln.
(CVE-2016-2107)
No (more info)
ROBOT (vulnerability) No (more info)
Forward Secrecy With modern browsers (more info)
ALPN Yes   http/1.1
NPN Yes   http/1.1
Session resumption (caching) Yes
Session resumption (tickets) Yes
OCSP stapling No
Strict Transport Security (HSTS) No
HSTS Preloading Not in: Chrome  Edge  Firefox  IE 
Public Key Pinning (HPKP) No (more info)
Public Key Pinning Report-Only No
Public Key Pinning (Static) No (more info)
Long handshake intolerance No
TLS extension intolerance No
TLS version intolerance No
Incorrect SNI alerts No
Uses common DH primes No, DHE suites not supported
DH public server param (Ys) reuse No, DHE suites not supported
ECDH public server param reuse No
Supported Named Groups secp256r1, secp521r1, brainpoolP512r1, brainpoolP384r1, secp384r1, brainpoolP256r1, secp256k1, sect571r1, sect571k1, sect409k1, sect409r1, sect283k1, sect283r1 (server preferred order)
SSL 2 handshake compatibility Yes

HTTP Requests
1 https://ali-11.zhizhangyi.com/  (HTTP/1.1 200 OK)
1
Server nginx
Date Tue, 31 Jul 2018 05:37:31 GMT
Content-Type text/html; charset=utf-8
Content-Length 80705
Connection close
X-Powered-By Express
ETag W/”13b41-4ZVrFyIIK+NATI0xCeFjCQ”

Miscellaneous
Test date Tue, 31 Jul 2018 05:37:19 UTC
Test duration 237.153 seconds
HTTP status code 200
HTTP server signature nginx
Server hostname

nginx 配置SSL A+评分

openssl dhparam -out dhparam.pem 4096


server {
listen 443;
server_name ali-6.xxx.com;
ssl on;
ssl_certificate /opt/nginx/certs/STAR.xxx.com.crt;
ssl_certificate_key /opt/nginx/certs/STAR.xxx.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2;
#A+ ali-4.zhizhangyi.com ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384;
#A+ ali-5.zhizhangyi.com ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256;
#A+ ali-3.zhizhangyi.com ssl_ciphers !AES128-SHA256:!ECDHE-RSA-AES128-SHA:!AES128-GCM-SHA256:!ECDHE-RSA-AES128-SHA256:!AES256-SHA256:!AES256-SHA256:!AES256-GCM-SHA384:!ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
#A+ ali-test.zhizhangyi.com ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
#A+ ali-2.zhizhangyi.com ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256;
ssl_dhparam /opt/nginx/certs/dhparams.pem;
ssl_prefer_server_ciphers on;
ssl_ecdh_curve secp384r1;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
location / {
proxy_pass https://101.201.28.36:3000/emm/;
proxy_read_timeout 3600s;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log /opt/nginx/log/iws8-test.xxx.com-3000.access.log;
error_log /opt/nginx/log/iws8-test.xxx.com-3000.error_log;
}

cipher-suites

With openssl 1.0.1j+ you should get the following cipher-suites (I’ve formatted the list a bit to make it more readable):

 

Cipher-Suite ID

IANA Cipher-Suite Name

openssl Cipher-Suite Alias

PFS?

Key-Exchange

Authentication

Symmetric Encryption

HMAC

0xC0,0x30

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

ECDHE-RSA-AES256-GCM-SHA384

yes

ECDH

RSA

AESGCM(256)

AEAD

0xC0,0x2C

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

ECDHE-ECDSA-AES256-GCM-SHA384

yes

ECDH

ECDSA

AESGCM(256)

AEAD

0xC0,0x28

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

ECDHE-RSA-AES256-SHA384

yes

ECDH

RSA

AESCBC(256)

SHA384

0xC0,0x24

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384

ECDHE-ECDSA-AES256-SHA384

yes

ECDH

ECDSA

AESCBC(256)

SHA384

0xC0,0x14

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

ECDHE-RSA-AES256-SHA

yes

ECDH

RSA

AESCBC(256)

SHA1

0xC0,0x0A

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

ECDHE-ECDSA-AES256-SHA

yes

ECDH

ECDSA

AESCBC(256)

SHA1

0x00,0xA3

TLS_DHE_DSS_WITH_AES_256_GCM_SHA384

DHE-DSS-AES256-GCM-SHA384

yes

DH

DSS

AESGCM(256)

AEAD

0x00,0x9F

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384

DHE-RSA-AES256-GCM-SHA384

yes

DH

RSA

AESGCM(256)

AEAD

0x00,0x6B

TLS_DHE_RSA_WITH_AES_256_CBC_SHA256

DHE-RSA-AES256-SHA256

yes

DH

RSA

AESCBC(256)

SHA256

0x00,0x6A

TLS_DHE_DSS_WITH_AES_256_CBC_SHA256

DHE-DSS-AES256-SHA256

yes

DH

DSS

AESCBC(256)

SHA256

0x00,0x39

TLS_DHE_RSA_WITH_AES_256_CBC_SHA

DHE-RSA-AES256-SHA

yes

DH

RSA

AESCBC(256)

SHA1

0x00,0x38

TLS_DHE_DSS_WITH_AES_256_CBC_SHA

DHE-DSS-AES256-SHA

yes

DH

DSS

AESCBC(256)

SHA1

0x00,0x9D

TLS_RSA_WITH_AES_256_GCM_SHA384

AES256-GCM-SHA384

no

RSA

RSA

AESGCM(256)

AEAD

0x00,0x3D

TLS_RSA_WITH_AES_256_CBC_SHA256

AES256-SHA256

no

RSA

RSA

AESCBC(256)

SHA256

0x00,0x35

TLS_RSA_WITH_AES_256_CBC_SHA

AES256-SHA

no

RSA

RSA

AESCBC(256)

SHA1

0xC0,0x2F

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

ECDHE-RSA-AES128-GCM-SHA256

yes

ECDH

RSA

AESGCM(128)

AEAD

0xC0,0x2B

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

ECDHE-ECDSA-AES128-GCM-SHA256

yes

ECDH

ECDSA

AESGCM(128)

AEAD

0xC0,0x27

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

ECDHE-RSA-AES128-SHA256

yes

ECDH

RSA

AESCBC(128)

SHA256

0xC0,0x23

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256

ECDHE-ECDSA-AES128-SHA256

yes

ECDH

ECDSA

AESCBC(128)

SHA256

0xC0,0x13

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

ECDHE-RSA-AES128-SHA

yes

ECDH

RSA

AESCBC(128)

SHA1

0xC0,0x09

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA

ECDHE-ECDSA-AES128-SHA

yes

ECDH

ECDSA

AESCBC(128)

SHA1

0x00,0xA2

TLS_DHE_DSS_WITH_AES_128_GCM_SHA256

DHE-DSS-AES128-GCM-SHA256

yes

DH

DSS

AESGCM(128)

AEAD

0x00,0x9E

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

DHE-RSA-AES128-GCM-SHA256

yes

DH

RSA

AESGCM(128)

AEAD

0x00,0x67

TLS_DHE_RSA_WITH_AES_128_CBC_SHA256

DHE-RSA-AES128-SHA256

yes

DH

RSA

AESCBC(128)

SHA256

0x00,0x40

TLS_DHE_DSS_WITH_AES_128_CBC_SHA256

DHE-DSS-AES128-SHA256

yes

DH

DSS

AESCBC(128)

SHA256

0x00,0x33

TLS_DHE_RSA_WITH_AES_128_CBC_SHA

DHE-RSA-AES128-SHA

yes

DH

RSA

AESCBC(128)

SHA1

0x00,0x32

TLS_DHE_DSS_WITH_AES_128_CBC_SHA

DHE-DSS-AES128-SHA

yes

DH

DSS

AESCBC(128)

SHA1

0x00,0x9C

TLS_RSA_WITH_AES_128_GCM_SHA256

AES128-GCM-SHA256

no

RSA

RSA

AESGCM(128)

AEAD

0x00,0x3C

TLS_RSA_WITH_AES_128_CBC_SHA256

AES128-SHA256

no

RSA

RSA

AESCBC(128)

SHA256

0x00,0x2F

TLS_RSA_WITH_AES_128_CBC_SHA

AES128-SHA

no

RSA

RSA

AESCBC(128)

SHA1


如何在 SSLLabs 测试中冲满分

Qualys SSL Labs 是一个测试服务器 SSL 功能的网站,我们在配置服务器时经常用它作为参考。一般来说我们只参考它的评级(A+,A,B,C,D,E,F,T)等,达到 A+ 就认为服务器的配置足够优秀。不过,SSLLabs 也在评级右侧给出了分项分数,而我的主站并没有把它们全部冲到满分。如果把 SSLLabs 的各项分项分数全部达到满分,会是什么效果,有什么实际意义吗?我用一台不运行网站的 VPS 安装了 nginx 并进行了一些配置,成功刷到了全满分,如图或者这里所示

插图

作为对比,这是本站的评分,除看图外也可在此处看到

插图

本文有关 SSLLabs 评分标准全部来自于 SSLLabs 官方的评分标准文档 在本文写成之日的版本。

准备工作

我们要先安装好 nginx。因为这台 VPS 是 OpenVZ 的,没法装 Docker,所以没法像我的其它 VPS 一样一键部署。不过因为我的 VPS 和镜像都是 Debian,所以我就把之前写过的 Dockerfile 里的指令直接复制过来用了。

证书要求

SSL Labs 要求证书不能有以下情况:

  • 域名不匹配
  • 证书还未生效或者已到期
  • 使用自签名证书等不被信任的证书
  • 使用被注销(Revoked)的证书
  • 不安全的证书签名或者密钥

基本上,只要你的证书是近期申请的,并且浏览器能正常打开你的网站,那么就没问题。

协议支持

协议支持在评级中占 30% 的比重,算法是根据服务器支持的协议打分,取最高分和最低分的平均数。

各个协议评分如下:

  • SSL 2.0: 0 分
  • SSL 3.0: 80 分
  • TLS 1.0: 90 分
  • TLS 1.1: 95 分
  • TLS 1.2: 100 分
  • TLS 1.3: 100 分

(注:TLS 1.3 的得分在评分标准中未给出,但是实际按 100 分计)(此处指 TLS 1.3 草案 18(draft 18))

SSL 2.0 现在看来是个筛子,必须严格禁止使用。SSL 3.0 也没好到哪去,但是有些网站需要它来支持老旧的浏览器(对,我说的就是 IE6)。

TLS 1.0 也有点问题,不过在各大浏览器厂商的合作下,这个问题可以当成已经解决。TLS 1.1、1.2 和 1.3 目前来看没有问题。

为了在此项得到满分,必须关闭除 TLS 1.2 以外的全部协议(包括 TLS 1.3,原因等会讲),在 nginx 中如此配置:

ssl_protocols TLSv1.2;

密钥交换

密钥交换是服务器和客户端验证彼此身份,并且产生用于当前会话的对称加密密钥的方式。其评分标准同样是最高和最低的平均数。详细分数如下:

  • 匿名密钥交换:0 分(因为无法验证身份,极易被中间人攻击)
  • 密钥强度 0 到 511 bit: 20 分
  • 出口密钥交换:40 分(这些是早期美国限制出口密钥交换算法时的产物,都很弱,容易破解)
  • 密钥强度 512 到 1023 bit:40 分
  • 密钥强度 1024 到 2047 bit:80 分
  • 密钥强度 2048 到 4095 bit:90 分
  • 密钥强度 4096 bit 及以上:100分

此处的强度是指 RSA 的等效强度。如果你用的是 RSA 证书(一般都是这种),要将密钥强度调成 4096 bit。如果你用的是 ECC 证书(比较新的证书格式),只需要 384 bit 就能有 4096 bit 的 RSA 等效强度。

如果你用的是 Let’s Encrypt 以及其官方客户端 Certbot,用以下命令生成密钥即可:

certbot certonly --webroot -w /var/www/ -d vmbox.lantian.pub --rsa-key-size 4096

生成 ECC 证书需要第三方客户端,这里先不展开。(我比较懒就跳过了)

但是安装上 4096 bit 证书后,你这项的评分仍然可能没满。这就取决于 nginx 配置文件中的密钥交换算法了。先来看下这张图,这是本站的加密算法列表:

插图

算法后面有一些标记,其意义如下:

  • ECDH secp256r1 (eq. 3072 bits RSA):ECDH 256 bit 算法,等效 3072 bit RSA
  • ECDH secp384r1 (eq. 7680 bits RSA):ECDH 384 bit 算法,等效 7680 bit RSA
  • DH 4096 bit:RSA 4096 bit 算法

密钥交换算法的强度取决于密钥本身和交换算法两者中的较弱者。为了满分,就只好把所有小于 4096 bit RSA 的算法都关了。

再看一下 TLS 1.3 的算法们,它们都是等效 3072 bit RSA 的,只能把它们全禁了。全禁了之后,TLS 1.3 也就没用了,因此我刚刚不保留开启 TLS 1.3。

等等,还没完。ECDH 系列交换算法依赖一个叫 DHparams 的文件,需要运行这条命令生成:

openssl dhparam -out dhparam.pem 4096

这条命令运行奇慢,在我的 i5-3210M 的笔记本上运行了快 1 个小时。生成完后在 nginx 里如下配置:

ssl_dhparam /etc/dhparam.pem;

密钥强度

最后,就是双方交换得到的密钥本身的强度。评分同样是最大和最小的平均值,细则如下:

  • 0 bit(无加密):0 分
  • 1-127 bit:20 分
  • 128-255 bit:80 分
  • 256 bit 及以上:100 分

密钥强度由密钥交换算法确定,因此只留 256 bit 密钥强度的交换算法即可。符合条件的算法是 CHACHA20-POLY1305 和 AES-256。我的配置如下:

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:!DSS';

其它调整

另外还要打开 HSTS(强制浏览器走 SSL)。最好还要打开 HPKP(要求浏览器只认某几家的证书)。配置如下:

add_header Strict-Transport-Security 'max-age=15768000;includeSubDomains;preload';

(HSTS,注意会对子域名生效,并且允许你的网站提交到 HSTS Preload 列表,也就是浏览器永远走 SSL,即使没访问过你的网站)

add_header Public-Key-Pins 'pin-sha256="9uthMA8OzB/wVGSR3w5bzlt6jAFLWEI533bM+vNDkts=";pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=";pin-sha256="sRHdihwgkaib1P1gxX8HFszlD+7/gTfNvuAybgLPNis=";pin-sha256="58qRu/uxh4gFezqAcERupSkRYBlBAvfcw7mEjGPLnNU=";max-age=2592000';

(放行了 Let’s Encrypt 的两张中级证书,另两张貌似是 TrustAsia 和 Comodo 的,记不清了)

完成以上这些后,SSL Labs 就会显示你的 SSL 满分了。

实用性?

满分固然好看,但是其提供的意义又有多少?在这个过程中,我们使用了明显更慢的 4096 bit 密钥和交换算法,而 2048 bit 对于现在的算力来说已经足够。这就造成了额外的 CPU 开销(加密解密)和网络开销(传输密钥)。同时,我们放弃了很多旧客户端的支持,其中有些我们一般不考虑支持了(例如 IE8),但是根据 SSLLabs 显示的测试结果,有些客户端却很重要:

  • Android 4.3 及之前版本的设备(旧手机,旧智能电视及盒子)
  • 百度搜索索引机器人(根据 SSL Labs 页面上显示,2015 年 1 月的版本)
  • IE 10 及之前的浏览器(一些还没升上级的 Windows 7,以及 Windows Phone 8.0)
  • Java 6、7(不支持 TLS 1.2)
  • Java 8(不支持留下的这些密钥交换算法)
  • Safari 6 及之前版本

其中以 Java 8 最为重要。绝大多数网站完全不需要这么注重安全的配置,大可以允许一些稍微弱一些的算法来提高兼容性。

启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法

之所以想起要启用HSTS,主要是最近不少的朋友说网站打不开了,虽然Ping值一切正常,但是就是网页无法访问。猜测可能是DNS解析这一环节出了问题。另外自己本地的DNS劫持已经到了“丧心病狂”的地步了,不加Https访问京东淘宝等全部被加入各种推广。

启用HSTS后自然想要加入HSTS Preload List了,这是各大浏览器都遵循的一个强制使用Https访问的网站列表,只要加入到这个列表中,所有的通过浏览器访问请求都会强制走Https,这在很大程度上可以杜绝“第一次”访问的劫持,最大限度地提高Https访问的安全性。

需要注意的是加入HSTS Preload List需要以根域名的形式加入,如果你启用了www.wzfou.com这样的二级域名形式访问,你需要先停止301跳转,即要保证wzfou.com这样的根域名是用Https可以访问到的。(PS:之前我有一个网站就是这样的情况,如有变化大家在申请时结合具体情况分析)。

启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法

HSTS是在服务器强化Https安全,如果你的网站还没有启用Https,可以试试免费的SSL证书Let’s Encrypt,最近还推出了免费泛域名证书:Let’s Encrypt Wildcard 免费泛域名SSL证书一键申请与SSL使用教程,更多的关于建站的经验与技巧,你可以看看:

  1. 站长必备技能批量给图片添加水印-XnView和美图秀秀批量处理方法
  2. PayPal连连提现五个注意事项-账号绑定,失败锁定,手续费与提现时长
  3. 自建CDN加速-Nginx反向绑定,缓存加速,自动更新缓存和获取真实IP

一、服务器启用HSTS

HSTS是国际互联网工程组织 IETE 正在推行一种新的 Web安全协议HTTP Strict Transport Security(HSTS)。采用 HSTS 协议的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本,不需要用户手动在 URL 地址栏中输入加密地址。

1.1  Apache2 配置 HSTS

编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:

# Apache需加载mod_header库,一般位于httpd.conf文件,搜索mod_headers并取消注释。(已加载可跳过)
LoadModule headers_module modules/mod_headers.so   #然后对应站点VirtualHost里面插入HSTS响应头信息

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

保存 Apache 配置文件,然后重启。现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数),这个失效时间每次都会设置为两年后。

1.2  Nginx 配置 HSTS

Nginx 服务器中的配置最为简单,只需要编辑 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf)将下面行添加到你的 HTTPS 配置的 server 块中即可:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

如果你发现直接添加在 server 块中无效的情况,你可以试试直接插入到 location ~ *php 内:

location ~ [^/]\.php(/|$) {
	add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
}

配置保存后重启 Nginx 服务。

1.3  在 Lighttpd 中配置 HSTS

将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
	setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}

编辑保存后记得重启一下。

1.4  PHP通用配置 HSTS 方法

将以下代码添加到网站根目录 index.php 中或者header.php中

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

开启了HSTS后,你部署SSL/TLS的服务检测得分就可能是A+以上了。ssllabs官网以及演示如下:

  1. 官网:https://www.ssllabs.com/
  2. 中文版:https://myssl.com
  3. 演示:https://www.ssllabs.com/ssltest/analyze.html?d=wzfou.com

HSTS Preload List达到A+等级

二、加入HSTS Preload List

HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也在采用这个列表。

  1. https://hstspreload.org/
  2. https://wzfou.com/cloudflare/

2.1  测试HSTS是否生效

直接打开Chrome查看网络,就可以看到头部已经包含了HSTS信息了。

HSTS Preload List头部信息

2.2 做好Http跳转Https

将wzfou.com以及任意二级域名都要做好Http跳转到Https,启用了HSTS后请求地址为 header 头中的 Location会显示307 ,即要求浏览器继续向 Location 的地址 POST 内容。

HSTS Preload List跳转成功

2.3  加入HSTS Preload List

进入hstspreload官网,输入你的域名,然后检测结果会告诉是否符合加入HSTS Preload List,没有问题的话勾选确定。(点击放大)

申请加入HSTS Preload List

HSTS Preload List审核的时间有长有短,一旦提交后你就只能等待。

HSTS Preload List耐心等待

三、HSTS Preload List问题

3.1  是否成功加入HSTS Preload List

直接到下列网址搜索是否有你的域名即可:

  1. https://cs.chromium.org/chromium/src/net/http/transport_security_state_static.json

当然,加入到了HSTS Preload List后,你可能还需要等待1-2月,待新版本的Chrome和Chromium、Firefox、IE等发布后,你的域名算是正式被各大浏览器承认并强制使用Https访问了,你可以在Chrome浏览器的地址框中输入“chrome://net-internals/#hsts”查看。

HSTS Preload List搜索查看

3.2  如何撤销HSTS Preload List

  1. https://hstspreload.org/removal/

官方也提供了一个申请删除HSTS Preload List,不过需要注意的是撤销HSTS Preload List和加入HSTS Preload List一样,花费的时间可能需要几个月以上,所以申请HSTS Preload List前一定要谨慎。

HSTS Preload List删除

四、总结

由于HSTS Preload List是一个内置于各大浏览器的Https网站列表,所以能否加入成功除了审核通过外,还得看浏览器版本的更新。一旦加入HSTS Preload List了想要退出就比较麻烦了,所以加入前一定要考虑好。

那么哪些网站适合加入HSTS Preload List?个人博客或者网站可以来玩一玩,对于安全性要求比较高的电商网站,会员管理后台等完全可以使用HSTS Preload List,对于一些有Http需要的还是不加入得好。

增强 nginx 的 SSL 安全性

本文向你介绍如何在 nginx 服务器上设置健壮的 SSL 安全机制。我们通过禁用 SSL 压缩来降低 CRIME 攻击威胁;禁用协议上存在安全缺陷的 SSLv3 及更低版本,并设置更健壮的加密套件cipher suite来尽可能启用前向安全性Forward Secrecy;此外,我们还启用了 HSTS 和 HPKP。这样我们就拥有了一个健壮而可经受考验的 SSL 配置,并可以在 Qually Labs 的 SSL 测试中得到 A 级评分。

如果不求甚解的话,可以从 https://cipherli.st 上找到 nginx 、Apache 和 Lighttpd 的安全设置,复制粘帖即可。

本教程在 Digital Ocean 的 VPS 上测试通过。如果你喜欢这篇教程,想要支持作者的站点的话,购买 Digital Ocean 的 VPS 时请使用如下链接:https://www.digitalocean.com/?refcode=7435ae6b8212

本教程可以通过发布于 2014/1/21 的 SSL 实验室测试的严格要求(我之前就通过了测试,如果你按照本文操作就可以得到一个 A+ 评分)。

你可以从下列链接中找到这方面的进一步内容:

我们需要编辑 nginx 的配置,在 Ubuntu/Debian 上是 /etc/nginx/sited-enabled/yoursite.com,在 RHEL/CentOS 上是 /etc/nginx/conf.d/nginx.conf

本文中,我们需要编辑443端口(SSL)的 server 配置中的部分。在文末你可以看到完整的配置例子。

在编辑之前切记备份一下配置文件!

野兽攻击(BEAST)和 RC4

简单的说,野兽攻击BEAST就是通过篡改一个加密算法的 密码块链CBC,cipher block chaining的模式,从而可以对部分编码流量悄悄解码。更多信息参照上面的链接。

针对野兽攻击BEAST,较新的浏览器已经启用了客户端缓解方案。推荐方案是禁用 TLS 1.0 的所有加密算法,仅允许 RC4 算法。然而,针对 RC4 算法的攻击也越来越多 ,很多已经从理论上逐步发展为实际可行的攻击方式。此外,有理由相信 NSA 已经实现了他们所谓的“大突破”——攻破 RC4 。

禁用 RC4 会有几个后果。其一,当用户使用老旧的浏览器时,比如 Windows XP 上的 IE 会用 3DES 来替代 RC4。3DES 要比 RC4 更安全,但是它的计算成本更高,你的服务器就需要为这些用户付出更多的处理成本。其二,RC4 算法能减轻野兽攻击BEAST的危害,如果禁用 RC4 会导致 TLS 1.0 用户会换到更容易受攻击的 AES-CBC 算法上(通常服务器端的对野兽攻击BEAST的“修复方法”是让 RC4 优先于其它算法)。我认为 RC4 的风险要高于野兽攻击BEAST的风险。事实上,有了客户端缓解方案(Chrome 和 Firefox 提供了缓解方案),野兽攻击BEAST就不是什么大问题了。而 RC4 的风险却在增长:随着时间推移,对加密算法的破解会越来越多。

怪物攻击(FREAK)

怪物攻击FREAK是一种中间人攻击,它是由来自 INRIA、微软研究院和 IMDEA 的密码学家们所发现的。怪物攻击FREAK的缩写来自“RSA 出口密钥因子分解Factoring RSA-EXPORT Keys

这个漏洞可上溯到上世纪九十年代,当时美国政府禁止出口加密软件,除非其使用编码密钥长度不超过512位的出口加密套件。

这造成了一些现在的 TLS 客户端存在一个缺陷,这些客户端包括: 苹果的 SecureTransport 、OpenSSL。这个缺陷会导致它们会接受出口降级 RSA 密钥,即便客户端并没有要求使用出口降级 RSA 密钥。这个缺陷带来的影响很讨厌:在客户端存在缺陷,且服务器支持出口降级 RSA 密钥时,会发生中间人攻击,从而导致连接的强度降低。

攻击分为两个组成部分:首先是服务器必须接受“出口降级 RSA 密钥export grade RSA”。

中间人攻击可以按如下流程:

  • 在客户端的 Hello 消息中,要求标准的 RSA 加密套件。
  • 中间人攻击者修改该消息为‘输出级 RSA 密钥’export RSA
  • 服务器回应一个512位的输出级 RSA 密钥,并以其长期密钥签名。
  • 由于 OpenSSL/SecureTransport 的缺陷,客户端会接受这个弱密钥。
  • 攻击者根据 RSA 模数分解因子来恢复相应的 RSA 解密密钥。
  • 当客户端编码‘预主密码’pre-master secret给服务器时,攻击者现在就可以解码它并恢复 TLS 的‘主密码’master secret
  • 从这里开始,攻击者就能看到了传输的明文并注入任何东西了。

本文所提供的加密套件不启用输出降级加密,请确认你的 OpenSSL 是最新的,也强烈建议你将客户端也升级到新的版本。

心血漏洞(Heartbleed)

心血漏洞Heartbleed 是一个于2014年4月公布的 OpenSSL 加密库的漏洞,它是一个被广泛使用的传输层安全(TLS)协议的实现。无论是服务器端还是客户端在 TLS 中使用了有缺陷的 OpenSSL,都可以被利用该缺陷。由于它是因 DTLS 心跳扩展(RFC 6520)中的输入验证不正确(缺少了边界检查)而导致的,所以该漏洞根据“心跳”而命名。这个漏洞是一种缓存区超读漏洞,它可以读取到本不应该读取的数据。

哪个版本的 OpenSSL 受到心血漏洞Heartbleed的影响?

各版本情况如下:

  • OpenSSL 1.0.1 直到 1.0.1f (包括)存在该缺陷
  • OpenSSL 1.0.1g 没有该缺陷
  • OpenSSL 1.0.0 分支没有该缺陷
  • OpenSSL 0.9.8 分支没有该缺陷

这个缺陷是2011年12月引入到 OpenSSL 中的,并随着 2012年3月14日 OpenSSL 发布的 1.0.1 而泛滥。2014年4月7日发布的 OpenSSL 1.0.1g 修复了该漏洞。

升级你的 OpenSSL 就可以避免该缺陷。

SSL 压缩(罪恶攻击 CRIME)

罪恶攻击CRIME使用 SSL 压缩来完成它的魔法,SSL 压缩在下述版本是默认关闭的: nginx 1.1.6及更高/1.0.9及更高(如果使用了 OpenSSL 1.0.0及更高), nginx 1.3.2及更高/1.2.2及更高(如果使用较旧版本的 OpenSSL)。

如果你使用一个早期版本的 nginx 或 OpenSSL,而且你的发行版没有向后移植该选项,那么你需要重新编译没有一个 ZLIB 支持的 OpenSSL。这会禁止 OpenSSL 使用 DEFLATE 压缩方式。如果你禁用了这个,你仍然可以使用常规的 HTML DEFLATE 压缩。

SSLv2 和 SSLv3

SSLv2 是不安全的,所以我们需要禁用它。我们也禁用 SSLv3,因为 TLS 1.0 在遭受到降级攻击时,会允许攻击者强制连接使用 SSLv3,从而禁用了前向安全性forward secrecy

如下编辑配置文件:

  1. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

卷毛狗攻击(POODLE)和 TLS-FALLBACK-SCSV

SSLv3 会受到卷毛狗漏洞(POODLE)的攻击。这是禁用 SSLv3 的主要原因之一。

Google 提出了一个名为 TLS_FALLBACK_SCSV 的SSL/TLS 扩展,它用于防止强制 SSL 降级。如果你升级 到下述的 OpenSSL 版本会自动启用它。

  • OpenSSL 1.0.1 带有 TLS_FALLBACK_SCSV 1.0.1j 及更高。
  • OpenSSL 1.0.0 带有 TLS_FALLBACK_SCSV 1.0.0o 及更高。
  • OpenSSL 0.9.8 带有 TLS_FALLBACK_SCSV 0.9.8zc 及更高。

更多信息请参照 NGINX 文档

加密套件(cipher suite)

前向安全性Forward Secrecy用于在长期密钥被破解时确保会话密钥的完整性。完备的前向安全性PFS,Perfect Forward Secrecy是指强制在每个/每次会话中推导新的密钥。

这就是说,泄露的私钥并不能用来解密(之前)记录下来的 SSL 通讯。

提供完备的前向安全性PFS,Perfect Forward Secrecy功能的是那些使用了一种 Diffie-Hellman 密钥交换的短暂形式的加密套件。它们的缺点是系统开销较大,不过可以使用椭圆曲线的变体来改进。

以下两个加密套件是我推荐的,之后Mozilla 基金会也推荐了。

推荐的加密套件:

  1. ssl_ciphers 'AES128+EECDH:AES128+EDH';

向后兼容的推荐的加密套件(IE6/WinXP):

  1. ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

如果你的 OpenSSL 版本比较旧,不可用的加密算法会自动丢弃。应该一直使用上述的完整套件,让 OpenSSL 选择一个它所支持的。

加密套件的顺序是非常重要的,因为其决定了优先选择哪个算法。上述优先推荐的算法中提供了PFS(完备的前向安全性)。

较旧版本的 OpenSSL 也许不能支持这个算法的完整列表,AES-GCM 和一些 ECDHE 算法是相当新的,在 Ubuntu 和 RHEL 中所带的绝大多数 OpenSSL 版本中不支持。

优先顺序的逻辑

  • ECDHE+AESGCM 加密是首选的。它们是 TLS 1.2 加密算法,现在还没有广泛支持。当前还没有对它们的已知攻击。
  • PFS 加密套件好一些,首选 ECDHE,然后是 DHE。
  • AES 128 要好于 AES 256。有一个关于 AES256 带来的安全提升程度是否值回成本的讨论,结果是显而易见的。目前,AES128 要更值一些,因为它提供了不错的安全水准,确实很快,而且看起来对时序攻击更有抵抗力。
  • 在向后兼容的加密套件里面,AES 要优于 3DES。在 TLS 1.1及其以上,减轻了针对 AES 的野兽攻击BEAST的威胁,而在 TLS 1.0上则难以实现该攻击。在非向后兼容的加密套件里面,不支持 3DES。
  • RC4 整个不支持了。3DES 用于向后兼容。参看 #RC4_weaknesses 中的讨论。

强制丢弃的算法

  • aNULL 包含了非验证的 Diffie-Hellman 密钥交换,这会受到中间人MITM攻击
  • eNULL 包含了无加密的算法(明文)
  • EXPORT 是老旧的弱加密算法,是被美国法律标示为可出口的
  • RC4 包含的加密算法使用了已弃用的 ARCFOUR 算法
  • DES 包含的加密算法使用了弃用的数据加密标准(DES)
  • SSLv2 包含了定义在旧版本 SSL 标准中的所有算法,现已弃用
  • MD5 包含了使用已弃用的 MD5 作为哈希算法的所有算法

更多设置

确保你也添加了如下行:

  1. ssl_prefer_server_ciphers on;
  2. ssl_session_cache shared:SSL:10m;

在一个 SSLv3 或 TLSv1 握手过程中选择一个加密算法时,一般使用客户端的首选算法。如果设置了上述配置,则会替代地使用服务器端的首选算法。

前向安全性和 Diffie Hellman Ephemeral (DHE)参数

前向安全性Forward Secrecy的概念很简单:客户端和服务器协商一个永不重用的密钥,并在会话结束时销毁它。服务器上的 RSA 私钥用于客户端和服务器之间的 Diffie-Hellman 密钥交换签名。从 Diffie-Hellman 握手中获取的预主密钥会用于之后的编码。因为预主密钥是特定于客户端和服务器之间建立的某个连接,并且只用在一个限定的时间内,所以称作短暂模式Ephemeral

使用了前向安全性,如果一个攻击者取得了一个服务器的私钥,他是不能解码之前的通讯信息的。这个私钥仅用于 Diffie Hellman 握手签名,并不会泄露预主密钥。Diffie Hellman 算法会确保预主密钥绝不会离开客户端和服务器,而且不能被中间人攻击所拦截。

所有版本的 nginx(如1.4.4)都依赖于 OpenSSL 给 Diffie-Hellman (DH)的输入参数。不幸的是,这意味着 Diffie-Hellman Ephemeral(DHE)将使用 OpenSSL 的默认设置,包括一个用于密钥交换的1024位密钥。因为我们正在使用2048位证书,DHE 客户端就会使用一个要比非 DHE 客户端更弱的密钥交换。

我们需要生成一个更强壮的 DHE 参数:

  1. cd /etc/ssl/certs
  2. openssl dhparam -out dhparam.pem 4096

然后告诉 nginx 将其用作 DHE 密钥交换:

  1. ssl_dhparam /etc/ssl/certs/dhparam.pem;

OCSP 装订(Stapling)

当连接到一个服务器时,客户端应该使用证书吊销列表CRL,Certificate Revocation List 在线证书状态协议OCSP,Online Certificate Status Protocol记录来校验服务器证书的有效性。CRL 的问题是它已经增长的太大了,永远也下载不完了。

OCSP 更轻量级一些,因为我们每次只请求一条记录。但是副作用是当连接到一个服务器时必须对第三方 OCSP 响应器发起 OCSP 请求,这就增加了延迟和带来了潜在隐患。事实上,CA 所运营的 OCSP 响应器非常不可靠,浏览器如果不能及时收到答复,就会静默失败。攻击者通过 DoS 攻击一个 OCSP 响应器可以禁用其校验功能,这样就降低了安全性。

解决方法是允许服务器在 TLS 握手中发送缓存的 OCSP 记录,以绕开 OCSP 响应器。这个机制节省了客户端和 OCSP 响应器之间的通讯,称作 OCSP 装订。

客户端会在它的 CLIENT HELLO 中告知其支持 status_request TLS 扩展,服务器仅在客户端请求它的时候才发送缓存的 OCSP 响应。

大多数服务器最多会缓存 OCSP 响应48小时。服务器会按照常规的间隔连接到 CA 的 OCSP 响应器来获取刷新的 OCSP 记录。OCSP 响应器的位置可以从签名的证书中的授权信息访问Authority Information Access字段中获得。

HTTP 严格传输安全(HSTS)

如有可能,你应该启用 HTTP 严格传输安全(HSTS),它会引导浏览器和你的站点之间的通讯仅通过 HTTPS。

HTTP 公钥固定扩展(HPKP)

你也应该启用 HTTP 公钥固定扩展(HPKP)

公钥固定的意思是一个证书链必须包括一个白名单中的公钥。它确保仅有白名单中的 CA 才能够为某个域名签署证书,而不是你的浏览器中存储的任何 CA。

我已经写了一篇关于 HPKP 的背景理论及在 Apache、Lighttpd 和 NGINX 中配置例子的文章

配置范例

  1. server {
  2. listen [::]:443 default_server;
  3. ssl on;
  4. ssl_certificate_key /etc/ssl/cert/raymii_org.pem;
  5. ssl_certificate /etc/ssl/cert/ca-bundle.pem;
  6. ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
  7. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  8. ssl_session_cache shared:SSL:10m;
  9. ssl_stapling on;
  10. ssl_stapling_verify on;
  11. resolver 8.8.4.4 8.8.8.8 valid=300s;
  12. resolver_timeout 10s;
  13. ssl_prefer_server_ciphers on;
  14. ssl_dhparam /etc/ssl/certs/dhparam.pem;
  15. add_header Strict-Transport-Security max-age=63072000;
  16. add_header X-Frame-Options DENY;
  17. add_header X-Content-Type-Options nosniff;
  18. root /var/www/;
  19. index index.html index.htm;
  20. server_name raymii.org;
  21. }

结尾

如果你使用了上述配置,你需要重启 nginx:

  1. # 首先检查配置文件是否正确
  2. /etc/init.d/nginx configtest
  3. # 然后重启
  4. /etc/init.d/nginx restart

现在使用 SSL Labs 测试来看看你是否能得到一个漂亮的“A”。当然了,你也得到了一个安全的、强壮的、经得起考验的 SSL 配置!

hexo-server

https://hexo.io/zh-cn/docs/server.html

http://lowrank.science/Hexo-KaTeX/

http://lowrank.science/Hexo-KaTeX/

https://khan.github.io/KaTeX/docs/supported.html

http://sc.chinaz.com/info/160110535142.htm

debug相关链接:https://www.liurui.info/hexo-renderer-pandoc-Installation-Guide/index.html

hexo-server

Hexo 3.0 把服务器独立成了个别模块,您必须先安装 hexo-server 才能使用。

$ npm install hexo-server --save

安装完成后,输入以下命令以启动服务器,您的网站会在 http://localhost:4000 下启动。在服务器启动期间,Hexo 会监视文件变动并自动更新,您无须重启服务器。

$ hexo server

如果您想要更改端口,或是在执行时遇到了 EADDRINUSE 错误,可以在执行时使用 -p 选项指定其他端口,如下:

$ hexo server -p 5000

静态模式

在静态模式下,服务器只处理 public 文件夹内的文件,而不会处理文件变动,在执行时,您应该先自行执行 hexo generate,此模式通常用于生产环境(production mode)下。

$ hexo server -s

自定义 IP

服务器默认运行在 0.0.0.0,您可以覆盖默认的 IP 设置,如下:

$ hexo server -i 192.168.1.1

指定这个参数后,您就只能通过该IP才能访问站点。例如,对于一台使用无线网络的笔记本电脑,除了指向本机的127.0.0.1外,通常还有一个192.168.*.*的局域网IP,如果像上面那样使用-i参数,就不能用127.0.0.1来访问站点了。对于有公网IP的主机,如果您指定一个局域网IP作为-i参数的值,那么就无法通过公网来访问站点。

Pow

Pow 是一个 Mac 系统上的零配置 Rack 服务器,它也可以作为一个简单易用的静态文件服务器来使用。

安装

$ curl get.pow.cx | sh

设置

在 ~/.pow 文件夹建立链接(symlink)。

$ cd ~/.pow
$ ln -s /path/to/myapp

您的网站将会在 http://myapp.dev 下运行,网址根据链接名称而定。

Linux云自动化运维第二十一课—–第二单元 高级网络配置

第二单元 高级网络配置

链接:https://www.cnblogs.com/Virgo-sept/p/6815869.html

一、网络桥接

网络桥接用网络桥实现共享上网主机和客户机除了利用软件外,还可以用系统自带的网络桥建立连接用双网卡的机器做主机

 

二、网络桥接的配置

1.vim /etc/sysconfig/network-scripts/ifcfg-eth0

– BRIDGE=br0

2.vim /etc/sysconfig/network-scripts/ifcfg-br0

– TYPE=Bridge

3.示例:

[root@foundation62 Desktop]# vim /etc/sysconfig/network-scripts/ifcfg-Ethernet_connection_1

[root@foundation62 Desktop]# cat /etc/sysconfig/network-scripts/ifcfg-Ethernet_connection_1

BOOTPROTO=none

NAME=Ethernet_connection_1

DEVICE=enp2s0

ONBOOT=yes

BRIDGE=br0

[root@foundation62 Desktop]# cat /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0

BOOTPROTO=none

TYPE=Bridge

IPADDR=172.25.254.62

PREFIX=24

ONBOOT=yes

[root@foundation62 Desktop]# systemctl stop NetworkManager.service

[root@foundation62 Desktop]# systemctl start NetworkManager.service

[root@foundation62 Desktop]# systemctl restart network

[root@foundation62 Desktop]# ifconfig

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 172.25.254.62  netmask 255.255.255.0  broadcast 172.25.254.255

inet6 fe80::221a:6ff:fe41:a67b  prefixlen 64  scopeid 0x20<link>

ether 20:1a:06:41:a6:7b  txqueuelen 0  (Ethernet)

RX packets 15924  bytes 19653370 (18.7 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 9172  bytes 907110 (885.8 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet6 fe80::221a:6ff:fe41:a67b  prefixlen 64  scopeid 0x20<link>

ether 20:1a:06:41:a6:7b  txqueuelen 1000  (Ethernet)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

device interrupt 16

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 190918  bytes 65213384 (62.1 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 190918  bytes 65213384 (62.1 MiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

ether 52:54:00:31:4d:69  txqueuelen 0  (Ethernet)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

virbr1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

ether 52:54:00:a7:5b:84  txqueuelen 0  (Ethernet)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet6 fe80::fc54:ff:fe00:3e0a  prefixlen 64  scopeid 0x20<link>

ether fe:54:00:00:3e:0a  txqueuelen 500  (Ethernet)

RX packets 85  bytes 16565 (16.1 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 576  bytes 62758 (61.2 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

vnet1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet6 fe80::fc54:ff:fe4e:4873  prefixlen 64  scopeid 0x20<link>

ether fe:54:00:4e:48:73  txqueuelen 500  (Ethernet)

RX packets 69  bytes 6594 (6.4 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 457  bytes 45275 (44.2 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

[root@foundation62 Desktop]#

 

三、网络桥接的管理命令

1.brctl ### 桥接管理命令

– show ### 显示

– addbr ### 添加网桥

– delbr ### 删除网桥

– addif ### 添加网桥连接

– delif ### 删除网桥连接

2.示例:

[root@localhost Desktop]# nm-connection-editor

[root@localhost Desktop]# systemctl restart network

[root@localhost Desktop]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ether 52:54:00:00:3e:0a  txqueuelen 1000  (Ethernet)

RX packets 22675  bytes 50616240 (48.2 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 13482  bytes 908420 (887.1 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 148  bytes 12616 (12.3 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 148  bytes 12616 (12.3 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

[root@localhost Desktop]# brctl show

bridge name bridge id STP enabled interfaces

[root@localhost Desktop]# brctl addbr br0

[root@localhost Desktop]# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.000000000000 no

[root@localhost Desktop]# brctl addif br0 eth0

[root@localhost Desktop]# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.525400003e0a no eth0

[root@localhost Desktop]# ifconfig br0 172.25.254.162 netmask 255.255.255.0

[root@localhost Desktop]# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.525400003e0a no eth0

[root@localhost Desktop]# ifconfig

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 172.25.254.162  netmask 255.255.255.0  broadcast 172.25.254.255

inet6 fe80::244d:28ff:fece:16ee  prefixlen 64  scopeid 0x20<link>

ether 52:54:00:00:3e:0a  txqueuelen 0  (Ethernet)

RX packets 31667  bytes 71292998 (67.9 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 19456  bytes 1299837 (1.2 MiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ether 52:54:00:00:3e:0a  txqueuelen 1000  (Ethernet)

RX packets 54419  bytes 122365787 (116.6 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 32930  bytes 2207597 (2.1 MiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 276  bytes 23496 (22.9 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 276  bytes 23496 (22.9 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

[root@localhost Desktop]# ping 172.25.254.250

PING 172.25.254.250 (172.25.254.250) 56(84) bytes of data.

64 bytes from 172.25.254.250: icmp_seq=1 ttl=64 time=1.43 ms

64 bytes from 172.25.254.250: icmp_seq=2 ttl=64 time=0.823 ms

64 bytes from 172.25.254.250: icmp_seq=3 ttl=64 time=0.781 ms

^C

— 172.25.254.250 ping statistics —

3 packets transmitted, 3 received, 0% packet loss, time 2002ms

rtt min/avg/max/mdev = 0.781/1.011/1.430/0.297 ms

[root@localhost Desktop]# ifconfig br0 down

[root@localhost Desktop]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ether 52:54:00:00:3e:0a  txqueuelen 1000  (Ethernet)

RX packets 60767  bytes 136736524 (130.4 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 36882  bytes 2472314 (2.3 MiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 276  bytes 23496 (22.9 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 276  bytes 23496 (22.9 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

[root@localhost Desktop]# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.525400003e0a no eth0

[root@localhost Desktop]# brctl delif br0 eth0

[root@localhost Desktop]# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.000000000000 no

[root@localhost Desktop]# brctl delbr br0

[root@localhost Desktop]# brctl show

bridge name bridge id STP enabled interfaces

[root@localhost Desktop]#

 

四、bond 网络

Red Hat Enterprise Linux 允许管理员使用bonding 内核模块和称为通道绑定接口的特殊网络接口将多个网络接口绑定到一个通道。根据选择的绑定模式 , 通道绑定使两个或更多个网络接口作为一个网络接口 , 从而增加带宽和 / 提供冗余性

 

五、选择 Linux 以太网绑定模式

1.模式 0 ( 平衡轮循 ) – 轮循策略 , 所有接口都使用采用轮循方式在所有 Slave 中传输封包 ; 任何Slave 都可以接收

2.模式 1 ( 主动备份 ) – 容错。一次只能使用一个Slave 接口 , 但是如果该接口出现故障 , 另一个Slave 将 接替它

3.模式 3 ( 广播 ) – 容错。所有封包都通过所有Slave 接口广播

 

六、利用 nmcli 命令管理 bond

1.nmcli con add type bond con-name bond0 ifname bond0 mode active-backup

2.nmcli con mod bond0 ipv4.addresses 1.2.3.4/24

3.nmcli con add type bond-slave ifname eth0 master bond0 con-name bond0-eth1

4.nmcli con add type bond-slave ifname eth1 master bond0 con-name bond0-eth2

5.示例:

[root@localhost Desktop]# nm-connection-editor

[root@localhost Desktop]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ether 52:54:00:00:3e:0a  txqueuelen 1000  (Ethernet)

RX packets 115  bytes 9747 (9.5 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ether 52:54:00:4e:48:73  txqueuelen 1000  (Ethernet)

RX packets 115  bytes 9747 (9.5 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 392  bytes 30892 (30.1 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 392  bytes 30892 (30.1 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

[root@localhost Desktop]# nmcli connection add con-name bond0 ifname bond0 type bond mode active-backup ip4 172.25.254.162/24

Connection ‘bond0’ (513011e8-9326-4542-b4bc-21df6d38fa56) successfully added.

[root@localhost Desktop]# nmcli connection add con-name eth0 ifname eth0 type bond-slave master bond0

Connection ‘eth0’ (89f6b8db-90e2-4571-b67d-807fcac04f65) successfully added.

[root@localhost Desktop]# nmcli connection add con-name eth1 ifname eth1 type bond-slave master bond0

Connection ‘eth1’ (1d5f4488-b1bf-4da9-8820-1d15c1425e7c) successfully added.

[root@localhost Desktop]# ping 172.25.254.250

[root@localhost Desktop]# watch -n 1 cat /proc/net/bonding/bond0

[root@localhost Desktop]# ifconfig eth0 down

[root@localhost Desktop]# ifconfig eth1 down

[root@localhost Desktop]# ifconfig eth0 up

 

七、主动备份配置示例

1.建立绑定接口 bond0 配置文件 :

/etc/sysconfig/network-scripts/ifcfg-bond0

– DEVICE=”bond0″

– BOOTPROTO=”none”

– IPADDR=”10.1.1.250″

– PREFIX=”24”

– ONBOOT=”yes”

– BONDING_OPTS=”mode=1 miimon=50”

2.建立 Slave 接口 eth0 配置文件 :

/etc/sysconfig/network-scripts/ifcfg-eth0

– DEVICE=”eth0″

– BOOTPROTO=”none”

– ONBOOT=”yes”

– MASTER=”bond0″

– SLAVE=”yes“

3.建立 Slave 接口 eth1 配置文件 :

/etc/sysconfig/network-scripts/ifcfg-eth1

– DEVICE=”eth1″

– BOOTPROTO=”none”

– ONBOOT=”yes”

– MASTER=”bond0″

– SLAVE=”yes“

4.配置系统加载 binding 模块 :

/etc/modprobe.d/bonding.conf

– alias bond0 bonding

5.ifenslave bond0 eth0 eth1

6.查看 bonding 状态

– cat /proc/net/bonding/bond0

 

八、Team 接口

1.Team 和 bond0 功能类似

2.Team 不需要手动加载相应内核模块

3.Team 有更强的拓展性

– 支持 8 快网卡

 

九、Team 的种类

1.broadcast 广播容错

2.roundrobin 轮询

3.activebackup 主备

4.loadbalance 负载均衡

 

十、同过 nmcli 设定 team

1.nmcli con add type team con-name team0 ifname team0 config ‘{“runner”: {“name”: “loadbalance”}}’

2.nmcli con mod team0 ipv4.addresses 1.2.3.4/24

3.nmcli con mod team0 ipv4.method manual

4.nmcli con add type team-slave ifname eth0 master team0 con-name team0-eth1

5.nmcli con add type team-slave ifname eth1 master team0 con-name team0-eth2

6.示例:

[root@localhost Desktop]# nm-connection-editor

[root@localhost Desktop]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ether 52:54:00:00:3e:0a  txqueuelen 1000  (Ethernet)

RX packets 1843  bytes 200147 (195.4 KiB)

RX errors 0  dropped 15  overruns 0  frame 0

TX packets 84  bytes 16499 (16.1 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ether 52:54:00:4e:48:73  txqueuelen 1000  (Ethernet)

RX packets 961  bytes 104199 (101.7 KiB)

RX errors 0  dropped 48  overruns 0  frame 0

TX packets 68  bytes 6496 (6.3 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 1172  bytes 92824 (90.6 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 1172  bytes 92824 (90.6 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

[root@localhost Desktop]# teamdctl team0 state

Device “team0” does not exist

[root@localhost Desktop]# nmcli connection add con-name team0 ifname team0 type team config ‘{“runner”:{“name”:”activebackup”}}’ ip4 172.25.254.162/24

Connection ‘team0’ (f433063f-f60d-4e34-a681-b5ddc14eb8b2) successfully added.

[root@localhost Desktop]# nmcli connection add con-name eth0 ifname eth0 type team-slave master team0

Connection ‘eth0’ (9e6d19b5-a0d7-41d3-b593-d1aa5a648fce) successfully added.

[root@localhost Desktop]# watch -n 1 teamdctl team0 state

[root@localhost Desktop]# ping 172.25.254.250

PING 172.25.254.250 (172.25.254.250) 56(84) bytes of data.

64 bytes from 172.25.254.250: icmp_seq=1 ttl=64 time=1.02 ms

64 bytes from 172.25.254.250: icmp_seq=2 ttl=64 time=0.835 ms

^C

— 172.25.254.250 ping statistics —

2 packets transmitted, 2 received, 0% packet loss, time 1001ms

rtt min/avg/max/mdev = 0.835/0.927/1.020/0.097 ms

[root@localhost Desktop]# nmcli connection add con-name eth1 ifname eth1 type team-slave master team0

Connection ‘eth1’ (5c96c8be-f0dc-4b43-8a5a-387c80ba4077) successfully added.

[root@localhost Desktop]# ifconfig eth0 down

[root@localhost Desktop]# ifconfig eth0 up

[root@localhost Desktop]# ifconfig eth1 down

[root@localhost Desktop]#

 

 

第十单元 网络端口安全

 

一、Firewalld概述

 

1.动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙,用以支持网络 “ zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。

2.系统提供了图像化的配置工具firewall-config、system-config-firewall, 提供命令行客户端firewall-cmd, 用于配置 firewalld永久性或非永久性运行时间的改变:它依次用iptables工具与执行数据包筛选的内核中的 Netfilter通信。

3.firewalld和iptables service 之间最本质的不同是:

1)iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里.

2)使用 iptables service每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld可以在运行时间内,改变设置而不丢失现行连接。

4.基于用户对网络中设备和交通所给与的信任程度,防火墙可以用来将网络分割成不同的区域。NetworkManager通知firewalld一个接口归属某个区域,新加入的接口被分配到默认区域。

网络区名称 默认配置

trusted( 信任 ) 可接受所有的网络连接

home( 家庭 ) 用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client、或dhcpv6-client服务连接

internal( 内部 ) 用于内部网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接

work( 工作 ) 用于工作区,仅接受ssh、ipp-client或dhcpv6-client服务连接

public( 公共 ) 在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域

external( 外部 ) 出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接

dmz( 非军事区 ) 仅接受ssh服务接连

block( 限制 ) 拒绝所有网络连接

drop( 丢弃 ) 任何接收的网络数据包都被丢弃,没有任何回复

5.示例:

服务端:

[root@localhost network-scripts]# ls

ifcfg-eth0   ifdown-post      ifup-bnep   ifup-routes

ifcfg-eth1   ifdown-ppp       ifup-eth    ifup-sit

ifcfg-lo     ifdown-routes    ifup-ippp   ifup-Team

ifdown       ifdown-sit       ifup-ipv6   ifup-TeamPort

ifdown-bnep  ifdown-Team      ifup-isdn   ifup-tunnel

ifdown-eth   ifdown-TeamPort  ifup-plip   ifup-wireless

ifdown-ippp  ifdown-tunnel    ifup-plusb  init.ipv6-global

ifdown-ipv6  ifup             ifup-post   network-functions

ifdown-isdn  ifup-aliases     ifup-ppp    network-functions-ipv6

[root@localhost network-scripts]# vim ifcfg-eth0

[root@localhost network-scripts]# cat ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=none

IPADDR=172.25.254.162

NETMASK=255.255.255.0

[root@localhost network-scripts]# cat ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

BOOTPROTO=none

IPADDR=172.25.42.10

NETMASK=255.255.255.0

[root@localhost network-scripts]# vim ifcfg-eth1

[root@localhost network-scripts]# cat ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

BOOTPROTO=none

IPADDR=172.25.62.10

NETMASK=255.255.255.0

[root@localhost network-scripts]# systemctl restart network

[root@localhost network-scripts]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 172.25.254.162  netmask 255.255.255.0  broadcast 172.25.254.255

inet6 fe80::5054:ff:fe00:3e0a  prefixlen 64  scopeid 0x20<link>

ether 52:54:00:00:3e:0a  txqueuelen 1000  (Ethernet)

RX packets 888  bytes 126779 (123.8 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 83  bytes 11850 (11.5 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 172.25.62.10  netmask 255.255.255.0  broadcast 172.25.62.255

inet6 fe80::5054:ff:fe4e:4873  prefixlen 64  scopeid 0x20<link>

ether 52:54:00:4e:48:73  txqueuelen 1000  (Ethernet)

RX packets 913  bytes 130588 (127.5 KiB)

RX errors 0  dropped 140  overruns 0  frame 0

TX packets 51  bytes 7487 (7.3 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 668  bytes 53216 (51.9 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 668  bytes 53216 (51.9 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

[root@localhost network-scripts]# ping 172.25.254.250

PING 172.25.254.250 (172.25.254.250) 56(84) bytes of data.

64 bytes from 172.25.254.250: icmp_seq=1 ttl=64 time=1.51 ms

64 bytes from 172.25.254.250: icmp_seq=2 ttl=64 time=0.782 ms

^C

— 172.25.254.250 ping statistics —

2 packets transmitted, 2 received, 0% packet loss, time 1001ms

rtt min/avg/max/mdev = 0.782/1.148/1.515/0.368 ms

[root@localhost network-scripts]# ping 172.25.62.11

PING 172.25.62.11 (172.25.62.11) 56(84) bytes of data.

64 bytes from 172.25.62.11: icmp_seq=1 ttl=64 time=0.463 ms

64 bytes from 172.25.62.11: icmp_seq=2 ttl=64 time=0.358 ms

^C

— 172.25.62.11 ping statistics —

2 packets transmitted, 2 received, 0% packet loss, time 1000ms

rtt min/avg/max/mdev = 0.358/0.410/0.463/0.056 ms

[root@localhost network-scripts]#

客户端:

[root@localhost Desktop]# cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# ls

ifcfg-eth0   ifdown-ppp       ifup-eth     ifup-sit

ifcfg-lo     ifdown-routes    ifup-ippp    ifup-Team

ifdown       ifdown-sit       ifup-ipv6    ifup-TeamPort

ifdown-bnep  ifdown-Team      ifup-isdn    ifup-tunnel

ifdown-eth   ifdown-TeamPort  ifup-plip    ifup-wireless

ifdown-ippp  ifdown-tunnel    ifup-plusb   init.ipv6-global

ifdown-ipv6  ifup             ifup-post    network-functions

ifdown-isdn  ifup-aliases     ifup-ppp     network-functions-ipv6

ifdown-post  ifup-bnep        ifup-routes

[root@localhost network-scripts]# vim ifcfg-eth0

[root@localhost network-scripts]# cat ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

IPADDR=172.25.62.11

NETMASK=255.255.255.0

ONBOOT=yes

TYPE=Ethernet

USERCTL=yes

PEERDNS=yes

IPV6INIT=no

PERSISTENT_DHCLIENT=1

[root@localhost network-scripts]# systemctl restart network

[root@localhost network-scripts]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 172.25.62.11  netmask 255.255.255.0  broadcast 172.25.62.255

inet6 fe80::5054:ff:fe00:3e0b  prefixlen 64  scopeid 0x20<link>

ether 52:54:00:00:3e:0b  txqueuelen 1000  (Ethernet)

RX packets 302175  bytes 683599064 (651.9 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 187198  bytes 12496615 (11.9 MiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 23  bytes 2100 (2.0 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 23  bytes 2100 (2.0 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

[root@localhost network-scripts]# ping 172.25.62.10

PING 172.25.62.10 (172.25.62.10) 56(84) bytes of data.

64 bytes from 172.25.62.10: icmp_seq=1 ttl=64 time=0.366 ms

64 bytes from 172.25.62.10: icmp_seq=2 ttl=64 time=0.374 ms

^C

— 172.25.62.10 ping statistics —

2 packets transmitted, 2 received, 0% packet loss, time 999ms

rtt min/avg/max/mdev = 0.366/0.370/0.374/0.004 ms

[root@localhost network-scripts]#

 

二、管理防火墙

 

1.安装防火墙软件:

# yum install -y firewalld firewall-config

2.启动和禁用防火墙:

# systemctl start firewalld ; systemctl enable firewalld

# systemctl disable firewalld ; systemctl stop firewalld

3.使用iptables服务:

# yum install -y iptables-services

# systemctl start iptables ; systemctl start ip6tables

# systemctl enable iptables ; systemctl enable ip6tables

4.推荐使用firewalld服务

5.示例:

[root@localhost yum.repos.d]# systemctl status firewalld.service

firewalld.service – firewalld – dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)

Active: active (running) since Wed 2017-05-03 01:59:09 EDT; 43min ago

Main PID: 470 (firewalld)

CGroup: /system.slice/firewalld.service

└─470 /usr/bin/python -Es /usr/sbin/firewalld –nofork –nopid

 

May 03 01:59:09 localhost systemd[1]: Started firewalld – dynamic firewall …n.

Hint: Some lines were ellipsized, use -l to show in full.

[root@localhost yum.repos.d]# systemctl status iptables.service

iptables.service – IPv4 firewall with iptables

Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled)

Active: inactive (dead)

 

[root@localhost yum.repos.d]# systemctl start iptables.service

[root@localhost yum.repos.d]# systemctl status iptables.service

iptables.service – IPv4 firewall with iptables

Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled)

Active: active (exited) since Wed 2017-05-03 02:43:09 EDT; 2s ago

Process: 4247 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)

Main PID: 4247 (code=exited, status=0/SUCCESS)

 

May 03 02:43:09 localhost systemd[1]: Starting IPv4 firewall with iptables…

May 03 02:43:09 localhost iptables.init[4247]: iptables: Applying firewall r…]

May 03 02:43:09 localhost systemd[1]: Started IPv4 firewall with iptables.

Hint: Some lines were ellipsized, use -l to show in full.

[root@localhost yum.repos.d]# systemctl status firewalld.service

firewalld.service – firewalld – dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)

Active: inactive (dead) since Wed 2017-05-03 02:43:09 EDT; 7s ago

Process: 470 ExecStart=/usr/sbin/firewalld –nofork –nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)

Main PID: 470 (code=exited, status=0/SUCCESS)

 

May 03 01:59:09 localhost systemd[1]: Started firewalld – dynamic firewall …n.

May 03 02:43:09 localhost systemd[1]: Stopping firewalld – dynamic firewall…..

May 03 02:43:09 localhost systemd[1]: Stopped firewalld – dynamic firewall …n.

Hint: Some lines were ellipsized, use -l to show in full.

[root@localhost yum.repos.d]# systemctl stop iptables.service

[root@localhost yum.repos.d]# systemctl start firewalld.service

[root@localhost yum.repos.d]# systemctl status firewalld.service

firewalld.service – firewalld – dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)

Active: active (running) since Wed 2017-05-03 02:43:50 EDT; 5s ago

Main PID: 4508 (firewalld)

CGroup: /system.slice/firewalld.service

└─4508 /usr/bin/python -Es /usr/sbin/firewalld –nofork –nopid

 

May 03 02:43:50 localhost systemd[1]: Starting firewalld – dynamic firewall…..

May 03 02:43:50 localhost systemd[1]: Started firewalld – dynamic firewall …n.

Hint: Some lines were ellipsized, use -l to show in full.

 

三、使用命令行接口配置防火墙

 

1.查看firewalld的状态:

# firewall-cmd –state

2.查看当前活动的区域,并附带一个目前分配给它们的接口列表:

# firewall-cmd –get-active-zones

3.查看默认区域:

# firewall-cmd –get-default-zone

4.查看所有可用区域:

# firewall-cmd –get-zones

5.列出指定域的所有设置:

# firewall-cmd –zone=public –list-all

6.列出所有预设服务:

# firewall-cmd –get-services

(这样将列出 /usr/lib/firewalld/services/ 中的服务器名称。注意:配置文件是以服务本身命名的service-name. xml)

7.列出所有区域的设置:

# firewall-cmd –list-all-zones

8.设置默认区域:

# firewall-cmd –set-default-zone=dmz

9.设置网络地址到指定的区域:

# firewall-cmd –permanent –zone=internal –add-source=172.25.0.0/24

(–permanent参数表示永久生效设置,如果没有指定–zone参数,那么会加入默认区域)

10.删除指定区域中的网路地址:

# firewall-cmd –permanent –zone=internal –remove-source=172.25.0.0/24

11.添加、改变、删除网络接口:

# firewall-cmd –permanent –zone=internal –add-interface=eth0

# firewall-cmd –permanent –zone=internal –change-interface=eth0

# firewall-cmd –permanent –zone=internal –remove-interface=eth0

12.添加、删除服务:

# firewall-cmd –permanent –zone=public –add-service=smtp

# firewall-cmd –permanent –zone=public –remove-service=smtp

www.westos.org

13.列出、添加、删除端口:

# firewall-cmd –zone=public –list-ports

# firewall-cmd –permanent –zone=public –add-port=8080/tcp

# firewall-cmd –permanent –zone=public –remove-port=8080/tcp

14.重载防火墙:

# firewall-cmd –reload (注意:这并不会中断已经建立的连接,如果打算中断,可以使用 –complete-reload选项)

15.firewalld的规则被保存在/etc/firewalld目录下的文件中,你也可以直接编辑这些文件达到配置防火墙的目的。/usr/lib/firewalld目录下的内容是不可以被编辑的,但可以用做默认模板。

16.示例:

[root@localhost yum.repos.d]# firewall-config

[root@localhost yum.repos.d]# firewall-cmd –state

running

[root@localhost yum.repos.d]# systemctl stop firewalld.service

[root@localhost yum.repos.d]# firewall-cmd –state

not running

[root@localhost yum.repos.d]# systemctl start firewalld.service

[root@localhost yum.repos.d]# firewall-cmd –get-active-zones

ROL

sources: 172.25.0.252/32

public

interfaces: eth0 eth1

[root@localhost yum.repos.d]# firewall-cmd –get-zones

ROL block dmz drop external home internal public trusted work

[root@localhost yum.repos.d]# firewall-cmd –zone=public –list-all

public (default, active)

interfaces: eth0 eth1

sources:

services: dhcpv6-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# yum install httpd

[root@localhost yum.repos.d]# systemctl start httpd

[root@localhost yum.repos.d]# vim /var/www/html/index.html

[root@localhost yum.repos.d]# firewall-cmd –set-default-zone=trusted

success

[root@localhost yum.repos.d]# firewall-cmd –get-active-zones

ROL

sources: 172.25.0.252/32

trusted

interfaces: eth0 eth1

[root@localhost yum.repos.d]# firewall-cmd –set-default-zone=public

success

[root@localhost yum.repos.d]# firewall-cmd –list-all

public (default, active)

interfaces: eth0 eth1

sources:

services: dhcpv6-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –get-default-zone

public

[root@localhost yum.repos.d]# firewall-cmd –get-active-zones

ROL

sources: 172.25.0.252/32

public

interfaces: eth0 eth1

[root@localhost yum.repos.d]# firewall-cmd –get-services

amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

[root@localhost yum.repos.d]# firewall-cmd –list-all-zones

ROL

interfaces:

sources: 172.25.0.252/32

services: ssh vnc-server

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

block

interfaces:

sources:

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

dmz

interfaces:

sources:

services: ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

drop

interfaces:

sources:

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

external

interfaces:

sources:

services: ssh

ports:

masquerade: yes

forward-ports:

icmp-blocks:

rich rules:

 

home

interfaces:

sources:

services: dhcpv6-client ipp-client mdns samba-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

internal

interfaces:

sources:

services: dhcpv6-client ipp-client mdns samba-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

public (default, active)

interfaces: eth0 eth1

sources:

services: dhcpv6-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

trusted

interfaces:

sources:

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

work

interfaces:

sources:

services: dhcpv6-client ipp-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –permanent –zone=public –add-service=http

success

[root@localhost yum.repos.d]# firewall-cmd –reload

success

[root@localhost yum.repos.d]# firewall-cmd –list-all

public (default, active)

interfaces: eth0 eth1

sources:

services: dhcpv6-client http ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –permanent –remove-service=http

success

[root@localhost yum.repos.d]# firewall-cmd –reload

success

[root@localhost yum.repos.d]# firewall-cmd –list-all

public (default, active)

interfaces: eth0 eth1

sources:

services: dhcpv6-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –zone=internal –add-source=172.25.254.62

success

[root@localhost yum.repos.d]# firewall-cmd –zone=internal –remove–source=172.25.254.62

usage: see firewall-cmd man page

firewall-cmd: error: unrecognized arguments: –remove–source=172.25.254.62

[root@localhost yum.repos.d]# firewall-cmd –zone=internal –list-all

internal

interfaces:

sources: 172.25.254.62

services: dhcpv6-client ipp-client mdns samba-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –zone=internal –remove-source=172.25.254.62

success

[root@localhost yum.repos.d]# firewall-cmd –zone=internal –list-all

internal

interfaces:

sources:

services: dhcpv6-client ipp-client mdns samba-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –zone=trusted –add-source=172.25.254.62

success

[root@localhost yum.repos.d]# firewall-cmd –zone=trusted –list-all

trusted

interfaces:

sources: 172.25.254.62

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –zone=trusted –remove-source=172.25.254.62

success

[root@localhost yum.repos.d]# firewall-cmd –zone=trusted –list-all

trusted

interfaces:

sources:

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –zone=public –remove-interface=eth1

success

[root@localhost yum.repos.d]# firewall-cmd –zone=public –list-all

public (default, active)

interfaces: eth0

sources:

services: dhcpv6-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –zone=trusted –add-interface=eth1

success

[root@localhost yum.repos.d]# firewall-cmd –zone=trusted –list-all

trusted (active)

interfaces: eth1

sources:

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

[root@localhost yum.repos.d]# firewall-cmd –add-port=80/tcp –zone=public

success

[root@localhost yum.repos.d]# firewall-cmd –list-all

public (default, active)

interfaces: eth0

sources:

services: dhcpv6-client ssh

ports: 80/tcp

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –remove-port=80/tcp –zone=public

success

[root@localhost yum.repos.d]# firewall-cmd –list-all

public (default, active)

interfaces: eth0

sources:

services: dhcpv6-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

四、Direct Rules

 

通过 firewall-cmd 工具,可以使用 –direct 选项在运行时间里增加或者移除链。如果不熟悉 iptables ,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵。直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。

1.添加规则:

# firewall-cmd –direct –remove-rule ipv4 filter IN_public_allow 0 -p tcp –dport 80 -j

ACCEPT

2.删除规则:

# firewall-cmd –direct –remove-rule ipv4 filter IN_public_allow 10 -p tcp –dport 80 -j

ACCEPT

3.列出规则:

# firewall-cmd –direct –get-all-rules

4.示例:

[root@localhost yum.repos.d]# firewall-cmd –direct –get-all-rules

[root@localhost yum.repos.d]# firewall-cmd –direct –add-rule ipv4 filter INPUT 0 -p tcp –dport 80 -s 172.25.254.62 -j REJECT

success

[root@localhost yum.repos.d]# firewall-cmd –direct –get-all-rules

ipv4 filter INPUT 0 -p tcp –dport 80 -s 172.25.254.62 -j REJECT

[root@localhost yum.repos.d]# firewall-cmd –direct –add-rule ipv4 filter INPUT 0 -p tcp –dport 80 -s 172.25.254.62 -j ACCEPT

success

[root@localhost yum.repos.d]# firewall-cmd –direct –get-all-rules

ipv4 filter INPUT 0 -p tcp –dport 80 -s 172.25.254.62 -j REJECT

ipv4 filter INPUT 0 -p tcp –dport 80 -s 172.25.254.62 -j ACCEPT

[root@localhost yum.repos.d]# firewall-cmd –direct –remove-rule ipv4 filter INPUT 0 -p tcp –dport 80 -s 172.25.254.62 -j REJECT

success

[root@localhost yum.repos.d]# firewall-cmd –direct –get-all-rules

ipv4 filter INPUT 0 -p tcp –dport 80 -s 172.25.254.62 -j ACCEPT

[root@localhost yum.repos.d]#

 

五、Rich Rules

 

通过“ rich language”语法,可以用比直接接口方式更易理解的方法建立复杂防火墙规则。此外,还能永久保留设置。这种语言使用关键词值,是 iptables 工具的抽象表示。这种语言可以用来配置分区,也仍然支持现行的配置方式。

1.source

指定源地址,可以是一个ipv4/ipv6的地址或网段,不支持使用主机名。

2.destination

指定目的地址,用法和source相同。

3.service

服务名称是 f irewalld 提供的其中一种服务。要获得被支持的服务的列表,输入以下命令:firewall-cmd –get-services 。命令为以下形式:service name= service_name

4.port

端口既可以是一个独立端口数字,又或者端口范围,例如,5060-5062。协议可以指定为 tcp 或udp 。命令为以下形式:port port= number_or_range protocol= protocol

5.protocol

协议值可以是一个协议 ID 数字,或者一个协议名。预知可用协议,请查阅 /etc/protocols。命令为以下形式:protocol value= protocol_name_or_ID

6.icmp-block

用这个命令阻绝一个或多个ICMP类型。IC MP 类型是 firewalld支持的ICMP类型之一。要获得被支持的ICMP类型列表,输入以下命令: firewall-cmd –get-icmptypes icmp-block在内部使用 reject 动作,因此不允许指定动作。命令为以下形式:icmp-block name= icmptype_name

7.masquerade

打开规则里的 IP 伪装。用源地址而不是目的地址来把伪装限制在这个区域内。不允许指定动作。

8.forward-port

从一个带有指定为 tcp 或 udp 协议的本地端口转发数据包到另一个本地端口,或另一台机器,或另一台机器上的另一个端口。port 和 to-port 可以是一个单独的端口数字,或一个端口范围。而目的地址是一个简单的 IP 地址。不允许指定动作,命令使用内部动作accept 。命令为以下形式:forward-port port= number_or_range protocol= protocol /to-port= number_or_range to-addr= address

9.log

注册含有内核记录的新连接请求到规则中,比如系统记录。你可以定义一个前缀文本,记录等级可以是 emerg、alert、crit、error、warning、notice、info 或者 debug 中的一个。命令形式:

log [prefix= prefix text ] [level= log level ] limit value= rate/duration(等级用正的自然数 [1, ..] 表达,持续时间的单位为 s 、 m 、 h 、 d 。 s 表示秒, m 表示分钟, h表示小时, d 表示天。最大限定值是 1/d ,意为每天最多有一条日志进入。)

10.audit

审核为发送到 aud i td 服务的审核记录来注册提供了另一种方法。审核类型可以是ACCEPT、REJECT或DROP中的一种,但不能在 audit命令后指定,因为审核类型将会从规则动作中自动收集。审核不包含自身参数,但可以选择性地增加限制。审核的使用是可选择的。选择 accept 所有新的连接请求都会被允许。选择 reject ,连接将被拒绝,连接来源将接到一个拒绝信息。拒绝的类型可以被设定为使用另一种值。选择 drop , 所有数据包会被丢弃,并且不会向来源地发送任何信息。

11.多语言命令的格式 :

在这个部分,所有命令都必须以 root 用户身份运行。增加一项规则的命令格式如下:firewall-cmd [–zone=zone] –add -rich-rule=’rule’ [–timeout=seconds]

这样将为 zone 分区增加一项多语言规则 rule 。这个选项可以多次指定。如果分区被省略,将使用默认分区。如果出现超时,规则将在指定的秒数内被激活,并在之后被自动移除

12.移除一项规则:

firewall-cmd [–zone=zone] –remove-rich-rule=’rule’

13.检查一项规则是否存在:

firewall-cmd [–zone=zone] –query-rich-rule=’rule’

这将复查是否已经为区域增加一个多语言规则 。如果可用,屏幕会显示 yes,退出状态为0; 否则,屏幕显示 no ,退出状态为 1。如果省略 zone,默认区域将被使用。

14.列出所有多语言规则:

firewall-cmd –list-rich-rules

15.添加规则:

# firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”172.25.0.10″ accept’

允许172.25.0.10主机所有连接。

# firewall-cmd –add-rich-rule=’rule service name=ftp limit value=2/m accept’

每分钟允许2个新连接访问ftp服务。

# firewall-cmd –add-rich-rule=’rule service name=ftp log limit value=”1/m” audit accept’

同意新的 IP v4 和 IP v6 连接 FT P ,并使用审核每分钟登录一次。

# firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”172.25.0.0/24″ service name=ssh log prefix=”ssh” level=”notice” limit value=”3/m” accept’

允许来自172.25.0.0/24地址的新 IPv4连接连接TFTP服务,并且每分钟记录一次。

# firewall-cmd –permanent –add-rich-rule=’rule protocol value=icmp drop’

丢弃所有icmp包

# firewall-cmd –add-rich-rule=’rule family=ipv4 source address=172.25.0.0/24 reject’ –timeout=10

当使用source和destination指定地址时,必须有family参数指定ipv4或ipv6。如果指定超时,规则将在指定的秒数内被激活,并在之后被自动移除。

# firewall-cmd –add-rich-rule=’rule family=ipv6 source address=”2001:db8::/64″ service  name=”dns” audit limit value=”1/h” reject’ –timeout=300

拒绝所有来自2001:db8::/64子网的主机访问dns服务,并且每小时只审核记录1次日志。

# firewall-cmd –permanent –add-rich-rule=’rule family=ipv4 source address=172.25.0.0/24 service name=ftp accept’

允许172.25.0.0/24网段中的主机访问ftp服务

# firewall-cmd –add-rich-rule=’rule family=”ipv6″ source address=”1:2:3:4:6::” forward-port to-addr=”1::2:3:4:7″ to-port=”4012″ protocol=”tcp” port=”4011″‘

转发来自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012

 

六、伪装和端口转发

 

1.伪装:

# firewall-cmd –permanent –zone=< ZONE > –add-masquerade

# firewall-cmd –permanent –zone=< ZONE > –add-rich-rule=’rule family=ipv4 source

addres=172.25.0.0/24 masquerade’

示例:

[root@localhost yum.repos.d]# firewall-cmd –list-all

public (default, active)

interfaces: eth0

sources:

services: dhcpv6-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –zone=public –add-masquerade

success

[root@localhost yum.repos.d]# firewall-cmd –list-all

public (default, active)

interfaces: eth0

sources:

services: dhcpv6-client ssh

ports:

masquerade: yes

forward-ports:

icmp-blocks:

rich rules:

 

[root@localhost yum.repos.d]# firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.41

success

[root@localhost yum.repos.d]# ssh root@172.25.254.162

The authenticity of host ‘172.25.254.162 (172.25.254.162)’ can’t be established.

ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘172.25.254.162’ (ECDSA) to the list of known hosts.

root@172.25.254.162’s password:

Last failed login: Wed May  3 04:36:43 EDT 2017 from 172.25.254.162 on ssh:notty

There was 1 failed login attempt since the last successful login.

Last login: Wed May  3 02:00:05 2017

[root@localhost ~]# exit

logout

Connection to 172.25.254.162 closed.

2.端口转发:

# firewall-cmd –permanent –zone=< ZONE > –add-forward-port=

port=80:proto=tcp:toport=8080:toaddr=172.25.0.10

# firewall-cmd –permanent –zone=< ZONE > –add-rich-rule=’rule family=ipv4 source

address=172.25.0.0/24 forward-port port=80 protocol=tcp to-port=8080′

示例:

[root@localhost yum.repos.d]# firewall-cmd –zone=public –add-rich-rule=’rule family=ipv4 source address=172.25.254.162 masquerade’

success

[root@localhost network-scripts]# ping 172.25.254.250connect: Network is unreachable

[root@localhost network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

[root@localhost network-scripts]# systemctl restart network[root@localhost network-scripts]# ping 172.25.254.250PING 172.25.254.250 (172.25.254.250) 56(84) bytes of data.

64 bytes from 172.25.254.250: icmp_seq=1 ttl=63 time=0.774 ms

64 bytes from 172.25.254.250: icmp_seq=2 ttl=63 time=1.01 ms

^C

— 172.25.254.250 ping statistics —

2 packets transmitted, 2 received, 0% packet loss, time 1000ms

rtt min/avg/max/mdev = 0.774/0.896/1.019/0.126 ms

[root@localhost network-scripts]# ssh root@172.25.254.162

The authenticity of host ‘172.25.254.162 (172.25.254.162)’ can’t be established.

ECDSA key fingerprint is 0a:3f:c1:93:d3:8e:1c:70:c5:61:f6:4a:e6:db:10:87.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘172.25.254.162’ (ECDSA) to the list of known hosts.

root@172.25.254.162’s password:

Permission denied, please try again.

root@172.25.254.162’s password:

Last failed login: Wed May  3 16:43:35 CST 2017 from 172.25.254.162 on ssh:notty

There was 1 failed login attempt since the last successful login.

Last login: Wed May  3 16:35:53 2017 from 172.25.254.162

[root@foundation41 ~]# exit

logout

Connection to 172.25.254.162 closed.

[root@localhost network-scripts]# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

0.0.0.0         172.25.62.10    0.0.0.0         UG    1024   0        0 eth0

172.25.62.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

[root@localhost network-scripts]# w

04:45:16 up  2:46,  2 users,  load average: 0.04, 0.08, 0.07

USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT

root     :0        02:06   ?xdm?   1:48   0.12s gdm-session-worker [pam/gdm-pas

root     pts/0     02:06    4.00s  0.14s  1.61s /usr/libexec/gnome-terminal-ser

[root@localhost network-scripts]# ssh root@172.25.254.162

root@172.25.254.162’s password:

Last login: Wed May  3 16:43:39 2017 from 172.25.254.162

[root@foundation41 ~]# w

16:46:29 up  6:14,  4 users,  load average: 0.12, 0.12, 0.16

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

kiosk    :0       :0               10:32   ?xdm?  41:40   0.14s gdm-session-wor

kiosk    pts/0    :0               10:32    1:09   1.00s 23.68s /usr/libexec/gn

kiosk    pts/1    :0               16:31    5:57   0.04s  0.04s bash

root     pts/4    172.25.254.162   16:46    2.00s  0.03s  0.00s w

[root@foundation41 ~]# exit

logout

Connection to 172.25.254.162 closed.

[root@localhost network-scripts]#

 

七、管理SELinux端口标签

 

1.列出端口标签:

# semanage port -l

2.添加端口标签:

# semanage port -a -t http_port_t -p tcp 82

3.删除端口标签:

# semanage port -d -t http_port_t -p tcp 82

4.Lab:

1)reset serverX and desktopX

2)运行脚本设置serverX: lab selinuxport setup

3)在serverX上派错后,在desktopX上运行脚本测试: lab selinuxport grade