CentOS7 默认的防火墙不是 iptables, 而是 firewalle.
安装 iptable iptable-service
# 先检查是否安装了 iptables service iptables status # 安装 iptables yum install -y iptables # 升级 iptables yum update iptables # 安装 iptables-services yum install iptables-services
禁用 / 停止自带的 firewalld 服务
# 停止 firewalld 服务 systemctl stop firewalld # 禁用 firewalld 服务 systemctl mask firewalld
设置现有规则
# 查看 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
其他规则设定
# 如果要添加内网 ip 信任(接受其所有 TCP 请求) iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT # 过滤所有非以上规则的请求 iptables -P INPUT DROP # 要封停一个 IP ,使用下面这条命令: iptables -I INPUT -s ***.***.***.*** -j DROP # 要解封一个 IP ,使用下面这条命令 : iptables -D INPUT -s ***.***.***.*** -j DROP
保存规则设定
# 保存上述规则 service iptables save
开启 iptables 服务
# 注册 iptables 服务 # 相当于以前的 chkconfig iptables on systemctl enable iptables.service # 开启服务 systemctl start iptables.service # 查看状态 systemctl status iptables.service
解决 vsftpd 在 iptables 开启后 , 无法使用被动模式的问题
1. 首先在 /etc/sysconfig/iptables-config 中修改或者添加以下内容
# 添加以下内容 , 注意顺序不能调换 IPTABLES_MODULES="ip_conntrack_ftp" IPTABLES_MODULES="ip_nat_ftp"
2. 重新设置 iptables 设置
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
以下为完整设置脚本
#!/bin/sh iptables -P INPUT ACCEPT iptables -F iptables -X iptables -Z iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT 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 systemctl restart iptables.service