IPTABLES
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在linux内核中.数据包过滤表中,规则被分组放在我们所谓的链(chain)中.
iptables5个链
- INPUT:入站规则
- OUTPUT:出站规则
- FORWARD:转发规则
- PREROUTING:路由前规则
- POSTROUTING:路由后规则
规则链之间的顺序 - 入站:PREROUTING–>INPUT
- 出站:OUTPUT—>POSTROUTING
- 转发:PREROUTING—>FORWARD–>POSTROUTING
过滤匹配流程
- 规则链内匹配顺序
顺序比对,匹配即停止
若无任何匹配,则按该链的默认策略处理
基本用法
- 指令格式
iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作] - 注意事项
- 可以不指表,默认filter表
- 可以不指链,默认对应表的所有链
- 如果没有匹配规则,默认使用防火墙默认规则
- 选项/链名/目标操作用大写字母,其余都小写
目标操作
- ACCEPT:允许通行
- DROP:直接丢弃,不作出任何回应
- REJECT:拒绝通过,必要时给出提示
- LOG:记录日志,然后传给下一条规则(不遵循"匹配即停止")
常用管理选项
类别 | 选项 | 用途 |
---|---|---|
添加规则 | -A | 在链的尾部追加一条规则 |
----- | -I | 在链头(或指定序号)插入一条规则 |
查看规则 | -L | 列出所有规则条目 |
-n | 以数字形式显示地址,端口信息 | |
–line-numbers | 查看规则时,显示规则的序号 | |
删除规则 | -D | 删除链内指定序号(或内容)的一条规则 |
-F | 清空所有规则 | |
默认策略 | -P | 为指定链设置默认规则 |
过滤条件
类别 | 选项 | 用法 |
---|---|---|
通用匹配 | 协议匹配 | -p 协议名称 |
地址匹配 | -s 源地址,-d 目标地址 | |
接口匹配 | -i 接收数据的网卡,-o 发送数据的网卡 | |
隐含匹配 | 端口匹配 | –sport 源端口号,–dport 目标端口号 |
ICMP类型匹配 | –icmp-type ICMP类型(echo-reply,echo-request) |
iptables -nL //查看filter表中所有的规则
iptables -nL FORWARD //查看FORWARD链中的规则
iptables -t raw -nL --line-numbers //查看raw表中规则,及序号
iptables -t filter -P INPUT DROP //设置防火墙默认规则
iptables -t filter -F //清空filter表中的所有规则
iptables -t filter -F INPUT //清空filter表中INPUT链中的所有规则
iptables -t filter -D INPUT 序号 //选出第几条规则
iptables -I INPUT -p tcp -s 192.168.4.52 -j ACCEPT
// 插入规则到INPUT链的开头,允许192.168.4.52 使用tcp协议访问本机
iptables -I INPUT 2 -P icmp -j ACCEPT
//插入规则至表中INPUT链的第二行,允许任何人使用ICMP协议
iptables -A INPUT -p udp -j ACCEPT
//掺入规则至INPUT链尾,.......
iptables -I INPUT -i eth0 -p tcp --dport 80 -j REJECT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
//echo-replyPING包的返回包
iptables-save >/etc/sysconfig/iptables
//所有的规则都是临时规则,需要save保存才会永久生效
扩展条件
- 基本用法
-m 扩展模块 --扩展条件 条件值
iptables -A INPUT -m mac --mac-source 52:54:00:c4:44:f0 -j DROP
iptables -A INPUT -p tcp -m multiport --dport 20,22,25,80,110,16501:16800 -j ACCEPT
//16501:16800端口16501到16800
iptables -A INPUT -p tcp --dport 22 \
> -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT
//IP段
NAT表应用
目的:源地址为私有地址,服务器如何正确给出回应
1.DNAT:目标地址转换
2.SNAT:源地址转换
3.REDIRECT:重定向针对本机地转发
- 修改数据包源地址
- 仅用于nat表的POSTROUTING链
- 外部地址只能用DNAT
- 局域网共享公网IP上网
1>局域网设置默认网关
route add default gw 192.168.4.5
2>配置SNAT共享上网
echo 1 > /proc/sys/net/ipv4/ip_forward
//开启路由转发
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.2.5
//源地址转换
iptables -t nat -A PREROUTING -p tcp --dport 63306 -j DNAT --to-destination 192.168.1.2:3306
//路由前目标地址转化
iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 3306 -j SNAT --to 192.168.1.1
//路由后源地址转换
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 // 本机端口转发80转发到8080
保存
service iptables save
地址伪装策略
- 共享动态公网ip地址实现上网
–针对外网接口ip地址不固定的情况
–将SNAT改为MASQUERADE即可
–对于ADSL宽带拨号连接,网络接口可写为ppp+
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o eth1 -j MASQUERADE
//不用指定SNAT目标IP,不管eth1的出口获得怎样的动态ip,MASQUERADE会自动获取eth1的ip地址,然后SNAT转发出去