CentOS7默认使用的是firewall作为防火墙,这里改为iptables防火墙。
1、关闭firewall
systemctlstopfirewalld.service#停止firewall
systemctldisablefirewalld.service#禁止firewall开机启动
2、安装iptables防火墙
yuminstalliptables-services#安装
vi/etc/sysconfig/iptables#编辑防火墙配置文件
**********************************************************************************************
#Firewallconfigurationwrittenbysystem-config-firewall
#Manualcustomizationofthisfileisnotrecommended.
*filter
:INPUTACCEPT[0:0]
:FORWARDACCEPT[0:0]
:OUTPUTACCEPT[0:0]
-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT
-AINPUT-picmp-jACCEPT
-AINPUT-ilo-jACCEPT
-AINPUT-mstate--stateNEW-mtcp-ptcp--dport22-jACCEPT
-AINPUT-mstate--stateNEW-mtcp-ptcp--dport80-jACCEPT
-AINPUT-jREJECT--reject-withicmp-host-prohibited
-AFORWARD-jREJECT--reject-withicmp-host-prohibited
COMMIT
**********************************************************************************************
:wq!#保存退出
systemctlrestartiptables.service#最后重启防火墙使配置生效
systemctlenableiptables.service#设置防火墙开机启动
20条IPTables防火墙规则用法:
IPTables包括一组内置和由用户定义规则的「链」,管理员可以在「链」上附加各种数据包处理规则。
FILTER默认过滤表,内建的链有:
- INPUT:处理流入本地的数据包
FORWARD:处理通过系统路由的数据包
OUTPUT:处理本地流出的数据包
- NAT实现网络地址转换的表,内建的链有:
- PREROUTING:处理即将接收的数据包
OUTPUT:处理本地产生的数据包
POSTROUTING:处理即将传出的数据包
- MANGLE此表用于改变数据包,共5条链:
- PREROUTING:处理传入连接
OUTPUT:处理本地生成的数据包
INPUT:处理报文
POSTROUTING:处理即将传出数据包
FORWARD:处理通过本机转发的数据包
接下来我们将由简入难介绍25条Linux管理员最常会用到的IPTables规则。
1、启动、停止和重启IPTables
虽然IPTables并不是一项服务,但在Linux中还是可以像服务一样对其状态进行管理。
基于SystemD的系统
systemctlstartiptablessystemctlstopiptablessystemctlrestartiptables
基于SysVinit的系统
/etc/init.d/iptablesstart/etc/init.d/iptablesstop/etc/init.d/iptablesrestart
2、查看IPtables防火墙策略
你可以使用如下命令来查看IPtables防火墙策略:
iptables-L-n-v
以上命令应该返回数据下图的输出:
以上命令是查看默认的FILTER表,如果你只希望查看特定的表,可以在-t参数后跟上要单独查看的表名。例如只查看NAT表中的规则,可以使用如下命令:
iptables-tnat-L-v–n
3、屏蔽某个IP地址
如果你发布有某个IP向服务器导入攻击或非正常流量,可以使用如下规则屏蔽其IP地址:
iptables-AINPUT-sxxx.xxx.xxx.xxx-jDROP
注意需要将上述的XXX改成要屏蔽的实际IP地址,其中的-A参数表示在INPUT链的最后追加本条规则。(IPTables中的规则是从上到下匹配的,一旦匹配成功就不再继续往下匹配)
如果你只想屏蔽TCP流量,可以使用-p参数的指定协议,例如:
iptables-AINPUT-ptcp-sxxx.xxx.xxx.xxx-jDROP
4、解封某个IP地址
iptables-DINPUT-sxxx.xxx.xxx.xxx-jDROP
其中-D参数表示从链中删除一条或多条规则。
5、使用IPtables关闭特定端口
很多时候,我们需要阻止某个特定端口的网络连接,可以使用IPtables关闭特定端口。
阻止特定的传出连接:
iptables-AOUTPUT-ptcp--dportxxx-jDROP
阻止特定的传入连接:
iptables-AINPUT-ptcp--dportxxx-jACCEPT
6、使用Multiport控制多端口
使用multiport我们可以一次性在单条规则中写入多个端口,例如:
iptables-AINPUT-ptcp-mmultiport--dports22,80,443-jACCEPTiptables-AOUTPUT-ptcp-mmultiport--sports22,443-jACCEPT
7、在规则中使用IP地址范围
在IPtables中IP地址范围是可以直接使用CIDR进行表示的,例如:
iptables-AOUTPUT-ptcp-d192.168.100.0/24--dport22-jACCEPT
8、配置端口转发
有时我们需要将Linux服务器的某个服务流量转发到另一端口,此时可以使用如下命令:
iptables-tnat-APREROUTING-ieth0-ptcp--dport25-jREDIRECT--to-port2525
上述命令会将所有到达eth0网卡25端口的流量重定向转发到2525端口。
9、屏蔽HTTP服务Flood攻击
有时会有用户在某个服务,例如HTTP80上发起大量连接请求,此时我们可以启用如下规则:
iptables-AINPUT-ptcp--dport80-mlimit--limit100/minute--limit-burst200-jACCEPT
上述命令会将连接限制到每分钟100个,上限设定为200。
10、禁止PING
对Linux禁PING可以使用如下规则屏蔽ICMP传入连接:
iptables-AINPUT-picmp-ieth0-jDROP
11、允许访问回环网卡
环回访问(127.0.0.1)是比较重要的,建议大家都开放:
iptables-AINPUT-ilo-jACCEPTiptables-AOUTPUT-olo-jACCEPT
12、屏蔽指定MAC地址
使用如下规则可以屏蔽指定的MAC地址:
iptables-AINPUT-mmac--mac-source00:00:00:00:00:00-jDROP
13、限制并发连接数
如果你不希望来自特定端口的过多并发连接,可以使用如下规则:
iptables-AINPUT-ptcp--syn--dport22-mconnlimit--connlimit-above3-jREJECT
以上规则限制每客户端不超过3个连接。
14、清空IPtables规则
要清空IPtables链可以使用如下命令:
iptables-F
要清空特定的表可以使用-t参数进行指定,例如:
iptables-tnat–F
15、保存IPtables规则
默认情况下,管理员对IPtables规则的操作会立即生效。但由于规则都是保存在内存当中的,所以重启系统会造成配置丢失,要永久保存IPtables规则可以使用iptables-save命令:
iptables-save>~/iptables.rules
保存的名称大家可以自己改。
16、还原IPtables规则
有保存自然就对应有还原,大家可以使用iptables-restore命令还原已保存的规则:
iptables-restore<~/iptables.rules
17、允许建立相关连接
随着网络流量的进出分离,要允许建立传入相关连接,可以使用如下规则:
iptables-AINPUT-mconntrack--ctstateESTABLISHED,RELATED-jACCEPT
允许建立传出相关连接的规则:
iptables-AOUTPUT-mconntrack--ctstateESTABLISHED-jACCEPT
18、丢弃无效数据包
很多网络攻击都会尝试用黑客自定义的非法数据包进行尝试,我们可以使用如下命令来丢弃无效数据包:
iptables-AINPUT-mconntrack--ctstateINVALID-jDROP
如果你的系统不会用于邮件发送,我们可以在规则中屏蔽SMTP传出端口:
iptables-AOUTPUT-ptcp--dports25,465,587-jREJECT
20、阻止连接到某块网卡
如果你的系统有多块网卡,我们可以限制IP范围访问某块网卡:
iptables-AINPUT-ieth0-sxxx.xxx.xxx.xxx-jDROP
源地址可以是IP或CIDR。
保存设置的规则到配置文件
serviceiptablessave
iptables–F
#删除已经存在的规则
iptables-PINPUTDROP
#配置默认的拒绝规则。基本规则是:先拒绝所有的服务,然后根据需要再添加新的规则。
iptables-AINPUT-ptcp--dport80-jACCEPT
#打开WEB服务端口的tcp协议
iptables-AINPUT-ptcp--dport110-jACCEPT
#打开POP3服务端口的tcp协议
iptables-AINPUT-ptcp--dport25-jACCEPT
#打开SMTP服务端口的tcp协议
iptables-AINPUT-ptcp--dport21-jACCEPT
#打开FTP服务端口的tcp协议
iptables-AINPUT-ptcp-s202.106.12.130--dport22-jACCEPT
#允许IP地址为202.106.12.130这台主机连接本地的SSH服务端口
iptables-AINPUT-ptcp--dport53-jACCEPT
#允许DNS服务端口的tcp数据包流入
iptables-AINPUT-pudp--dport53-jACCEPT
#允许DNS服务端口的udp数据包流入
iptables-AINPUT-picmp-icmp-typeecho-request-ieth1-jDROP
#防止死亡之ping,从接口eth1进入的icmp协议的请求全部丢弃。
iptables-AFORWARD-ptcp--syn-mlimit--limit1/s-jACCEPT
#防止SYNFlood(拒绝服务攻击)
iptables-tnat-APOSTROUTING-oeth1-s192.168.0.226-jMASQUERADE
#允许192.168.0.226通过eth1IP伪装出外网
iptables-tnat-APOSTROUTING-oeth0-s192.168.0.4-ptcp--dport25-jMASQUERADE
#允许192.168.0.4通过eth0伪装访问外网的25端口