CentOS 7 系统默认的防火墙是 Filewalld。不过,现在应该还有很多用户习惯使用 iptables。本文以 CentOS 7 为例,说明在 CentOS 7 中如何安装并使用 iptables。

1. 禁用Filewalld

  • 1.1 SSH连接你的服务器实例
  • 1.2 查看 Filewalld 服务状态:systemctl status firewalld.service
  • 1.3 当服务处于 active 状态,运行以下命令关闭 Firewalld 服务:systemctl stop firewalld.service
  • 1.4 禁止 Filewalld 开机启动:systemctl disable firewalld.service

2. 安装 iptables

执行如下命令,安装iptables:

yum install iptables-services

3. 启动iptables

  • 3.1 启动 iptables:systemctl start iptables.service
  • 3.2 查看 iptables:systemctl status iptables.service
  • 3.3 设置 iptables 开机自启动:systemctl enable iptables.service(注意:如果出现这个错误提示:Failed to execute operation: No such file or directory,说明 iptables 版本过低)。
  • 3.4 重启 iptables:systemctl restart iptables.service

4. 使用iptables

4.1 备份规则
如果之前已经设置过规则,建议执行如下命令,备份原有的iptables文件,避免之前设置的规则丢失:
cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
4.2 清空已有规则
iptables -F
iptables -X
iptables -Z
4.3 根据业务需求添加规则,放行或者禁用端口

-A和-I参数分别为添加到规则末尾和规则最前面。

#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT

# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#允许访问443端口
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

#如果有其他端口的话,规则也类似,稍微修改上述语句就行

#允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT  #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT
4.4 屏蔽IP
#如果只是想屏蔽IP的话“3、开放指定的端口”部分设置可以直接跳过。
#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP

#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP

#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP

#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP
4.5 屏蔽或允许某IP访问指定端口
#屏蔽某IP访问指定端口,以22端口为例命令是
iptables -I INPUT -s 123.45.6.7 -p tcp --dport 22 -j DROP

#允许某IP访问指定端口,以22端口为例命令是
iptables -I INPUT -p tcp --dport 22 -j DROP
iptables -I INPUT -s 123.45.6.7 -p tcp --dport 22 -j ACCEPT
4.6 确认新规则是否生效
iptables -L -n

查看管理命令 “-L”的附加子命令:
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vvv :越多越详细
-x:在计数器上显示精确值,不做单位换算

4.7 保存添加的规则
service iptables save

参考

  • https://help.aliyun.com/knowledge_detail/41319.html?source=5176.11533457&userCode=r3yteowb&type=copy
  • https://www.vpser.net/security/linux-iptables.html