首页 > 系统相关 >Linux-iptables

Linux-iptables

时间:2023-03-01 19:48:03浏览次数:50  
标签:iptables Linux 防火墙 ACCEPT m01 INPUT root

iptables

一、概述

iptables主要为了封端口,封ip,实现NAT功能(共享上网,端口映射,ip映射)

二、防火墙种类及使用说明

硬件:整个企业的入口

  • 三层路由:H3C,华为,Cisco(思科)

  • 防火墙:深信服,绿盟,奇安信

软件:开源软件,网站内部,封ip

  • iptables 写入到Linux内核中 大部分工作在4层
  • firewalld centos7
  • nftables centos8
  • ufw(ubuntu firewalld) Ubuntu

云防火墙(公有云)

阿里云

  • 安全组(封ip,封端口)
  • NAT网关(共享上网,端口映射)
  • waf应用防火墙

waf防火墙(应用防火墙,处理7层的攻击) SQL注入

温馨提示:

中小企业:使用公有云,安全组,waf防火墙,态势感知

访问量巨大:使用硬件防火墙,waf防火墙,硬件服务器+云服务器

三、一些关于防火墙的名词

容器(Netfilter)

表(table): 存放链的容器,防火墙最大概念

链(chain): 存放规则的容器

规则 (policy): 准许或拒绝规则

四、 iptables 执行过程

工作流程小结:※※※※※

  1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
  2. 如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。
  3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
  4. 防火墙的默认规则是所有规则都匹配完才会匹配的。

五、表与链

1. 简介

表(table)是对功能的分类,防火墙功能(filter表),共享上网,端口转发(nat表)

链对数据流进行处理,需要使用不同的链(数据流入(INPUT),数据流出(OUTPUT))

iptables 是4表伍链

4表: filter 表 nat表 raw表 mangle表

伍链: INPUT OUTPUT FORWARD PREROUTING POSTROUTING

[root@m01 ~]# iptables -nL
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   


[root@m01 ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination    

2. 每个表说明

2.1 filter表

是iptables默认的表,filter表示过滤.

实现防火墙功能:(对数据包的filter过滤)屏蔽或准许,端口,ip.

filter表 强调:主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包) filter表示iptables默认使 用的表,这个表定义了三个链(chains) 企业工作场景:主机防火墙
INPUT 负责过滤所有目标地址是本机地址的数据包 通俗来说:就是过滤进入主机的数据包 (能否让数据包进入服务器)
FORWARD 路过: 负责转发流经主机的数据包。起转发的作用,和NAT关系很大,net.ipv4.ip_forward=0
OUTPUT 处理所有源地址是本机地址的数据包 通俗的讲:就是处理从主机发出去的数据包

2.2 nat表

实现nat功能

  • 实现共享上网(内网服务器上外网)

  • 端口映射和ip映射

nat 负责网络地址转换的,即来源与目的IP地址和port的转换。
应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务相关。
工作场景:
1. 用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING)
2. 做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务(PREROUTING)
3. WEB,单个端口的映射,直接映射80端口(PREROUTING) 这个表定义了3个链,nat功能相当于网络的acl控 制。和网络交换机acl类似
OUTPUT 和主机放出去的数据包有关,改变主机发出数据包的目的地址。
PREROUTING 在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等
就是收信时,根据规则重写收件人的地址。
例如:把公网IP:xxx.xxx.xxx.xxx映射到局域网的xx.xx.xx.xx服务器上。
如果是web服务,可以报80转换为局域网的服务器9000端口上 10.0.0.61 8080(目标端口) ----nat--------- 10.0.0.7 22
POSTROUTING 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。
写好发件人的地址,要让家人回信时能够有地址可回。
例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。 生产应用:局域网共享上网。

image

六、环境准备及命令

主机名 ip 说明
m01 10.0.0.61/172.16.1.61 作为防火墙
web01 10.0.0.7/172.16.1.7
#安装iptables
[root@m01 ~]# yum -y install iptables-services


#防火墙相关模块 加载到内核中
#写入到开机自启动.
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state	

#永久 
cat >>/etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state	
EOF
#记得给执行权限


#使用iptables,要关闭firewalld
[root@m01 ~]# systemctl status firewalld


#启动iptables
[root@m01 ~]# systemctl start iptables.service 
[root@m01 ~]# systemctl status iptables.service 
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
   Active: active (exited) since Sat 2023-02-25 09:22:36 CST; 1s ago
  Process: 66900 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
 Main PID: 66900 (code=exited, status=0/SUCCESS)

Feb 25 09:22:36 m01 systemd[1]: Starting IPv4 firewall with iptables...
Feb 25 09:22:36 m01 iptables.init[66900]: iptables: Applying firewall rules: [  OK  ]
Feb 25 09:22:36 m01 systemd[1]: Started IPv4 firewall with iptables.


#查看filter表中的规则 ,默认查看的是filter表
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)   #链
#规则
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT) #链
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT) #链
target     prot opt source               destination   

1. iptabls命令参数

