iptables
iptables是Linux上常用的防火墙软件,Linux CentOS 7默认没有安装iptables,默认的防火墙是firewalld,安装iptables之前先检查下当前CentOS 7系统下的firewalld防火墙状态,如果是开启状态,需要先关闭firewalld防火墙。
安装iptables防火墙
yum install iptables -y
#centos7需要安装iptables的service包
yum install iptables-services -y
#启动
systemctl start iptables
#开机启动
systemctl enable iptables
语法
iptables(选项)(参数)
选项
-t: --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表;
# 通用匹配:源地址目标地址的匹配
-p:指定要匹配的数据包协议类型;
-s: --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0;
-d: --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤;
-i: --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反;
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用;
# 查看管理命令
-L: --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则;
# 规则管理命令
-A: --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定;
-I: --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号;
-D: --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则;
-R num:Replays替换/修改第几条规则;
# 链管理命令(这都是立即生效的)
-P: --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的;
-F: --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则;
-N: --new-chain chain 用指定的名字创建一个新的链;
-X: --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链;
-E: --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响;
-Z --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零;
-j --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链;
-h:显示帮助信息;
参数
参数作用
-P设置默认策略:iptables -P INPUT (DROP);-F清空规则链;-L查看规则链;-A在规则链的末尾加入新规则;-Inum 在规则链的头部加入新规则;-Dnum 删除某一条规则;-s匹配来源地址IP/MASK,加叹号"!"表示除这个IP外;-d匹配目标地址;-i网卡名称 匹配从这块网卡流入的数据;-o网卡名称 匹配从这块网卡流出的数据;-p匹配协议,如tcp,udp,icmp;--dport num匹配目标端口号;--sport num匹配来源端口号;
工作机制
规则链名包括(也被称为五个钩子函数(hook functions)):
INPUT链 :处理输入数据包。OUTPUT链 :处理输出数据包。FORWARD链 :处理转发数据包。PREROUTING链 :用于目标地址转换(DNAT)。POSTOUTING链 :用于源地址转换(SNAT)。
防火墙策略
表名包括:
raw :高级功能,如:网址过滤。mangle :数据包修改(QOS),用于实现服务质量。nat :地址转换,用于网关路由器。filter :包过滤,用于防火墙规则。
动作包括:
ACCEPT :接收数据包。DROP :丢弃数据包。REDIRECT :重定向、映射、透明代理。SNAT :源地址转换。DNAT :目标地址转换。MASQUERADE :IP伪装(NAT),用于ADSL。LOG :日志记录。
清除已有iptables规则
iptables -F #清空所有的防火墙规则;
iptables -X #删除用户自定义的空链;
iptables -Z #清空计数;
iptables -F INPUT # 清空指定链 INPUT 上面的所有规则;
iptables -X INPUT # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则,如果没有指定链名,则会删除该表中所有非内置的链;
iptables -Z INPUT # 把指定链,或者表中的所有链上的所有计数器清零;
开放指定端口
-A和-I参数分别为添加到规则末尾和规则最前面。
#允许本地回环接口(即运行本机访问本机); iptables -A INPUT -i lo -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#允许访问443端口; iptables -A INPUT -p tcp --dport 443 -j ACCEPT#允许FTP服务的21和20端口; iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT#允许ping; iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT#禁止其他未允许的规则访问; iptables -A INPUT -j REJECT #(注意:如果22端口未加入允许规则,SSH链接会直接断开。) iptables -A FORWARD -j REJECT
屏蔽IP
#屏蔽单个IP的命令是 iptables -I INPUT -s 10.10.1.100 -j DROP#封整个段即从10.0.0.1到10.255.255.254的命令 iptables -I INPUT -s 10.0.0.0/8 -j DROP#封IP段即从10.10.0.1到10.10.255.254的命令 iptables -I INPUT -s 10.10.0.0/16 -j DROP#封IP段即从10.10.1.1到10.10.1.254的命令是 iptables -I INPUT -s 10.10.1.0/24 -j DROP
屏蔽或允许某个IP访问指定的端口
#屏蔽某IP访问指定端口,以22端口为例命令是 iptables -I INPUT -s 10.10.1.100 -p tcp --dport 22 -j DROP#允许某IP访问指定端口,以22端口为例命令是 iptables -I INPUT -p tcp --dport 22 -j DROP iptables -I INPUT -s 10.10.1.100 -p tcp --dport 22 -j ACCEPT
查看已添加的iptables规则
iptables -L -nv
删除已添加的iptables规则
将所有iptables以序号标记显示
iptables -L -n --line-numbers
删除INPUT里序号为1的规则(要删除OUTPUT的话就改成OUTPUT)
iptables -D INPUT 1
参考:https://wangchujiang.com/linux-command/c/iptables.html