网络安全基础知识:如何设置防火墙

为什么防火墙如此重要?开放Internet上的安全性每天都变得越来越重要。随着互联网和互联网素养的增长,现在全世界都可以感受到专用/虚拟服务器的好处。

对于许多人来说,个人数据和Web服务的可访问性已成为日常生活中不可或缺的一部分。具有可访问性的好处意味着该服务是面向公众的,这使得该服务容易受到不良和看似随机的连接的影响。

通常使用机器人和欺骗性IP地址进行,在开放的Internet上体验登录尝试、端口扫描和其他侵入性活动的情况并不少见。有一些基本的安全和防火墙实践可以帮助防止这些活动变成更令人担忧的问题。

如果没有防火墙,您的开放端口如下所示:

首先,为了帮助掌握这些连接背后的动机,我们使用了一台新安装的服务器来记录2天内的传入连接。在没有防火墙阻止与服务器的连接的情况下,可以分析日志数据以查明集中区域。

技术信息

操作系统:CentOS7+cPanel

(禁用cPHulk)

–使用iptables记录连接,并记录到以下目录–

/etc/rsyslog.d/my_iptables.conf

:msg,contains,\"[netfilter]\"/var/log/iptables.log

以下iptables规则用于将NEW(state)入站数据包记录到eth0

iptables-AINPUT-ieth0-mstate--stateNEW-jLOG--log-prefix=\'[netfilter]\'

示例日志条目

Jun1508:02:27gigenetkernel:[netfilter]IN=eth0OUT=MAC=d6:f4:8e:aa:a7:94:00:25:90:0a:ad:1c:08:00SRC=<remoteIP>DST=<serverIP>LEN=40TOS=0x00PREC=0x00TTL=244ID=24288PROTO=TCPSPT=54102DPT=1433WINDOW=1024RES=0x00SYNURGP=0

(IP地址已被删除)

SRC–源IP地址

DST–目标IP地址

SPT——源端口

DPT–目标端口

PROTO——互联网协议

创建了一个脚本来分析和格式化日志数据

[[email protected]/*<![CDATA[*/!function(t,e,r,n,c,a,p,m,o){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))returnt[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',o=0,r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2){m=('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);if((a.length-n)=128)o=(parseInt(m)1)break;e+=\'%\'+m;}p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/*]]>*/~]#./analyze-iptableslog.sh

日志文件:iptables-1.log

记录日期

#awk\'NR==1{print\"StartDate:\"$1,$2,$3;};END{print\"EndDate:\"$1,$2,$3;}\'iptables-1.log

开始日期:6月13日08:02:21

结束日期:6月15日08:02:27

记录的新连接总数

#wc-liptables-1.log
16299iptables-1.log

每个协议的连接数

#awk\'{for(i=1;i<=NF;i++)if(~/PROTO=/)print$i}\'iptables-1.log|sort|uniq-c|sort-rn
15900PROTO=TCP
366PROTO=UDP
33PROTO=ICMP

唯一SRCIP地址数

#awk\'{for(i=1;i<=NF;i++)if(~/SRC=/)print$i}\'iptables-1.log|sort-n|uniq|wc-l
2886IPAddresses

具有DPT的实体数(Total-ICMP)

#awk\'{for(i=1;i<=NF;i++)if(~/DPT=/)print$i}\'iptables-1.log|wc-l
16266DPTConnections

唯一DPT命中数

#awk\'{for(i=1;i<=NF;i++)if(~/DPT=/)print$i}\'iptables-1.log|sort-n|uniq|wc-l
1531UniqueDPT

每个DPT的连接数,前15名

#awk\'{for(i=1;i<=NF;i++)if(~/DPT=/)print$i}\'iptables-1.log|sort-n|uniq-c|sort-rn|head-n15
9595DPT=22
1309DPT=80
885DPT=445
742DPT=23
188DPT=8000
157DPT=1433
153DPT=5060
111DPT=8080
90DPT=8545
90DPT=3389
83DPT=81
80DPT=3306
73DPT=443
67DPT=2323
44DPT=8888

