转自:http://www.jianshu.com/p/28b8536a6c8a

环境:

  • CentOS 6
  • shadowsocks
  • iptables

    在安装了ss-bash后,ss-bash每添加一次port就会在iptables中的SSOUTPUT和SSINPUT中添加相对应的port作为ACCEPT,所以我们只需保留部分必备port,将其他端口DROP就可以了。

初始化:

首先进行一些初始化,清空所有现有的规则:
iptables -F #清空所有链
iptables -X #清空所有自定义链

定义规则:

由于我们的目的是放弃所有无关于shadowsocks的数据,也就是说默认丢弃所有数据,只接受满足条件的数据,无疑是一种很安全的做法。

首先添加ssh端口:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #22自行修改,如我设置的 8888 端口

添加以下六条规则:
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT #允许icmp包进入
iptables -A INPUT -s localhost -d localhost -j ACCEPT #允许本地的数据包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已经建立和相关的数据包进入
iptables -A OUTPUT -p icmp --icmp any -j ACCEPT #允许icmp包出去
iptables -A OUTPUT -s localhost -d localhost -j ACCEPT #允许本地数据包
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已经建立和相关的数据包出去

需要注意的是,以上的七条基本上是必须添加的;下面开始添加其他必要端口:
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT #打开DNS需要用到的53端口
iptables -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT #允许80端口tcp协议的第一个数据包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许ESTABLISHEDRELATED状态的包
iptables -A INPUT -p tcp --dport 443 -j ACCEPT #打开https需要用到的443端口

service iptables save #保存配置
service iptables restart #重启iptables
请注意,重启命令如果是CentOS 6 可以这样执行,如果是7.0请继续往下看。

7.0设置iptables:

CentOS从7.0开始,默认防火墙更改为firewall,但如果想继续使用iptables,请按照一下命令执行:

关闭firewall:
systemctl stop firewalld.service #关闭firewall
systemctl disable firewalld.service #禁止firewall开机启动
安装iptables:
yum install iptables-services #安装iptables;安装前可先‘iptables -L -n’测试是否安装
之后按照以上的CentOS 6 进行配置,但需要注意的是,7.0的重启命令为:
systemctl restart iptables.service #重启iptables
另外还需要设置开机启动(7.0)
systemctl enable iptables.service #设置iptables开机启动

至此,关于iptables配置已经完成


以下是关于iptables的一些资料,或许能够在你疑惑的时候对你有帮助:

iptables的state各个状态的含义:

state只有四种状态:NEW,ESTABLISHED,RELATED 和INVALID它们主要是和状态匹配一起使用。

下面就简要地介绍以下这几种状态:

Table 4-1. 数据包在用户空间的状态

State(状态) Explanation(注释)

NEW:
NEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接第一个包,它即将被匹配了。
比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。这样做有时会导致一些问题,但对某些情况是有非常大的帮助的。例如,在 我们想恢复某条从其他的防火墙丢失的连接时,或者某个连接已经超时,但实际上并未关闭时。


ESTABLISHED:
ESTABLISHED已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。
处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变 为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防 火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我们所发出的信息的应答。


RELATED:
RELATED是个比较麻烦的状态。当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。
换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data连接就是和FTP-control有RELATED的。还有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。


INVALID:
INVALID说明数据包不能被识别属于哪个连接或没有任何状态。
有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP错误信息。一般地,我们DROP这个状态的任何东西。

另外还有一些描述更为简单的说明:

NEW:
当你在使用UDP、TCP、ICMP等协议时,发出的第一个包的状态就是“NEW”。


ESTABLISHED:
当你在使用TCP、UDP、ICMP等协议时:假设你的主机发出的第一个包成功穿越防火墙,那么接下来你的主机 发出和接收到的包的状态都是“ESTABLISHED”。


RELATED:
当你执行Linux下执行traceroute(Windows下对应的命令为tracert)命令时,这个traceroute会发出一个封包,该封包的TTL(生存时间,Time To Live)为1,当这个包遇到路由器的时候它的TTL会减少1,这时TTL = 0,然后这个包会被丢弃,丢弃这个包的路由器会返回一个ICMP Type 11的封包给你,并告诉你那个发出的数据包气数已尽。而这个ICMP Type 11的链接状态就是“RELATED”。


INVALID
状态为INVALID的包就是状态不明的包,也就是不属于前面3中状态的包,这类包一般会被视为恶意包而被丢弃。

以上关于state的相关信息摘自ChinaUnix,感谢!

文/TPL(简书作者)
原文链接:http://www.jianshu.com/p/28b8536a6c8a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

