防火墙:在数据包经过的位置设置某些规则,决定数据包的走向。
网关防火墙:主要作用于数据包转发、IP地址转换(DNAT、SNAT)、INPUT防御
单击防火墙:主要作用于INPUT链点,自我保护
重要知识点:四表五链—-数据包的行走规则,防御规则
五个链点即三种走法:

四个功能实现表:
filter:用于实现数据包过滤功能。作用链点:INPUT、OUTPUT、FORWARD
nat:用于实现网络地址转换功能。作用链点:PREROUTING、POSTROUTING、OUTPUT
raw:作用链点:PREROUTING、OUTPUT
mangle:实现统计功能。作用链点:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
使用
主要语法: iptables [-t table] command 检查点 [match] -j [target/jump]
例一: iptables -P INPUT -j DROP
例二: iptables -t filter -A INPUT -s 192.168.1.0/24 -j ACCPET
选择表部分:
-t 操作表(nat/filter/raw/mangle)
常用command部分:
-A –append 在所选规则链的末尾添加规则
-L –list 显示所有规则链的所有规则
-D –delete 删除规则链中的某条规则
例:查看规则序号–iptables -L -n –list
iptables —D INPUT 1(删除INPUT的第一条规则)
-P –policy 制定某个链点的总策略
-F –flush 清除所选链点的所有规则
-Z –zero 清除所选链点的计数器
-X –delete-chain 删除用户自定义的规则链
常用的match部分,设置数据包的处理方式:
-p 装载协议(tcp/udp/icmp)
–sport/dport 源端口/目标端口(此选项一定要配合 [-p 传输协议] 使用,否则无效)
–icmp-type ping包类型(0:应答型的ping包,8:请求型的ping包)
-i 网卡名称(指定从该网卡进入的数据包)
-o 网卡名称(指定从该网卡出去的数据包)
-s 源IP地址
-d 目标IP地址
其他功能模块
为了使iptables能够更好地服务计算机,在基础模块上,引入了很多其他功能模块,需要使用[-m]作为前置,表示开始加载其他模块。
限制单位时间内进入数据包的数量1
2
3
4
5
6-m limit --limit num/(s,m,h) --limit-burst num1
--limit:表示单位时间(s,m,h)内产生num个通行证
--limit-burst:表示能够存在通行证的最大数量
注:两个子选项可配合使用
例子--最大的能通过ping数据包数量为10个,当小于10个的时候每10秒钟产生一个ping数据包通行证
iptables -t filter -A INPUT -p icmp -m limit --limit 6/m --limit-burst 10 -j ACCEPT
判断数据包类型的模块1
2
3
4
5-m state --state INVALID / ESTABLISHED / NEW / RELATED
INVALID:无效状态,数据包损坏
EATABLISHED:已经完成建立连接并且有效的数据包
NEW:新建立链接的数据包
RELATED:在完成建立连接的基础上,产生一个新的连接
时间模块1
2
3
4-m time --timestart 开始时间 --timestop 结束时间
例子:在下午两点到四点不允许任何包经过forward检查点
iptables -t filter -A FORWARD -m time --timestart 8:00 --timestop 10:00 -j DROP
注:中国位于东8区,即比时间标准时钟快了8小时,linux采用时间标准时钟作为检查,所以应该实行减8操作
字符配置模块1
2
3
4-m string --algo kmp|bm --string "STRING"
--algo kmp|bm : 有kmp/bm两种算法供选择,实现字符串匹配
例子:在下午两点到四点不允许访问 taobao 的包经过forward检查点
iptables -t filter -A FORWARD -m time --timestart 8:00 --timestop 10:00 -m string --algo kmp --string "taobao" -j DROP
recent模块—限制连接次数,一般用于防范暴力破解1
2
3
4
5例子:对连接到本机的SSH连接进行限制,每个IP每小时只限连接5次。
iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 3600 --hitcount 5 -j DROP
iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT
注:第一条规则有检查作用;第二条规则是为新IP做一个记录
选择策略(-j [target/jump])
-j ACCEPT:接受,放行
-j DROP:丢弃,不回应
-j REJECT:拒接。回复拒绝信息1
2
3
4
5
6可以设置提示信息:
--reject-with 选项,当对方被拒绝时,会提示对方为什么被拒绝。
可用值如下
icmp-net-unreachable icmp-host-unreachable icmp-port-unreachable icmp-proto-unreachable
icmp-net-prohibited icmp-host-pro-hibited icmp-admin-prohibited
当不设置任何值时,默认值为icmp-port-unreachable。
-j RETURN:返回
-j DNAT:目标地址转换—–一般用于内网访问1
例子:iptables -t nat -A PREROUTING -p tcp --dport 430 -d -j DNAT --to 192.168.1.4:80(后面可附加端口,实现端口转换)
-j SNAT:目标地址转换1
例子:iptables -t nat -A POSTROUTING -p tcp --dport 80 -d -j SNAT --to 10.1.1.1
-j MASQUERADE:地址伪装—–实现功能类型于SNAT,不过更加自动化,但是也更加消耗资源1
2
3iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o ppp0 -j SNAT --to 202.96.111.14 ##网卡的外网IP
等同于
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o ppp0 -j MASQUERADE ##ppp0 接公网。
-j REDIRECT:内部端口重定向—-一般可以直接用DNAT功能实现1
例子:iptables -t nat -A PREROUTING -d 10.1.1.1 --dport 80 -j REDIRECT --to 3128
-j LOG:把日志信息重定向输出1
2
3
4
5
6
7例子: 把从ens33网卡进入想连接sshd服务的信息重定向记录
iptables -t filter -A INPUT -i ens33 -p tcp --dport 22 -m state --state NEW -j LOG
此操作需要修改内核:
#vim /etc/rsyslog.conf
在最后添加:
kern.warning /var/log/iptables.log(重定向目标文件)
重启服务:service rsyslog restart
最后更新: 2019年10月05日 10:07