如何使用防火墙缓解端口

数据显示了主要的联系目的地港口。正如预期的那样,具有最大连接量的端口对于Linux和WindowsWeb服务很常见。

端口22–SecureShell(SSH)
端口23–telnet
端口80–Http
端口445–SMB(Windows网络文件共享)
端口1433–MSSQL
端口3306–MYSQL
端口3389–RDP

根据正在运行的服务,这些端口可能需要对远程服务可用。注意的端口是SSH端口22、telnet端口23和RDP端口3389。

理想情况下,系统防火墙应将这些连接仅限于特定IP地址。此外,机器人通常被编程为以默认端口为目标。因此,更改默认SSH和RDP端口将有助于防止入侵。

  1. 更改SSH端口(Linux、Freebsd)
  2. SSH配置文件:
    /etc/ssh/sshd_config

修改不常用端口(0-65535)的行

  • 端口22

重启SSHD:

  • CentOS:服务sshd重启
  • Debian:服务ssh重启
  • FreeBSD:/etc/rc.d/sshd重启

更改RDP端口(Windows)

  • WindowsRDP永远不应向公众开放。如有必要,应更改RPD端口以最小化匿名连接。

打开注册表编辑器

  • 找到以下注册表子项:
    HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\TerminalServer\\WinStations\\RDP-Tcp\\PortNumber

将Decimal值修改为未使用的端口,单击OK。重启。

基本防火墙设置

有许多防火墙服务可以作为主要的安全模式。提供了一些帮助入门的基本规则命令。

1.添加iptables规则

iptables是最常见、最熟悉的Linux防火墙。CentOS<=6的默认防火墙,iptables经常被用作Linux的基线防火墙。

基本规则

  • 允许已建立的连接:iptables-AINPUT-mstate–stateRELATED,ESTABLISHED-jACCEPT
  • 允许输入策略:iptables-PINPUTACCEPT
  • 允许IP:iptables-AINPUT-s120.0.0.1/32-jACCEPT
  • 允许IP/端口:iptables-AINPUT-s120.0.0.1/32-ptcp-mstate–stateNEW-mtcp–dport22-jACCEPT
  • 允许lo(localhost)接口:iptables-AINPUT-ilo-jACCEPT
  • 允许Ping:iptables-AINPUT-picmp-jACCEPT
  • 允许端口:iptables-AINPUT-ptcp–dport22-jACCEPT
  • 插入允许IP(位置5):iptables-IINPUT5-s120.0.0.1/32-jACCEPT
  • 插入允许IP/多端口:iptables-IINPUT5-s127.0.0.1/32-ptcp-mstate–stateNEW-mmultiport–dportport#1,port#2-jACCEPT

(或者,将“ACCEPT”替换为“DROP”以拒绝)
使用-D选项删除现有规则:

  • 删除允许IP:iptables-DINPUT-s120.0.0.1/32-jACCEPT

拒绝其余的,拒绝(阻止)之前规则中未定义的所有连接。

  • iptables-A-jREJECT–reject-withicmp-host-prohibited

冲洗规则

  • iptables-F

2.基本的firewalld命令

Firewalld在CentOS7中具有突出的特点。Firewalld本质上提供了更多人类可读的命令来提交iptables规则。

可操作,打印当前状态信息

  • 状态:firewall-cmd–state
  • 启动/停止:systemctlstart/stopfirewalld.service
  • 开机启动:systemctlenablefirewalld

区域信息,pinrt区域参数

  • 默认区域:firewall-cmd–get-default-zone
  • 默认区域信息:firewall-cmd–list-all
  • 列出区域:firewall-cmd–get-zones
  • 区域信息:firewall-cmd–zone=public–list-all

