Debian

共 5 篇文章

Debian 配置防火墙安全策略

​想着提升下服务器安全策略,学习下开启及配置防火墙, Debian的防火墙是 ufw。 1. 安装 ufw apt update # 安装 ufw apt install ufw  # 查看 ufw status # Status: inactive 未运行 # Status: active 正常运行 2. 初始化 # 重置所有规则并关闭服务(可选,但推荐以确保干净) ufw reset # 设置默认禁止入站 ufw default deny incoming # 设置默认允许出站(服务器主动访问外部,如 apt update, pip install 等需要) ufw default allow outgoing 3. 增加所需规则 # 运行 SSH ufw allow 22/tcp comment '默认ssh端口' # 允许 HTTP ufw allow 80/tcp comment 'HTTP 80' # 允许 HTTPS ufw allow 443/tcp comment 'HTTPS 443' # 允许指定 IP 访问 指定端口 ufw allow from 192.168.1.222 to any port 3306 # 其它自定义端口 ufw allow 6666/tcp comment '程序 TCP 6666' ufw allow 8888/udp comment '程序 UDP 8888' 4. 启动 ufw # 开启服务 ufw enable # 禁用服务 # ufw disable 5. 查看状态 # 查看状态及规则 ufw status  # 查看默认的传入/传出策略以及日志级别 ufw status verbose  # Status: active # Logging: on (low) # Default: deny (incoming), allow (outgoing), disabled (routed) # New profiles: skip #  # To                         Action      From # --                         ------      ---- # 18022/tcp                  ALLOW IN    Anywhere                   # SSH 22 # 80/tcp                     ALLOW IN    Anywhere                   # HTTP 80 # 443/tcp                    ALLOW IN    Anywhere                   # HTTPS 443 # …… 6. 调整删除规则 # 查看规则编号 ufw status numbered # Status: active #      To                         Action      From #      --                         ------      ---- # [ 1] 18022/tcp                  ALLOW IN    Anywhere                   # SSH 22 # [ 2] 80/tcp                     ALLOW IN    Anywhere                   # HTTP 80 # [ 3] 443/tcp                    ALLOW IN    Anywhere                   # HTTPS 443 # …… # 上述 [1][2][3] 即为规则编号 # 若要删除编号为 3 的规则,运行 ufw delete 3 OK,完成常规防火墙配置,完成服务器部分安全策略提升。

Nginx 提高防漏扫等安全配置

没事干看了下日志,发现UWSGI里好多 NOT FOUND 的空路径,说是被漏扫记录啥的,感觉这些日志都没啥必要记录,想着完善下。 1. 定义匹配规则 # 定义恶意路径匹配规则 (大小写不敏感) # 如果 URI 匹配到以下任意正则,$block_scanner 变为 1,否则为 0 map $request_uri $block_scanner { default 0; # 常见后台/管理路径 ~*^/(wp-admin|wp-login|administrator|phpmyadmin|pma|mysql|webadmin|shell|cmd|console|manager|login|signin|auth) 1; # 常见敏感文件/备份 ~*^/.(php|git|svn|htaccess|htpasswd|env|config|bak|backup|sql|tar|gz|zip|rar|7z) 1; # 常见漏洞利用路径 (ThinkPHP, Struts2, Log4j, Shellshock 等特征) ~*^/(index.php)/?(\?s=|\\x00) 1; ~*^/(solr|actuator|eureka|swagger|api-docs) 1; ~*^/(cgi-bin|scripts|bin|tmp) 1; ~*\.(asp|aspx|jsp|jspx|php5|phtml|pl|py|rb|sh|exe|bat|cmd)$ 1; # 特定漏洞探测字符串 ~*\$(\{|%24\{) 1; # Log4j JNDI 特征 ~*union.*select 1; # 基础 SQL 注入探测 (注意:复杂SQL注入建议由WAF处理,此处仅做简单特征) ~*(\.\.\/|\.\.%2f|\%2e\%2e\/|\%2e\%2e\%2f) 1; # 目录遍历 } 2. 配置 main 日志格式,要不然后续配置检查会报错 # /etc/nginx/nginx.conf http { …… # 定义名为 "main" 的日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; …… } 3. 引用规则及配置 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name domain.cn; # 拦截恶意扫描路径 if ($block_scanner) { return 444; # 444表示直接关闭连接,不返回任何响应,也可返回 403、404 } # 限制 HTTP 方法 (只允许常用方法) if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE|PATCH)$) { return 405; } # 如果 block_scanner=1,记录日志,其它不记录 access_log /srv/log/codenotes.access.log main if=$block_scanner=0; …… } 4. 检查并重启,完成相应安全强化 # 检查配置 nginx -t # 重启 nginx nginx -s reload OK,完成…

使用 Certbot 向 Let's Encrypt 免费申请及自动部署 HTTPS 证书

