iptables相关控制

本文详细介绍了iptables的filter和nat表的使用,包括INPUT、FORWARD、OUTPUT链的功能及其在网络中的作用。重点讲解了NAT表在网络地址转换的应用场景,如共享上网和端口映射。此外,还提供了iptables命令的参数说明,展示了如何配置规则来禁止或允许特定端口、IP段的访问,以及如何进行速率限制。最后,文章提到了防火墙规则的保存与恢复方法,确保配置的持久化。
摘要由CSDN通过智能技术生成

一、表与链

filter表主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包)filter表示iptbales默认使用的表,这个表定义了3个链(chains)
INPUT负责过滤所有目标地址是本机地址的数据包,就是过滤进入主机的数据包
FORWARD负责转发流经主机的数据包。起转发的作用。NAT模式,net.ipv4.ip_forward=0
OUTPUT处理所有源地址是本机地址的数据包,就是处理从主机发出去的数据包

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:

在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。
例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。
例如:局域网共享上网。

二、环境准备及命令

1、iptables 启动和关闭的命令

yum install -y  iptables-services
[root@m01 ~]# rpm -ql   iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service
防火墙相关模块 加载到内核中
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
[root@m01 ~]# lsmod |egrep 'filter|nat|ipt'
ipt_REJECT             12541  0 
nf_reject_ipv4         13373  1 ipt_REJECT
nf_nat_ftp             12770  0 
nf_conntrack_ftp       18638  1 nf_nat_ftp
iptable_filter         12810  1 
xt_nat                 12681  0 
iptable_nat            12875  0 
nf_nat_ipv4            14115  1 iptable_nat
nf_nat                 26583  3 nf_nat_ftp,nf_nat_ipv4,xt_nat
nf_conntrack          137239  7 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4
ip_tables              27126  2 iptable_filter,iptable_nat
libcrc32c              12644  3 xfs,nf_nat,nf_conntrack
[root@m01 ~]# systemctl stop firewalld
[root@m01 ~]# systemctl disable   firewalld
[root@m01 ~]# systemctl start iptables.service
[root@m01 ~]# systemctl enable iptables.service
Created symlink from
/etc/systemd/system/basic.target.wants/iptables.service to
/usr/lib/systemd/system/iptables.service.
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

2、iptables命令参数

-t:指定表 filter(默认) nat
-A:append 把规则追加到末尾
-I (大写字母I):insert 把规则插入到规则的第1条 (添加拒绝类规则的时候)
-p:protocal 指定协议:tcp /udp/icmp
–dport:destination port 目标端口
–sport:source port 源端口
-d:dest ip address 目标ip地址
-s:source ip address 源ip地址
-i:input 数据进来的时候通过的网卡
-o:output 数据出去的时候通过的网卡
-j:jump 方法 DROP(拒绝) ACCEPT(准许) REJECT(拒绝)
-F:清除链中所有的规则
-X:清空自定义链的规则
-Z:清空计数器
-n:不要把端口解析服务名字
-L:显示表中的规则
–line-number:给每个链中的规则加上行号
-D:删除规则 根据规则的号码进行删除 -D INPUT 2

3、配置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  

4、禁止访问某个端口

[root@m01 ~]# iptables -I INPUT -p tcp --dport 22 -j DROP  

删除规则 -D

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

5、禁止网段连入(禁止10.0.0.0网段 8080端口)

#在m01已经将10.0.0.0网段的所有主机禁止8080端口连入
[root@m01 ~]# iptables -I INPUT -s 10.0.0.0/24  -p tcp --dport 8080 -j DROP     
#可以看见web02已经连接不进去了
[root@web02 ~]# telnet 10.0.0.61 8080
Trying 10.0.0.61...   

6、只允许指定网段连入(允许10.0.0.0网段)

[root@m01 ~]# iptables -I INPUT ! -s 10.0.0.0/24 -j DROP

7、指定多个端口

[root@m01 ~]# iptables -I INPUT -p tcp -m multiport ! --dport 80,443 -j DROP
[root@m01 ~]# iptables -I INPUT -p tcp  ! --dport 1024:65535 -j DROP   

