先看下之前的文章–网络工具-iptables简介,简单了解下几个表和对应的链。下面针对常用的操作命令及选项进行说明。
iptables 的语法格式如下:
iptables [-t table] command [match] [target]
-t: 用于指定所要操作的表,不指定则默认 filter 表
command:具体的命令动作,比如对指定链添加/删除规则
match:对所要处理包的匹配规则
target:数据包的处理动作
command
每个链由一条条的规则组成,对于一个链可以添加规则、删除规则、检测是否存在该条规则等操作,相应的命令选项如下:
命令 | 说明 |
---|---|
-A | iptables -A chain rule-specification 在指定链表chain末尾添加规则 |
-C | iptables -C chain rule-specification 检测是否存在该规则 |
-D | iptables -D chain rule-specification 删除指定规则,需要将规则完整的写出来 |
-D | iptables -D chain rulenum 删除指定规则序号对应的那条规则,上面的rulenum 可通过 iptables -L –line-numbers 显示,每个链表的第一条规则对应序号1 |
-I | iptables -I chain [rulenum] rule-specification 向指定链表的对应规则序号前面插入规则,如果不指定 rulenum,则默认是序号1 |
-R | iptables -R chain rulenum rule-specification 替换规则 |
-L | iptables -L [chain] 显示所有的规则,一般紧跟使用-n 选项,避免转换成主机名形式;跟-v选项可以看更详细的信息。默认显示所有链([] 中括号表示该参数是可选的) |
-S | iptables -S [chain] 显示所有的规则 |
-F | iptables -F [chain] 默认删除所有链表里的规则 |
-P | iptables -P chain target 指定该链表的默认操作(DROP和ACCEPT) |
match
1、通用匹配
| 匹配选项 | 说明 |
|—|—|
[!] -p | 示例:iptables -A INPUT -p protocol …
1、指定协议,如tcp、udp等,不区分大小写,也可以是协议对应的数字编号,都可以在/etc/protocols查看。
2、数字0和‘all’表示所有的协议,也是缺省值,注意只匹配 TCP、UDP、ICMP。而不是/etc/protocols里的所有协议。
3、可以同时指定多个匹配协议,以逗号分隔,如tcp,udp
4、可选参数 ! 表示取反的意思,如 ! -p tcp 则表示匹配UDP和ICMP
[!] -s | 示例:iptables -A INPUT -s 192.168.1.0/24 …
指定源地址,可以是主机名也可以是IP形式的地址,主机名会先dns解析得到相应的IP地址再添加到过滤表当中;可以是单个IP地址,也可以像上面示例一样是某个网段
[!] -d | 匹配目的地址,跟 -s 用法一致
[!] -i | 示例:iptables -A INPUT -i eth0 …
1、对于链表INPUT、FORWARD、PREROUTING的数据指定接口名
2、可以使用通配符,如 eth+,则可以匹配 eth0、eth1 等所有eth开头的网口
3、这个尤其适用于多核设备内部地址通信默认允许策略配置
[!] -o | 指定离开本地所用的网口
–sport | 示例:iptables -A INPUT -p tcp –sport 22 …
1、可以指定 tcp 或者 udp 的源端口号
2、可以使用连续的端口号,如 –sport 22:100,则表示从22到100的所有端口
3、可以进行取反操作如,! –sport 22,即除22以外的端口
–dport | 指定目标端口,用法和 –sport 一样
2、显示匹配
通过-m选项指定所要加载的匹配模块名称,后面再跟相应的选项即可。
如过滤mac地址操作,指定模块mac,选项如下:
匹配选项 | 说明 |
---|---|
-m mac [!] –mac-source | <div style="width: 250pt">示例:iptables -A INPUT -m mac –mac-source XX:XX:XX:XX:XX:XX 匹配的源MAC地址,格式必须是XX:XX:XX:XX:XX:XX,只能用于过滤进入的数据 |
-m multiport | <div style="width: 250pt">示例:iptables -A INPUT -p tcp -m multiport –sport 22,23,24 前面匹配端口时只写了连续的端口匹配方式,如果想指定多个端口,则需要使用 -m multiport |
-m iprange | <div style="width: 250pt">示例:iptables -A INPUT -m iprange –src-range 192.168.1.1-192.168.1.10 -j ACCEPT 匹配连续的多个IP地址 |
target
最后说下数据包的处理动作,通过参数-j指定
选项 | 说明 |
---|---|
-j | 示例:iptables -A INPUT -p tcp -sport 22 -j DROP –jump target 指定要进行的处理动作 ACCEPT :允许,匹配后就不会去匹配当前链中的其他规则 DROP :丢弃 |
IP地址过滤策略一般就两种,要么设置允许哪些地址通行,要么就禁止哪些地址进行通行。
一、设置允许
1、iptables -P INPUT DROP #先设置默认策略是禁用
2、iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT # 然后再设置所要允许的规则
或者默认策略仍旧是允许,在添加完允许过滤规则后,再在尾部添加禁止所有数据包通行的规则
iptables -A INPUT -j DROP
二、设置禁止
1、iptables -P INPUT ACCEPT #先设置默认策略是允许
2、iptables -A INPUT -s 192.168.2.10 -j DROP # 然后再设置所要禁止的规则
或者默认策略是允许的情况下,在添加完禁止过滤规则后,再在尾部添加允许所有数据包通行的规则
iptables -A INPUT -j ACCEPT