Iptables - iptables命令的基本用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Iptables - iptables命令的基本用法相关的知识,希望对你有一定的参考价值。
一、iptables命令
iptables是一个规则管理工具. 具有添加、修改、删除和显示等功能.
规则和链都有计数器:
- pkts: 由规则或链所匹配到的报文的个数
- bytes: 由规则或链匹配到的所有报文大小之和
1.1 用法
用法:
$ iptables [-t table] SUBCOMMAND CHAIN CERTERIA -j TARGET
- -t table:
- filter
- nat
- mangle
- raw
- SUBCOMMAND:
- 链管理:
- -F: flush, 清空规则链, 省略链, 表示清空指定表上的所有链.
- -N: new, 创建新的自定义规则链.
- -X: drop, 删除用户自定义的规则链(空链).
- -Z: zero, 清零规则计数器.
- -P: Policy, 为指定链设置默认策略, 对filter表中的链而言, 默认策略通常有ACCEPT, DROP, REJECT.
- -E: rEname, 重命名自定义链, 引用计数不为0的自定义链, 无法改名, 也无法删除.
- 规则管理:
- -A: append, 将新规则追加于指定链的尾部.
- -I: insert, 将新规则插入指定链的指定位置.
- -D: delete, 删除指定链上的指定规则; 有两种指定方式, 指定匹配条件和指定规则编号.
- -R: replace, 替换指定链上的指定规则.
- -C: check, 检查指定链上的指定规则.
- 查看:
- -L: list, 列出指定链上的所有规则.
- -n: numberic, 以数字格式显示地址和端口号.
- -v: verbose, 显示详细信息; -vv, -vvv.
- --line-numbers: 显示规则编号.
- -x: exactly, 显示计数器计数结果的精确值.
- 链管理:
- 目标:
- -j TARGET: jump至指定的TARGET.
- ACCEPT: 接受
- DROP: 丢弃
- REJECT: 拒绝
- RETURN: 返回调用链
- REDIRECT: 端口重定向
- LOG: 记录日志
- MARK: 做防火墙标记
- DNAT: 目标地址转换
- SNAT: 源地址转换
- MASQUERADE: 地址伪装
- ...: 更多请查看man文档.
- -j TARGET: jump至指定的TARGET.
-
匹配条件:
- 基本匹配:
- [!] -s, --src, --source IP|NetAddr: 检查报文中源IP地址是否符合此处指定的范围, 前面加“!”为非.
- [!] -d, --dst, --destination IP|NetAddr: 检查报文中源IP地址是否符合此处指定的地址范围.
- [!] -p, --protocol {tcp|udp|icmp}: 检查报文中的协议, 即ip首部中的protocol所标识的协议.
- [!] -i, --in-interface IFACE: 数据报文的流入接口, 仅能用于PREROUTING, INPUT以及FORWARD链上.
- [!] -o, --out-interface IFACE: 数据报文的流出接口, 仅能用于FORWARD, OUTPUT以及FORWARD链上.
-
扩展匹配: -m macth_name --spec_options; 例如-m tcp --dport 22
- 隐式扩展: 对-p protocol指明的协议进行扩展, 可省略-m选项
- -p tcp:
- --dport PORT[-PORT]: 目标端口, 可以是单个端口或多个连续的端口.
- --sport PORT[-PORT]: 源端口.
- --tcp-flags LIST1 LIST2: 检查LIST1所指明的所有标志位, 且这其中, LIST2所表示出的所有标记为必须为1, 而余下的必须为0, 没有在LIST1中指明的不做检查. 标志位, SYN, ACK, FIN, RST, PSH, URG; 示例, --tcp-flags SYN,ACK,FIN,RST SYN, 匹配tcp三次握手的第一次.
- --syn: 检查是否为新建tcp连接请求的第一次请求.
- -p udp:
- --dport
- --sport
-
-p icmp:
- --icmp-type: 可用数字表示其类型, 0(echo-reply)和8(echo-request)
- 显示扩展: 必须使用-m选项指定使用的扩展, 请查看iptables显示扩展
- 基本匹配:
二、示例
2.1 在filter表中创建一个新的链, 名字叫做IN_putlic
$ iptables -t filter -N IN_public
$ iptables -t filter -L -n
...
Chain IN_public (0 references)
target prot opt source destination
2.2 修改IN_putlic链为OUT_putlic
$ iptables -t filter -E IN_putlic OUT_pulic
$ iptables -t filter -L -n
...
Chain OUT_pulic (0 references)
target prot opt source destination
2.3 修改filter表上的FORWARD链的规则为DROP
$ iptables -t filter -P FORWARD DROP
$ iptables -t filter -L -n
...
Chain FORWARD (policy DROP)
target prot opt source destination
...
2.4 打开firewalld服务, 删除FORWARD链上的第九条规则
$ iptables -t filter -L -n --line-numbers
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
3 FORWARD_direct all -- 0.0.0.0/0 0.0.0.0/0
4 FORWARD_IN_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
5 FORWARD_IN_ZONES all -- 0.0.0.0/0 0.0.0.0/0
6 FORWARD_OUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
7 FORWARD_OUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
8 DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
9 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
$ iptables -t filter -D FORWARD 9
$ iptables -t filter -L -n --line-numbers
...
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
3 FORWARD_direct all -- 0.0.0.0/0 0.0.0.0/0
4 FORWARD_IN_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
5 FORWARD_IN_ZONES all -- 0.0.0.0/0 0.0.0.0/0
6 FORWARD_OUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
7 FORWARD_OUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
8 DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
2.5 对访问本机TCP协议的报文通通放行
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -p tcp -j ACCEPT
$ iptables -t filter -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 192.168.123.101
2.6 允许本机的所有TCP报文通通发出去
iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -p tcp -j ACCEPT
$ iptables -t filter -L -n
...
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.123.101 0.0.0.0/0
2.7 将filter表上的所有链改为DROP
$ iptables -t filter -P INPUT DROP
$ iptables -t filter -P FORWARD DROP
$ iptables -t filter -P OUTPUT DROP
2.8 允许其他主机ping 192.168.123.101这台主机
$ iptables -t filter -A INPUT -d 192.168.123.101 -p icmp -j ACCEPT
$ iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -p icmp -j ACCEPT
$ iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
779 83096 ACCEPT tcp -- * * 0.0.0.0/0 192.168.123.101
0 0 ACCEPT icmp -- * * 0.0.0.0/0 192.168.123.101
...
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
458 64864 ACCEPT tcp -- * * 192.168.123.101 0.0.0.0/0
0 0 ACCEPT icmp -- * * 192.168.123.101 0.0.0.0/0
2.9 删除filter表上的INPUT和OUTPUT链上的第二条规则
$ iptables -t filter -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 192.168.123.101
2 ACCEPT icmp -- 0.0.0.0/0 192.168.123.101
...
Chain OUTPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.123.101 0.0.0.0/0
2 ACCEPT icmp -- 192.168.123.101 0.0.0.0/0
$ iptables -t filter -D INPUT 2
$ iptables -t filter -D OUTPUT 2
$ iptables -t filter -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 192.168.123.101
...
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 192.168.123.101 0.0.0.0/0
2.10 允许报文从ens33接口中流入和流出
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -i ens33 -j ACCEPT
$ iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -o ens33 -j ACCEPT
$ iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1256 133K ACCEPT tcp -- * * 0.0.0.0/0 192.168.123.101
0 0 ACCEPT all -- ens33 * 0.0.0.0/0 192.168.123.101
...
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
791 113K ACCEPT tcp -- * * 192.168.123.101 0.0.0.0/0
0 0 ACCEPT all -- * ens33 192.168.123.101 0.0.0.0/0
2.11 允许其他主机通过22号端口访问192.168.123.101这台主机
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -p tcp --dport 22 -j ACCEPT
$ iptables -t filter -A OUTPUT -s 192.168.123.100 -d 0.0.0.0/0 -p tcp --sport 22 -j ACCEPT
$ iptables -t filter -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.123.101 tcp dpt:22
...
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 192.168.123.100 0.0.0.0/0 tcp spt:22
2.12 删除filter表上INPUT和链上的第二条规则
$ iptables -t filter -D INPUT 2
$ iptables -t filter -D OUTPUT 2
2.13 允许其他主机通过80端口访问192.168.123.101这台主机的httpd服务
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -p tcp --dport 80 -j ACCEPT
$ iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -p tcp --sport 80 -j ACCEPT
$ iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.123.101 tcp dpt:80
...
Chain OUTPUT (policy DROP 2 packets, 152 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 192.168.123.101 0.0.0.0/0 tcp spt:80
2.13 允许192.168.123.101这台主机ping其他主机, 不允许其他主机ping 192.168.123.101.
$ iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -p icmp --icmp-type 9 -j ACCEPT
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -p icmp --icmp-type 0 -j ACCEPT
$ iptables -t filter -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT icmp -- * * 0.0.0.0/0 192.168.123.101 icmptype 0
...
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT icmp -- * * 192.168.123.101 0.0.0.0/0 icmptype 9
以上是关于Iptables - iptables命令的基本用法的主要内容,如果未能解决你的问题,请参考以下文章