关闭firewalld,启动iptables服务

[root@proxy ~]# systemctl stop firewalld.service     //关闭firewalld服务器

[root@proxy ~]# systemctl disable firewalld.service

[root@proxy ~]# yum -y install iptables-services   //安装iptables-services并启动服务

[root@proxy ~]# systemctl start iptables.service

iptables框架(4表5链,区分大小写)

4表:nat表(地址转换表)、filter表(数据过滤表,出入规则)、raw表(状态跟踪表)、mangle表(包标记表)。

5链:INPUT链(入站规则)              OUTPUT链(出站规则)            FORWARD链(转发规则)

PREROUTING链(路有前规则,用于目标地址转换DNAT)     POSTROUTING链(路由后规则,用于源地址转换SNAT)

规则(匹配即停止):ACCEPT:允许通过/放行                      DROP:直接丢弃,不给出任何回应

REJECT:拒绝通过,必要时会给出提示          LOG:记录日志,然后传给下一条规则

REDIRECT:重定向、映射、透明代理           SNAT:源地址转换

DNAT:目标地址转换             MASQUERADE:IP伪装(NAT),后面不跟ip,实时监控网卡ip,是多少就转多少

iptables常用选项

I  默认插入第一行  后面跟数字可以精确插入某行

iptabels语法格式

[root@proxy ~]# iptables  [-t 表名]  选项  [链名]  [条件]  [-j 目标操作]

[root@proxy ~]# iptables  -t  filter  -I  INPUT -p  icmp  -j  REJECT   //ping协议icmp

注意事项与规律:

可以不指定表,默认为filter表                  可以不指定链,默认为对应表的所有链

除非设置默认策略,否则必须指定匹配条件        选项/链名/目标操作用大写字母,其余都小写

案例

iptables  -t  filter  -A  INPUT  -p tcp  -j  ACCEPT   //追加规则至filter表中的INPUT链的末尾,允许任何人使用TCP协议访问本机

iptables  -I  INPUT  -p  udp  -j  ACCEPT      //插入规则至filter表中的INPUT链的开头,允许任何人使用UDP协议访问本机

iptables  -I  INPUT 2  -p  icmp  -j  ACCEPT   //插入规则至filter表中的INPUT链的第2行,允许任何人使用ICMP协议访问本机

[root@proxy ~]# iptables  -nL  INPUT                    //仅查看INPUT链的规则

target     prot opt source               destination

ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0

ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0

[root@proxy ~]# iptables  -L  INPUT  --line-numbers        //查看规则,显示行号

num  target     prot opt source         destination

1    ACCEPT     udp   --  anywhere     anywhere

2    ACCEPT     icmp --   anywhere     anywhere

3    ACCEPT     tcp  --   anywhere     anywhere

[root@proxy ~]# iptables  -D  INPUT  3    //删除filter表中INPUT链的第3条规则

[root@proxy ~]# iptables  -nL  INPUT                //查看规则,确认是否删除

[root@proxy ~]# iptables  -F       //清空filter表中所有链的防火墙规则

[root@proxy ~]# iptables  -t  nat  -F    //清空nat表中所有链的防火墙规则

[root@proxy ~]# iptables  -t  mangle  -F     //清空mangle表中所有链的防火墙规则

[root@proxy ~]# iptables  -t  raw  -F     //清空raw表中所有链的防火墙规则

[root@proxy ~]# iptables  -t  filter  -P  INPUT  DROP   //设置防火墙默认规则

[root@Proxy ~]# service iptables save   //保存防火墙规则,不保存重启丢失

filter过滤和转发控制

根据防火墙保护的对象不同,防火墙可以分为主机型防火墙与网络型防火墙。

主机型防火墙,主要保护的是服务器本机(过滤威胁本机的数据包),input  output 。

网络防火墙,主要保护的是防火墙后面的其他服务器,如web服务器、FTP服务器等,规则写在forward。

iptables防火墙规则的条件

iptables防火墙可以根据很多很灵活的规则进行过滤行为,具体常用的过滤条件:

可以!取反  !-p tcp -j ACCEPT  不是tcp的允许

主机型防火墙案例

[root@proxy ~]# iptables -I INPUT -p tcp --dport 80 -j REJECT

[root@proxy ~]# iptables -I INPUT -s 192.168.2.100 -j REJECT