参数 含义
-L 显示表中的所有规则
-n 不要把端口或ip反向解析为名字
指定表
-t 指定表,不指定默认是filter表
指定连接(加入/追加/删除)
-A append 追加把规则写入到链的末尾.加入准许类规则 使用-A
-I insert 把规则加在链的第1条 拒绝类规则放在所有规则最上面 拒绝类 -I
-D delete 删除 -D INPUT 1
-p 指定协议 protocal tcp/udp/icmp/all
--dport 目标端口 dest destination ⚠ 指定端口的时候加上协议 -p tcp
--sport 源端口 source 源
-m 指定模块 multiport
-i input 输入的时候 从哪个网卡进来
-o ouput 输出的时候 从哪个网卡出去
-j 满足条件后的动作 : DROP(拒绝)/ACCEPT(准许)/REJECT(拒绝)
DROP REJECT拒绝
DROP 把数据丢掉 不会返回信息给用户
REJECT 拒绝 返回拒绝信息
-F flush 清除指定表中所有的规则,备份.
-X 删除用户自定义的链
-Z zero 链的计数器清零(数据包计数器与数据包字节计数器) iptables
-v 显示数据包,数据量

七、配置filter表规则

正式配置之前 先备份, 清空规则

[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z

[root@m01 ~]# iptables -nL
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 

1. 禁止访问22端口

#拒绝用户访问22端口
[root@m01 ~]# iptables -t filter  -A INPUT   -p tcp --dport 22 -j DROP
#查看规则并加上序号
[root@m01 ~]# iptables -t filter  -nL   --line-number
#删除规则
[root@m01 ~]# iptables -t filter  -D INPUT  1   #根据序号删除

2. 封ip,屏蔽某个ip

[root@m01 ~]# iptables -I INPUT -s 10.0.0.7 -j DROP

3. 禁止网段连入(禁止10.0.0.0/24网段访问 8888端口)

[root@m01 ~]# iptables -I INPUT  -s 10.0.0.0/24  -p tcp  --dport 8080  -j DROP

4. 只允许指定网段连入(允许172.16.1.0网段)

#1.利用!进行排除
[root@m01 ~]# iptables -I INPUT ! -s 172.16.1.0/24  -j DROP

#2.修改链默认规则 修改为拒绝,添加准许
[root@m01 ~]# iptables -P INPUT DROP                #修改默认规则
[root@m01 ~]# iptables -I INPUT -s 172.16.1.0/24  -j ACCEPT

5. 指定多个端口

#1.
[root@m01 ~]# iptables -I INPUT  -p tcp --dport 8888   -j DROP
[root@m01 ~]# iptables -I INPUT  -p tcp --dport 9999   -j DROP

#2.
[root@m01 ~]# iptables  -A INPUT   -m multiport -p tcp  --dport 80,443  -j ACCEPT

#注:如果是 连续的端口 可以不加上-m multiport   1:1024
[root@m01 ~]# iptables -I INPUT  -p tcp  --dport 1024:65535  -j DROP

6. 匹配ICMP类型

#通过防火墙规则 控制是否可以ping
[root@m01 ~]# iptables -I INPUT  -p icmp --icmp-type 8  -j DROP
#可以简写为
[root@m01 ~]# iptables -t filter -I INPUT -p icmp -j DROP

补充:

通过内核参数 控制 禁止被ping

[root@m01 ~]# cat /etc/sysctl.conf
#/proc/sys/net/ipv4/icmp_echo_ignore_all
#net网络 ipv4协议 icmp协议忽略所有
net.ipv4.icmp_echo_ignore_all = 1

#生效
[root@m01 ~]# sysctl -p 

7. 匹配网络状态(TCP/IP连接状态)

[root@m01 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-m state --state 状态即可.
NEW:已经或将启动新的连接
ESTABLISHED:已建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的

8. 限制并发及速率

-m limit --limit 10/minute     #每分钟只能有10个数据包 每6秒生成
-m limit --limit n/{second/minute/hour}:
解释:指定时间内的请求速率”n”为速率,后面为时间分别为:秒 分 时

--limit-burst [n]
解释:在同一时间内允许通过的请求”n”为数字,不指定默认为5

[root@m01 ~]# iptables -I INPUT  -p icmp  -m limit --limit 10/minute    --limit-burst 5   -j ACCEPT

9. 防火墙规则的保存与恢复

iptables-save 进行备份,默认输出到屏幕
iptables-restore 进行恢复,加上文件
写入到/etc/sysconfig/iptables
[root@m01 ~]# iptables-save  >/etc/sysconfig/iptables
[root@m01 ~]# iptables-restore </etc/sysconfig/iptables

10. 实际用法

iptables配置方式

  • 默认规则是 ACCEPT

  • 默认规则是 DROP

白名单模式 默认是拒绝

10.1 ssh可以连接进来

iptables -F
iptables -X
iptables -Z
iptables -nL 

iptables -A INPUT -p tcp dport 22 -j ACCEPT

10.2 设置允许本机lo通讯规则

# 允许本机回环lo接口数据流量流出与流入
# -i 数据进入的时候
iptables -A INPUT -i lo -j ACCEPT
# -o 数据流出的时候
iptables -A OUTPUT -o lo -j ACCEPT

10.3 配置默认规则及 放行 80 443端口

iptables -A INPUT  -m multiport -p tcp  --dport 443,80   -j ACCEPT

八、NAT

1.实现共享上网

1.1 防火墙配置

配置防火墙规则,改为默认是准许.
清空其他规则.
配置防火墙共享上网规则.

[root@m01 ~]# iptables -t nat -A POSTROUTING  -s 172.16.1.0/24   -j SNAT  --to-source 10.0.0.61 
#防火墙上开启ip_forward功能(内核转发功能)
[root@m01 ~]# echo 'net.ipv4.ip_forward = 1'  >> /etc/sysctl.conf 
[root@m01 ~]# sysctl -p
net.ipv4.ip_forward = 1

注意事项:

公网ip不固定

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE

1.2 web配置

#设置172.16.1.7只有内网 关闭eth0网卡.仅开启eth1网卡,配置网关指向m01(172.16.1.61)
[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
DEVICE=eth1
IPADDR=172.16.1.7
PREFIX=24
ONBOOT=yes
BOOTPROTO=static
GATEWAY=172.16.1.61		#第二块网卡,增加网关
[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=1476a08d-4e1c-49f3-8958-bf6bd8625ef8
DEVICE=eth0
ONBOOT=no		#设置为no,把第1张网卡停掉
IPADDR=10.0.0.7
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
DNS2=223.6.6.6
IPV6_PRIVACY=no
[root@web01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.1.61     0.0.0.0         UG    100    0        0 eth1
172.16.1.0      0.0.0.0         255.255.255.0   U     100    0        0 eth1


#这样web 172.16.1.7就能上外网了

补充

共享上网流程:

  1. 防火墙添加规则 SNAT\规则 nat表 POSTROUTING
  2. 防火墙服务器 开启ip转发功能
  3. 后端节点,配置网卡,让网卡网关指向防火墙
    1. 后端节点的网卡中配置DNS1=223.5.5.5 ,DNS2=223.6.6.6

2. 实现端口转发

端口映射为了解决用户进来的问题. 外部的用户访问内网的某个服务器,端口

#实现访问10.0.0.61的9999,就会访问到172.16.1.7的22
[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9999 -j DNAT --to-destination 172.16.1.7:22
[root@m01 ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            10.0.0.61            tcp dpt:9999 to:172.16.1.7:22

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  172.16.1.0/24        0.0.0.0/0            to:10.0.0.61

#删除规则
[root@m01 ~]# iptables -t nat -D PREROUTING 1

3. 实现ip映射

[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.7 

标签:iptables,Linux,防火墙,ACCEPT,m01,INPUT,root
From: https://www.cnblogs.com/world-of-yuan/p/17169445.html

相关文章

  • Linux-shell编程(一)
    shell编程(一)一、概述shell命令解释器:bash编程命令解释器bash目前应用最广泛一款命令解释器,红帽系列(默认),Debian,Ubuntu,BASH全称:Bourne-AgainSHelld......
  • Linux-shell编程(二)
    shell编程(二)一、运算1.运算符运算符含义+加-减*乘/除%取余^或**幂、指数i=i+1i++计算次数j=j+j+=求和,累加&&并且,前一个......
  • 【离线数仓环境搭建】安装linux及安装JDK
    创建新的虚拟机配置网络    安装vimsudoyuminstall-yvim 修改免密sudovim/etc/sudoers(执行安装命令的时候,不再需要输入密码)  查看防火墙状态......
  • Linux-shell编程(三)
    shell编程(三)一、循环1.循环概述循环类型格式说明for循环for变量in清单(列表);do命令;donefor((i=1;i<=10;i++));doecho$i;done最常用的循环w......
  • Linux下的rsync远程增量备份详解
    (Linux下的远程增量备份详解)一、rsync工具介绍1.rsync工具简介rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具RemoteSync可以远程同步,支持本地复制,或者......
  • Linux系统的进程管理
    (Linux系统的进程管理)一、系统进程介绍1.进程概念进程process是指正在执行的程序;是程序正在运行的一个实例。它由程序指令,和从文件、其它程序中读取的数据或系统用户的......
  • Linux通过Tomcat部署war包
    Linux通过Tomcat部署war包​ 前提:Linux上已经安装好tomcat、jdk等环境​ 将war包丢到服务器上​ cd到tomcat安装路径下的webapps/ROOT/下,删除里面的所有文件:......
  • Linux操作命令(七) 1.cut命令 2.paste命令 3.tr命令
    1、cut命令常用参数参数描述-b以字节为单位进行分割-c以字符为单位进行分割-d自定义分隔符,默认为制表符-f自定义字段--complement抽取整个文本......
  • Linux关闭防火墙
    Linux虚拟机关闭防火墙是不安全的,但在仅主机的模式下是没问题的,关闭防火墙是为了让虚拟机集群可以相互访问。命令:serviceiptablesstop验证:serviceiptablesstatus显......
  • java AES加密、解密(兼容windows和linux)
     1.准备工作2018年10月24日10点46分importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKe......