linux iptables 命令
1. iptables 定义
iptables 防火墙可以用于创建过滤(filter)与NAT规则,有效地管理Linux防火墙
1.1 iptables 的结构:表->链->规则
iptables的结构:iptables -> Tables -> Chains -> Rules.
简单地讲, tables 由chains组成,而chains又由rules组成。
iptables 的四种内建表
iptables 具有Filter, NAT, Mangle, Raw四种内建表:
raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
net:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。
1.1.1 Filter 表
Filter 表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
iptables -t filter –list
INPUT 链 – 处理来自外部的数据。
OUTPUT 链 – 处理向外发送的数据。
FORWARD 链 – 将数据转发到本机的其他网卡设备上。
1.1.2 NAT表 Mangle表 Raw表
查看mangle表:
# iptables -t mangle –list
查看NAT表:
# iptables -t nat –list
查看RAW表:
# iptables -t raw –list
参考:
https://blog.csdn.net/u011537073/article/details/82685586
1.2 iptables 规则(Rules)
规则链名包括:
INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。
牢记以下三点式理解iptables规则的关键:
Rules包括一个条件和一个目标(target)
如果满足条件,就执行目标(target)中的规则或者特定值。
如果不满足条件,就判断下一条Rules。
1.2.1 动作
ACCEPT :允许防火墙接收数据包
DROP :防火墙丢弃包
REDIRECT :重定向、映射、透明代理。
SNAT :源地址转换。
DNAT :目标地址转换。
MASQUERADE :IP伪装(NAT),用于ADSL。
LOG :日志记录。
2. iptables 使用语法
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号]
<-i/o 网卡名>
-p 协议名
<-s 源IP/源子网>
--sport 源端口 <-d 目标IP/目标子网>
--dport 目标端口
-j 动作
iptables -[ACD] chain rule-specification [options]
-A 在规则链的末尾加入新规则/检查/删除 规则
iptables -I chain [rulenum] rule-specification [options]
在规则链的头部加入新规则
iptables -R chain rulenum rule-specification [options]
替换
iptables -D chain rulenum [options]
删除指定规则
iptables -[LS] [chain [rulenum]] [options]
显示打印
iptables -[FZ] [chain] [options]
Zero counters in chain or all chains
清空所有iptables规则
慎用!!!
重启可恢复原样
iptables -[NX] chain
删除用户定义链
iptables -E old-chain-name new-chain-name
更改链名称
iptables -P chain target [options]
更改策略
iptables -h (print this help information)
帮助信息
2.1 iptables 命令
来自 iptables -h
-I:insert 向规则链中插入条目;
insert in chain as rulenum (default 1=first)
-D:delete 从规则链中删除条目
delete chain rulenum
-L:list 显示规则链中已有的条目
list the rules in a chain or all chains
-A:增加
-R:替换
2.1.1 iptables 选项
-j: jump 执行目标(jump to target)
可能的值是 ACCEPT, DROP, QUEUE, RETURN,MASQUERADE
-n: numeric 以数字输出地址和端口
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
例如:-i eth0指定了要处理经由eth0进入的数据包
如果不指定-i参数,那么将处理进入所有接口的数据包
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
--dport num 匹配目标端口号
--sport num 匹配来源端口号
2.2 链的默认策略
链的默认政策设置为”ACCEPT”(接受),若要将INPUT,FORWARD,OUTPUT链设置成”DROP”(拒绝),命令如下:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
3. 例子说明
3.1 插入一条规则,丢弃此ip 的所有协议请求: -I INPUT
能ping自己
[root@localhost sock]# ping 192.88.8.114
PING 192.88.8.114 (192.88.8.114) 56(84) bytes of data.
64 bytes from 192.88.8.114: icmp_seq=1 ttl=64 time=0.054 ms
64 bytes from 192.88.8.114: icmp_seq=2 ttl=64 time=0.040 ms
^C
--- 192.88.8.114 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.040/0.047/0.054/0.007 ms
[root@localhost sock]#
丢弃本地 ip
[root@localhost sock]# iptables -I INPUT -s 192.88.8.114 -j DROP
[root@localhost sock]#
将所有iptables以序号标记显示
[root@localhost sock]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 192.88.8.114 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 INPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
5 INPUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
6 INPUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
7 DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
8 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
不能ping自己
[root@localhost sock]# ping 192.88.8.114
PING 192.88.8.114 (192.88.8.114) 56(84) bytes of data.
^C
--- 192.88.8.114 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms
[root@localhost sock]#
扩展:封整个网段
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的
3.2 将所有iptables以序号标记显示: -L -n --line-numbers
如果不指定 -t选项,就只会显示默认的 filter表。因此,以下两种命令形式是一个意思:
# iptables -t filter –list
(or)
# iptables –list
[root@localhost sock]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 192.88.8.114 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 INPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
5 INPUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
6 INPUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
7 DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
8 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibit
3.2 删除指定规则: -D INPUT
[root@localhost sock]# iptables -D INPUT 1
[root@localhost sock]#
[root@localhost sock]# iptables -L -n --line-numbers
Chain INPUT (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 INPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
4 INPUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
5 INPUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
6 DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
7 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
[root@localhost sock]# ping 192.88.8.114
PING 192.88.8.114 (192.88.8.114) 56(84) bytes of data.
64 bytes from 192.88.8.114: icmp_seq=1 ttl=64 time=0.059 ms
^C
--- 192.88.8.114 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.059/0.059/0.059/0.000 ms
[root@localhost sock]#
3.3 清空所有iptables规则: iptables -F (iptables –flush )
清空所有iptables规则 慎用!!!
重启可恢复原样
防火墙关闭清空,端口任意连接
本机执行 iptables -F 之后
[root@localhost sock]# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy DROP)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
3.4 允许外部主机ping内部主机
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
3.5 允许回环访问
例:在服务器上允许127.0.0.1回环访问。
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
4. 永久生效–保存iptables更改
当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。
CentOS下
# 保存iptables规则
service iptables save
# 重启iptables服务
service iptables stop
service iptables start
查看当前规则:
cat /etc/sysconfig/iptables
参考:
https://blog.csdn.net/qq_26959879/article/details/89642344
https://www.linuxprobe.com/25-iptables-common-examples.html
https://blog.csdn.net/u011537073/article/details/82685586