iptables表规则
-
链上规则的次序,即为检查的次序
同类规则(访问同一应用),匹配范围小的放上面;
不同类规则(访问不同应用),匹配到报文频率较大的放上面;
将那些可由一条规则描述的多个规则合并为一个;
设置的默认策略(policy); -
规则
规则由匹配条件和处理动作组成。
匹配条件一般为协议、源地址、目的地址、源端口、目的端口;还有一些扩展条件,但需使用内核扩展模块。
处理动作:一般有内置动作和自定义动作。在iptables中,动作一般称之为target。
内置动作:ACCEPT、DROP、REJECT、LOG、QUEUE、RETURN、REDIRECT、MARK、DNAT、SNAT、MASQUERADE -
内置动作详解
ACCEPT:接收数据包
DROP:丢弃数据包,不响应
REJECT:拒绝数据包,返回拒绝消息
LOG:记录日志信息,用于定位错误信息
RETURN:停止执行当前链中的后续规则,并返回到调用链 (父链)执行
REDIRECT:重定向
MARK:内核标记数据包,不影响实际包内容
DNAT:目的地址转换
SNAT:源地址转换
MASQUERADE:地址伪装,SNAT一种方式,动态IP。
TTL:修改time to live 的值
TOS:设置IP 头中的Type of Service 字段
iptables命令
-
常见命令
帮助命令:iptables –h
查看规则命令: iptables -t nat -nvL #查看nat表的所有链规则详细信息
查看规则命令: iptables -t filter -nvL FORWARD #查看filter表的FORWARD链规则详细信息
改变FORWARD链默认策略为DROP:iptables -t filter -P FORWARD DROP
INPUT链末尾添加规则:iptables -A INPUT --dport 80 -j DROP
INPUT链第一规则前插入规则: iptables -I INPUT 1 --dport 80 -j ACCEPT
删除INPUT链规则:iptables –D INPUT --dport 80 -j DROP
删除INPUT链第1条规则: iptables –D INPUT 1
清空INPUT链默认表filtre规则:iptables -F INPUT
清空iptables默认filter表的规则: iptables -F
新建自定义链,不指定表时默认为filter表:iptables -N test_chain
nat表新建自定义链: iptables -t nat -N testchain -
命令OPTIONS
(1)添加规则时的Option匹配之通用匹配:
1 | IPv4/ipv6: -4 -6 |
(2)添加规则时的Option匹配之隐式匹配:
1 | 匹配tcp包端口:iptables -A INPUT -p tcp --sport 22 (UDP端口匹配同理) |
(3)添加规则时的Option匹配之显式匹配:
1 | 匹配包数率Limit:iptables -A INPUT -m limit --limit 3/second |
- 命令实例
Jumps/Targets:这个参数对应了我们iptables规则匹配到数据包之后,需要对数据包执行的动作。
这个动作包括:跳转到自定义子链中继续匹配或执行规则默认动作( ACCEPT 、DROP等)
规则实例1:DNAT,在PREROUTING链实现nat功能
1 | iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 –dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10 |
实例2:SNAT,在POSTROUTING链实现nat功能
1 | iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 |
实例3: MASQUERADE ,在POSTROUTING链实现nat功能
1 | iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE |
实例4:ACCEPT,在INPUT链的子链上实现filter功能
1 | iptables -t filter -I aclblock 1 -p icmp -i !br0 -j ACCEPT |
实例5:DROP,在INPUT链实现filter功能
1 | iptables -t filter -I aclblock 1 -p tcp --sport 21 -i br0 -j DROP |
启用iptables规则
以下以centos系统为例
- Centos6
1 | 查看防火墙运行状态:service iptables status |
iptabels配置文件路径
1 | /etc/sysconfig/iptables |
终端中手动输入iptables规则命令,然后使用如下命令保存至iptables文件中
1 | service iptables save |
- Centos7
centos7中默认使用防火墙firewall,而不再是iptables过滤数据包
1 | 帮助命令:firewall-cmd -h |
若想重新启用iptables;安装iptables服务
1 | yum -y install iptables-service |
禁用firewall
1 | systemctl stop firewalld.service |
启用iptables
1 | systemctl start iptables |