防火墙iptables相关指令及参数

一、概要

1. 防火墙分类
  • 包过滤防火墙(pack filtering)在网络层对数据包进行选择过滤,采用访问控制列表(Access control table-ACL)检查数据流的源地址,目的地址,源和目的端口,IP等信息。
  • 代理服务器型防火墙
2. iptables基础
  • 规则(rules):网络管理员预定义的条件
  • 链(chains): 是数据包传播的路径
  • 表(tables):内置4个表filter表,nat表,mangle表,raw表分别用于实现包过滤,网络地址转换,包重构和连接追踪机制的功能

二、指令及参数含义

1. iptables命令格式
iptables [-t 表] -命令 匹配 动作 (大小写敏感)
 iptables [-t 表名] <-A|I|D|R|L> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [--sport 源端口号] [-d 目的IP|目标子网] [--dport 目标端口号] [-j 动作]
2. 常用命令
  • -A 增加(append)
范例 iptables -A INPUT ...
说明 新增规则(追加方式)到某个规则链(这里是INPUT规则链)中,该规则将会成为规则链中的最后一条规则。
  • -I 插入(insert)
范例 iptables -I INPUT 1 --dport 80 -j ACCEPT
说明 插入一条规则,原本该位置(这里是位置1)上的规则将会往后移动一个顺位。
  • -D 删除(delete)
范例 iptables -D INPUT --dport 80 -j DROP
     iptables -D INPUT 1
说明 从某个规则链中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。
  • -R 替换(replace)
范例 iptables -R INPUT 1 -s 192.168.0.1 -j DROP
说明 取代现行规则,规则被取代后并不会改变顺序。(1是位置)
  • -L 查看(list)
范例 iptables -L INPUT
说明 列出某规则链中的所有规则。
  • -F 刷新(flush)
范例 iptables -F INPUT
说明 删除某规则链(这里是INPUT规则链)中的所有规则。
3. 常用动作
  • ACCEPT 接收数据包
iptables -p OUTPUT -j ACCEPT
  • DROP 丢弃数据包
 iptalbes -p INPUT -j DROP
  • REJECT 拒绝数据包通过
-A INPUT -j REJECT
  • REDIRECT 将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT
  • SNAT 源地址转换
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT
  • DNAT 目的地址转换
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT
  • MASQUERADE IP伪装
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE
  • LOG 日志功能
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
4. 匹配规则
  • -s 源端口(source)
iptables -t filter -I OUTPUT -s 192.168.1.111,192.168.1.118 -j DROP
  • -d 目的端口(destination)
iptables -t filter -I OUTPUT -d 192.168.1.111,192.168.1.118 -j DROP
  • -p 协议(protocol)
iptables -t filter -I INPUT -p tcp -s 192.168.1.146 -j ACCEPT
  • -i 入口网卡(in-interface)
iptables -t filter -I INPUT -p icmp -i eth0 -j DROP
  • -o 出口网卡(out-interface)
iptables -t filter -I INPUT -p icmp -o eth4 -j DROP
5. 拓展匹配条件(-m 指定拓展模块名称)
  • tcp
# 用于匹配tcp协议报文的源端口,可以使用冒号指定一个连续的端口范围
-p tcp -m tcp --sport
----
iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECT
----

# 用于匹配tcp协议报文的目标端口,可以使用冒号指定一个连续的端口范围
-p tcp -m tcp --dport 
----
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 80: -j REJECT
----
# 用于匹配报文的源端口,可以指定离散的多个端口号,端口之间用"逗号"隔开
-p tcp -m multiport --sports
----
iptables -t filter -I OUTPUT -d 192.168.1.146 -p udp -m multiport --sports 137,138 -j REJECT
----

# 用于匹配报文的目标端口,可以指定离散的多个端口号,端口之间用"逗号"隔开
-p udp -m multiport --dports 
----
iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m multiport --dports 22,80 -j REJECT
---- 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
  • state
    • NEW 连接中的第一个包
    • ESTABLISHED 连接已建立
    • RELATED 关系
    • INVALID 这个包没有任何状态
    • UNTRACKED 报文未被追踪
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

三、基础配置

*filter

# allow all connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# allow out traffic
-A OUTPUT -j ACCEPT

# allow http https
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT

# allow ssh port login
-A INPUT -p tcp -m state --state NEW --dport 39999 -j ACCEPT

# ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# log denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7

# drop incoming sensitive connections
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 150 -j DROP

# reject all other inbound
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

参考

朱双印iptables详解系列

linux下IPTABLES配置详解

linux中iptables配置文件及命令详解详解

猜你喜欢

转载自blog.csdn.net/qq_29088015/article/details/86527638