【收藏备用】CentOS VPS iptables 使用方案

天花了一上午时间把 iptables 防火墙配置好了,虽然经历了许多波折,好在配置完成。
 iptables 配置文件位于 /etc/sysconfig/iptables

还有一个 /etc/sysconfig/iptables_save ,
如果你使用 service iptables save 命令,配置就会保存到 iptables_save 文件。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
# Generated by iptables-save v1.4.7 on Fri Aug  9 03:13:13 2019
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 3306 -j ACCEPT
COMMIT
# Completed on Fri Aug  9 03:13:13 2019
# Generated by iptables-save v1.4.7 on Fri Aug  9 03:13:13 2019
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 3306 -j ACCEPT
COMMIT
# Completed on Fri Aug  9 03:13:13 2019
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
iptables 配置文件时的内容,#号开关的都是注释。
*filter 表示使用 filter ,具体什么意思也没有搞懂。
:INPUT DROP 默认 drop 掉所有进站,还有个 reject 但不知道怎么搞,听说 reject 比较快。
:FORWARD DROP 默认 drop 掉所有 forward ,具体是啥不知道。
:OUTPUT DROP 默认 dorp 掉所有出站,与 input 流量方向相反。
后面 -A 开关的都是规则了,-A开头的规则优先级比默认操作高。
从上往下优先级越来越低,所以规则不要有冲突,如果冲突下面的规则无效。

-----------------------------------------------------------------
安装好 iptables 后,我们先建立 22 和 80 端口的规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
这样我们就可以通过SSH工具链接和管理 VPS 服务器了,然后我们使用
service iptables save 保存配置,
service ipables restart 重新启动防火墙。
例外规则我们配置好了,接着我们修改默认规则。
-----------------------------------------------------------------
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
-----------------------------------------------------------------
默认规则我们全部修改成 DROP ,放弃掉了请求。
一定要在先配置好 22 端口例外规则后,才可以默认 DROP 掉所有请求,
否则你就无法使用SSH工具链接你的VPS服务器,等着重装丢数据吧~
80 和 22 配置好了,就完一大半了。
此时,已经可以通过 SSH 工个链接VPS ,apache 服务也能正常使用了。

接下来,我们还要允许本机对本机的访问,就是我们常用的 localhost 链接。
使用命令:
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
所有本机到本机的进站 accept 允许了,但这还没有完,有可能会出现奇怪的错误!
接着使用命令:
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
出站也要打开! 否则出来奇怪的错误。

我的小事例:
我的网站使用了 memcache 缓存,VPS安装了 memcached 服务,因为防火墙默认 DROP 所有请求
而例外规则里只配置了 INPUT 进站部分,导致 memcached 无法正常链接,搞了好久各种折腾!

本机到本机的访问解决了,还有一个已建立链接或相关链接也要放行,具体是啥咱也不清楚。
使用命令:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
同样,配置进站和出站吧。

记得 service iptables save 一下,保存配置并重启防火墙。

-----------------------------------------------------------------------------
允许外部链接 3306 MySQL
我还一个站点运行要SAE上,目前的状态是要死不活,所以我把它的MySQL链接到外部了。
这样做每天至少可以节约 0.48 元,一年150块够做一次大保健了。
MySQL 服务默认走3306端口,我们要 iptables 开启 3306 的进站和出站
使用命令:
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT
一进一出, service iptables save 保存配置,并重新启动 iptables 。
另外,MySQL默认配置是不允许外部链接的,所以除了打开防火墙端口,
MySQL里也应该设置,具体操作比较复杂这里就不说了。
——————————————————————————————
此里 iptables 的规则配置已经完成, 我们可以使用命令:
service iptables status
查看 iptables 的运行状态
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Table: filter
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     all  --  127.0.0.1            127.0.0.1
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 state NEW,ESTABLISHED
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3306

Chain FORWARD (policy DROP)
num  target     prot opt source               destination

Chain OUTPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     all  --  127.0.0.1            127.0.0.1
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:22
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:80 state NEW,ESTABLISHED
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:3306
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
总共分三个部分 INPUT FORWARD OUTPUT ,其中 INPUT 和 OUTPUT 各有5条规则。
对外开放了 22 80 3306 共3个端口 ,本机对本机开放所有端口,已建立链接的开放所有端口。
至于那个 FORWARD 不知道干什么用的,不管。

另外,前面提到的 memcached 服务,千万不要使用  service memcached start 直接启动。
这样启动会导致别人可以直接匿名操作你的memcachd数据,包括所有操作甚至提权。
我因为没有开启防火墙和直接 service memcached start ,导致memcached 监听任意IP。
别人保需要 telnet 123.123.123.123 11211 即可进入并操作。
我因为这个被人干了 250GB 的流量,我的香港小鸡月流量才 350GB/月 。

如果我们想设置 memcached 开机自动启动,可以这样做。
vim /etc/rc.d/init.d/memcached
修改里的内容:
daemon --pidfile ${pidfile} memcached -d -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P ${pidfile} $OPTIONS
修改为:
daemon --pidfile ${pidfile} memcached -d -l 127.0.0.1 -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P ${pidfile} $OPTIONS
增加一个 -l 127.0.0.1 ,这样 memcached 就只会监听 127.0.0.1 这个IP的请求,其它的都是卵子不会鸟它,别人就进不来了。

至于开机启动的方法,大概就是
chkconfig --add memcached
chkconfig --add httpd 增加
chkconfig --del httpd  删除开机启动
chkconfig httpd off  取消开机启动
ckconfig httpd on 开启开机启动
设置为开机后 /etc/rc.d/init.d/ 目录下就会有相对应的文件
使用命令:chkconfig
可以查看所有开机启动项,就记录到这里吧,差不多了人也敲累了

直接复制过来的,竟然有个table套着,看起来也不错就这样吧。

转载于:https://my.oschina.net/4ever/blog/3085654

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值