修改区域

  • 创建新区域:firewall-cmd–permanent–new-zone=new_zone–更改默认区域:firewall-cmd–set-default-zone=public
  • 更改接口:firewall-cmd–zone=public–change-interface=eth0

修改规则,区域的子网

  • 允许服务:firewall-cmd–zone=public–add-service=http
  • 允许端口:firewall-cmd–zone=public–add-port=22/tcp
  • 列出服务:firewall-cmd–get-services
  • 列出允许的服务:firewall-cmd–zone=public–list-services
  • 列出允许的端口:firewall-cmd–list-ports
  • 允许IP/Port/Proto使用富规则、显式规则
  • firewall-cmd–permanent–zone=public–add-rich-rule=’rulefamily=”ipv4″sourceaddress=”127.0.0.1/32″portprotocol=”tcp”port=”22″accept’

(使用–permanent选项为重新启动创建持久规则)

3.基本的ufw规则

作为ufw(UncomplicatedFirewall)引入,在Ubuntu8.04+中受支持,它作为Ubuntu系统的默认防火墙提供。

操作

  • 启用/禁用:ufw启用/禁用
  • 打印规则:ufwstatusverbose

允许规则

  • 允许端口:ufwallow22
  • 允许IP:ufw允许来自127.0.0.1
  • AllowIP/Port/TCP:ufwallowfrom127.0.0.1toanyport22prototcp
  • (或者,用“允许”代替“拒绝”来代替拒绝规则)

删除现有规则

  • ufw从127.0.0.1删除允许

4.Windows防火墙(WindowsServer2008anewer)

控制面板>>Windows防火墙>>高级设置>>入站/出站>>新规则

奖励:cPanel工具–cpHulk(?)

作为测试用例,WHM的cPHulkBruteforceProtection使用默认设置启用。在记录的24小时内,iptables记录的新连接明显减少。

[[email protected]/*<![CDATA[*/!function(t,e,r,n,c,a,p,m,o){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))returnt[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',o=0,r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2){m=('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);if((a.length-n)=128)o=(parseInt(m)1)break;e+=\'%\'+m;}p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/*]]>*/~]#./analyze-iptableslog.sh

日志文件:iptables-cphulk.log

记录日期

#awk\'NR==1{print\"StartDate:\"$1,$2,$3;};END{print\"EndDate:\"$1,$2,$3;}\'iptables-cphulk.log

开始日期:6月19日04:31:43

结束日期:6月20日04:53:53

记录的新连接总数

#wc-liptables-cphulk.log
3223iptables-cphulk.log

每个协议的连接数

#awk\'{for(i=1;i<=NF;i++)if(~/PROTO=/)print$i}\'iptables-cphulk.log|sort|uniq-c|sort-rn
2974PROTO=TCP
213PROTO=UDP
36PROTO=ICMP

唯一SRCIP地址数

#awk\'{for(i=1;i<=NF;i++)if(~/SRC=/)print$i}\'iptables-cphulk.log|sort-n|uniq|wc-l
1432IPAddresses

具有DPT的实体数(Total-ICMP)

#awk\'{for(i=1;i<=NF;i++)if(~/DPT=/)print$i}\'iptables-cphulk.log|wc-l
3187DPTConnections

唯一DPT命中数

#awk\'{for(i=1;i<=NF;i++)if(~/DPT=/)print$i}\'iptables-cphulk.log|sort-n|uniq|wc-l
943UniqueDP

每个DPT的连接数,前15名

#awk\'{for(i=1;i<=NF;i++)if(~/DPT=/)print$i}\'iptables-cphulk.log|sort-n|uniq-c|sort-rn|head-n15
415DPT=445
270DPT=23
257DPT=22
233DPT=80
97DPT=5060
72DPT=1433
59DPT=8545
53DPT=8000
50DPT=81
49DPT=8080
46DPT=443
41DPT=3389
34DPT=25
33DPT=3306
27DPT=2323

阅读剩余
THE END