森哥瞧世界

您现在的位置是:首页>文档内容页

文档详情

闲聊iptabales

jeson 2020-04-05 23:49:15 安全服务5120
今天,森哥准备给大家聊聊`iptables`,那么,什么是`iptables`呢?很多接触过的人,可能都会说,这是一个基于`Linux(Unix)`环境下的软防火墙。这么说法呢?基本不全对,但又不能说不是,什么说呢?

什么是iptables

       iptables其实是一个命令行工具,他是与NetFilter组合使用,将用户的安全设定执行到对应的“安全框架”中,而这个框架名字就叫NetFilter,所以说,这个安全框架,才是真正的防火墙,它是位置内核中。

       而我们通常所说的iptables,更多的只是一种应用服务,就如我们平时说,启动或停止iptables服务,说的就是这个道理。iptables其实真正要掌握不难,但也不是很容易的一件事情。

       iptables可以用来做路由,就像电信宽带拨号的那样,也就是说,若是允许的话,通过电信猫接到你的Linux类平台的设备中,然后使用iptables来拨号,数据转发等,森哥在2006年的时候,就使用这种方式,为所服务过的公司,使用这种方式解决网络问题。

       iptables也可以用来做转发服务,特别是企业使用中,考虑到数据的安全及权限的控制,配合OPENVPN等相关代理软件,可以起到画龙点晴的作用。

了解iptables

接下来,我们就简单的了解一下iptables的一些命令参数。

iptables包含了4个表,优先级从高到低分别为:raw-->mangle-->nat-->filter

  • raw---RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.

  • mangle--此规则表拥有prerouting、FORWARD、postrouting三个规则链,除了进行网址转译工作会改写封包外,在某些特殊应用可能也必须去改写封包(ITL、TOS)或者是设定MARK(将封包作记号,以进行后续的过滤)这时就必须将这些工作定义在mangles规则表中

  • nat----此规则表拥有prerouting和postrouting两个规则链, 主要功能为进行一对一、一对多、多对多等网址转译工作(SNATDNAT)

  • filter---这个规则表是预设规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则链,这个规则表顾名思义是用来进行封包过滤的理动作.

常用的命令:

  • -A 追加规则-->iptables -A INPUT

  • -D 删除规则-->iptables -D INPUT 1(编号)

  • -R 修改规则-->iptables -R INPUT 1 -s 192.168.0.0 -j DROP 取代现行规则,顺序不变(1是位置)

  • -I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位

  • -L 查看规则-->iptables -L INPUT 列出规则链中的所有规则

  • -N 新的规则-->iptables -N allowed 定义新的规则

通用参数:

  • -p 协议 例:iptables -A INPUT -p tcp

  • -s源地址 例:iptables -A INPUT -s 192.168.1.1

  • -d目的地址 例:iptables -A INPUT -d 192.168.12.1

  • -sport源端口 例:iptables -A INPUT -p tcp --sport 22

  • -dport目的端口 例:iptables -A INPUT -p tcp --dport 22

  • -i指定入口网卡 例:iptables -A INPUT -i eth0

  • -o指定出口网卡 例:iptables -A FORWARD -o eth0

而-j的参数 ,是指定要进行的处理动作,而常用的有:

  • DROP:丢弃

  • REJECT:明示拒绝

  • ACCEPT:接受

  • SNAT基于原地址的转换

  • source--指定原地址

实操

       上面是对iptables的一些简单介绍及相关参数的情况,现在我们就进入一些简单的iptables实际使用。一样的是,森哥只做一些简单的说明及使用,由于iptables真的要深入了解,不是这一点篇幅能说得明白的,现在市面上有很多专门讲解iptables的书籍,有感兴趣的或是想更深入的了解及应用的朋友,可以购买回去好好研究。

安装iptables

森哥用来讲解的环境,是基于centos7.x的操作系统,默认情况下,CentOS7.x安装的是Firewalld,这里,我们要将自带的防火墙给予先卸载。

systemctl stop firewalld 
systemctl mask firewalld
yum remove -y firewalld

当然了,我们这里也要把SeLinux关闭,本不想赘言,但想了想,还是顺便带上来。

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0

现在就开始安装iptables

yum install -y iptables-services  //安装iptables
systemctl enable iptables    //开机自启动
systemctl start iptables    //启动服务

这里要先提醒的是,每次操作完iptables规则后,都要保存一下,要不然,下次系统重启后,原来设定的规则就会失效。所以,记得执行下面的操作。

