防火墙
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)
- mangle 表: 允许改变包的内容来进一步矫正包
iptebles 配置文件在/etc/sysconfig/iptables
#配置保存命令
service iptables save
# 启动
service iptables start
# 停止
service iptables stop
# 重启
service iptables restart
iptables 的配置
1、iptables 的标准语法
# table 指定表名
# NAT 和一般的 mangle 用 -t 参数指定要操作哪个表。filter 是默认的表,如果没有 -t 参数,就默认对filter 表操作
# chain 链名
# rules 规则
# target 动作如何进行
iptables [-t table] 命令 [chain] [rules] [-j target]
如:
设置 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 允许封包通过而不拦截
-j DROP 不允许封包通过