防火墙
防火墙其实是一个隔离工具,工作与主机或网络的边缘,对于进出本主机或者本网络的报文根据事先定义好的网络规则进行匹配检测。
防火墙分为网络防火墙和主机防火墙(也叫硬件防火墙)。从效果上来看,硬件防火墙效果远胜网络防火墙,但是有一个缺点,贵,硬件防火墙动不动几十万,使用门槛较高,因此网络防火墙依旧有着生存空间和价值。
iptables
iptables是一个规则管理工具,负责在5个钩子函数中进行增修改除等操作。
iptables基于内核运行,这个模块叫做netfilter。我们通过iptables配置规则,然后netfilter通过这些规则实现各种操作。
四表五链
表 | |
---|
filter | 过滤,防火墙 |
nat | network address translation,网络地址转换 |
mangle | 拆分报文,修改报文,封装报文 |
raw | 关闭nat表上启用的连接追踪机制 |
chain | 链 |
---|
PREROUTING | 进路由 |
INPUT | 进系统 |
FORWARD | 转发 |
OUTPUT | 出系统 |
POSTROUTING | 出路由 |
表就是存储的规则,数据包到了该链处,就去查询对应表中设置好的规则,根据规则执行操作。
表中的链 | |
---|
filter | INPUT FORWARD OUTPUT |
nat | PREROUTING OUTPUT INPUT POSTROUTING |
mangle | PREROUTING INPUT FORWARD OUTPUT POSTROUTING |
raw | PREROUTING OUTPUT |
iptables工具
| | |
---|
iptables -P | | 更改默认规则 |
iptables -t | tables | 指定表 |
iptables -L | list | 查看规则 |
iptables -n | number | 以数字形式查看 |
iptables -F | | 清除所有规则 |
iptables -X | | 清除用户自定义的链 |
iptables -j | target | 指定要执行的操作 |
iptables -A | append | 追加规则 |
iptables -I | insert | 插入规则 |
iptables -s | source | 指定源地址 |
iptables -d | destination | 指定目标地址 |
iptables -p | protocol | 指定协议 |
iptables --dport | | 指定目标端口 |
iptables --sport | | 指定源端口 |
iptables --line-num | | 显示规则行号 |
iptables -D | delete | 根据行号删除规则 |
iptables -i | in | 从指定网卡流入的报文 |
iptables -o | out | 从指定网卡流出的报文 |
iptables -m iprange --src-range | | 匹配字段范围 |
iptables -m string --algo bm --string " " | | 匹配报文中字符 |
| |
---|
ACCEPT | 接受 |
DROP | 丢弃 |
REJECT | 拒绝 |
DNAT | 目标地址转换 |
SNAT | 源地址转换 |
- 保存防火墙配置:iptables-save > file
- 加载防火墙配置:iptables-restore < file
#!/bin/bash
iptables -t filter -A INPUT -p tcp --dport 80 -j REJECT
iptables -t filter -A INPUT -s 192.168.10.0/24 -d 192.168.10.101 -p icmp -j DROP
iptables -t filter -A INPUT -s 192.168.10.102 -i ens33 -p icmp -j REJECT
iptables -A OUTPUT -m string --algo bm --string 'hello' -j DROP
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.10.101 -d 10.10.10.100 -j SNAT --to-source 10.10.10.1
iptables -t nat -A PREROUTING -s 10.10.10.100 -d 10.10.10.1 -j DNAT --to-destination 192.168.10.101