CentOS系统默认使用firewalld防火墙,两者不能同时使用。
在某些低配vps中,内存容量不够大,cpu也很烂,可以考虑用iptables,可以节省约30M内存和部分cpu。
如果安装了firewalld要先卸载,否则起冲突只能运行firewalld:
systemctl stop firewalld
systemctl disable firewalld
yum remove firewalld
安装iptables和ipset的服务,否则开机不能自启动:
yum install iptables-services ipset-service -y
设置iptables和ipset开机启动(iptables服务含ip6tables):
systemctl enable iptables
systemctl enable ip6tables
systemctl enable ipset
启动iptables ip6tables ipset:
systemctl start iptables
systemctl start ip6tables
systemctl start ipset
获取当前的防火墙规则:
iptables -nvL
可以获得默认的防火墙规则:
这里面的规则可以全部自定义,但是要了解的东西很多,建议熟悉了iptables的规则后再自己定制。
自己定制iptables规则,要知道需要过滤的IP地址、端口号,协议信息。iptables里的规则只能匹配一次,匹配到了就按照对应的动作执行放行、丢弃、回绝还是别的。
如果没有规则被匹配到,就用默认策略(即policy ACCEPT)!
如果输入的iptables命令里没有指定IP地址、端口号,协议,那默认就是全部匹配(全部IP地址、全部端口号,全部协议)。
iptables常用的动作: ACCEPT(接受) REJECT(回绝) DROP(扔掉)
例如,改了SSH端口后需要在防火墙里放行新的端口:
iptables -I INPUT -p tcp --dport 60000 -j ACCEPT
iptables命令后面跟着如何操作链: -I(大写的i)意思是插入,默认为插入到链的最前面,在链的名字后面可以跟个数字指定插入到第几行; -A 意思是附加在链的最后面; -D 意思是删除,链名后可以跟个数字表示删除第几行; -R 意思是替换,链名后面跟这一个数字表示替换第几行; -F 意思是删除链里面的所有规则; -Z 将链的计数器归零。
上面的参数后面必须跟着链名,链名后面再跟数字!
例如:
iptables -D INPUT 4
意思是删除filter表的input链的第四行。
显示规则的行号(加入–line参数):
iptables -nvL --line
就会在最左边(num)显示行号:
iptables指定IP地址、端口号、动作和协议的参数:
-d 目的地IP地址,不指定就默认目的地是本机。
--dport 目的地端口号(一般指本机想要开放的端口)
-s 源IP地址(即客户端的IP),可用于制作白名单
--sport 源端口号(即客户端的端口号),可做特殊的过滤
-p 协议,可以为tcp、udp、icmp
-j 执行动作(DROP、ACCEPT、REJECT等)
例如,将SSH端口号改成60000后要添加允许60000端口并将原来的22端口封掉:
先添加60000端口(SSH使用TCP协议):
iptables -I INPUT -p tcp --dport 60000 -j ACCEPT
列出所有规则后是这样:
然后删除原先的规则,可以按照行号删,但是千万注意
删之前看一下行号别删错,不然可能会被关在外面!
上面22端口所在规则的行号为5,删除就好:
iptables -D INPUT 5
最终结果:
保存iptables规则重启不会丢失:
service iptables save
关闭iptables、ip6tables和ipset:
systemctl stop iptables
systemctl stop ip6tables
systemctl stop ipset
当然了,以上操作是绝对不够的,还要学习更多才能加固你的系统!