注意:
1.在操作前请确保iptables表里有允许ssh的通信端口的规则:
如果没有,请先加入规则:
$iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT && service iptables save
2.本文全都只针对iptables里的INPUT表进行操作,同样可以应用到FORWARD表和OUTPUT表,一般只操作INPUT表即可
一.使用命令行操作,操作完成后保存才生效 $service iptables save
插入到第一:$iptables -I INPUT -p tcp --dport 3306 -j ACCEPT //追加到最后:$iptables -A INPUT -p tcp --dport 3306 -j ACCEPT替换:$iptables -R INPUT 5 -p tcp --dport 3306 -j ACCEPT //5是显示iptables时列出的序号显示:$iptables -L -nv --line-number删除:$iptables -D INPUT 27 //INPUT也有可能是OUTPUT,27是显示iptables时列出的序号默认拒绝所有输入,只有符合自定义的规则才能通过$iptables -P INPUT DROP请注意这条语句的参数,是-P ,-P的作用是定义链的默认规则,也就是通过所有规则后还没有匹配到的数据包,将按照默认规则来执行。-P DROP后,只有满足定义了ACCEPT规则的包才能通行,其他的包都按照默认的DROP干掉了。
二.使用编辑文件的方式操作,操作完成后重启才能生效 $service iptables restart
$vi /etc/sysconfig/iptables
##########################################################start
*filter
#以下三句意思是入站\出站\防火墙默认全给通过(ACCEPT)
:INPUT ACCEPT [4:561]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [29:4053]
#以下规则跟用命令定义的方式一样,只是前面少了一个iptables
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
##########################################################end
三.真正让自己定义的规则生效(两种方式,二选一)
1.方式一:自定义规则后,默认拒绝所有进入包
$iptables -P INPUT DROP
1.1.如下图中的自定义规则是不会生效的
1.2.设置后才会生效
2.方式二:自定义规则后,在规则表最后追加“拒绝其它包”的规则,这个规则之后的规则都没用了,所以这个规则一定放到最后面。
$iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
2.1.如下图中的自定义规则是不会生效的
2.2.设置后才会生效
四.设置样例,开放80和3306端口
4.1.假设现在已设置了22端口,但未生效,其它端口都是开放的
4.2.使用默认拒绝全部INPUT包的方式来让其生效
$iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
$iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$iptables -P INPUT DROP && service iptables save
参考来源: