centos之iptables

iptalbes的三个表

  • filter 这个表主要用于过滤包的,是系统预设的表,这个表也是阿铭用的最多的。内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。

  • nat 主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。用的不多,但有时候会用到。

  • mangle 这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,否则你就没有必要花费很多心思在它上面。

查看规则以及清除规则

  • 打印filter表的相关信息:iptables -nvL
  • 打印nat表的相关信息:iptables -t nat -nvL

> 其中:-t 后面跟表名,--nvL 即查看该表的规则,其中-n表示不针对IP反解析主机名;-L表示列出的意思;而-v表示列出的信息更加详细。如果不加-t ,则打印filter表的相关信息。

关于清除规则

[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -Z

不加-t默认是针对表filter来操作的,-F 表示把所有规则全部删除;-Z表示把包以及流量计数器置零。 -F 是把当前规则清除,但这个只是临时的,重启系统或者重启 iptalbes 服务后还会加载已经保存的规则,所以需要使用 /etc/init.d/iptables save 保存一下规则

增加/删除一条规则

# iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP > 这就是增加了一条规则,省略-t所以针对的是filter表。-A 表示增加一条规则,另外还有-I 表示插入一条规则,-D删除一条规则;后面的INPUT即链名称,还可以是OUTPUT或者FORWORD;-s 后跟源地址;-p 协议(tcp,udp,icmp); --sport/--dport 后跟源端口/目标端口;-d 后跟目的IP(主要针对内网或者外网);-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)。这样讲可能很乱,那阿铭多举几个例子来帮你理解:

  • iptables -I INPUT -s 1.1.1.1 -j DROP:插入一条规则,把来自1.1.1.1的所有数据包丢掉。

  • iptables -D INPUT -s 1.1.1.1 -j DROP : 删除刚刚插入的规则。注意要删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I 和-D不一样外,其他地方都一样。

  • iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP:上例表示把来自2.2.2.2 并且是tcp协议到本机的80端口的数据包丢掉。这里要说的是,--dport/--sport 必须要和-p选项一起使用,否则会出错。

  • iptables -I OUTPUT -p tcp --dport 22 -d 10.0.2.34 -j DROP:这条规则表示,把发送到10.0.2.34的22端口的数据包丢掉。

    -A/-D :增加删除一条规则;

    -I :插入一条规则,其实跟-A的效果一样;

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

    --dport :跟-p一起使用,指定目标端口;

    --sport :跟-p一起使用,指定源端口;

    -s :指定源IP(可以是一个ip段);

    -d :指定目的IP(可以是一个ip段);

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

    -i :指定网卡(不常用,但有时候能用到);

有时候你的服务器上iptables过多了,想删除某一条规则时,又不容易掌握当时创建时的规则。其实有一种比较简单的方法:

[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 133 packets,9740 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  eth0   *       192.168.1.0/24       0.0.0.0/0

删除某一条规则使用如下命令:

[root@localhost ~]# iptables -D INPUT 1

iptables还有一个选项经常用到,-P(大写)选项,表示预设策略。用法如下: [root@localhost ~]# iptables -P INPUT DROP

-P后面跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT。注意:如果你在连接远程服务器,千万不要随便敲这个命令,因为一旦你敲完回车你就会断掉。

这个策略一旦设定后,只能使用 iptables -P INPUT ACCEPT 才能恢复成原始状态,而不能使用-F参数。下面阿铭针对一个小需求讲述一下这个iptables规则如何设定。

实战演示

需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.137.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式。脚本内容如下:

[root@localhost ~]# cat /usr/local/sbin/iptables.sh
#! /bin/bash

ipt="/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -s 192.168.137.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

相关文章

有时候CentOS工作在无互联网的环境下,需要在离线环境下安装一些组件,这次实现的是模拟在离线环境下安...
首先参照https://www.cnblogs.com/wdw984/p/13330074.html,来进行如何安装Centos和离线下载rpm包。 离...
有两个.NET CORE3.1网站部署在CentOS7上(内网IP是192.168.2.32),现在想实现访问http://192.168.2.32...
1、yum -y install vsftpd 安装vsftpd 2、配置vsftpd的配置文件(/etc/vsftpd/vsftpd.conf)主要修改以...
首先去mysql官网下载mysql的离线rpm安装包(https://downloads.mysql.com/archives/community/) Mysql...
第一步下载erlang环境并安装: wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_...