天花了一上午时间把 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套着,看起来也不错就这样吧。