HTTP 报文是以明文形式传输的,会被各种浏览器标记为不安全。 HTTPS 则提供了一个加密传输的通道,相比较更为安全可靠。但专业的证书要钱,不过有个免费的Let's Encrypt,使用 Certbot 方便快捷,记录下大致的过程。 1. 安装必要工具 sudo apt update # Certbot 是 Let's Encrypt 提供的证书管理工具 sudo apt install certbot # python3-certbot-nginx 是专门针对 Nginx 的插件,其可以自动修改 Nginx 配置文件 sudo apt install python3-certbot-nginx 2. 获取并安装证书 # 如果多个域名,可以执行多次,或直接在后面增加 -d 域名,但会被归属到第一个 -d 的域名中,实际不影响任何安全 sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 执行上述语句后,会有交互确认: # 1. 邮箱输入:输入你的邮箱用于过期提醒。 # 2. 服务条款:同意即可。Y # 3. 重定向 HTTP 到 HTTPS:Certbot 会询问是否将 HTTP 流量重定向到 HTTPS。 选择 2 (Redirect) 或 Yes(强烈推荐)。这会让 Nginx 自动把所有 http:// 请求转为 https:// # 执行成功后,Certbot 会在 /etc/letsencrypt/live/yourdomain.com/ 下生成相应的证书文件,并自动修改 Nginx 配置文件,添加 SSL 监听端口和证书路径。 # 可自行查看 Nginx 相关配置文件并确认重载。 3. 查看所有证书 sudo certbot certificates # 一般会显示证书名称、域名信息、过期时间、证书路径等信息 # Saving debug log to /var/log/letsencrypt/letsencrypt.log # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Found the following certs: # Certificate Name: yourdomain.com # Domains: yourdomain.com www.yourdomain.com # Expiry Date: 2024-01-05 12:00:00+00:00 (VALID: 89 days) # Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem # Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem # Certificate Name: another-domain.com # Domains: another-domain.com # Expiry Date: 2024-01-05 08:30:00+00:00 (VALID: 64 days) # Certificate Path: /etc/letsencrypt/live/another-domain.com/fullchain.pem # Private Key Path: /etc/letsencrypt/live/another-domain.com/privkey.pem # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4. 测试自动续期 # Let's Encrypt 证书有效期为 90 天。 sudo certbot renew --dry-run # 如果输出显示 "Congratulations, all renewals succeeded",则自动续期配置正常。 5. 删除证书 # 推荐,交互式删除,根据列出的信息,选择需要删除的证书即可。 sudo certbot delete 6. Django 安全强化配置(参考) # settings.py # 强制所有请求使用 HTTPS SECURE_SSL_REDIRECT = True # 如果 Django 运行在反向代理(如 Nginx)后面,需要信任代理的 Header # 否则 Django 无法识别请求原本是 HTTP 还是 HTTPS SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # 设置 HSTS (HTTP Strict Transport Security),增强安全性 # 单位是秒,例如 31536000 表示一年 SECURE_HSTS_SECONDS = 31536000 SECURE_HSTS_INCLUDE_SUBDOMAINS = True SECURE_HSTS_PRELOAD = True # 确保 Session ID 和 CSRF Token 只在 HTTPS 下传输 SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True # 防止 JavaScript 访问 Cookie (防 XSS) SESSION_COOKIE_HTTPONLY = True CSRF_COOKIE_HTTPONLY = True  

Debian 安装 ShadowSocks

1. 更新 # Debian系统中,已有shadowsocks应用,直接更新安装即可 sudo apt update # 安装 sudo apt install shadowsocks-libev 2. 修改完善相关配置 # 配置文件路径 vim /etc/shadowsocks-libev/config.json # 修改相关配置 { # 任意IP访问 "server":["0.0.0.0"], "mode":"tcp_and_udp", # 服务器端口,默认为8288 "server_port":8288, # 本地端口,默认为1080 "local_port":1080, # 密码,根据个人喜好修改 "password":"loveqiqi", # 连接超时(单位:秒) "timeout":36000, # 加密方式 "method":"chacha20-ietf-poly1305" } 3. 客户端下载 https://github.com/shadowsocks

Debian 安装 MySQL

1. 更新下载MySQL资源仓库 https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb 2. 安装更新 sudo dpkg -i mysql-apt-config_0.8.36-1_all.deb 3. 更新升级 sudo apt update sudo apt upgrade 4. 安装MySQL sudu apt install mysql-server # 期间会提示输入密码, 并确认密码 5. 修改完善MySQL相关配置 # 配置文件 vim /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] # 允许远程访问 bind-address = 0.0.0.0 # 修改端口号 port = 13306 # 保留 7 天的 binlog binlog_expire_logs_seconds = 604800 # 内存优化,按需 performance_schema = off # 进入MySQL后,执行相关语句允许远程访问(MySQL 5.7.40版本后) > CREATE USER 'root'@'%' IDENTIFIED BY '密码'; > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; > FLUSH PRIVILEGES; # 进入MySQL后,执行相关语句允许远程访问(5.7.38版本之前) > GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION; > FLUSH PRIVILEGES; # 查看端口 netstat -tulnp | grep mysql  

广告 【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中