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

未完待续…….