网络安全A模块(最全详解)

密码策略(Windows,Linux)

密码策略必须同时满足大小写字母、数字、特殊字符;更改或创建密码时执行复杂性要求;

windows操作步骤:打开本地安全策略,账户策略,密码策略,启用密码复杂性

image.png

linux操作步骤:vim /etc/pam.d/system-auth

在password requisite pam_cracklib.so try_first_pass retry=3 type=

加入ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

image.png

设置密码复杂程度,允许重试3次,新密码必须与旧密码有4位不同,最小位数6位,大写字母至少包含2位,小写字母至少包含3位,特殊字母个数至少包含1位;(Linux)

vim /etc/pam.d/system-auth

image.png

pam_cracklib.so新建密码时会受到该代码限制,新密码复杂度不满足不要
retry尝试次数
difok最小不同字符
lcredit小写字母个数
ocredit特殊字符个数
ucredit大写字母个数
dcredit数字个数
minlen最小长度

设置禁止使用最近用过的6个旧密码;

vim /etc/pam.d/system-auth

image.png

最小密码长度不少于 8 个字符;

windows操作步骤:打开本地安全策略,账户策略,密码策略,修改密码最小值为8

image.png

linux操作步骤:vim /etc/pam.d/system-auth 在这行添加minlen=8

image.png

强制密码历史为5个密码;

image.png

密码最长存留期为45天;

image.png

登录策略(Windows,Linux)

一分钟内仅允许5次登录失败的尝试,超过5次,登录帐号锁定1分钟;

windows操作步骤:打开本地安全策略,账户策略,账户锁定策略,修改账户锁定阈值为5次,修改账户锁定时间为1分钟 image.png

even_deny_root也限制root用户;
deny设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户
unlock_time设定普通用户锁定后,多少时间后解锁,单位是秒;
root_unlock_time设定root用户锁定后,多少时间后解锁,单位是秒;

linux操作步骤:vim /etc/pam.d/login

加入第三条auth:auth required pam_tally2.so deny=6 unlock_time=60 even_deny_root root_unlock_time=60

image.png

在用户登录系统时,应该有“For authorized users only”提示信息;

linux操作步骤:vim /etc/issue、vim /etc/issue.net 、vim /etc/motd

添加提示信息:For authorized users only

SSH服务:vim /etc/ssh/sshd_config 将Banner的注释去掉,修改为以下内容

image.png

重启sshd服务 service sshd restart windows

操作步骤:打开本地安全策略组,进入本地策略,打开安全选项,对交换式登录:试图登录的用户消息文本进行编辑

image.png

远程用户非活动会话连接超时应小于等于5分钟;对于远程登录的帐户,设置不活动超过时间5分钟自动断开连接;(Window将RDP-Tcp属性对应的配置界面截图)

linux操作步骤:Vim /etc/ssh/sshd_config

将ClientAliveInterval和ClientAliveCountMax去掉#并修改

image.png

windows操作步骤:打开管理工具,找到远程桌面服务,进入远程桌面会话主机设置右键RDP-Tcp属性,在会话栏目进行修改

image.png

用户安全管理(Windows)

