iptables也叫netfilter,是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,他的功能十分强大,使用也非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。但是iptables在CentOS7的版本上已经被阉割掉了,我们需要自行安装,以下是在CentOS7下安装iptables和使用方式。
CentOS 7.0默认使用的是firewall作为防火墙
关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
centos设置iptables防火墙
查看是否安装成功
命令:systemctl status iptables
Redirecting to /bin/systemctl status iptables.service
Unit iptables.service could not be found.
输出结果表示没有iptables的相关服务,我们需要安装
安装iptables
命令:yum install iptables-services
查看安装情况
[root@localhost ~]# rpm -qa|grep iptables
iptables-1.4.21-24.1.el7_5.x86_64
iptables-services-1.4.21-24.1.el7_5.x86_64
安装后在次检查
systemctl status iptables
● iptables.service - IPv4 firewall with iptables
Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
Active: inactive (dead)
输出说明安装成功,但是没有启动
注:默认情况下,firewalld 处于运行状态,并拒绝所有传入流量,但有几个例外,如 SSH 22
启动iptables
systemctl start iptables.service
在次查看状态
systemctl status iptables
● iptables.service - IPv4 firewall with iptables
Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
Active: active (exited) since Mon 2020-03-16 23:24:23 CST; 5min ago
Process: 28171 ExecStop=/usr/libexec/iptables/iptables.init stop (code=exited, status=0/SUCCESS)
Process: 28189 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
Main PID: 28189 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/iptables.service
Mar 16 23:24:23 izm5e0dgv0zpedpxrqer62z systemd[1]: Starting IPv4 firewall with iptables...
Mar 16 23:24:23 izm5e0dgv0zpedpxrqer62z iptables.init[28189]: iptables: Applying firewall rules: [ OK ]
Mar 16 23:24:23 izm5e0dgv0zpedpxrqer62z systemd[1]: Started IPv4 firewall with iptables.
再次查看状态,输出结果表示已经成功启动iptables
系统命令
systemctl start iptables #启动
systemctl status iptables #查看运行状态
systemctl restart iptables.service #重启
systemctl stop iptables.service #停止
systemctl enable iptables.service #设置开机启动
systemctl disable iptables.service #禁止开机启动
常用命令
iptables -h #查询帮助
iptables -L -n #列出(filter表)所有规则
iptables -L -n --line-number #列出(filter表)所有规则,带编号
iptables -L -n -t nat #列出(nat表)所有规则
iptables -F #清除(filter表)中所有规则
iptables -F -t nat #清除(nat表)中所有规则
service iptables save #保存配置(保存配置后必须重启iptables)
systemctl restart iptables.service #重启
修改配置文件
[root@localhost ~]# vim /etc/sysconfig/iptables
#firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
filter表解析
filter表是iptables默认使用的表,负责对流入、流出本机的数据包进行过滤,该表中定义了3个链,分别是:INPUT、OUTPUT、FORWARD
INPUT:过滤进入主机的数据包
OUTPUT:处理从本机出去的数据包
FORWARD:负责转发流经本机但不进入本机的数据包,起到转发作用