博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
netfilter 五个表五个链介绍,iptables案例
阅读量:6295 次
发布时间:2019-06-22

本文共 14090 字,大约阅读时间需要 46 分钟。

hot3.png

linux防火墙 netfilter

  • selinux 临时关闭 setenforce 0
[root@bogon ~]# getenforceEnforcing                  开启状态[root@bogon ~]# setenforce 0[root@bogon ~]# getenforcePermissive                 暂停状态,重启后恢复
  • selinux 永久关闭 vi /etc/selinux/config(默认直接关闭selinux,不然会对后期的服务产生限制)

将SELINUX=enforcing改为SELINUX=disabled,保存后退出 (重启后才会生效)

# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:#     enforcing - SELinux security policy is enforced.#     permissive - SELinux prints warnings instead of enforcing.#     disabled - No SELinux policy is loaded.SELINUX=enforcing# SELINUXTYPE= can take one of three two values:#     targeted - Targeted processes are protected,#     minimum - Modification of targeted policy. Only selected processes are protected. #     mls - Multi Level Security protection.SELINUXTYPE=targeted

在centOS 7之前还有个防火墙是netfilter ,contos7以后改用 firewalld

关闭firewalld开机自启 : systemctl disable firewalld

关闭firewalld服务: systemctl stop firewalld

[root@aminglinux-01 network-scripts]# systemctl disable firewalldRemoved symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.[root@aminglinux-01 network-scripts]#

开启netfilter

yum install -y iptables-services   下载安装netfilter
[root@aminglinux-01 network-scripts]# systemctl enable iptables          设置开机自启Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.[root@aminglinux-01 network-scripts]# systemctl start iptables             启动服务[root@aminglinux-01 network-scripts]# iptables -nvL                       查看filter表Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination             8   576 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0               0     0 ACCEPT     all  --  lo     *       0.0.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    6   468 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 8 packets, 928 bytes) pkts bytes target     prot opt in     out     source               destination         [root@aminglinux-01 network-scripts]#

netfilter的5个表5个链接

  • 五个表

filter 主要用于过滤包,是系统预设的表,该表内建3个链:INPUT,OUTPUT,FORWARD。INPUT链作用于进入本机的包,OUTPUT链作用于本机送出去的包,FORWARD链作用于那些跟本机无关的包。

nat表 主要用于网络地址转换,它也有三个链。PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址(如果需要的话),OUTPUT链的作用是改变本地产生的包的目的地址,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。

mangle表主要用于给数据包做标记,然后根据标记去操作相应的包。这个表几乎不怎么用,除非像称为一个高级网络工程师。

raw表 可以实现不追踪某些数据包,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源,所以可以用raw表来指定某些端口的包不被追踪。

security表,在centos6中是没有的,他用于强制访问控制(MAC)的网络规则。

  • netfilter的5个链

PREROUTING: 数据包进入路由表之前。

INPUT:通过路由表后目的地为本机。

FORWARDING: 通过路由表后,目的地不为本机。

OUTPUT: 由本机产生,向外转发。

POSTROUTONG: 发送到网卡接口之前。


iptables 语法

iptables规则的储存位置/etc/sysconfig/iptables

[root@aminglinux-01 network-scripts]# 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-prohibitedCOMMIT[root@aminglinux-01 network-scripts]#

iptables -nvL 查看表,

  • 默认查看的是filter表
[root@bogon ~]# iptables -nvLChain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination             5   356 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0               0     0 ACCEPT     all  --  lo     *       0.0.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    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 4 packets, 400 bytes) pkts bytes target     prot opt in     out     source               destination
  • -t 指定查看的表比如查看nat表,iptables -nvL -t nat
[root@bogon ~]# iptables -nvL  -t natChain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 1 packets, 76 bytes) pkts bytes target     prot opt in     out     source               destination         Chain POSTROUTING (policy ACCEPT 1 packets, 76 bytes) pkts bytes target     prot opt in     out     source               destination

清空iptables所有规则iptables -F ,清空之后规则储存文件里面还是有配置的。

[root@aminglinux-01 ~]# iptables -F[root@aminglinux-01 ~]# ^C[root@aminglinux-01 ~]# iptables -nvLChain INPUT (policy ACCEPT 13 packets, 948 bytes) pkts bytes target     prot opt in     out     source               destination         Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 12 packets, 1208 bytes) pkts bytes target     prot opt in     out     source               destination         [root@aminglinux-01 ~]#

保存规则:service iptables save之后配置文件会有改变.

 

清除包及流量计数器置零:iptables -Z

  • 流量计数器是指iptables -nvL 输出内容的最前面有pkts,bytes这两列. iptables -Z清零
pkts      bytes有多少包   数据量

iptables -nvL --line-number 显示规则编号

清除包及流量计数器置零:iptables -Z 。

保存规则:service iptables save

-A/-D:表示增加/删除一条规则 (-A 加的规则默认写到前面已经有的规则的后面)

-I: 表示插入一条规则,其实跟-A一样也是增加 (不过-I加的规则会写到已有规则的前面,优先执行)

-p:表示指定协议,可以是tcp,udp,或者icmp

--dport: 跟-p 一起使用,表示指定目标端口。 (用之前前面必须-p 指定协议,不然会报错)

--sport: 跟-p 一起使用,表示指定来源的端口。 (用之前前面必须-p 指定协议,不然会报错)

-s:表示指定来源IP .(可以是一个IP段)。

-d: 指定目标IP.

-j:后面跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT 表示拒绝包。

-i:指定网卡(不常用:但是偶尔能用到)。

DROP: 丢掉数据包. 拒绝访问.

[root@aminglinux-01 ~]# iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP[root@aminglinux-01 ~]# iptables -nvLChain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination           440 36272 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0              21  1472 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0               2   104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22   71  7269 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited    0     0 DROP       tcp  --  *      *       192.168.188.1        192.168.188.128      tcp spt:1234 dpt:80Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 15 packets, 1288 bytes) pkts bytes target     prot opt in     out     source               destination         [root@aminglinux-01 ~]#

按照编号删除规则,删除第六条测试

[root@aminglinux-01 ~]# iptables -nvL --line-numberChain INPUT (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination         1      531 42528 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           3       21  1472 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           4        2   104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:225       73  7737 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited6        0     0 DROP       tcp  --  *      *       192.168.188.1        192.168.188.128      tcp spt:1234 dpt:80Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination         1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 69 packets, 7276 bytes)num   pkts bytes target     prot opt in     out     source               destination
[root@aminglinux-01 ~]# iptables -D INPUT 6
[root@aminglinux-01 ~]# iptables -nvL --line-numberChain INPUT (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination         1      585 46272 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           3       21  1472 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           4        2   104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:225       73  7737 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination         1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 4 packets, 480 bytes)num   pkts bytes target     prot opt in     out     source               destination         [root@aminglinux-01 ~]#

iptables 小案例

  • 需求。需要把80.22.21放行,22端口需要指定一个ip段,只有这个ip段的ip访问的时候才能访问到。

需要用到一个脚本

首先vi /usr/local/sbin/iptables.sh

[root@aminglinux-01 ~]# vim /usr/local/sbin/iptables.sh#!/bin/bashipt="/usr/sbin/iptables"               #定义一个变量。要写绝对路径$ipt -F                                #首先清空之前的规则$ipt -P INPUT DROP                     #没有写-t 说明操作的是filter表。然后定义一下默认策略。 #定义INPUT链的默认策略为全部丢掉。$ipt -P OUTPUT ACCEPT                #定义了OUTPUT链的默认策略为全部放行$ipt -P FORWARD ACCEPT               #定义了FORWARD链的默认策略为全部放行  $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT     #目的是让相关的数据包RELATED,ESTABLISHED这两个状态放行$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT    #把这个网段的数据22端口放行$ipt -A INPUT -p tcp --dport 80 -j ACCEPT                        #把80端口数据包放行$ipt -A INPUT -p tcp --dport 21 -j ACCEPT                        #把21端口数据包放行~                                                                                                                                                   ~                                                                                                                                                   ~

nat表应用

  • A机器两块网卡ens33(192.168.245.128),ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。

首先在虚拟机A上添加一块网卡,在B上也添加一块儿网卡,新加的两块网卡都改成LAN区段模式。然后配好ip。

  • 需求1:可以让B机器连接外网。

A机器上打开路由转发 echo"1">/proc/sys/net/ipv4/ip_forward

默认linux内核是没有开启转发的,/proc/sys/net/ipv4/ip_forward这个文件是0[root@aminglinux-01 ~]# cat /proc/sys/net/ipv4/ip_forward0改成1,就开起了内核转发。

命令行设置ipifconfig ens37 192.168.100.1/24 (重启后失效,改配置文件才会永久生效)

A上执行iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

[root@aminglinux-01 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE[root@aminglinux-01 ~]# iptables -t nat -nvLChain PREROUTING (policy ACCEPT 8 packets, 2525 bytes) pkts bytes target     prot opt in     out     source               destination         Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 MASQUERADE  all  --  *      ens33   192.168.100.0/24     0.0.0.0/0           [root@aminglinux-01 ~]#

B上设置网关为192.168.100.1

route -n 查看网关

[root@aminglinux-01 ~]# route -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         192.168.245.2   0.0.0.0         UG    100    0        0 ens33192.168.100.0   0.0.0.0         255.255.255.0   U     0      0        0 ens37192.168.245.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33[root@aminglinux-01 ~]#

添加网关 route add default gw 192.168.100.1

这时候ping A机器的1网卡,如果通信了说明B电脑已经可以访问公网了。

可以设置dns来进行验证。vi /etc/resolv.conf

  • 需求2:C机器只能和A通信,让C机器可以直接连接通B机器的22端口。

A上打开路由转发 echo"1">/ proc/sys/net/ipv4/ip_forward

A上执行iptabls -t nat -A PREROUTING -d 192.168.245.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.245.128

B上设置网关为192.168.100.1


扩展(selinux了解即可)

selinux教程

selinux pdf电子书

iptables应用在一个网段

sant,dnat,masquerade

iptables限制syn速率

转载于:https://my.oschina.net/u/3852961/blog/1829182

你可能感兴趣的文章
Tagged Stream Blocks
查看>>
JAVA的可变类与不可变类
查看>>
Install zabbix 2.2 + PostgreSQL + nginx + php on CentOS 6.x x64
查看>>
深入理解JVM之二:垃圾收集器概述
查看>>
AJAX是一门艺术: XHR篇
查看>>
docker process tree
查看>>
tunctl used & bridge sub interface network used with multi-network env
查看>>
JAVA应用小程序(Applet)
查看>>
UHD - USRP2 and N2x0 Series Device Manual
查看>>
Mac OS终端提示符前缀”bogon”
查看>>
iOS内存管理知识点
查看>>
记一次出现的OOM
查看>>
windows下mysql-8.0.11-winx64解压版配置
查看>>
Kotlin的解析(下)
查看>>
android打开pdf文件
查看>>
【python】 针对python3 下无法导入tkinter
查看>>
微信公众号开发小记(二)--服务器验证
查看>>
Gson解析JSON数据中动态未知字段key的方法
查看>>
磁盘硬件结构及容量计算
查看>>
Vue实战狗尾草博客后台管理系统
查看>>