INPUT(入站数据过滤) OUTPUT(出站数据过滤) FORWARD(转发数据过滤) PREROUTING(路由前过滤) 和POSTROUTING(路由后过滤)
iptables语法
iptables [-t table] command [match] [target]
-t: 用于指定所要操作的表,不指定则默认 filter 表
command:具体的命令动作,比如对指定链添加/删除规则
match:对所要处理包的匹配规则
target:数据包的处理动作
| 命令 | 说明 |
|---|---|
| -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) |
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
- /etc/init.d/iptables stop #关闭iptables命令
- iptables -nL #查看iptables详细策略信息
- iptables -A INPUT -p tcp --dport 8080 -j ACCEPT #放通入方向的8080端口
- iptables -A OUTPUT -p tcp --sport 8080 -j ACCEPT #放通出方向的8080端口
- iptables -F:清除所有制订的规则
- iptables -X:清除所有用户“自定义”的chain
- iptables -Z:将所有chain的计数与流量统计都归零
- iptables --line -vnL INPUT #显示入方向所有策略
- 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
评论