第一步 关闭默认防火墙
centos7默认使用的防火墙是Firewall,所以先要把Firewall 给关闭再使用iptables
关闭Firewall 命令
命令:systemctl stop firewalld #关闭防火墙
命令:systemctl disable firewalld #禁止开机启动
第二步 检查是否安装了iptables
检查是否安装了iptables,命令:service iptables status
如果没有安装,安装命令:yum install -y iptables,升级命令:yum update iptables
第三步 安装 iptables-services
安装iptables-services,命令:yum install iptables-services
第四步 开启 iptables-services
命令:systemctl start iptables.service #启动防火墙
命令:systemctl enable iptables.service #设置开机自启动
第五步 查看现有规则
命令:iptables -L -n
第六步 清除所有默认规则
清除默认规则前,一定要先允许所有的INPUT请求,否则可能导致服务器无法访问
允许所有INPUT请求命令:iptables -P INPUT ACCEPT
然后清空所有默认规则,命令:iptables -F
清空所有自定义规则,命令:iptables -X
所有计数器归0,命令:iptables -Z
第七步 允许来自于lo接口的数据包
如果没有此规则,你将不能通过127.0.0.1访问本地服务,例如ping 127.0.0.1,命令:iptables -A INPUT -i lo -j ACCEPT
第八步 开启指定端口
命令:iptables -A INPUT -p tcp --dport 端口 -j ACCEPT
案例:
命令:iptables -A INPUT -p tcp --dport 80 -j ACCEPT
命令:iptables -A INPUT -p tcp --dport 22 -j ACCEPT
第九步 允许icmp包通过,也就是允许ping
命令:iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
第十步 允许所有对外请求的返回包
本机对外请求相当于OUTPUT,对于返回数据包必须要接收啊,这相当于INPUT了
命令:iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
第十一步 过滤除iptables规则之外的所有请求
命令:iptables -P INPUT DROP
第十二步 保存规则(很重要,否则重启后不生效)
注意:设置完成以后先执行命令iptables -L -n看一下配置是否正确。
没问题后,先不要急着保存,因为没保存只是当前有效,重启后就不生效,这样万一有什么问题,可以后台强制重启服务器恢复设置。
另外开一个ssh连接,确保可以登陆。
确保没问题之后在进行保存
保存命令:service iptables save
第十三步 重启防火墙
systemctl restart iptables.service
第十四步 关闭防火墙
命令:systemctl stop iptables.service #关闭防火墙
命令:systemctl disable iptables.service #禁止开机启动
杂项
如果要添加内网ip信任(接受其所有TCP请求)
iptables -A INPUT -p tcp -s 192.168.1.50(改为允许的内网IP即可) -j ACCEPT
要封停一个IP,使用下面这条命令
命令:iptables -I INPUT -s...-j DROP
要解封一个IP,使用下面这条命令
命令:iptables -D INPUT -s...-j DROP
删除某个已有规则
要删除规则那么我们就需要先将所有iptables规则以序号标记显示,执行:
命令:iptables -L -n --line-numbers
比如要删除INPUT里序号为8的规则,执行:
命令:iptables -D INPUT 8
例子:完整的设置脚本
#!/bin/sh
#查看iptables现有规则 iptables -L -n
#先允许所有,不然有可能会杯具 iptables -P INPUT ACCEPT
#清空所有默认规则 iptables -F
#清空所有自定义规则 iptables -X
#所有计数器归0 iptables -Z
#允许来自于lo接口的数据包(本地访问) iptables -A INPUT -i lo -j ACCEPT
#开放22端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#开放21端口(FTP) iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#开放80端口(HTTP) iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#开放443端口(HTTPS) iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#允许ping iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#允许接受本机请求之后的返回数据 RELATED,是为FTP设置的 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#其他入站一律丢弃 iptables -P INPUT DROP
#所有出站一律绿灯 iptables -P OUTPUT ACCEPT
#所有转发一律丢弃 iptables -P FORWARD DROP
#保存 service iptables save
#重启动serv systemctl restart iptables.service