iptables由3个表filter,nat,mangle组成,主要实验了filter表,这个表是用来过滤数据包的,
有三个链INPUT,OUTPUT,FORWARD。
配置防火墙策略有固定的格式
Iptables 表名 链名 匹配条件 动作
-t 表名 (默认为filter)
-A 链名(在该链末尾append追加策略)
-I 链名 数字
-I (insert)插入链,如果不加数字,默认是将写的策略添加到表中所有策略的前面,
但是我们要指定插入到相应的行,我们可以这样
Iptables –t filter –I INPUT 2 …… 这里就是插到第二个
匹配条件:
-i 网卡 数据包进入的网卡
-o 网卡 出去的
-s ip 源ip
-d ip 目的ip
-p 协议
--dport 端口号 目的端口号
--sport 端口号 源端口号
动作:
ACCEPT:对满足策略的数据包允许通过
DROP:丢弃数据包,且不返回任何信息
REJECT:丢弃数据包,但是会返回拒绝的信息
LOG:把通过的数据包写到日志中(相当于一个门卫对进去的人进行登记)
iptables -t filter -A INPUT –s 192.168.0.0/24 -p tcp --dport 80 –j REJECT
上面这句的意思是:对filter表的INPUT链,追加一条策略,策略是,源地址在192.168.0.0/24网段内,使用tcp协议,目标端口为80的所有输入包都执行REJECT动作(拒绝)
实验室完成了filter表的INPUT链的基本操作和增加删除一条链,过程如下:
Iptables命令的管理控制选项
-A(append) 在指定链的末尾添加一条新的规则
-I (insert)在指定链中插入一条新规则,为指明插入位置
-D(delete)删除指定链里的某条规则
-R (replace)修改、替换指定链的某条规则,按序号或内容确定要替换的规则
-L (list)列出指定链中所有规则进行查看
-F (flush)清空指定链中的所有规则
-N 新建一条用户自己定义的规则链
-X(delete-chain)删除指定表中用户自己定义的规则链
-P 设置指定链的默认策略
-V 查看iptables命令工具的版本(--version)信息
-v 查看规则列表时显示详细(--verbose)的信息
-h 查看命令帮助信息(--help)
-n 使用数字形式(--number)显示输出结果,如显示主机的ip地址而不是主机名
--line-number 查看规则列表时,同时显示规则在链中的顺序号
添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。
[root@test ~]# iptables -A INPUT -s 192.168.1.5 -j DROP
再插入一条规则到第三行,将行数直接写到规则链的后面:
[root@test ~]# iptables -I INPUT 3 -s 192.168.1.3 -j DROP
查看:
[root@test ~]# iptables -nLv --line-number
Iptables命令的匹配条件选项
Ip地址:
来源地址:—s (source)。
目标地址:—d (destination)。
端口(port):
来源端口:——sport。
目标端口:——dport。
协议:—p。
个服务的端口和协议:
这里只列出比较常用的参数,详细的请查看man iptables
1、查看
iptables -nvL –line-number
-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数
-n 不对ip地址进行反查,加上这个参数显示速度会快很多
-v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
–line-number 显示规则的序列号,这个参数在删除或修改规则时会用到
[plain] view plain copy
[root@mail ~]# iptables -L #查看当前内存中iptables策略,默认是filter表
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mail ~]# iptables -t filter -vnL #加vn参数,有更多选项
Chain INPUT (policy ACCEPT 31471 packets, 4322K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 37490 packets, 3056K bytes)
pkts bytes target prot opt in out source destination
#策略格式:iptables 表名 链名 匹配条件 动作
#下面这句话的意思是
对于filter表的INPUT链,源地址为192.169.1.0/24网段内的使用tcp #协议80端口的输入包,都执行REJECT(拒绝)动作
[root@mail ~]# iptables -t filter -A INPUT -s 192.169.1.0/24 -p tcp --dport 80 -j REJECT
[root@mail ~]# iptables -L #需要注意的是,该策略目前只在内存中,/etc/sysconfig/iptables配置文件中是没有的
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 192.169.1.0/24 anywhere tcp dpt:http reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mail ~]# iptables -vnL #看的更详细点
Chain INPUT (policy ACCEPT 88 packets, 8188 bytes)
pkts bytes target prot opt in out source destination
4 240 REJECT tcp -- * * 192.169.1.0/24 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 131 packets, 11625 bytes)
pkts bytes target prot opt in out source destination
[root@mail ~]# vim /etc/sysconfig/iptables #iptables中没有
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
#执行save后会将这条策略写入/etc/sysconfig/iptables,在保存的时候,是执行覆盖式的保存
#内存中有的保存下来,内存中没有的,这个文件中有的将会被删除。
[root@mail ~]# service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
[root@mail ~]# vim /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Aug 15 17:28:53 2012
*filter
:INPUT ACCEPT [4:352]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:298]
-A INPUT -s 192.169.1.0/24 -p tcp -m tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Wed Aug 15 17:28:53 2012
#表的每条链后面都有一个默认动作,Chain INPUT (policy ACCEPT),默认动作意思是
#没有匹配所以策略的匹配条件时(按序匹配),就执行的动作,可以修改链的默认动作
[root@mail ~]# iptables -t filter -P INPUT DROP
#修改filter表的INPUT链的默认动作
[root@mail ~]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
REJECT tcp -- 192.169.1.0/24 anywhere tcp dpt:http reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mail ~]# iptables -t filter -P INPUT ACCEPT #暂时改回来
#可以删除一条策略,策略是有序的,从1开始,要删除一条策略,需要知道它的序号
[root@mail ~]# iptables -L --line-numbers #查看策略的序号
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT tcp -- 192.169.1.0/24 anywhere tcp dpt:http reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@mail ~]# iptables -D INPUT 1 #删除INPUT链的序号为1的策略
[root@mail ~]# vim /etc/sysconfig/iptables #和前面一样,这只是删除内存中
的,/etc/sysconfig/iptables中仍然存在
# Generated by iptables-save v1.4.7 on Wed Aug 15 17:28:53 2012
*filter
:INPUT ACCEPT [4:352]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:298]
-A INPUT -s 192.169.1.0/24 -p tcp -m tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Wed Aug 15 17:28:53 2012
[root@mail ~]# service iptables save #执行保存,配置文件中也被删除了
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
[root@mail ~]# vim /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Aug 15 17:45:03 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Wed Aug 15 17:45:03 2012
#除了INPUT,FORWARD,OUTPUT链,可以定义自己的链
[root@mail ~]# iptables -N chen #定义一个chen链,相当于多了一扇门
#拒绝通过chen链,地址为192.169.1.99,协议为tcp端口为80的数据包
[root@mail ~]# iptables -t filter -A chen -s 192.169.1.99 -p tcp --dport 80 -j REJECT
[root@mail ~]# iptables -t filter -A INPUT -j chen #把经过INPUT链的数据引入到chen这个链上
[root@mail ~]# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 chen all -- anywhere anywhere #INPUT链的target变为chen了
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain chen (1 references) #可以看到多了一个链,下面的策略也存在
num target prot opt source destination
1 REJECT tcp -- 192.169.1.99 anywhere tcp dpt:http reject-with icmp-port-unreachable
[root@mail ~]#
[root@mail ~]# service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
[root@mail ~]# vim /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Aug 15 18:11:28 2012
*filter
:INPUT ACCEPT [1:125]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:71]
:chen - [0:0]
-A INPUT -j chen
-A chen -s 192.169.1.99/32 -p tcp -m tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Wed Aug 15 18:11:28 2012
[root@mail ~]# iptables -X chen #删除chen这条链
iptables: Too many links.
[root@mail ~]# iptables -F #删除前需要清空策略,否则删除不掉
[root@mail ~]# iptables -X chen
[root@mail ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mail ~]#