基础运维:iptables防火墙入门到掌握

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础运维:iptables防火墙入门到掌握相关的知识,希望对你有一定的参考价值。

一、简介

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

二、IPtables结构

Linux下的iptables表结构
技术分享图片

三、基础iptables

Linux centos7.X中iptables地位变低了,改成firewall。但日常使用的都是iptables。

1.安装iptables防火墙服务
[[email protected] ~]# yum install -y iptables

2.查找系统关于iptables防火墙的文件或者目录

[[email protected] ~]# find / -name iptables*    ( * 代表任意长度字符串)
/etc/sysconfig/iptables-config      #iptables防火墙的配置文件
/etc/selinux/targeted/active/modules/100/iptables       #selinux下的防护规则目录
/usr/bin/iptables-xml       #iptables的二进制xml文件
/usr/sbin/iptables-restore      #iptables的管理命令,重置或恢复iptables规则命令
/usr/sbin/iptables-save     #iptables的管理命令,保存iptables规则命令
/usr/sbin/iptables          #iptables管理命令,设置iptables规则命令
/usr/share/doc/iptables-1.4.21      #iptables的目录(带版本)
/usr/share/man/man1/iptables-xml.1.gz   #对应上面文件或命令的压缩软件包
/usr/share/man/man8/iptables-extensions.8.gz    #对应上面文件或命令的压缩软件包
/usr/share/man/man8/iptables-restore.8.gz       #对应上面文件或命令的压缩软件包
/usr/share/man/man8/iptables-save.8.gz      #对应上面文件或命令的压缩软件包
/usr/share/man/man8/iptables.8.gz       #对应上面文件或命令的压缩软件包
[[email protected] ~]# 

3.减少实验障碍操作(非生产环境)

[[email protected] ~]# iptables -F       #清除iptables规则链中已有的条目
[[email protected] ~]# iptables -X       #清除iptables自定义的规则链
[[email protected] ~]# iptables -Z       #清除iptables规则链中的数据包计算器和字节计算器(归零)

温馨提醒:该操作能在实验中少犯错,降低入门的门槛,在运维进阶中会详细说明各个规则及生产用处。

4.设置iptables规则链

4.1 官方设置说明:

[[email protected] ~]# iptables --help
iptables v1.4.21

Usage: iptables -[ACD] chain rule-specification [options]
       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]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

Commands:
Either long or short options are allowed.
  --append  -A chain        Append to chain
  --check   -C chain        Check for the existence of a rule
  --delete  -D chain        Delete matching rule from chain
  --delete  -D chain rulenum
                Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
                Insert in chain as rulenum (default 1=first)
  --replace -R chain rulenum
                Replace rule rulenum (1 = first) in chain
  --list    -L [chain [rulenum]]
                List the rules in a chain or all chains
  --list-rules -S [chain [rulenum]]
                Print the rules in a chain or all chains
  --flush   -F [chain]      Delete all rules in  chain or all chains
  --zero    -Z [chain [rulenum]]
                Zero counters in chain or all chains
  --new     -N chain        Create a new user-defined chain
  --delete-chain
            -X [chain]      Delete a user-defined chain
  --policy  -P chain target
                Change policy on chain to target
  --rename-chain
            -E old-chain new-chain
                Change chain name, (moving any references)
Options:
    --ipv4  -4      Nothing (line is ignored by ip6tables-restore)
    --ipv6  -6      Error (line is ignored by iptables-restore)
[!] --protocol  -p proto    protocol: by number or name, eg. `tcp‘
[!] --source    -s address[/mask][...]
                source specification
[!] --destination -d address[/mask][...]
                destination specification
[!] --in-interface -i input name[+]
                network interface name ([+] for wildcard)
 --jump -j target
                target for rule (may load target extension)
  --goto      -g chain
                              jump to chain with no return
  --match   -m match
                extended match (may load extension)
  --numeric -n      numeric output of addresses and ports
[!] --out-interface -o output name[+]
                network interface name ([+] for wildcard)
  --table   -t table    table to manipulate (default: `filter‘)
  --verbose -v      verbose mode
  --wait    -w [seconds]    maximum wait to acquire xtables lock before give up
  --wait-interval -W [usecs]    wait time to try to acquire xtables lock
                default is 1 second
  --line-numbers        print line numbers when listing
  --exact   -x      expand numbers (display exact values)
[!] --fragment  -f      match second or further fragments only
  --modprobe=<command>      try to insert modules using this command
  --set-counters PKTS BYTES set the counter during insert/append
[!] --version   -V      print package version.

4.2 通俗(常用)设置说明:

iptables(选项)(参数)
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

5.规则链设置

5.1 设置说明

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

举个例子:放行22端口,暴露在互联网中,任意地址都能通过22端口连接到服务器
解释:只需要在入站规则设置就好(入站就是进入服务器,出站就是从服务器出去)

[[email protected] ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[[email protected] ~]# iptables -I INPUT -p tcp --dport 22  -j ACCEPT
[[email protected] ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

5.2 显示规则详情

[[email protected] ~]# iptables -nvL
Chain INPUT (policy ACCEPT 3 packets, 234 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  128  9372 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 90 packets, 14552 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[[email protected] ~]# 

6.进阶iptables防火墙规则
这一部分有点复杂,放到运维进阶中,有兴趣可以关注动态,按照全栈运维路线更新。

以上是关于基础运维:iptables防火墙入门到掌握的主要内容,如果未能解决你的问题,请参考以下文章

马哥2016全新Linux+Python高端运维班-Iptables 防火墙基础练习,tcp_wrapper

第二十五天 IPtable基础框架扩展匹配及防火墙原理iptable入门

超详细:自动化运维之jumpserver堡垒机入门到掌握

Linux运维Ubuntu18.04设置端口开放(iptables)

Linux运维Ubuntu18.04设置端口开放(iptables)

Linux运维Ubuntu18.04设置端口开放(iptables)