centos7下的iptables简单设置
在alpharacks.com买一只鸡,装的是centos7,发现端口死活不通,原来默认只开了22端口,其它端口都关闭了。又逼着我学习了一下centos7下的iptables规则。这东西很少用,也很容易忘,现将基本操作记下来,权当笔记。
若没有安装iptables-services,使用iptables时会报错,如“Unit iptables.service could not be found”,请先安装服务:
yum install iptables-services
安装后设置开机启动:
systemctl enable iptables
禁用iptables则是:
systemctl disable iptables
iptables启动、关闭、保存和状态:
systemctl [stop|start|restart|save|status] iptables
或者是:
service iptables [stop|start|restart|save|status]
有了iptables,就可以设置规则了。
1、打开指定的进或出的端口,需要添加规则:
[root@server ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@server ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
2、允许或禁止ping (OUTPUT设置成DROP的话就是禁止ping出,INPUT设置成DROP的话就是禁止ping入):
[root@server ~]# iptables -A OUTPUT -p icmp -j ACCEPT
[root@server ~]# iptables -A INPUT -p icmp -j ACCEPT
3、禁止其他未允许的规则访问,增加此规则时,确认ssh的端口已添加,否则会断开ssh。一般加在允许端口规则的最后,因为执行是按顺序进行的,放在最前面的话,在此规则后面的放行规则就失效了。
[root@server ~]# iptables -A INPUT -j REJECT
[root@server ~]# iptables -A FORWARD -j REJECT
4、编辑完成后,记得保存规则到iptables:
[root@server ~]# service iptables save
5、重启iptables:
[root@server ~]# systemctl restart iptables.service
6、按编号列出规则:
[root@server ~]# iptables -L -n --line-number
7、比如要删除INPUT里序号为2的规则,执行(记得保存规则):
[root@server ~]# iptables -D INPUT 2
8、清空filter表中所有规则:
[root@server ~]# iptables -F
注意:
1、dport和sport的区别:
字面意思来说很好理解,dport一个是数据要到达的目的端口(即本机端口),sport一个是数据来源的端口(即来源端口)。
允许外部数据访问我的本地服务器80端口:
[root@server ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
允许外部的来自80端口的数据访问本地服务器。:
[root@server ~]# iptables -A INPUT -p tcp --sport 80 -j ACCEPT
允许内部数据出去访问外部的80端口。
[root@server ~]# iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
允许内部的数据通过本地80端口出去。
[root@server ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
2、iptables -I 和 -A的区别:
-A:是将规则写到现有链规则的最后。
-I:默认是将一条规则添加到现有规则链的最前面或指定行数,如添加到第3条规则:
[root@server ~]# iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT
3、当然也可以手机编辑规则文件:
vim /etc/sysconfig/iptables
来一个实际操作吧,操作前确认iptables已正常工作。
1、清除现有filter:
iptables -F
2、增加input规则:
#允许已经建立和相关的数据包进入
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许icmp包进入,不然会ping不通
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
#允许本地的数据包,SS等需要内部转发需要
iptables -A INPUT -s localhost -d localhost -j ACCEPT
#开放ssh端口(此条必须,不然保存后就登录不上ssh了,那就要呵呵了!):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#开放80、443端口(web访问):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#按上述方式增加你需要的其它端口后,就可以禁用其它端口了:
iptables -A INPUT -j REJECT
3、增加OUTPUT规则:
#允许已经建立和相关的数据包出去
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许icmp包出去,这样才能从服务器上ping出去
iptables -A OUTPUT -p icmp --icmp any -j ACCEPT
#允许本地数据包,SS等需要内部转发需要
iptables -A OUTPUT -s localhost -d localhost -j ACCEPT
#出站的端口其实可以都开放,我们全部开放吧:
iptables -A OUTPUT -j ACCEPT
4、保存iptables(不保存的话,一重启规则就没了):
service iptables save
5、重启一下iptables服务:
systemctl restart iptables.service
6、完成后你可以看下filter规则表:
iptables -L -n --line-number