2017年2月16日星期四

Linux之Iptables防火墙管理与配置

基本语法格式:
iptables  [ –t 表名 ]  命令选项  [ 链名 ]  [ 条件匹配 ]  [ –j 目标动作或跳转 ]
Tip:若不指定表名,默认使用filter表。

常用选项:
-A:在指定链的末尾添加( –append )一条新规则。
-D:删除指定链中的某一条规则,按规则序号或内容确定要删除的规则
-I:在指定链中插入一条新规则,若不指定插入位置,默然在链的开头插入
-R:修改、替换指定链中的某一条规则,按规则序号或内容确定要替换的规则
-L:列出指定链中所有规则进行查看,若未指定链名,则列出表中所有规则内容
-F:清空指定链中所有规则,若未指定链名,则清空表中所有链的内容
-N:新建一条用户自定义的规则链
-X:删除指定表中用户自定义的规则链
-P:设置指定链的默认策略
-n:使用数字形式显示输出结果,如显示主机的IP而不是主机名
-v:查看规则列表时显示详细信息
-V:查看Iptables命令工具的版本
-h:查看命令帮助信息
--line-numbers:查看规则列表时,同时显示规则在链中的序列号

数据包控制:
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给任何回应信息
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。

简单Iptables使用示例:
1. 在filter表的INPUT链末尾增加一条规则:
iptables -t filter -A INPUT -p tcp -j ACCEPT
2. 在filter表的INPUT链行首增加一条规则:
iptables –I INPUT –p udp –j ACCEPT   ( 此处省略了“-t filter”选项,默认以filter处理)
3. 在filter表的INPUT链中插入一条防火墙规则,做为链的第二条规则:
iptables –I INPUT 2 –p icmp –j ACCEPT
4. 查看filter表INPUT链中的所有规则,同时显示规则的序号
iptables –L INPUT –line-numbers
5. 删除filter表INPUT链中第2条规则:
iptables –D INPUT 2
6. 清空filter、nat、mangle表各链中的所有规则:
iptables –F
iptables –t nat –F
iptables –t mangle –F
7. 设置filter表FORWARD规则链的默认策略为DROP
iptables –P FORWARD DROP

条件匹配示例:
1. 协议匹配:如拒绝进入防火墙的所有icmp协议数据包
iptables –I INPUT –p icmp –j REJECT
允许转发除icmp协议以外的所有数据(使用!可以将条件取反
iptables –A FORWARD ! –p icmp –j ACCEPT
2. 地址匹配:(”-s 源地址”/ “-d 目标地址”)
拒绝转发来自192.168.1.1主机的数据
iptables –A FORWARD –s 192.168.1.1 –j REJECT
3. 网络接口匹配:(“-i 网络接口名”/ “-o 网络接口名”分别对应接收数据包的网卡和发送数据包的网卡)
丢弃从外网接口eth1进入防火墙本机的源地址为私网地址的数据包
iptables –A INPUT –i eth1 –s 192.168.0.0/16 –j DROP
iptables –A INPUT –i eth1 –s 172.16.0.0/12 –j DROP   (这里运用了子网汇总)
iptables –A INPUT –i eth1 –s 10.0.0.0/8 –j DROP
4. 端口匹配:用于检查数据包的TCP或UDP端口号,需要以“-p tcp”或“-p udp”匹配为前提,使用“--sport 源端口”、“--dport 目标端口”的形式。端口可以表示为单个端口号或者用冒号分割的端口范围。
仅允许管理员从192.168.1.0/24网段使用SSH方式远程登录防火墙主机
iptables –A INPUT –p tcp –dport 22 –s 192.168.1.0/24 –j ACCEPT
iptables –A INPUT –p tcp –dport 22 –j DROP
5. TCP标记匹配:在Iptables命令中使用“--tcp-flags  检查范围  被设置的标记”的形式,两个参数“检查范围”和“被设置的标记”均为TCP标记的列表,各标记之间以逗号分割。“检查范围”告诉Iptables需要检查数据包的哪几个标记,“被设置 的标记”则明确匹配对应只为1的标记。【SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送)等均可使用于参数中,除此之外还可以使用关键词 ALL 和 NONE 进行比对】
拒绝从外网接口eth1直接访问防火墙本机的数据包,但是允许响应防火墙TCP请求的数据包进入;
iptables –P INPUT DROP
iptables –I INPUT –i eth1 –p tcp --tcp-flags SYN,RST,ACK  SYN –j REJECT
iptables -I INPUT  -i eth1 -p tcp  ! --syn -j ACCEPT
(注:--syn同等于:--tcp-flags SYN,RST,ACK,FIN SYN,详情可以man iptables)
6. ICMP类型匹配:ICMP类型可以使用字符串或数字代码,例如“Echo-Request”(数字代码为8),“Echo-Reply”(数字代码为0),“Destination-Unreachable”(数字代码为3),分别对应ICMP协议的请求、回显、目标不可达数据。
禁止其它主机ping防火墙主机,但是允许防火墙ping其它主机(允许接收ICMP回应数据)。
iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type Destination-Unreachable -j ACCEPT
7. 显示条件匹配:这种匹配功能需要额外的内核模块提供,因此需要手工指定匹配方式,在Iptables命令中使用“-m 模块关键字”的形式调用显示匹配,当然还需要指定匹配内容。
a. MAC地址匹配:例如禁止转发来自MAC地址为00:01:12:AA:3F:DD的主机数据包
iptables –A FORWARD –m mac –mac-source  00:01:12:AA:3F:DD –j DROP
b. 多端口匹配:Iptables中使用“—dports 端口列表”,“—sports 端口列表”的形式对应源端口地址列表、目标端口地址列表。
允许防火墙本机开放TCP端口20、21、25、110及被动模式FTP端口1250~1280
iptables –A INPUT –p tcp –m multiport –dports 20,21,25,110,1250:1280 –j ACCEPT
c. 多IP地址匹配:Iptables中使用“--src-range IP地址范围”“--dst-range IP地址范围”的形式对应源IP地址范围、目标IP地址范围。
禁止转发IP地址为192.168.1.1~192.168.1.10的TCP数据包
iptables –A FORWARD –p tcp –m iprange –src-range 192.168.1.1-192.168.1.10 –j DROP
d. 状态匹配:常见的数据包状态包括NEW(与任何连接无关的)、ESTABLISHED(响应请求或已建立连接的)和RELATED(与已有连接相关的)
禁止转发与正常TCP连接无关的非--syn请求数据包(如网络中存在一些非法攻击数据包)
iptables –A FORWARD –m state –state NEW –p tcp ! –syn –j DROP

防火墙规则的导入、导出
直接执行iptables-save命令时,会把当前设置的防火墙规则信息输出到终端。通常情况下,可以使用重定向将信息保存为指定的配置文件,结合系统默认提供的Iptables服务脚本,可以自动加载位置于/etc/sysconfig/iptables文件中的规则配置。
使用iptables-restore命令,可以从已保存的配置文件中导入Iptables规则(该文件必须是使用Iptables-save命令导出的配置数据)。
地点: 中国四川省成都市