8、匹配ICMP类型

ICMP(Internet Control Message Protocol)Internet控制报文协议
通过内核参数 控制 禁止被ping

[root@m01 ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.icmp_echo_ignore_all = 1
[root@m01 ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 1

通过防火墙规则 控制 是否可以被ping

#在m01防火墙规则上禁止被ping
[root@m01 ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    
#在web01上ping m01可以看到ping不通
[root@web02 ~]# ping 10.0.0.61
PING 10.0.0.61 (10.0.0.61) 56(84) bytes of data.

9、匹配网络状态(TCP/IP连接状态)

-m state --state NEW:已经或将启动新的连接 ESTABLISHED:已建立的连接 RELATED:正在启动的新连接 INVALID:非法或无法识别的 iptables -A INPUT -m state --state
ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state
ESTABLISHED,RELATED -j ACCEPT

意思是允许进入的数据包只能是刚刚我发出去的数据包的回应,ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。

10、限制并发及速率

[root@m01 ~]# iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8 limit: avg 6/min burst 5

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    
#-m limit --limit n/{second/minute/hour};
#解释:指定时间内的请求速率“n”为速率,后面为时间,分别为:秒  分  时
#--limit-burst [n]
#解释:在同一时间内允许通过的请求“n”为数字,不指定默认为5

11、防火墙规则的保存与恢复

root@m01 ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
[root@m01 ~]# iptables-save > /etc/sysconfig/iptables
[root@m01 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Wed Jul 24 21:00:17 2019
*filter
:INPUT ACCEPT [276:25808]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [209:23764]
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min -j ACCEPT
COMMIT
# Completed on Wed Jul 24 21:00:17 2019
# Generated by iptables-save v1.4.21 on Wed Jul 24 21:00:17 2019
*nat
:PREROUTING ACCEPT [394:32788]
:INPUT ACCEPT [9:616]
:OUTPUT ACCEPT [1:148]
:POSTROUTING ACCEPT [1:148]
COMMIT
# Completed on Wed Jul 24 21:00:17 2019
[root@m01 ~]# #恢复
[root@m01 ~]# #重启防火墙
[root@m01 ~]# iptables -F
[root@m01 ~]# 
[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-restore  </etc/sysconfig/iptables
[root@m01 ~]# iptables -nL   
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8 limit: avg 6/min burst 5

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

12、允许本机lo通讯规则

#允许本机回环lo接口数据流量流出与流入
[root@m01 ~]# iptables -A INPUT -i lo -j ACCEPT
[root@m01 ~]# iptables -A OUTPUT -o lo -j ACCEPT 
# 意思就允许本地环回接口在INPUT表的所有数据通信,-i 参数是指定接口,接口是lo,lo就是Loopback(本地环回接口

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

[root@m01 ~]# iptables -P INPUT DROP
[root@m01 ~]# iptables -P FORWARD DROP
[root@m01 ~]# iptables -P OUTPUT ACCEPT
[root@m01 ~]# iptables -A INPUT -m multiport -p tcp --dport 443,80 -j ACCEPT
[root@m01 ~]# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0  
[root@m01 ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
[root@m01 ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
[root@m01 ~]# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           
ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0           

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0  

[root@m01 ~]# iptables-save
# Generated by iptables-save v1.4.21 on Wed Jul 24 21:45:21 2019
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [37:6212]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 443,80 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -j ACCEPT
-A INPUT -s 172.16.1.0/24 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Wed Jul 24 21:45:21 2019
# Generated by iptables-save v1.4.21 on Wed Jul 24 21:45:21 2019
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Wed Jul 24 21:45:21 2019

二、nat设置

1、环境设置

[root@m01 ~]# iptables -P INPUT ACCEPT
[root@m01 ~]# iptables -P FORWARD ACCEPT
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           
ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0  

2、实现把访问10.0.0.62:80的请求转发到172.16.1.7:80

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

3、实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。

iptables  -A  POSTROUTING -p tcp -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26

iptables  -A  POSTROUTING -p tcp -s 172.16.1.0/24 -j SNAT --to-source  MASQUERADE
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值