热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于linux下的iptables策略管理服务

首先,请允许我先介绍一下什么是iptables?iptables并不是真正的防火墙,可以理解为一个客户端代理。用户通过iptables这个代理,将用户的安全设定执行到对应的“安全

首先,请允许我先介绍一下什么是iptables?

iptables 并不是真正的防火墙,可以理解为一个客户端代理。用户通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”(netfilter).所以说,iptables其实是一个命令行工具,位于用户空间,我们用iptables操作整整的框架。
iptables是按照规则办事的,即rules,规则一般制订了源地址、目的地址、传输协议(tcp、udp)等。当数据包与规则匹配时,iptables就会根据定义的规则来处理数据包,如accept(接受)、reject(拒绝)、drop(丢弃)三种动作。

那我们如何利用iptables去配置防火墙,即添加、更改、删除规则呢?

//iptables后跟参数的含义:
iptables -nL     ##查看规则
iptables -F      ##清空规则
iptables -t      ##制定操作的表; iptables -nL -t nat //查看表nat的规则
iptables -P      ##默认规则
         -A ##添加规则          -I ##插入,可以指定规则添加的位置          -R ##修改某条规则          -n ##表示不做解析          -L ##查看表的策略信息          -p ##制定某个协议(tcp、udp)          -N ##自动以添加链名          -E ##修改规则链名称          -X ##删除自定义链 

在使用iptables功能时,需要关闭firewalld;

[root@server Desktop]# systemctl stop firewalld   //关闭防火墙
[root@server Desktop]# systemctl disable firewalld
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
[root@server Desktop]# systemctl start iptables.service   //开启iptables功能
[root@server Desktop]# systemctl enable iptables.service 
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
[root@server Desktop]# 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         
[root@server Desktop]# iptables -F  //刷新
[root@server Desktop]# 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@server Desktop]# service iptables save  //保存规则信息
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@server Desktop]# vim /etc/sysconfig/iptables  //所有规则信息被保存的位置

这里写图片描述
测试 1:

[root@desktop Desktop]# systemctl start httpd  //开启appache服务
[root@desktop Desktop]# iptables -P INPUT ACCEPT
//所有主机浏览器都可以看到httpd页面

[root@desktop Desktop]# iptables -A INPUT -p tcp --dport 80 -j REJECT   //添加规则:所有主机通过浏览器访问172.25.254.174为拒绝模式
[root@desktop Desktop]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
//这时,所有主机浏览器都会显示连接不上服务主机httpd端口

测试 2:添加规则的使用

[root@desktop Desktop]# iptables -A INPUT -s 172.25.254.74 -p tcp --dport 80 -j ACCEPT  //添加规则:只允许172.25.254.74主机通过浏览器可以访问到本机httpd
[root@desktop Desktop]# iptables -nL  //查看当前规则
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable
ACCEPT     tcp  --  172.25.254.74        0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@desktop Desktop]# iptables -D INPUT 2  //删除表INPUT的第二条规则
[root@desktop Desktop]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

测试 3 :插入规则的使用

[root@desktop Desktop]# iptables -I INPUT 1 -s 172.25.254.74 -p tcp --dport 80 -j ACCEPT  //插入规则:指定在第一行添加指定ip的主机可以通过浏览器访问本机
[root@desktop Desktop]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  172.25.254.74        0.0.0.0/0            tcp dpt:80
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

这里写图片描述
测试 4 :修改规则的使用

[root@desktop Desktop]# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT  //指定添加表在第二行内容
[root@desktop Desktop]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  172.25.254.74       0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@desktop Desktop]# iptables -R INPUT 2 -s 172.25.254.74 -p tcp --dport 80 -j REJECT  //修改规则:修改表INPUT的第二条规则的内容
[root@desktop Desktop]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  172.25.254.74        0.0.0.0/0            tcp dpt:80
REJECT     tcp  --  172.25.254.74        0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

注意:这里需要说明一点,从上到下依次读取规则,如果上面的满足了,就不读取下面的规则,就如同测试4中,显示允许172.25.254.74这台主机访问,后又添加了172.25.254.74这台主机拒绝访问;实际上生效的是第一条规则,第二条的规则不会被读取;所以172.25.254.74通过浏览器访问时,是可以看到内容的
这里写图片描述
测试 5 :对自定义表的管理

[root@desktop Desktop]# iptables -N westos //自定义添加westos表

[root@desktop Desktop]# iptables -E westos WESTOS //修改表westos的名称为WESTOS

[root@desktop Desktop]# iptables -X WESTOS //删除WESTOS表 

这里写图片描述
这里写图片描述


测试 6:实现对于第二次的访问请求,直接接受;对于新的请求,只允许ssh 、http 、https、dns、isscis端口接受

NEW ##表示第一次访问
ESTABLISHED ##表示第二次访问
RELATED ##表示关闭访问后再次访问

[root@desktop Desktop]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
[root@desktop Desktop]# iptables -A INPUT -m state --state NEW -p TCP --dport 22 -j ACCEPT //添加ssh的端口为接受
[root@desktop Desktop]# iptables -A INPUT -m state --state NEW -p TCP --dport 80 -j ACCEPT //添加httpd端口为接受
[root@desktop Desktop]# iptables -A INPUT -m state --state NEW -p TCP --dport 53 -j ACCEPT //添加dns端口为接受
[root@desktop Desktop]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT //本机回环
[root@desktop Desktop]# iptables -A INPUT -m state --state NEW -p TCP --dport 3260 -j ACCEPT //添加isscis为接受模式
[root@desktop Desktop]# iptables -A INPUT -m state --state NEW -p TCP --dport 443 -j ACCEPT //添加https为接受模式
[root@desktop Desktop]# 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     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:53
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state NEW
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:3260
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:443

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@desktop Desktop]# service iptables save //保存添加的策略
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@desktop Desktop]# cat /etc/sysconfig/iptables //保存的策略信息在此文件中

这里写图片描述


地址伪装

//首先我们在单网卡的主机先看看可不可以ping通
[root@server Desktop]# systemctl stop iptables.service 
[root@server Desktop]# ping 172.25.254.74
PING 172.25.254.74 (172.25.254.74) 56(84) bytes of data.
^C
--- 172.25.254.74 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2000ms

这里写图片描述

//双网卡主机进行如下配置:

[root@desktop Desktop]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.174   //在路由后,通过SNAT的方式将其转换为源地址
[root@desktop Desktop]# 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         
SNAT       all  --  0.0.0.0/0            0.0.0.0/0            to:172.25.254.174

在单网卡主机进行测试:

[root@server Desktop]# ping 172.25.254.74
[root@server Desktop]# ssh root@172.25.254.74

效果如下图所示:
这里写图片描述
这里写图片描述


端口转发

//单网卡主机(server)
[root@server Desktop]# yum install httpd
[root@server Desktop]# systemctl start httpd 
[root@server Desktop]# echo 172.25.7.247 > /var/www/html/index.html
//双网卡主机(desktop)
[root@desktop Desktop]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 172.25.7.247 //在路由前,通过DNAT的方式将其转换为目标地址
[root@desktop Desktop]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-dest 172.25.7.247  
[root@desktop Desktop]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22 to:172.25.7.247        
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.25.7.247

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

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

在真机172.25.254.74上进行测试连接:

[kiosk@foundation74 Desktop]$ ssh root@172.25.254.174

这里写图片描述
浏览器查看172.25.254.174内容为172.25.7.247(单网卡主机)的httpd默认文件内容;
这里写图片描述


推荐阅读
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Linux防火墙配置—允许转发
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
author-avatar
手机用户2602921813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有