CentOS 配置 iptables 配合 ss的更多相关文章

  1. CentOS配置iptables规则并使其永久生效

    1. 目的 最近为了使用nginx,配置远程连接的使用需要使用iptable是设置允许外部访问80端口,但是设置完成后重启总是失效.因此百度了一下如何设置永久生效,并记录.  2. 设置 2.1 添加 ...

  2. 阿里云Centos配置iptables防火墙

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 一.检查iptabl ...

  3. 阿里云CentOS配置iptables防火墙[转]

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 一.检查iptabl ...

  4. Centos配置iptables开放ftp服务

    安装完vsftpd后,默认情况下,CentOS的防火墙是不开放ftp服务的,需要添加模块和开放21端口才能提供ftp访问.1.添加ip_conntrack_ftp 模块[root@hexuweb101 ...

  5. centos配置iptables

    第一次配置前消除默认的规则 #这个一定要先做,不然清空后可能会悲剧 iptables -P INPUT ACCEPT #清空默认所有规则 iptables -F #清空自定义的所有规则 iptable ...

  6. Ali_Cloud++:阿里云Centos配置iptables防火墙教程

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 1):检查iptab ...

  7. centos 7 配置iptables

    环境:阿里云ECS.centos 7 一.防火墙配置 不知道为什么,云主机没有开启firewall 或iptables,记录一下配置iptables防火墙的步骤 1.检测并关闭firewall sys ...

  8. CentOS防火墙iptables的配置方法详解

    CentOS系统也是基于linux中的它的防火墙其实就是iptables了,下面我来介绍在CentOS防火墙iptables的配置教程,希望此教程对各位朋友会有所帮助. iptables是与Linux ...

  9. CentOS下配置iptables防火墙 linux NAT(iptables)配置

    CentOS下配置防火墙 配置nat转发服务CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/syscon ...

随机推荐

  1. hdu3228Island Explorer

    链接 给你两条线及两条线上的点,求最小生成树. 可以挨个枚举一条线上的点,三分出另一条线上离他最近的点进行连边. 注意N.M可能为0 debug了1天半,至今不知道原始二分版本错在哪里.. #incl ...

  2. 查看本机的IP地址方法:

    查看本机的IP地址方法:对于XP系统:方法一:如果右下角系统托盘区有本地连接的小电脑,双击小电脑→支持,就可以看到本机IP地址.无线连接也是一样.方法二:开始→运行cmd /k ipconfig,IP ...

  3. 数据库 基础篇3(mysql语法)

    4 数据库管理(接上篇) 4.1 查询所有数据库 mysql> show databases; +--------------------+ | Database           | +-- ...

  4. Linux系统下Apache2.4.17的安装过程

    Linux系统下安装Apache Server2.4.17.还是先声明一下,Linux命令我不进行讲解,因为我不是讲Linux命令的.有需要注意的地方,我会上图,没什么值得的注意的地方,我就不上图了. ...

  5. 0020 Linux 文件操作命令

    1. 创建文件 touch 文件名 2. 删除文件 rm 文件名 3. 复制文件 cp 源文件 目录 4.剪切文件 mv 源文件 目标文件 5.重命名文件 mv 源文件名 新文件名 6.改变文件权限 ...

  6. 网页项目——i家居网站

    本文介绍一个网页项目--i家居网站,小妹初来乍到,欢迎大家评论建议O(∩_∩)O~ 详细源代码.各种框架的实现以及素材均已上传百度云,需要的可以下载: 首页展示 用户注册页面 用户登录页面 商家注册页 ...

  7. 配置rc.local开机自启动文件的疑问

    有时我们自己在/etc/rc.d/rc.local里面增加的随机器启动的脚本和指令总是不能自动加载和启动,,机器启动后手动执行脚本又能成功,经常被搞得晕头转向的.最近我经过1天的辛苦测试和查找资料,终 ...

  8. 安装Pod时提示ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod

    环境:OSX EI 10.11.1 昨天切换gem源后,招待pod安装没有任何问题,也可以正常用$ gem sources --add https://ruby.taobao.org/ --remov ...

  9. hadoop运行原理之Job运行(三) TaskTracker的启动及初始化

    与JobTracker一样,TaskTracker也有main()方法,然后以线程的方式启动(继承了Runnable接口).main()方法中主要包含两步:一是创建一个TaskTracker对象:二是 ...

  10. tomcat 一个项目在本机和办公室以外电脑服务器上搭建出现乱码问题

    插入数据库都是???乱码 页面浏览之前在本机插入的数据都是正常的 修改conf目录下的server.xml文件 转义字符集 为 GBK  或 UTF-8 utf-8 即 添加 URIEncoding= ...