iptables防火墙基本使用

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 在规则链的末尾加入新规则;
-I num 在规则链的头部加入新规则;
-D num 删除某一条规则;
-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防火墙基本使用_第1张图片

删除已添加的iptables规则

将所有iptables以序号标记显示

iptables -L -n --line-numbers

iptables防火墙基本使用_第2张图片

删除INPUT里序号为1的规则(要删除OUTPUT的话就改成OUTPUT)

iptables -D INPUT 1

iptables防火墙基本使用_第3张图片

 

参考:https://wangchujiang.com/linux-command/c/iptables.html

你可能感兴趣的:(Linux)