[root@proxy ~]# iptables -I INPUT -d 192.168.2.5 -p tcp --dport 80 -j REJECT

[root@proxy ~]# iptables -I INPUT -i eth0 -p tcp --dport 80 -j REJECT

iptables  -A  INPUT  -s 192.168.4.120  -j  DROP   //丢弃192.168.4.120发给本机的所有数据包

iptables  -A  INPUT -s  10.0.10.0/24  -j  DROP   //丢弃10.0.10.0/24网络中所有主机发送给本机的所有数据包

iptables -A  INPUT -s 114.212.33.12 -p tcp --dport 22 -j REJECT  //拒绝114.212.33.12使用tcp协议远程连接本机ssh(22端口)

网络型防火墙案例

[root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward            //开启路由转发,仅当前有效,计算机重启后无效,1启动0关闭

[root@proxy ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf   //修改/etc/sysctl.conf配置文件,可以实现永久有效规则

[root@client ~]# nmcli connection modify eth0 ipv4.gateway 192.168.4.5    //添加网关

[root@client ~]# nmcli connection up eth0

[root@web1 ~]# nmcli connection modify eth1 ipv4.gateway 192.168.2.5

[root@web1 ~]# nmcli connection up eth1

[root@client ~]# ping 192.168.2.100    //测试网关生效

[root@web1 ~]# ping 192.168.4.100

[root@web1 ~]# yum -y install httpd    //在web1主机上启动http服务

[root@web1 ~]# echo "test page" > /var/www/html/index.html

[root@web1 ~]# systemctl restart httpd

[root@client ~]# curl http://192.168.2.100                    //没有防火墙的清空下client访问web服务,成功

iptables -I FORWARD -s 192.168.4.100 -p tcp --dport 80 -j DROP  //设置proxy主机的防火墙规则,保护防火墙后面的Web服务器

[root@client ~]# curl http://192.168.2.100                    //再次使用client客户端访问,失败

禁ping的相关策略

iptables -I INPUT -p icmp -j DROP   //其他主机无法ping本机,但本机也无法ping其他主机

iptables  -A  INPUT  -p icmp  --icmp-type echo-request  -j  DROP   //仅禁止入站的ping请求,不拒绝入站的ping回应包

[root@proxy ~]# iptables -p icmp --help    //关闭ICMP的类型,可以参考help帮助

防火墙扩展规则

iptables 选项 链名称 -m 扩展模块 --具体扩展条件 -j 动作

根据MAC地址过滤(必须要主机能识别对方的mac,否则无效)

[root@proxy ~]# iptables -F

[root@client ~]#iptables -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j DROP  //设置规则禁止192.168.4.100使用ssh远程本机

[root@client ~]# ifconfig eth0  192.168.4.101

[root@client ~]# ssh 192.168.4.5                     //ip修改后规则失效,连接成功

[root@client ~]# ip link show eth0                    //查看client的MAC地址,也可以nmap -sP 扫描对方mac地址

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000

link/ether 52:54:00:00:00:0b brd ff:ff:ff:ff:ff:ff

iptables -A INPUT -p tcp --dport 22 -m mac --mac-source  52:54:00:00:00:0b  -j  DROP //拒绝52:54:00:00:00:0b主机远程本机

基于多端口设置过滤规则

[root@proxy ~]# iptables  -A  INPUT  -p tcp   -m  multiport --dports  20:22,25,80,110,143,16501:16800  -j  ACCEPT

//一次性开启20,21,22,25,80,110,143,16501到16800所有的端口, : 表示连续

根据IP地址范围设置规则

iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT //允许从192.168.4.10-20登录

iptables -A INPUT -p tcp --dport 22  -s 192.168.4.0/24  -j  DROP //禁止从 192.168.4.0/24 网段其他的主机登录

配置SNAT实现共享上网

效果:client伪装为192.168.2.5后访问web服务器

搭建内外网案例环境

按上图配置ip、网关,设定192.168.2.0/24网络为外部网络,192.168.4.0/24为内部网络。

client访问web1服务器web页,web1的日志记录的是192.168.4.100在访问网页。

设置防火墙规则,实现IP地址的伪装(SNAT源地址转换)

[root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward            //开启路由转发

iptables -t nat -A POSTROUTING -s 192.168.4.0/24–p tcp --dport 80 -j SNAT --to-source 192.168.2.5 //SNAT地址转换

[root@proxy ~]# tail  /var/log/httpd/access_log  //登陆web主机查看日志

.. ..

192.168.2.5 - - [12/Aug/2018:17:57:10 +0800] "GET / HTTP/1.1" 200 27 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"               //通过日志会发现,客户端是先伪装为了192.168.2.5之后再访问的web服务器!

十二、iptables基本管理的更多相关文章

  1. Redis教程(十二):服务器管理命令总结

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/140.html 一.概述: Redis在设计之初就被定义为长时间不间断运行 ...

  2. 《Linux内核设计与实现》读书笔记(十二)- 内存管理【转】

    转自:http://www.cnblogs.com/wang_yb/archive/2013/05/23/3095907.html 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己 ...

  3. springcloud(十二)-springcloud-config统一管理微服务配置

    1.为什么要统一管理微服务配置 对于传统的单体应用,常使用配置文件管理所有配置.例如一个SpringBoot开发的单体应用,可将配置内容放在application.yml文件中.如果需要切换环境,可设 ...

  4. 第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  5. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...

  6. Linux学习总结(十二)—— CentOS用户管理:创建用户、修改用户、修改密码、密码有效期、禁用账户、解锁账户、删除用户、查看所有用户信息

    文章首发于Linux学习总结(十二)-- CentOS用户管理,请尊重原创保留原文链接. 创建用户 useradd -g webadmin -d /home/zhangsan zhangsan pas ...

  7. [转帖]十二 个经典 Linux 进程管理命令介绍

    https://www.cnblogs.com/swordxia/p/4550825.html 接了 http referer 头 没法显示图片 可以去原始blog 里面去查看.   随笔- 109  ...

  8. 【译】第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  9. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理四 (二十二)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  10. Linux学习之CentOS(二十六)--Linux磁盘管理:LVM逻辑卷的创建及使用

    在上一篇随笔里面 Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理,详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理, ...

随机推荐

  1. 【前端】使用layui、layer父子frame传值

    前提: 半前后台分离,前后台都是使用JSON格式的数据进行交互.[化外音,这里我说半分离,是因为使用了themleaf模板进行路由.] 业务说明: 前端通用的逻辑是:列表展示数据,点击事件弹出fram ...

  2. 【微信小程序】--bindtap参数传递,配合wx.previewImage实现多张缩略图预览

    本文为原创随笔,纯属个人理解.如有错误,欢迎指出. 如需转载请注明出处 在微信小程序中预览图片分为 a.预览本地相册中的图片. b.预览某个wxml中的多张图片. 分析:实质其实是一样的.都是给wx. ...

  3. SwiftUI 简明教程之指示器

    本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容. Eul 是一款 SwiftUI & Combine 教程 App(iOS.macOS),以文章(文字.图片. ...

  4. app.json文件配置

    pages 页面路径的存放列表 通过手写页面路径可以在对应目录下自动创建对应文件 "pages": [ "pages/demo3/demo3", "p ...

  5. 使用constexpr时遇到的小坑

    最近在使用constexpr的时候无意中踩了个小坑. 下面给个小示例: #include <iostream> constexpr int n = 10; constexpr char * ...

  6. Git 系列教程(9)- 打标签

    打标签 一般会给提交历史打个标签,方便后续进行筛选.查看 列出标签 可带上可选的 -l 选项 --list $ git tag v1.0 v2.0 这个命令以字母顺序列出标签 可以按照特定的模式查找标 ...

  7. 关于MDI多文档程序的一些思考

    MDI程序的框架 客户窗口是一个预定义的窗口类(MDICLIENT),它是框架窗口的子窗口同时也是各个子文档窗口的父窗口.框架窗口和各个子文档窗口都是自定义的窗口类. MDI程序中的一些要点 窗口中的 ...

  8. Java中NIO的简单介绍

    NIO基本介绍 Java NIO(New IO) 也有人称之为Java non-blocking IO 是从Java1.4版本开始引入的一个新的IO API,可以代替标准的IO API.NIO与原来的 ...

  9. Springboot项目之阿里云OSS快速入门

    阿里云oss 阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量.安全.低成本.高可靠的云存储服务.您可以通过本文档提供的简单的REST接口,在任何 ...

  10. ES6中函数参数默认值问题

    参数默认值 // 以前的参数默认值写法 let fn = (a, b) => { a = typeof a === "undefined" ? 10 : a b = type ...