linux配置防火墙
centos6.5 防火墙开放80端口
iptables -I INPUT -p tcp –dport 80 -j ACCEPT //注意,dport前面是两个-,其中-I是指在防火墙INPUT表最前面插入该条规则-p 用来指定协议的 –dport指定端口
那么我们再看看怎么关闭80端口
iptables -I INPUT -p tcp –dport 80 -j REJECT //很明显,就是把最后的ACCEPT改为REJECT
那么问题来了,重启后,该条规则会在重启后失效,所以我们需要保存对防火墙规则的修改
service iptables save (还没试过行不行)
Centos7 用firewalld代替iptables了,所以在Centos7下,也可以这么写命令
开放80端口
firewall-cmd –permanent –add-port=80/tcp #执行之后会提示success
firewall-cmd --reload #执行这条语句后才能生效
或者
firewalld-cmd --permanent --add-service=httpd
取消80端口对外开放
firewall-cmd –permanent –remove-port=80/tcp
firewalld-cmd --permanent --remove-service=httpd
再来个有趣点的,我们只将80端口对外开放一分钟
firewalld-cmd --permanent --add-service=httpd --timeout=1m
现在我们试着把1566端口的请求转移到80端口
firewall-cmd --add-forward-port=port=1566:proto=tcp:toport=80
让我们更近一步,把端口请求转发到另一个主机上
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=80:toaddr=10.0.3.92
如果没有意外的话,再次访问本地主机网页,发现并没有跳转到10.0.3.92去
这是因为我没哟没有开启防火墙的伪装功能,执行以下语句开启该功能就可以了
firewall-cmd --add-masquerade
这个功能怎么看开没开启呢(很明显,下面这个就没有)
firewall-cmd --zone=public --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: port=1566:proto=tcp:toport=80:toaddr= port=80:proto=tcp:toport=80:toaddr=10.0.3.92 sourceports: icmp-blocks: rich rules:
为什么上面加了一个--zone=public呢,这个值可以通过firewall-cmd --get-active-zone 查看
再来一个给力的,拒绝所有包有时候被DDoS攻击了之类的,就可以执行这条语句了。执行之后,ssh以及http等服务均无法从外部连接
firewall-cmd --panic-on
下面这条语句用于恢复正常
firewall-cmd --panic-off
看一下,防火墙目前允许那些服务通过
firewall-cmd --zone=public --list-services
看一下某个区域里面是否有某个接口
firewall-cmd --zone=public --query-interface=eth0
有没有注意到query这个词,于是我试了一下。还真的能查询
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]#
有时候我们直接firewall-cmd --add-port=80/tcp,忘记加--permanent,但是实际上我们希望这条规则永久生效,应该如何呢
firewall-cmd --runtime-to-permanent