记录一些常用的函数和瞎折腾的过程……

centos7下的iptables简单设置

提醒:本文最后更新于 2180 天前,文中所描述的信息可能已发生改变,请谨慎使用。

在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