防火墙
iptables 是建立在 netfilter 架构基础上的一个包过滤管理工具。
用户通过 /sbin/iptables 命令来管理 iptables,和 route 命令相同,iptables 命令的效果在重新启动以后就不再有效。
可以使用 /etc/rc.d/init.d/iptables save 将当前 iptables 规则写到 /etc/sysconfig/iptables 文件中,那么每次开机时/etc/rc.d/init.d/iptables start 命令会使 /etc/sysconfig/iptables 中的规则生效
iptables构成
iptables 是由几张表所组成,每张表又由几条链组成,每张表负责不同的封包处理机制,每条链负责不同的封包走向,具体采取的策略由链里的规则设定
- filter 表: 包含真正的防火墙过滤规则,用于过滤包
- INPUT 链: 存在于 filter 表,主要用于处理进入本机的包
- OUTPUT 链: 存在于 filter 表,主要用于处理离开本机的包
- FORWARD 链: 存在于 fileter 表,主要用于处理穿过本机的包
- Nat 表 : 包含源和目的地址及端口转换使用的规则,用于做地址转换
- PREROUTING 链: 存在于 nat 表,主要用于在包刚刚到达防火墙时改变目的地址(DNAT)
- POSTROUTING 链: 存在于 nat 表,主要用于在包就要离开防火墙之前修改来源地址(SNAT)
- OUTPUT链:存在于nat表,主要用于改变本地产生的包的目的地址
- mangle 表: 允许改变包的内容来进一步矫正包,主要用于给数据包打标记,这些标记会被filter表中的规则检查
iptebles 配置文件在/etc/sysconfig/iptables
1 2 3 4 5 6 7 8
| #配置保存命令 service iptables save # 启动 service iptables start # 停止 service iptables stop # 重启 service iptables restart
|
iptables 的标准语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| # table 指定表名 # NAT 和一般的 mangle 用 -t 参数指定要操作哪个表。filter 是默认的表,如果没有 -t 参数,就默认对filter 表操作 # chain 链名 # rules 规则 # target 动作如何进行 iptables [-t table] <-A|I|D|R>chain [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [--sport 源端口号] [-d 目标ip地址|目标子网] [--dport 目标端口号] <-j 动作>
如: 设置 INPUT 规则,将所有基于 icmp 协议的数据包全部丢弃 iptables -A INPUT -p icmp -j DROP 对链的操作的option有 -L 列出当前的 iptables 的规则 -vnL 列出所有 iptables 相关规则的详细参数 -A 追加一条规则(默认添加道最后) -I 插入一条规则 -D 删除一条规则 -P 设置某条链的默认规则 -F 清空规则 如:追加一条 INPUT 记录,将源目的地址为 200.200.200.200 的数据包丢弃 iptables -A INPUT -s 200.200.200.200 -j DROP
规则的操作命令 按网络接口匹配 -i eth0 匹配数据进入的网络端口 -o eth0 匹配数据流出的网络端口 按来源目的地址匹配 -s ip 匹配来源 IP -d ip 匹配目的 IP 例: 在 INPUT 链里追加一条规则,所有从 eth0 口进入的源地址为 200.200.200.200 的数据包全部丢弃 iptables -A INPUT -i eth0 –s 200.200.200.200 –j DROP
在 INPUT 链里追加一条规则,所有源地址为 200.200.200.200 的基于 tcp 协议的数据包允许通过 按来源目的端口匹配 --sport 来源端口 --dport 目的端口 例: 在 INPUT 链里追加一条规则,所有基于 TCP 的源端口为 21 号端口的数据包,全部丢弃。 iptables -A INPUT -p tcp -sport 21 -j DROP
动作处理 -j 动作 ACCEPT 接收数据包 DROP 丢弃数据包 REDIRECT 将数据包重定向到本机或另一台主机的某个端口,通常能实现透明代理或对外开放内网的某个服务 REJECT 拦截该数据封包,并发回封包通知对方 SNAT 源地址转换,即改变数据包的源地址,在NAT表的POSTROUTING链上进行该操作 DNAT 目的地址转换,即改变数据包的目的地址,在NAT表PREROUTING链上进行该动作 MASQUERADE ip伪装,只能用于ADSL等拨号上网的IP伪装(也就是主机的IP是由ISP动态分配的),如果主机的IP地址是静态固定的,就要使用SNAT LOG 日志功能,降负荷规则的数据包相关信息记录下来
|
定义默认策略
1
| # iptables [-t table] <-P> <chain> <动作>
|
查看iptables规则
1 2
| # iptables [-t table] <-L> [chain] iptables -nv -L
|