表中有链,链中有规则
raw:主要用来决定是否对数据包进行状态跟踪 包含两个规则链,OUTPUT、PREROUTING
mangle : 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING
nat:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
filter:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个链,即INPUT、FORWARD、 OUTPUT
INPUT: 处理入站数据包,匹配目标IP为本机的数据包。
OUTPUT: 处理出站数据包
FORWARD: 处理转发数据包,匹配流经本机的数据包。
PREROUTING链: 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。
相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。
POSTROUTING链: 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。
相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。
Centos 7默认使用firewalld防火墙,没有安装iptables, 若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables
使用前要把firewalld服务关闭
systemctl stop firewalld.service
systemctl disable firewalld.service
yum -y install iptables iptables-services
systemctl enable --now iptables.service #开机自启,并现在启动
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
-s 原地址 单个地址
-d 目的地址 同上
-p 指定协议,icmp tcp udp ipv6
-i 数据从哪网口进来
-o 数据从哪个口出去
-j 跳转
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给出任何回应消息
REJECT 拒绝数据包通过,会给数据发送端一个响应信息
SNAT 修改数据包的源地址
DNAT 修改数据包的目的地址
MASQUERADE 伪装成—个非固定公网IP地址
LoG 在/varlog/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助
动作,并没有真正处理数据包
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
iptables -vnL #查看规则表,不指定 默认filter表
iptables -t nat -vnL #查看nat表规则
表内的规则从上到下执行
iptables -t filter -A INPUT -p icmp -j REJECT
## 禁止icmp协议入站,本机的ping也被禁止
iptables -A INPUT -s 192.168.88.128 -j REJECT
ptables -R INPUT 1 -s 192.168.88.128 -j ACCEPT
## 替换上面的规则,注意加行号 -R
iptables -D INPUT 1 #删除指定行
iptables -D INPUT -p icmp -j DROP
#将含有icmp协议使用DROP类型的规则删除
iptables [-t 表] -F
## 不指定,默认清空filter表
iptables -P INPUT DROP
#默认规则设置为DROP
设置后默认不通过所有访问
iptables-save > /data/iptables.bak ##备份
iptables-restore < /data/iprule ##还原
可以把还原文件写到
/etc/rc.d/rc.local ; chmod +x /etc/rc.d/rc.local
或者 ~/.bashrc
开机自动执行
iptables -A INPUT -s 192.168.91.101 -p icmp --icmp-type 8 -j REJECT
##上面禁止icmp,导致本机的ping不可用
拒绝icmp的请求包,这样可以保证本机ping的使用
拒绝icmp的请求包,可以保证本机ping的使用
iptables -I INPUT 2 -s 192.168.88.128 -p tcp --dport 80 -j REJECT
## 2表示插入在第二行 禁止128访问目标主机的80端口
这种方式相比较默认规则,清空不会影响连接
iptables -A INPUT -s 192.168.88.128 -j ACCEPT
iptables -A INPUT -j REJECT
# 手动白名单 最后加上拒绝所有
想设置允许访问机器在iptables -A INPUT -j REJECT 前插入
iptables -A INPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "www.baidu.com" -j REJECT
##限制有www.baidu.com字段的通过
##也可以在服务端的出口限制字段
状态类型:
NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
INVALID:无效的连接,如flag标记不正确
UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
ipatables -A INPUT -m state --state NEW -j REJECT
ipatables -A INPUT -m state --state ESTABLISHED -j ACCEPT
##新用户不可以访问 老用户可以访问
安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高
谨慎放行入站的新请求
有特殊目的限制访问功能,要在放行规则之前加以拒绝
同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理
不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高
应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率
设置默认策略,建议白名单(只放行特定连接)
A:iptables -F,不建议,容易出现“自杀现象”
B:规则的最后定义规则做为默认策略,推荐使用,放在最后一条