Iptables命令大全

本文详细介绍了iptables防火墙的命令使用,包括基本概念(表、链、动作)、语法格式、常用操作(添加、删除、修改规则)、保存与恢复、屏蔽IP、开放端口、查看规则等,并附带了Docker容器限制和firewalld管理示例,是Linux网络过滤的实用参考。

作者:zhuge···预计阅读 15 分钟·747 阅读·0 评论

INPUT(入站数据过滤) OUTPUT(出站数据过滤) FORWARD(转发数据过滤) PREROUTING(路由前过滤) 和POSTROUTING(路由后过滤)

iptables语法
iptables [-t table] command [match] [target]
	-t: 用于指定所要操作的表,不指定则默认 filter 表
	command:具体的命令动作,比如对指定链添加/删除规则
	match:对所要处理包的匹配规则
	target:数据包的处理动作
命令说明
-Aiptables -A chain rule-specification 在指定链表chain末尾添加规则
-Ciptables -C chain rule-specification 检测是否存在该规则
-Diptables -D chain rule-specification 删除指定规则,需要将规则完整的写出来
-Diptables -D chain rulenum 删除指定规则序号对应的那条规则,上面的rulenum 可通过 iptables -L –line-numbers 显示,每个链表的第一条规则对应序号1
-Iiptables -I chain [rulenum] rule-specification 向指定链表的对应规则序号前面插入规则,如果不指定 rulenum,则默认是序号1
-Riptables -R chain rulenum rule-specification 替换规则
-Liptables -L [chain] 显示所有的规则,一般紧跟使用-n 选项,避免转换成主机名形式;跟-v选项可以看更详细的信息。默认显示所有链([] 中括号表示该参数是可选的)
-Siptables -S [chain] 显示所有的规则
-Fiptables -F [chain] 默认删除所有链表里的规则
-Piptables -P chain target 指定该链表的默认操作(DROP和ACCEPT)

iptables命令选项的输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

表名包括:

  • raw:高级功能,如:网址过滤
  • mangle:数据包修改(QOS),用于实现服务质量
  • net:地址转换,用于网关路由器
  • filter:包过滤,用于防火墙规则

规则链名包括:

  • INPUT链:处理输入数据包
  • OUTPUT链:处理输出数据包
  • PORWARD链:处理转发数据包
  • PREROUTING链:用于目标地址转换(DNAT)
  • POSTOUTING链:用于源地址转换(SNAT)

动作包括:

  • accept:接收数据包
  • DROP:丢弃数据包
  • REDIRECT:重定向,映射,透明代理
  • SNAT:源地址转换
  • DNAT:目标地址转换
  • MASQUERADE:IP伪装(NAT),用于ADSL
  • LOG:日志记录
添加规则
添加规则有两个参数分别是 -A 和 -I。其中 -A 是添加到规则的末尾;-I 可以插入到指定位置,没有指定位置的话默认插入到规则的首部。

修改规则,把添加在第 6 行规则的 DROP 修改为 ACCEPT
iptables -R INPUT 6 -s 194.168.1.5 -j ACCEPT

#保存在默认文件夹中(保存防火墙规则)
iptables-save > /etc/sysconfig/iptables

#保存在其他位置(备份防火墙规则
iptables-save > 文件名称

#ptables-restore 命令可以批量导入Linux防火墙规则,同时也需要结合重定向输入来指定备份文件的位置。命令如下:
#注意,导入的文件必须是使用 iptables-save工具导出来的才可以。
iptables-restore < 文件名称

#清除已有iptables规则
iptables -F
iptables -X
iptables -Z
开发指定的端口

#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

#允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT

#允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

#允许FTP服务的20端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

#禁止其他未允许的规则访问
iptables -A INPUT -j reject

#禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT
#屏蔽IP
#屏蔽单个IP的命令
iptables -I INPUT -s 123.45.6.7 -j DROP

#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP

#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP

#封IP段即从123.45.6.1到123.45.6.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP
#查看已添加的iptables规则
iptables -L -n -v 或者 iptables -nvL

各参数的含义为:
-L 表示查看当前表的所有规则,默认查看的是 filter 表,如果要查看 nat 表,可以加上 -t nat 参数。
-n 表示不对 IP 地址进行反查,加上这个参数显示速度将会加快。
-v 表示输出详细信息,包含通过该规则的数据包数量、总字节数以及相应的网络接口。

#将所有iptables以序号标记显示,执行:
iptables -L -n --line-numbers

#删除已添加的iptables规则 比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8
  1. /etc/init.d/iptables stop #关闭iptables命令
  2. iptables -nL #查看iptables详细策略信息
  3. iptables -A INPUT -p tcp --dport 8080 -j ACCEPT #放通入方向的8080端口
  4. iptables -A OUTPUT -p tcp --sport 8080 -j ACCEPT #放通出方向的8080端口
  5. iptables -F:清除所有制订的规则
  6. iptables -X:清除所有用户“自定义”的chain
  7. iptables -Z:将所有chain的计数与流量统计都归零
  8. iptables --line -vnL INPUT #显示入方向所有策略
  9. iptables -t filter -D INPUT 2 #删除入方向的第二条策略
#禁止某个容器访问外网,只打开某个端口
iptables -I DOCKER-USER -s 172.10.0.10 -j DROP
iptables -I DOCKER-USER -s 172.10.0.10 -p tcp --dport 80 -j ACCEPT
iptables -I DOCKER-USER -s 172.10.0.10 -m state --state RELATED,ESTABLISHED -j RETURN

查看防火墙开放端口的步骤 1.查看防火墙状态 查看防火墙状态 systemctl status firewalld 开启防火墙 systemctl start firewalld 关闭防火墙 systemctl stop firewalld 开启防火墙 service firewalld start 若遇到无法开启 先用:systemctl unmask firewalld.service 然后:systemctl start firewalld.service 2.查看对外开放的端口状态 查询已开放的端口 netstat -ntulp | grep 端口号:可以具体查看某一个端口号 查询指定端口是否已开 firewall-cmd --query-port=666/tcp 提示 yes,表示开启;no表示未开启。 3.对外开发端口查看想开的端口是否已开:firewall-cmd --query-port=6379/tcp 添加指定需要开放的端口:firewall-cmd --add-port=123/tcp --permanent 重载入添加的端口:firewall-cmd --reload 查询指定端口是否开启成功:firewall-cmd --query-port=123/tcp 移除指定端口:firewall-cmd --permanent --remove-port=123/tcp

相关文章

评论

加载中...