设置user1用户只能在上班时间(周一至周五的9:00~18:00可以登录,将user1的登录时间配置界面截图;

net user user1 /time:M-F,9:00-18:00

image.png

net user user1 查看

image.png

禁止从远端系统强制关机,将该权限只指派给administrators组;

image.png

在组策略中只允许管理员账号从网络访问本机;

管理工具-本地安全策略-本地策略-用户权限分配-从网络访问此计算机,把除了administrator以外的用户删除,应用

image.png

设置操作系统中的关键目录(system32、hosts、Program Files、Perflogs)的权限为最优状态,即仅允许管理员用户进行读取及运行;

找到 hosts 文件的位置, C:\Windows\System32\drivers\etc 右键 hosts 文件属性 -> 安全 -> 高级 -> 所有者 将所有者改为管理员组

image.png

高级 -> 权限 -> 更改权限 将 包括可从该对象的父项继承的权限 取消勾选

image.png

弹出窗口,点击删除 点击添加,将 Administrators 组加入,设置权限为 读取 和 运行

image.pngimage.png

image.pngimage.png 

禁止SAM 帐户和共享的匿名枚举;

image.png

在密码过期的前5天开始提示用户在过期之前更改密码;

image.png

对服务器进行远程管理安全性SSL加固,防止敏感信息泄露被监听;

开始-管理工具-远程桌面服务-远程桌面会话主机配置-RDP-Tcp属性-安全性

image.png

查找并删除服务器中可能存在的帐号hacker;

image.png

普通用户进行最小权限管理,对关闭系统仅限管理员帐号;

本地安全策略–本地策略–用户权限分配,删除关闭系统中除Administrators外所有的组

image.png

设置取得文件或其他对象的所有权,将该权限只指派给administrators组;

image.png

禁止普通用户使用命令提示符;

win+r输入gpedit.msc>用户配置>管理模板>系统>启用阻止访问命令提示符

image.png

设置不显示上次登录的用户名;交互式登录时不显示用户名;

image.png

禁止普通用户使用注册表编辑工具以及Ctrl+Alt+Del;

image.png

image.png

禁止发送未加密的密码到第三方SMB 服务器;

打开本地安全策略,本地策略,安全选项,禁止发送未加密的密码到第三方SMB 服务器

image.png

禁用来宾账户,禁止来宾用户访问计算机或访问域的内置账户;

打开本地安全策略,本地策略,安全选项,禁用来宾账户,禁止来宾用户访问计算机或访问域的内置账户

image.png

WEB安全加固(Windows,Linux)

关闭FTP匿名访问;

image.png

为了防止web中.mdb数据库文件非法下载,请对Web配置文件进行安全加固;

image.png

或修改C:\Windows\System32\inetsrv\config\applicationHost.config文件,Ctrl加F搜索.asa,在requestFilering标签下添加<add fileExtensions=".mdb" allowed='false'/>

image.png

为了减轻网站负载,设置网站最大并发连接数为1000;

image.png

防止文件枚举漏洞枚举网络服务器根目录文件,禁止IIS短文件名泄露;

方法一:cmd输入:fsutil 8dot3name set 1 2008 r2        fsutil behavior set disable8dot3 1 2003

image.png

方法二:win加r输入regedit打开注册表,搜索NtfsD,修改NtfsDisable8dot3NameCreetion值为1

方法三:如下图

image.png

关闭IIS的WebDAV功能增强网站的安全性;

添加角色服务,webdav发布,打开iis服务器,打开默认网站,找到webdav创作规则,webdav设置,禁用webdav

image.png

限制目录执行权限,对picture和upload目录设置执行权限为无;

管理工具->IIS管理器->网站->web->picture/upload->IIS.处理程序映射,右键空白处->编辑功能权限,取消勾选执行 如没有这两个目录,进入网站目录创建这两个文件夹

image.png

开启IIS的日志审计记录(日志文件保存格式为W3C,只记录日期、时间、客户端IP地址、用户名、方法);

window操作步骤:

image.png

linux操作步骤:vim /etc/httpd/conf/httpd.conf,按照下方代码添加和修改

LogFormat "%a %i %t %U %s %b" common #分别对应客户端ip、用户,时间、行为、状态码、大小;

CustomLog logs/access_log common #日志文件位置

image.png

流量完整性保护(Windows, Linux)

对Web网站进行HTTP重定向HTTPS设置,仅使用HTTPS协议访问网站(Windows)(注:证书颁发给test.com 并通过https://www.test.com访问Web网站)

windows操作步骤:

1.安装iiS服务器和证书颁发机构

2.打开iis服务器,在主页,服务器证书,创建服务器证书,默认下一步,将证书保存申请在桌面

3.打开ie浏览器,打开http://localhost/certsrvr网址 申请证书->高级证书申请->使用 base64 编码申请,将刚刚保存到桌面的文件内容填入保存的申请提交,返回http://localhost/certsrv/->下载 CA 证书、证书链或 CRL -> 下载证书,保存到桌面

4.管理工具->证书颁发机构->挂起的证书,右键->所有属性->颁发证书.点击颁发的证书

5.双击打开刚刚颁发的证书,详细信息->复制到文件,默认下一步,保存到桌面(test.cer)

6.到iis主页,服务器证书,完成证书申请,选择刚刚保存在桌面的test.cer证书 以上创建证书操作可以服务器证书创建自签名证书

7.在iis新建一个网站,物理路径在C盘新建一个目录http,按照下图信息填写,并在网站目录下新建index.html

image.png

8.编辑hosts文件路径C:\Windows\System32\drivers\etc\hosts,用记事本打开,在最后面添加一行IP www.test.com,并验证网站是否能访问

9.再在IIS新建一个网站,物理路径在C盘新建一个目录https,配置按照下图信息填写

image.png

10.创建完后前往C:\Windows\System32\inetsrv\config\目录,修改applicationHost.config文件。Ctrl+F查找443,在:后添加www.test.com,保存修改,然后回到IIS管理器,重新启动https网站,可以看到有了主机名www.test.com,https://www.test.com可以正常访问了

11.找到http网站主页的http重定向,重定向目标填写https://www.test.com/$S$Q,重定向行为选择重定向到确切的目标,状态代码选择永久(301)

image.png

保存退出,重定向网站http,重新启动https网站,再访问https://www.test.com,访问成功截图

linux操作步骤:

修改host文件vim /etc/hosts,IP www.test.com

image.png

安装ssl组件yum install mod_ssl

image.png

生成私钥

image.png

生成证书

修改下方代码

image.png

vim /etc/httpd/conf/httpd.conf

NameVirtualHost 172.16.100.2:443 #修改端口为443

<VirtualHost 172.16.100.2:443>

ServerName www.test.com #设置域名

SSLEngine on

SSLCertificateFile /etc/httpd/.ssl/server.crt #设置证书

SSLCertificateKeyFile /etc/httpd/.ssl/server.key #设置私钥

</VirtualHost>

service httpd restart

为了防止密码在登录或者传输信息中被窃取,仅使用证书登录SSH(Data)。

生成私钥和公钥,私钥给客户端,公钥留在服务器

ssh-keygen -t rsa

vim /etc/ssh/sshd_config

StrictModes no #可以避免因为~.ssh/文件夹权限设置不正确导致的无法登陆

RSAAuthentication yes #启用 RSA 认证

PubkeyAuthentication yes #启用pubkey认证

AuthorizedKeysFile .ssh/id_rsa.pub #公钥文件存放位置

PermitEmptyPasswords no #不允许空密码登录

PasswordAuthentication no #密码验证否

image.png

服务安全配置(Windows)

禁用TCP/IP上的NetBIOS协议,关闭监听的 UDP 137(netbios-ns)、UDP 138(netbios-dgm)以及 TCP 139(netbios-ssn)端口;

计算机管理 > 服务和应用程序 > 服务 中禁用 TCP/IP NetBIOS Helper 服务

image.png

在网络连接属性中,双击 Internet协议版本4(TCP/IPv4),单击 高级。在 WINS 页签中,进行如下设置

image.png

在本地策略里配置禁用未登陆前关机;

image.png

设置从屏幕保护恢复时需要输入密码,并将屏幕保护自动开启时间设定为五分钟;

image.png

日志安全配置(Windows)

配置审核登陆,记录内容包括用户登录使用的账户、登录是否成功、登录时间、以及远程登录时间、及用户使用的IP地址;

image.png

启用本地安全策略中对Windows系统的审核策略更改,成功和失败操作都需要审核;

image.png

启用本地安全策略中对Windows系统的审核对象访问,成功和失败操作都需要审核。

image.png

启用本地安全策略中对Windows系统的审核目录服务访问,仅需要审核失败操作;

image.png

启用本地安全策略中对Windows系统的审核特权使用,成功和失败操作都需要审核;

image.png

启用本地安全策略中对Windows系统的审核系统事件,成功和失败操作都需要审核;

image.png

Splunk日志服务器(Windows,Linux)

配置splunk接收Web服务器,安全日志,系统日志,CPU负载,内存,磁盘空间,网络状态;

注意:一定要先配置linux并登录网站开启9997端口的监听接收,然后再配置windows

1.linux

splunk服务器安装在centos6.5(log)

tar -zxvf 文件名 -C /opt

运行splunk cd /opt/splunk/bin/

./splunk start

创建账号密码,通过浏览器打开SPLUNK服务器 172.16.103.250:8000 (默认8000端口)

输入密码用户名,进入单击右上角设置->转发和接收

屏幕截图 2022-10-17 125945.png

接收数据处单击新增一个9997端口,然后保存

屏幕截图 2022-10-17 130109.png

屏幕截图 2022-10-17 130207.png

2.windwos

安装splunk,单击customize options

屏幕截图 2022-10-17 110449.png

单击next

屏幕截图 2022-10-17 110512.png

不作任何设置,再继续next

屏幕截图 2022-10-17 110642.png

采用默认值,继续next

屏幕截图 2022-10-17 110659.png

根据题目要求勾上需要的选项,继续next

屏幕截图 2022-10-17 110728.png

建立管理员账号,如果题目没要求,我们设置成跟splunk服务同样的用户名和密码

屏幕截图 2022-10-17 110958.png

配置部署服务器,其中IP地址就是SPLUNK(LOG)服务器的IP地址,如果不知道的话,事先在服务器通过ifconfig命令获取IP地址。端口号就采用默认的8089

屏幕截图 2022-10-17 111009.png

配置接收触发器的服务器地址,IP地址同上,端口采用默认的9997

屏幕截图 2022-10-17 111026.png

单击install,等待安装过程,最后直接单击finish按钮,安装完毕

开始->运行cmd,进入到forward的运行目录

添加服务器,停止SPLUNK触发器,启动SPLUNK

image.png

image.png

切换到 web 管理页面,找到转发器实例部署

image.png

image.png

点击 setup

image.png

点击启用,再点保存

image.png

image.png

页面就会显示信息

image.png

上图为最后截图案例

本地安全策略设置(Windows)

关闭系统时清除虚拟内存页面文件;

image.png

禁止系统在未登录的情况下关闭;

image.png

禁止软盘复制并访问所有驱动器和所有文件夹;

image.png

禁止显示上次登录的用户名;

image.png

禁止自动管理登录;

image.png

禁止存储网络身份验证的密码和凭据;

image.png

禁止将Everyone权限应用于匿名用户;

image.png

在超过登录时间后强制注销;

image.png

日志监控(Windows)

安全日志文件大小至少为128MB,设置当达到最大的日志大小上限时,覆盖早于30天的日志;

计算机-管理-诊断-windows日志-安全-右键属性-设置日志大小注意,1024KB=1MB,所以128MB=1024*128=131072KB这里应该填入131072,点击应用

image.png

win加r输入rsop.msc 选择windows设置,安全设置,点击事件日志

image.png

应用日志文件大小至少为64MB,设置当达到最大的日志大小上限时,覆盖早于15天的日志;

image.png

win加r输入rsop.msc 选择windows设置,安全设置,点击事件日志

image.png

系统日志大小至少为32MB,设置当达到最大的日志大小上限时,按需要覆盖事件;

image.png

win加r输入rsop.msc 选择windows设置,安全设置,点击事件日志

image.png

Nginx安全策略(Linux)

禁止目录浏览和隐藏服务器版本和信息显示;

vim /etc/nginx/nginx.conf,在http{}里,添加 server_tokens off;

image.png

防止网站信息探测及泄露,隐是去 Apache 版本和操作系统版本相关信息;

vim /etc/httpd/conf/httpd.conf

ServerTokens Prod        #隐藏apach版本

image.png

ServerSignature Off        #隐藏操作系统版本信息

image.png

防止 PHP 版本信息泄露,隐藏 PHP 的 X-Powered-By 信息;

vim /etc/php.ini,添加代码:

image.png

防止网站目录信息泄露,禁用目录列表显示;

vim /etc/httpd/conf/httpd.conf,将Option 后的 Indexes 去掉

image.png

修改 php 配置文件禁用 php 危险函数:Assert、phpinfo、eval、passthru、exec、system、chroot;

vim /etc/php.ini,添加代码:

image.png

为了减轻网站负载,设置网站最大并发连接数为 200;

vim /etc/httpd/conf/httpd.conf

image.png

为了保障服务器安全,限制访问 Web 根目录之外的文件;

vim /etc/httpd/conf/httpd.conf

image.png

限制HTTP请求方式,只允许GET、HEAD、POST;

vim /etc/nginx/nginx.conf,添加

image.png

设置客户端请求主体读取超时时间为10;

vim /etc/nginx/nginx.conf

image.png

设置客户端请求头读取超时时间为10;

vim /etc/nginx/nginx.conf

image.png

将Nginx服务降权,使用www用户启动服务;

image.png

数据库安全策略

以普通帐户mysql安全运行mysql服务,禁止mysql以管理员帐号权限运行;

vim /etc/my.cnf 在 mysqld 下方添加 user=mysql ,其实这个默认就有

image.png

删除默认数据库(test);

登录 mysql (mysql -uroot -p),执行命令

drop database test;

image.png

改变默认mysql管理员用户为:SuperRoot;

update mysql.user set user='SuperRoot' where user='root';

image.png

使用mysql内置MD5加密函数加密用户user1的密码为(P@ssw0rd1!);

update mysql.user set password=md5('P@ssw0rd1!')where user='user1';

image.png

image.png

赋予user1用户对数据库所有表只有select,insert,delete,update权限;

grant select,insert,delete,update on *.* to 'user1'@'localhost';

image.png

对忘记mysql数据库SuperRoot管理员密码进行重置操作;

操作步骤:打开mysql配置文件; vim /etc/my.cnf

在[mysqld]选项下加入skip-grant-tables

image.png

重启mysql服务service mysqld restart,重新登录mysql

update mysql.user set password=password('新密码') where user='SuperRoot';
flush privileges;

image.png

命令执行完成后退出数据库,将在my.cnf文件中加入的skip-grant-tables字段删除

重启mysql服务service mysqld restart

禁用LOCAL INFILE命令防止非授权用户访问本地文件;

操作步骤:vim /etc/my.cnf

方法一:在[mysqld]下添加 local-infile=0

image.png

方法二:

image.png

重启mysql服务service mysqld restart

image.png

image.png

为防止数据库操作信息泄露,请禁止使用MySql命令行历史记录;

rm -rf .mysql_history
ln -s /dev/null /root/.mysql_hitory

image.png

为了分析数据库运行过程中的一些异常活动,请开启MySql二进制日志;

操作步骤:vim /etc/my.cnf

在[mysqld]下添加log-bin=mysql-bin

image.png

保存重启 service mysqld restart,使用 show variables like "log_bin"查看

image.png

mysql配置文件中设置禁止dns解析;

image.png

设置数据库最大连接数为512,最大错误连接数为100;

image.png

服务加固SSH\VSFTPD\HTTPD\BIND\Telent\IIS(Windows, Linux)

SSH 服务加固(Linux)

修改SSH 服务端口为2222;

linux操作步骤:vim /etc/ssh/sshd_config,输入/Port,#Port 22修改Port 2222

验证:service sshd restart,netstat -anltp | grep sshd

image.png

image.png

SSH 禁止root 用户远程登录;

linux操作步骤:vim /etc/ssh/sshd_config

输入/Root, 将#PermitRootLogin yes 修改PermitRootLogin no

image.png

修改SSH连接界面静置时间;

vim /etc/ssh/sshd_config,添加

image.png

修改登录记录的等级为INFO;

vim /etc/ssh/sshd_config,添加

image.png

禁止登陆后显示信息;

vim /etc/ssh/sshd_config,添加

image.png

修改 SSHD 的 PID 档案存放地;

vim /etc/ssh/sshd_config,添加

image.png

设置root 用户的计划任务。每天早上7:50 自动开启SSH 服务, 22:50 关闭;每周六的7:30 重新启动SSH 服务;

linux操作步骤:vim /etc/crontab,在下面添加

50 7 * * * /etc/init.d/vsftpd start

50 22 * * * /etc/init.d/vsftpd stop

30 7 * * 6 /etc/init.d/vsftpd restart

image.png

image.png

为确保安全Linux系统禁止所有人通过ssh连接除了172.16.1.1这个ip;

vim /etc/ssh/sshd_config 最后一行添加>AllowUsers 172.16.1.1>重启服务

image.png

设置RSA证书登录;

vim /etc/ssh/sshd_config

image.png

VSFTPD 服务加固(Linux)

vsftpd禁止匿名用户上传;

vim /etc/vsftpd/vsftpd.conf

将#anon_upload_enable=YES修改为anon_upload_enable=NO

image.png

激活vsFTPd上传下载日志;

image.png

vsFTPd同一个IP只能连接两个;

vim /etc/ssh/sshd_config,添加

image.png

限制客户端连接的端口范围在50000-60000;

vim /etc/ssh/sshd_config,添加

image.png

限制本地用户登陆活动范围限制在home目录;

image.png

修改配置文件,将 ftp 服务预设端口改为 2121,并对 iptables 进行配置;

vim /etc/vsftpd/vsftpd.conf ,在最后添加listen_port=2121

image.png

添加防火墙规则,iptables -A -INPUT -p tcp -m tcp --dport 2121 -j ACCEPT

禁止匿名用户登录vsftpd服务;

vim /etc/vsftpd/vsftpd.conf,将anonymous_enable=YES修改为anonymous_enable=NO

image.png

设置运行 vsftpd 的非特权系统用户为 pyftp;

image.png

同一客户机IP地址允许最大客户端连接数10;

image.png

最大客户端连接数为100;

image.png

vsftpd禁止匿名用户删除和重命名的权限;

vim /etc/ssh/sshd_config,添加

image.png

设置本地用户创建文件的权限为022;

image.png

设置数据连接的超时时间为2 分钟;

去掉注释#data_connection_timeout=120修改为data_connection_timeout=120

image.png

设置无任何操作的超时时间为5分钟;

image.png

匿名用户访问的最大传输速率为512KB/S;

vim /etc/ssh/sshd_config,添加

image.png

用户访问的最大传输速率为1M;

vim /etc/ssh/sshd_config,添加

image.png

关闭 ascii 模式下载,防止被用于 DoS 攻击;

image.png

关闭 ls -R 命令,防止服务器被 DoS 攻击;

image.png

修改 ftp 默认主目录为/ftp 文件夹,并将用户锁定在主目录内;

去掉注释chroot_local_user=yes并添加local_root=ftp

image.png

image.png

设置关闭ftp-data端口不使用主动模式,使用ipv4进行监听;

将connect_from_port_20=YES修改为connect_from_port_20=NO

image.png

listen=YES

image.png

HTTPD服务加固(Linux)

更改默认监听端口为6666;

vim /etc/httpd/conf/httpd.conf

image.png

设置禁止目录浏览;

Options Indexes FollowSymLinks修改为:Options FollowSymLinks

其实就是将Indexes去掉,Indexes表示若当前目录没有index.html就会显示目录结构

image.png

隐藏Apache版本号;

将ServerTokens OS修改ServerTokens Prod

image.png

隐藏操作系统版本信息;

将ServerSignature On修改ServerSignature OFF

image.png

将Apache服务降权,用户为apache,用户组为www;

image.png

配置滚动日志按天记录网站的访问日志和错误日志;

find / -name rotatelogs

image.png

#ErrorLog logs/error_log #注释此行,添加下面这行

ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log%Y%m%d.log 86400 480"

image.png

#CustomLog logs/access_log common

#CustomLog "logs/access_log" combined

#注释上面两行,添加下面这行

CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log%Y%m%d.log 86400 480" common

image.png

BIND服务加固(Linux)

隐藏bind版本号;

vim /etc/named.conf,在配置文件options{ }中添加

directory "/var/named";

version "[no about your business]";

image.png

设置不提供递归服务;

在配置文件options{ }中添加

allow-recursion { none; };

image.png

Telent服务加固(Linux)

将Telnet服务的端口号修改为2323 ,查看Telnet服务端口信息;

vim /etc/services

image.png

限制Telnet用户连接,单个IP允许的最大连接数为1,总的最大连接数为10;

vim /etc/xinetd.conf

image.png

防火墙策略(Linux,Windows)

iptables
PREROUTING在进行路由选择前处理数据包
INPUT处理流入的数据包
OUTPUT处理流出的数据包
FORWARD处理转发的数据包
POSTROUTING在进行路由选择后处理数据包
ACCEPT允许流量通过
REJECT拒绝流量通过
LOG记录日志信息
DROP拒绝流量通过
其中drop和reject的区别是:drop是直接将网络包丢弃而且不响应;而reject则会在拒绝之后回复一句“消息收到了,但是被扔掉了”。
iptables常用的参数及作用:
-P设置默认策略
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-I num在规则链头部加入新规则
-D num删除某一条规则
-s匹配来源地址IP/MASK,加叹号"!"表示除这个IP外
-d匹配目标地址
-i 网卡名称匹配从这块网卡流入的数据
-o 网卡名称匹配从这块网卡流出的数据
-p匹配协议,如TCP、UDP、ICMP
–dport num匹配目标端口号
–sport num匹配来源端口号

禁用 23 端口;

iptables -A INPUT -p tcp --dport 23 -j DROP
iptables -A INPUT -p udp --dport 23 -j DROP

image.png

禁止别人ping通;

iptables -A INPUT -p icmp -j DROP

image.png

Linux系统为确保安全禁止所有人连接ssh除了192.168.1.1这个ip;

iptables -A INPUT -p tcp --dport ssh -j DROP
iptables -A INPUT -p tcp --dport ssh -s 192.16.1.1 -j ACCEPT

image.png

禁止ping通别人;

iptables -A OUTPUT -p icmp -j DROP

image.png

只允许转发来自 172.16.0.0/24 局域网段的 DNS 解析请求数据包;

iptables -A FORWARD -p udp --dport 53 -s 172.16.0.0/24 -j ACCEPT

image.png

设置防火墙允许本机转发除ICMP协议以外的所有数据包;

iptables -A FORWARD ! -p icmp -j ACCEPT

image.png

为防御拒绝服务攻击,设置iptables防火墙策略对传入的流量进行过滤,限制每分钟允许3个包传入,并将瞬间流量设定为一次最多处理6个数据包(超过上限的网络数据包将丢弃不予处理);

iptables -A INPUT -m limit --limit 3/m --limit-burst 6 -j ACCEPT

image.png

在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给 192.168.1.0网络中的主机访问;

iptables -A INPUT -p tcp --dport 21 -s 192.168.1.0/24 -m time --weekdays 1,2,3,4,5 --timestart 8:30 --timestop 18:00 -j ACCEPT

image.png

要求从ftp服务的数据下载请求次数每分钟不得超过 5 个;

iptables -A OUTPUT -m state --state RELATED -m limit --limit 5/m -j ACCEPT

image.png

配置iptables防火墙过滤规则,以封堵目标网段(172.16.1.0/24),并在两小时后解除封锁;

iptables -I INPUT -s 172.16.1.0/24 -j DROP
iptables -I FORWARD -s 172.16.1.0/24 -j DROP
at now +2 hours
iptables -D INPUT 1
iptables -D FORWARD 1

image.png

限制本机的web服务在周一不允许访问;

iptables -A INPUT -p tcp --dport 80 -m time ! --weekdays Mon -j ACCEPT

image.png<a name="ubrFe"></a>

为防止Nmap等扫描软件探测到关键信息,设置iptables防火墙策略对80号端口进行流量处理;

iptables -A INPUT -p tcp --dport 80 -j DROP

image.png<a name="YeUGg"></a>

为防止Nmap扫描软件探测到关键信息,设置iptables防火墙策略对3306号端口进行流量处理;

iptables -A INPUT -p tcp --dport 3306 -j DROP

image.png

拒绝访问防火墙的新数据包,但允许响应连接或以有连接响应的数据包;

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

image.png

设置防火墙允许本机对外开放TCP端口21以及被动模式FTP端口1250-1280;

iptables -A INPUT -p tcp -m multiport --dport 21,1250:1280 -j ACCEPT

image.png

拒绝 TCP 标志位全部为 1 及全部为 0 的报文访问本机;

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

image.png

禁止转发来自MAC 地址为29:0E:29:27:65:EF 主机的数据包;

iptables -A FORWARF -m mac --mac-source 29:0E:29:27:65:EF -j DROP

image.png

禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包;

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

image.png

为防御IP 碎片攻击,设置iptables 防火墙策略限制IP 碎片的数量,仅允许每秒处理1000 个;

iptables -A FORWARD -f -m limit --limit 1000/s --limit-burst 1000 -j ACCEPT

image.png

为防止SSH 服务被暴力枚举,设置iptables 防火墙策略仅允许 172.16.10.0/24 网段内的主机通过SSH 连接本机;

iptables -A INPUT -p tcp –dport ssh -j DROP
iptables -A INPUT -p tcp --dport 22 -s 172.16.10.0/24 -j ACCEPT

image.png

拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包;

iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

image.png

允许本机开放从TCP端口20-1024提供的应用服务;

iptables -A INPUT -p tcp --dpot 20:1024 -j ACCEPT

image.png

允许本机ping别的主机;但不开放别的主机ping本机;

iptables -A OUTPUT -s 192.168.1.111 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 192.168.1.111 -p icmp --icmp-type 0 -j ACCEPT

image.png

禁止本机ping任何机器直接丢弃流出icpm数据包;

iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP

image.png

开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机了;

iptables -A INPUT  -p tcp  -m tcp --dport 22 -m iprange --src-range 192.168.1.1-192.168.1.100   -m limit --limit 2/minute -j ACCEPT
iptables -A OUTPUT  -p tcp -m state --state ESTABLISHED -j ACCEPT

image.png

web服务器包含了admin字符串的页面不允许访问;

iptables -A INPUT -p tcp -d192.168.1.111 --dport80-m string --algo bm --string'admin'-j DROP

image.png

web服务器仅允许响应报文离开本机;

iptables -A OUTPUT -p tcp --sport80-m state --state ESTABLISHED -j ACCEPT

image.png

Windows系统禁用445端口;

管理工具 -> 高级安全Windows防火墙 -> 右键入站规则 -> 新建规则端口,下一步

image.png

特定端口,445端口,下一步

image.png

阻止连接,下一步,以后一直下一步设置名字完成即可

image.png

image.png

再重复上面操作新建禁用445端口udp协议规则 

Windows系统禁用23端口;

23端口和上一题类似,把445端口改为23即可

IP协议安全配置(Windows)

指定触发SYN洪水攻击保护所必须超过的TCP连接请求数阈值为5;

找到注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters 右键空白区域,新建 DWORD(32-位)值 ,名称为 SynAttackProtect 值为 2 ,启动 SYN攻击保护 image.png

image.png

继续新建 DWORD(32-位)值 ,名称为 TcpMaxPortsExhausted,值为 5

image.png

指定处于SYN_RCVD状态的TCP连接数的阈值为500;

继续新建 DWORD(32-位)值 ,名称为 TcpMaxHalfOpen ,值为 500

image.png

指定处于至少已发送一次重传的SYN_RVCD状态中的TCP连接数的阈值为400;

继续新建 DWORD(32-位)值,名称为 TcpMaxHalfOpenRetried,值为 400

image.png

  • 60
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
SSL(Secure Sockets Layer)是一种加密协议,用于在网络上安全地传输数据。Python中的ssl模块提供了一种简单的方式来使用SSL加密协议。在本文中,我们将介绍Python中的ssl模块,包括SSL/TLS协议的基础知识、如何在Python中使用SSL模块建立加密连接、如何验证SSL证书以及如何配置SSL加密连接。 ## SSL/TLS协议基础知识 SSL/TLS协议是一种加密协议,用于在网络上安全地传输数据。它是一种端到端的加密协议,可以保护数据在传输过程中不被窃听、篡改或伪造。SSL/TLS协议是建立在TCP协议之上的,因此它可以在任何支持TCP协议的网络上使用。 SSL/TLS协议使用公钥加密和私钥解密的方式来加密数据。在建立连接时,客户端和服务器之间会交换公钥,用于加密数据。数据在传输过程中,只有拥有私钥的一方才能解密数据。因此,SSL/TLS协议可以保证数据在传输过程中不被窃听。 SSL/TLS协议还提供了身份验证和完整性保护。使用SSL/TLS协议建立连接时,客户端和服务器可以交换数字证书,用于验证对方的身份。数字证书是由权威机构颁发的,可以保证对方的身份是真实可靠的。同时,SSL/TLS协议还提供了完整性保护,可以确保数据在传输过程中不被修改。 ## SSL模块的使用 Python的ssl模块提供了一种简单的方式来使用SSL加密协议。使用ssl模块建立加密连接的基本步骤如下: 1. 创建一个socket对象 2. 使用ssl.wrap_socket()函数对socket对象进行包装 3. 连接到服务器 4. 发送和接收数据 下面是一个简单的例子,使用ssl模块建立一个加密连接: ```python import socket import ssl # 创建一个socket对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 对socket对象进行包装 ssl_sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLS) # 连接到服务器 ssl_sock.connect(('www.example.com', 443)) # 发送数据 ssl_sock.send(b'Hello, world!') # 接收数据 data = ssl_sock.recv(1024) # 关闭连接 ssl_sock.close() ``` 在上面的例子中,我们首先创建了一个普通的socket对象s,然后使用ssl.wrap_socket()函数对其进行包装,生成了一个加密的socket对象ssl_sock。我们将ssl_version参数设置为ssl.PROTOCOL_TLS,表示使用TLS协议进行加密。 然后,我们使用ssl_sock.connect()函数连接到服务器,并使用ssl_sock.send()函数发送数据。使用ssl_sock.recv()函数接收服务器返回的数据。最后,我们使用ssl_sock.close()函数关闭连接。 ## SSL证书验证 在上面的例子中,我们没有对SSL证书进行验证。在使用SSL/TLS协议建立连接时,服务器会向客户端发送一个数字证书,用于验证服务器的身份。Python的ssl模块提供了一种简单的方式来验证SSL证书。 使用ssl模块验证SSL证书的基本步骤如下: 1. 创建一个SSLContext对象 2. 设置验证选项 3. 创建一个socket对象 4. 使用SSLContext.wrap_socket()函数对socket对象进行包装 5. 连接到服务器 6. 发送和接收数据 下面是一个简单的例子,使用ssl模块验证SSL证书: ```python import socket import ssl # 创建一个SSLContext对象 context = ssl.create_default_context() # 设置验证选项 context.check_hostname = True context.verify_mode = ssl.CERT_REQUIRED # 创建一个socket对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 对socket对象进行包装 ssl_sock = context.wrap_socket(s, server_hostname='www.example.com') # 连接到服务器 ssl_sock.connect(('www.example.com', 443)) # 发送数据 ssl_sock.send(b'Hello, world!') # 接收数据 data = ssl_sock.recv(1024) # 关闭连接 ssl_sock.close() ``` 在上面的例子中,我们首先创建一个SSLContext对象,然后设置验证选项。我们将check_hostname选项设置为True,表示验证服务器的主机名,将verify_mode选项设置为ssl.CERT_REQUIRED,表示验证SSL证书。当服务器的证书无效或不可信时,会抛出异常。 然后,我们创建一个socket对象s,并使用context.wrap_socket()函数对其进行包装,生成了一个加密的socket对象ssl_sock。我们将server_hostname参数设置为服务器的主机名,表示验证服务器的主机名。 然后,我们使用ssl_sock.connect()函数连接到服务器,并使用ssl_sock.send()函数发送数据。使用ssl_sock.recv()函数接收服务器返回的数据。最后,我们使用ssl_sock.close()函数关闭连接。 ## SSL加密连接配置 Python的ssl模块提供了一些选项,可以配置SSL加密连接。下面是一些常用的选项: - ssl_version:指定使用的SSL/TLS协议版本,默认为PROTOCOL_TLS。 - ciphers:指定加密算法的列表,默认为None。 - certfile:指定客户端证书文件的路径。 - keyfile:指定客户端私钥文件的路径。 - ca_certs:指定服务器证书颁发机构的证书文件的路径。 - check_hostname:指定是否验证服务器的主机名,默认为False。 - verify_mode:指定SSL证书验证的级别,默认为CERT_NONE。 下面是一个简单的例子,使用ssl模块配置SSL加密连接: ```python import socket import ssl # 创建一个SSLContext对象 context = ssl.create_default_context() # 设置加密算法和证书文件 context.set_ciphers('AES256-SHA') context.load_cert_chain(certfile='client.crt', keyfile='client.key') # 设置SSL证书验证选项 context.check_hostname = True context.verify_mode = ssl.CERT_REQUIRED context.load_verify_locations(cafile='ca.crt') # 创建一个socket对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 对socket对象进行包装 ssl_sock = context.wrap_socket(s, server_hostname='www.example.com') # 连接到服务器 ssl_sock.connect(('www.example.com', 443)) # 发送数据 ssl_sock.send(b'Hello, world!') # 接收数据 data = ssl_sock.recv(1024) # 关闭连接 ssl_sock.close() ``` 在上面的例子中,我们首先创建一个SSLContext对象,并设置加密算法和证书文件。我们将ciphers选项设置为'AES256-SHA',表示使用AES256-SHA加密算法进行加密。我们使用load_cert_chain()函数加载客户端证书和私钥文件。我们将certfile选项设置为'client.crt',表示客户端证书文件的路径,将keyfile选项设置为'client.key',表示客户端私钥文件的路径。 然后,我们设置SSL证书验证选项。我们将check_hostname选项设置为True,表示验证服务器的主机名。我们将verify_mode选项设置为ssl.CERT_REQUIRED,表示验证SSL证书。我们使用load_verify_locations()函数加载服务器证书颁发机构的证书文件。我们将cafile选项设置为'ca.crt',表示服务器证书颁发机构的证书文件的路径。 然后,我们创建一个socket对象s,并使用context.wrap_socket()函数对其进行包装,生成了一个加密的socket对象ssl_sock。我们将server_hostname参数设置为服务器的主机名,表示验证服务器的主机名。 然后,我们使用ssl_sock.connect()函数连接到服务器,并使用ssl_sock.send()函数发送数据。使用ssl_sock.recv()函数接收服务器返回的数据。最后,我们使用ssl_sock.close()函数关闭连接。 ## 总结 Python的ssl模块提供了一种简单的方式来使用SSL加密协议。在使用SSL/TLS协议建立连接时,可以保护数据在传输过程中不被窃听、篡改或伪造。在使用ssl模块建立加密连接时,可以验证SSL证书,并配置SSL加密连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何辰风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值