iptables防火墙规则的顺序非常重要,内核按顺序检查这些规则,如果发现有匹配的股则条目,则立刻执行相关动作,停止继续向下查找规则条目,如果所有的防火墙规则都未能匹配成功,则按照默认策略处理。使用-A选项添加防火墙规则会将该规则追加到整个链的最后,而使用-I选项添加的规则则默认会插入到链中作为第一条规则。
1、安装iptable iptable-service
CentOS7默认的防火墙不是iptables,而是firewalle.安装方法如下
#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables
#升级iptables
yum update iptables
#安装iptables-services
yum install iptables-services
2、禁用/停止自带的firewalld服务
#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewall
3、打开/关闭/重启防火墙
开启防火墙(重启后永久生效):chkconfig iptables on
关闭防火墙(重启后永久生效):chkconfig iptables off
开启防火墙(即时生效,重启后失效):service iptables start
关闭防火墙(即时生效,重启后失效):service iptables stop
重启防火墙:service iptables restartd
4、iptables参数说明
4.1常用参数:
-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT插入一条规则,原本位置的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则
-N 新的规则-->iptables -N allowed 定义新的规则
-Z 将所有链中的数据包和字节计数器归零,或仅将给定链或链中的给定规则归零
4.2通用参数:
-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
4.3 参数-j 指定要进行的处理动作
常用的ACTION:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT基于原地址的转换
source--指定原地址
5、State模块中“连接"状态
对于state模块的连接而言,“连接"其中的报文可以分为5种状态,报文状态可以为NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED
5.1 NEW:
连接中的第一个包,状态就是NEW,我们可以理解为新连接的第一个包的状态为NEW。
5.2 ESTABLISHED:
我们可以把NEW状态包后面的包的状态理解为ESTABLISHED,表示连接已建立。或许用图说话更容易被人理解。
5.3 RELATED:
从字面上理解RELATED译为关系,但是这样仍然不容易理解,我们举个例子。
比如FTP服务,FTP服务端会建立两个进程,一个命令进程,一个数据进程。
命令进程负责服务端与客户端之间的命令传输(我们可以把这个传输过程理解成state中所谓的一个"连接”,暂称为"命令连接")。数据进程负责服务端与客户端之间的数据传输 ( 我们把这个过程暂称为"数据连接" )。但是具体传输哪些数据,是由命令去控制的,所以,"数据连接"中的报文与"命令连接"是有"关系"的。那么,"数据连接"中的报文可能就是RELATED状态,因为这些报文与"命令连接"中的报文有关系。(注:如果想要对ftp进行连接追踪,需要单独加载对应的内核模块nf_conntrack_ftp,如果想要自动加载,可以配置/etc/sysconfig/iptables-config文件)
5.4 INVALID:
如果一个包没有办法被识别,或者这个包没有任何状态,那么这个包的状态就是INVALID,我们可以主动屏蔽状态为INVALID的报文。
5.5 UNTRACKED:
报文的状态为untracked时,表示报文未被追踪,当报文的状态为Untracked时通常表示无法找到相关的连接。
6、查看打开的端口
[root@MASServer]# /etc/init.d/iptables status
7、保存修改,防止重启失效
7.1 Centos6版操作命令
[root@linux ~]# service iptables save
7.2 Centos7版操作命令
[root@linux ~]# iptables-save > /etc/sysconfig/iptables #centos7版本的操作命令
[root@linux ~]# vim /etc/rc.local
/usr/sbin/iptables-restore </etc/sysconfig/iptables
[root@linux ~]# chmod 755 /etc/rc.d/rc.local
centos7在安装iptables-server服务时,防火墙规则默认保存再/etc/sysconfig/iptables文件,重启系统时会自动加载,在未安装iptables-server服务时,需在/etc/rc.local开机加载。
8、iptables备份与还原
默认的iptables防火墙规则会立刻生效,但是如果不保存,当计算机重启后,所有的规则将会丢失,所以需要即时保存。iptables软件包提供了两个非常有用的工具,iptables-save和iptables-restore,可以方便的处理大量的防火墙规则。Centos7系统中的防火墙规则默认保存再/etc/sysconfig/iptables文件中,使用iptables-save将规则保存至该文件中实现保存防火墙规则的作用,重启后会自动加载该文件中的规则。如果使用iptables-save将规则保存到其他位置,可以实现备份防火墙规则的作用。当防火墙规则需要做还原时,可以使用iptables-restore将备份文件直接导入当前防火墙规则。
[root@linux ~]# iptables-save > /etc/sysconfig/iptables
[root@linux ~]# iptables-save > firewall.bak 备份
[root@linux ~]# iptables-restore < firewall.bak 还原
9、列出所有规则
[root@linux ~]# iptables -L
10、列出链所有的规则及num编号
[root@linux ~]# iptables -L -n --line-number
11、将规则3改成DROP
[root@linux ~]# iptables -R INPUT 3 -j DROP
12、删除第3条规则
[root@linux ~]# iptables -D INPUT 3
13、删除nat表中postrouting的第一条规则
[root@linux ~]# iptables -t nat -D POSTROUTING 1
14、清空nat表POSTROUTING所有规则
[root@linux ~]# iptables -t nat -F POSTROUTING
15、清空 filter表INPUT所有规则
[root@linux ~]# iptables -F INPUT
16、设置filter表INPUT默认规则是 DROP
[root@linux ~]# iptables -P INPUT DROP
17、清除预设表filter中的所有规则链的规则
[root@linux ~]# iptables -F
18、清除预设表filter中使用者自定链中的规则
[root@linux ~]#iptables -X
19、重启防火墙
/etc/init.d/iptables restart
20、通过配置文件设置防火墙
我们还可以通过修改/etc/sysconfig/iptables文件的方式开启端口,如下:
vim /etc/sysconfig/iptables 然后在文件中增加一行
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT
21、开启端口21
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
22、打开49152~65534之间的端口
iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT
同样,这里需要对设置进行保存,并重启防火墙。
23、禁止IP访问某个端口
注:连续多个端口用:分隔
iptables -I INPUT -s 122.144.131.60 -ptcp --dport 8500 -j DROP
24、许IP访问8501端口
iptables -D INPUT -s 192.168.0.232 -ptcp --dport 8501 -j DROP(方法1)
iptables -I INPUT -s 192.168.0.232 -ptcp --dport 8501 -j ACCEPT(方法2)
25、禁止IP访问服务器任何服务
iptables -I INPUT -s 218.204.253.59 -m state --state NEW,RELATED,ESTABLISHED -j DROP
26、禁止IP段访问服务器任何服务
iptables -I INPUT -s 218.204.253.0/24 -m state --state NEW,RELATED,ESTABLISHED -j DROP
27、只允许远程主机访问本机的80端口
iptables -A INPUT -m state --state NEW-m tcp -p tcp --dport 80 -j ACCEPT