service iptables save     //保存所执行过iptables后的结果

由于是新安装的iptables,所以,最好的要事先进行初始化清空所有的iptables规则。

iptables -F        //清除预设表filter中的所有规则链的规则
iptables -X        //清除预设表filter中使用者自定链中的规则
iptables -Z        //清空链,及链中默认规则的计数器的
service iptables save     //保存结果,否则重启后又恢复原来的状态

查看一下结果:

iptables -L -n
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    

上面的结果,说明已将iptables的规则全部清空。下面,我们将开始根据不同的需要,添加不同的规则。

开放远程登陆的端口(SSHD),默认的端口为:22

iptables -A INPUT -p tcp --dport 22 -j ACCEPT   //允许所有IP,访问22端口(流入)
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT  //允许所有IP,访问22端口(流出)

当然了,也可以只开放指定的IP访问22端口。

iptables -I INPUT -s 172.16.3.254 -p tcp --dport 22 -j ACCEPT  //指定IP访问指定端口

一般情况下,服务器访问外面(流出)的都是全开放了,若是您因为业务的要求,将流出全禁止,则这里,还要再将流出进行允许。

iptables -I OUTPUT -s 172.16.3.254 -p tcp --sport 22 -j ACCEPT

注:优先允许SSH端口,否则,在执行下面的规则时,将会直接失去连接,无法管理远程机器。

优先执行上面的原因是,我们一般都是远程管理服务器,所以,需要先把远程管理的端口开放,否则一开始将全禁止的话,也就无法再远程连接上,就更无法管理及接下来的其他操作。

现在,我们要做的,先把所有的流入的给禁止掉,当然了,我这里默认,还是把流出的不做任何操作,意思是,从服务器,可以访问到服务器外面的其他任何服务。

iptables -P INPUT DROP     //禁止所有流入规则
iptables -P OUTPUT ACCEPT   //允许所有流出规则
iptables -P FORWARD DROP   //禁止所有转发规则
service iptables save     //保存结果,否则重启后又恢复原来的状态

CentOS下,我们一般都是使用yum进行安装相关软件包,所以,现在需要开放DNS(53)端口

iptables -A INPUT -p tcp --dport 53 -j ACCEPT   //开放53端口,DNS端口,否则无法使用yum安装
iptables -A INPUT -p udp --dport 53 -j ACCEPT   //开放53端口,DNS端口,否则无法使用yum安装

现在,假设我们需要能解决ping通服务器,那么就得执行

iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -p all -j ACCEPT

若是流出的也是全禁止的话,还得再追加一条:

iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT

我们的服务器,大多数下,是用来实现web应用等服务,所以,80端口与443端口(HTTPS)也需要开放。

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

php-fpm访问的时候则需要开放以下规则,否则将无法访问php文件。

iptables -A INPUT -i lo -j ACCEPT   //允许来自于lo接口接收数据包
iptables -A OUTPUT -o lo -j ACCEPT   //允许向lo接口发送数据包

php-fpm需要用到的规则,其实我们在解决ping的时候,就已开放了,但有时候,我们不需要ping通服务器,也就是说,无需开放icmp的时候,那么访问php文件时,就需要这两条规则。

而对tomcat直接对向访问的话,需要做以下的处理:

iptables -I INPUT -p tcp --dport 8080 -j ACCEPT   //tomcat服务需用到的端口
iptables -I INPUT 2 -m state --state RELATED,ESTABLISHED -j ACCEPT  //tomcat服务需要

上面提到的8080端口,是tomcat默认的端口,若是你已修改其他端口,就得做相应的修改。

禁用FTP(21)端口

iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP

禁止某个IP连接FTP(21)端口.

iptables -t nat -A PREROUTING    -p tcp --dport 21 -d ip地址 -j DROP

禁止与某个具体IP的所有连接

iptables -t nat -A PREROUTING -d ip地址(0.0.0.0) -j DROP

这边,森哥就逗逼的笑一下,哈哈,以前遇到小型的DDOS攻击

处理IP碎片数量,防止攻击,允许每秒100个

iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.

iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

防止外网用内网IP欺骗

iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

丢弃坏的TCP包

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

drop非法连接

iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

允许所有已经建立的和相关的连接

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

保存并重启iptables

service iptables save
service iptables restart

好了,就不多展开了,以后有机会,森哥再跟大家聊聊基于iptables下的各种应用。

今天就先到这里,也算是给大家开个头,一起来学习沟通,一起进步。


文章评论

Cancel the reply
Login Participate In Comments

Review(