文章基于centos7系统,redhat7.
1:使用iptables防火墙,关闭系统自带防火墙firewalld:
firewall-cmd --state
systemctl stop firewalld.service
systemctl disable firewalld.service
firewall-cmd --state ( 查看状态 )
2:通过yum源安装iptables。(yum源可以选择网络yum源与本地挂载镜像yum源)
yum info iptables
安装iptables:
yum install iptables-services
3:iptables默认的规则有三条,分别为入包,出包,转发包。
INPUT
OUTPUT
SWITCH
安装好iptables以后,首先执行iptables -P INPUT ACCEPT;
使用serviceiptables save 保存规则
接下来清除防火墙所有规则。iptables -F 清除预设表filter中的所有规则链的规则; iptables -X 清除预设表filter中使用者自定链中的规则 ;iptables -Z 清空清空链,及链中默认规则的计数器
创建规则:(根据公司具体业务需求选择规则,一般服务提供,只需要对INPUT数据包进行限制)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P SWITCH ACCEPT
4:
允许icmp包通过,也就是允许ping,
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP时)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT
允许loopback!(不然会导致DNS无法正常关闭等问题)
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT(如果OUTPUT DROP时)
5:重点!配置state状态,ESTABLISHED 此状态接续tcp二三次握手,接收返回的数据包
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
input所有数据包丢弃时,即使允许端口
为了能采用远程SSH登陆,我们要开启22端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
如果做了WEB服务器,开启80端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
如果做了邮件服务器,开启25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -m state --state NEW -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT
如果做了FTP服务器,开启21端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果做了DNS服务器,开启53端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
VNC服务开启一个端口,从5901端口开始
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
制定dns服务规则
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
service iptables save
下面是之前公司做的防火墙规则贴图: