iptables防火墙
iptables是Linux内核自带的一个功能强大的防火墙工具。
基础概念
表(Tables)
iptables中的规则被组织在不同的表中,每个表负责不同类型的数据包处理:
filter:默认表,用于过滤数据包。(一般设置防火墙都在这个表中添加)
nat:用于网络地址转换。
链(Chains)
每张表包含若干预定义的链,用来指定规则匹配的数据包方向:
INPUT:针对到达本机的数据包(输入数据)。
OUTPUT:针对从本机发出的数据包(输出数据)。
FORWARD:针对通过本机转发的数据包(如果本机作为路由器)。
默认的链为允许的状态,在链上添加完规则后,要在后面禁用所有流量。注意在规则最后面。
目标(Targets)
当一个规则匹配时,可以执行的动作:
ACCEPT:允许数据包通过。
DROP:丢弃数据包。
REJECT:拒绝数据包,并发送错误消息回源。
LOG:记录日志,但不决定是否允许该数据包。
常用操作
查看当前规则
iptables -L -v
这将列出所有链上的规则及其详细信息
清空所有防火墙规则
iptables -F
添加规则
添加一条允许来自某个特定IP的所有流量的规则到INPUT链
iptables -A INPUT -s -j ACCEPT
-s来源ip
添加入站链协议为tcp 端口为允许的规则。
iptables -A INPUT -p tcp --dport -j ACCEPT
-p tcp:指定协议为 TCP。
--dport :流量通过的端口。
-j ACCEPT:表示如果数据包匹配这条规则,就接受该数据包。
删除规则
找到对应规则后自动删除
iptables -D INPUT -s -j ACCEPT
iptables -D INPUT -p tcp --dport -j ACCEPT
删除入站链协议为tcp到端口为允许的规则
插入规则
插入规则到链的开头
iptables -I INPUT -s -j ACCEPT
iptables -I INPUT 1 -p tcp --dport -j ACCEPT
在入站链第一个位置插入协议为tcp到端口为允许的规则
开发端口
iptables -A INPUT -p tcp --dport -j ACCEPT
拒绝端口
iptables -A INPUT -p tcp --dport -j REJECT
允许本地回环接口的流量
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
拒绝某个IP地址的连接
iptables -A INPUT -s -j DROP
拒绝所有流量
/sbin/iptables -A INPUT -j DROP
保存规则
规则不会自动保存,重启会丢失。可以通过以下命令手动保存:
sh -c "iptables-save > /etc/iptables/rules"
恢复规则
iptables-restore < /etc/iptables/rules
设置默认策略
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
启动停止开机启动
启动
iptables-restore < /etc/iptables/rules
停止
iptables -F
开机启动
新版本的centos没有加入服务,需要在这个文件中添加sh执行脚本的命令来启动防火墙。
vi /etc/rc.d/rc.local
/sbin/iptables-restore < /etc/iptables/rules
前提是将iptable的规则保存到/etc/iptables/rules
chmod +x /etc/rc.d/rc.local
确保 rc-local.service 已启用(某些系统需要这一步)
systemctl enable rc-local
脚本
#!/bin/bash
#清空所有现有规则
iptables -F
#允许本地回环接口流量
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#允许SSH
iptables -A INPUT -p tcp --dport -j ACCEPT
#允许HTTP和HTTPS
iptables -A INPUT -p tcp --dport -j ACCEPT
iptables -A INPUT -p tcp --dport -j ACCEPT
#拒绝所有
/sbin/iptables -A INPUT -j DROP