CentOS 7 启用 iptables 防火墙

Posted by Sunday on 2017-12-29

前言

在大企业中防火墙角色主要交给硬件来支持,效果自然没话说只是需要增加一点点成本,但对于大多数个人或者互联网公司来说选择系统自带的iptables或者第三方云防火墙似乎是更加合适的选择,通过一些合理的优化和灵活的配置,我们也可以很轻松实现硬件防火墙的部分功能,够用就好。

CentOS7默认的防火墙不是iptables,而是firewalle. 不过之前用开iptables,so… iptables

关闭firewalle防火墙

1
2
systemctl stop firewalld.service #停止 firewall
systemctl disable firewalld.service #禁止 firewall开机启动

安装 iptables-service

1
yum -y install iptables-services #安装 iptables-service

设置防火墙策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#清空配置(慎用)
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT

#增加策略白名单
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 24780:24783,24770:24773,24790 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited

#设置 filter 表默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#保存配置、开机启动
service iptables save
systemctl enable iptables

iptables -L -nv 查看规则是否生效.
#cat /etc/sysconfig/iptables

防火墙相关命令

1
2
3
4
systemctl enable iptables.service #设置防火墙开机启动
systemctl start iptables.service #启动防火墙
systemctl stop iptables.service #停止防火墙
systemctl restart iptables.service #重启防火墙使配置生效

设置crontab脚本

便于运维集中化管理扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
vi /root/start_iptables.sh

#!/bin/bash
#0 0 * * * /root/start_iptables.sh

#清除配置
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -F
/sbin/iptables -X
#开放本地和Ping
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p icmp -j ACCEPT
#配置内网白名单
/sbin/iptables -A INPUT -s 192.168.10.0/16 -j ACCEPT
#配置外网白名单
/sbin/iptables -A INPUT -s 183.60.192.96/27 -j ACCEPT
#控制端口
/sbin/iptables -A INPUT -p tcp --dport 24790 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
#配置默认策略
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT

chmod 755 /root/start_iptables.sh
crontab -e
0 0 * * * /root/start_iptables.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable
COMMIT

https://www.vultr.com/docs/initial-setup-of-a-centos-7-server/