iptables防火墙是Linux系统的一个防火墙管理工具,位于/usr/sbin/iptables,通过使用内核的netfilter模块来实现防火墙功能
语法: iptables [-t 表名] 命令选项 [链名] [范围条件] [-j 动作]
表名:
常用的表是filter表和nat表,在不指定表的情况下,默认为filter表
- filter #用于实现包过滤,内核模块:iptables_filter,关联链:INPUT、FORWARD、OUTPUT
- nat #用于网络地址转换,内核模块:iptables_nat,关联链:PREROUTING、POSTROUTING、OUTPUT
- mangle #用于包重构(修改),修改数据包服务类型、TTL、配置路由实现QOS,内核模块:iptables_mangle,关联链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
- raw #用于数据跟踪处理,关联链:OUTPUT、PREROUTING
命令选项:
- -A:在指定链末尾新增一条规则
- -I(大写i):在指定链中指定位置插入一条规则,默认在第一条规则前插入
- -N:创建用户自定义链
- -R:修改/替换指定链中的指定序号或内容的规则
- -D:在指定链中删除规则
- -F:在指定链中删除所有规则
- -X:删除用户自定义链
- -L:列出指定链中所有规则
- -C:检查规则是否在指定链中
- -P:修改链的默认设置
- -E:重命名用户自定义的链,不改变链本身
- -Z:将所有表的所有链的字节和数据包计数器清零
链名:
- INPUT #进入的数据包应用此链中的规则
- FORWARD #转发的数据包应用此链中的规则
- OUTPUT #流出的数据包应用此链中的规则
- PREROUTING #对数据包作路由选择前应用此链中的规则,所有数据包进入前都会经过PREROUTING链处理
- POSTROUTING #对数据包作路由选择后应用此链中的规则,所有数据包流出前都会经过POSTROUTING链处理
范围条件:
所有范围条件都可以加!进行取反操作
- -p #指定协议:tcp、udp、icmp、all
- -s #指定源地址或地址段(例:192.168.1.1或192.168.0.0/24)
- -d #指定目的地址或地址的
- -i #指定进入的网卡接口名称
- -o #指定流出的网卡接口名称
- --sport #指定源端口号或端口号范围(例:80或31337:31340)
- --dport #指定目的端口号或端口范围
动作:
- ACCEPT #允许数据包通过
- DROP #直接丢弃数据包,不回应任何消息
- REJECT #拒绝数据包通过,发送拒绝消息
- LOG #在/var/log/messages文件中记录日志,转发给下一条规则
规则表之间的优先顺序:
raw>mangle>nat>filter
iptables数据包传输过程
数据包进入后经过PREROUTING链处理,内核根据目的ip判断数据包是否转发,如果转发就转到FORWARD链进行处理,处理好到达POSTROUTING链处理后流出。不转发就进入INPUT链处理,处理后到OUTPUT链处理,再到POSTROUTING链处理后流出
iptables数据包传输过程
iptables规则执行顺序
在每个链的规则中,按序号从低到高的顺序执行,例:INPUT链中有3条规则,序号是1、2、3,如果匹配到序号1的规则,则后续该链中的规则都会跳过,进入下一个链中
列出规则
iptables -nvL #详细列出所有链中的规则
iptables -nvL INPUT #详细列出指定链中的所有规则
iptables -nvL INPUT --line-number #详细列出指定链中所有规则,并显示规则序号
iptables -t nat -nvL #详细列出nat表中的所有规则
添加规则
iptables -A INPUT -p tcp --dport 80 -s 192.168.1.1 -j DROP #丢弃来自192.168.1.1使用tcp协议到80端口的所有数据包,指定端口前需要先指定协议
iptables -A INPUT -s 192.168.1.1 -j DROP #丢弃来自192.168.1.1的所有数据包
iptables -I INPUT 1 -s 192.168.1.1 -j ACCEPT #在INPUT链第一条的位置插入该规则,允许来自192.168.1.1的数据包通过
修改规则
原规则
iptalbes -I INPUT 1 -s 192.168.1.1 -j ACCEPT #允许来自192.168.1.1的所有数据包进入
iptables -I INPUT 1 -p tcp --dport 80 -s 192.168.1.1 -j DROP #丢弃来自192.168.1.1的80端口的数据包
修改后规则
iptables -R INPUT 2 -s 192.168.1.1 -j DROP #修改INPUT链第2条规则,丢弃来自192.168.1.1的所有数据包
iptables -R INPUT 1 -p tcp --dport 80 -s 192.168.1.1 -j ACCEPT #修改INPUT链第1条规则,允许192.168.1.1访问80端口
# 也可以通过删除原规则,在原来位置插入新规则
修改链的默认策略
#链的初始策略为允许,可以用-L参数查看链的默认策略。策略为允许时要添加拒绝的规则,策略为拒绝时就要添加允许的规则
iptables -P INPUT DROR #设置INPUT链的默认策略为丢弃
iptables -P FORWARD DROP #设置FORWARD链的默认策略为丢弃
删除规则
iptables -D INPUT 1 #删除指定链中的第1条规则
iptables -D INPUT -s 192.168.1.1 -j DROP #删除指定链中匹配的范围条件规则
iptables -F INPUT #删除指定链中的所有规则
iptables -t filter -F #删除指定表中的所有规则,谨慎使用!
禁止其他主机ping服务器,服务器可以ping其他主机
iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT
防火墙规则保存
service iptables save #自动保存防火墙规则
或
iptables-save > /etc/sysconfig/iptables
未完待续…….