一、iptables防火墙工作原理
规则表:
具有某一类相似用途的防火墙规则
规则表是规则链的集合
默认的4个规则表
raw表:确定是否对该数据包进行状态跟踪(用的不多)
mangle表:为数据包设置标记(用的不多)
nat表:修改数据包中源,目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
规则链:
根据处理时机不同,各种规则被组织在不同的链中
规则链是防火墙规则/策略的集合
默认的5个规则链
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包
POSTROUTING:在进行路由选择后处理数据包
PREROUTING:在进行路由选择前处理数据包
处理规则:
规则表的优先顺序
依次为:raw、mangle、nat、filter
规则链间的匹配顺序
入站顺序:PREROUTIN、INPUT【主机防火墙会用到】
出站顺序:OUTPUT、POSTOUTING【主机防火墙会用到】
转发数据:PREROUTING、FORWARD、POSTROUTING【网关防火墙】
规则链内的匹配顺序
> 按顺序依次进行检查、找到匹配的规则即停止(log策略会有例外)
> 若在该链内找不到相匹配的规则、则按该链的默认策略处理
主机型防火墙(单网卡)包处理过程
网关型防火墙(双网卡)包处理过程
二、iptables防火墙基本语法
iptables命令的语法格式:
iptables [-t 表名/小写] 管理选项/大写 [链名/大写] [匹配条件/小写] [-j 目标动作或跳转/大写]
几个注意事项:
> 不指定表名时,默认表示filter表
> 不指定链名时,默认表示该表内所有链
> 必须要指定匹配条件(除非设置规则链的缺省策略)
iptables的常见选项及条件:
iptables的常见数据包处理方式:
iptables命令示例:
# 在filter表中input链中指定tcp通过
iptables -t filter -A INPUT -p tcp -j ACCEPT
# 没有指定表,默认过滤表,在input链中增加策略udp通过
iptables -I INPUT -p udp -j ACCEPT
# 没有指定表,默认过滤表,在input链中第二条增加策略icmp通过
iptables -I INPUT 2 -p icmp -j ACCEPT
# 没有指定表,默认过滤表,在input链中默认策略丢弃
iptables -p INPUT DROP
# 没有指定表,默认过滤表,列出input所有策略条目 --line-numbers 策略前面带上序号
iptables -L INPUT --line-numbers
# 没有指定表,默认过滤表,删除input链中第二条策略
iptables -D INPUT 2
# 没有指定表,默认过滤表,清除过滤表所有策略
iptables -F
# 清除nat表所有策略
iptables -t nat -F
三、iptables防火墙应用案例
SNAT:
# 访问外部服务器将本机地址192.168.10.0/24转化为 202.100.10.1
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 202.100.10.1
# 进行地址伪装
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ppp0 -j MASQUERADE
DNAT:
# 对外部网关将202.100.10.1转化为192.168.10.2 【目标地址转换】
iptables -t nat -A PREROUTING -i eth2 -d 202.100.10.1 -p tcp -dport 80 -j DNAT --to-destination 192.168.10.2
iptables -t nat -A PREROUTING -i eth2 -d 202.100.10.1 -p tcp -dport 443 -j DNAT --to-destination 192.168.10.2
SSH远程访问:
> 网关策略
iptables -t nat -A PREROUTING -i eth2 -d 202.100.10.1 -p tcp -dport 2222 -j DNAT --to-destination 192.168.10.2:22
ssh远程登录: ssh -p 2222 root@202.100.10.1
> web服务器策略
允许内网服务器ping通外网,禁止外网ping内网服务器
iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP
iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
拒绝telnet登录:
iptables -t filter -I INPUT -p tcp -dport 23 -j REJECT
常用命令
iptables -nL INPUT --line-numbers
iptables -P INPUT DROP
iptables -P INPUT ACCEP
iptables -A INPUT -s 192.168.244.1 -j ACCEPT