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
2
3
4
5
6IPv4/ipv6: -4 -6
协议类型tcp/udp/icmp: -p tcp
源地址:-s 192.168.100.1/32 或者 192.168.0.0/255.255.0.0
目的地址:-d 192.168.1.1 (参考源地址)
匹配进入的接口:-i eth0
匹配出去接口:-o ppp0(2)添加规则时的Option匹配之隐式匹配:
1
2
3匹配tcp包端口:iptables -A INPUT -p tcp --sport 22 (UDP端口匹配同理)
匹配tcp标记:iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
ICMP type匹配: iptables –A INPUT –p icmp --icmp-type 8(3)添加规则时的Option匹配之显式匹配:
1
2
3
4
5
6
7
8
9匹配包数率Limit:iptables -A INPUT -m limit --limit 3/second
匹配包源/目的MAC:iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
Mark标记: iptables -t mangle -A INPUT -m mark --mark 1
Multiport多端口:iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110(参考源地址)
Owner匹配,用户ID、组ID、进程ID、会话ID:iptables -A OUTPUT -m owner --pid-owner 78
State:iptables -A INPUT -m state --state RELATED,ESTABLISHED
TOS:iptables -A INPUT -p tcp --sport 22 (UDP端口匹配同理)
TTL:iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
ICMP type匹配: iptables –A INPUT –p icmp --icmp-type 8命令实例
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系统为例
- Centos6iptabels配置文件路径
1
2
3
4查看防火墙运行状态:service iptables status
停止/启动防火墙:service iptables stop/start
开机自启动/关闭(永久关闭):chkconfig iptables on/off
重启生效:service iptables restart终端中手动输入iptables规则命令,然后使用如下命令保存至iptables文件中1
/etc/sysconfig/iptables
1
service iptables save
- Centos7
centos7中默认使用防火墙firewall,而不再是iptables过滤数据包若想重新启用iptables;安装iptables服务1
2
3
4
5
6帮助命令:firewall-cmd -h
查看防火墙运行状态:firewall-cmd --state
查看开放的端口: firewall-cmd --list-port
开放指定端口:firewall-cmd --add-port=8000/tcp –permanent #permanent永久生效
配置生效:firewall-cmd --reload
查看所有:firewall-cmd --list-all禁用firewall1
yum -y install iptables-service
启用iptables1
2systemctl stop firewalld.service
systemctl disable firewalld.service1
2systemctl start iptables
systemctl enable iptables