无论如何,iptables是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法SSH,那就等着被老板骂吧,呵呵。。。

以下内容是为了防止这种情况发生而写的,当然很初级,不过一般服务器也够用了:

1.首先介绍一下指令和相关配置文件
启动指令:service iptables start   
重启指令:service iptables restart   
关闭指令:service iptables stop   
  
然后是相关配置:/etc/sysconfig/iptables   
如何操作该配置呢?   
vim /etc/sysconfig/iptables   
然后进去修改即可,修改完了怎么办?这里很多人会想到/etc/rc.d/init.d/iptables save指令,但是一旦你这么干了你刚才的修改内容就白做了。。。   
具体方法是:   
只修改/etc/sysconfig/iptables 使其生效的办法是修改好后先service iptables restart,然后才调用/etc/rc.d/init.d/iptables save,   
因为/etc/rc.d/init.d/iptables save会在iptables服务启动时重新加载,要是在重启之前直接先调用了/etc/rc.d/init.d/iptables save那么你

的/etc/sysconfig/iptables 配置就回滚到上次启动服务的配置了,这点必须注意!!!

2.下面介绍一些指令用法(主要还是man iptables看下相关资料才行)
-A:指定链名   
-p:指定协议类型   
-d:指定目标地址   
--dport:指定目标端口(destination port 目的端口)   
--sport:指定源端口(source port 源端口)

-j:指定动作类型

3.如果我不像修改文件直接打命令可以吗,当然没问题,步骤如下:
例如我给SSH加放行的语句:   
添加input记录: iptables -A INPUT -p tcp --dport 22 -j ACCEPT   
添加output记录: iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

最后注意需要再执行一下 /etc/init.d/iptables save,这样这两条语句就保存到刚才那个/etc/sysconfig/iptables 文件中了。

4.接下来说明一下步骤,如果机器不在我身边,我只能SSH进去做iptables规则,那么我必须注意每一步,千万别搞错了,否则就SSH链接不上都有可能!

首先要做的是给咱的SSH进行ACCEPT配置,以免直接无法连接的情况发生:

1.如果SSH端口是22(这里不建议用默认端口最好改掉SSH端口)   
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT   
注意要/etc/rc.d/init.d/iptables save,以下每一步都最好执行一遍此语句,以下不再累述。   
  
2.vim /etc/sysconfig/iptables确定是否已经加入配置,可以的话执行service iptables restart重启后生效   
  
3.下面是很危险的操作,如果你第一步没做就会直接可能导致你连不上SSH,此步骤前切记执行第一步!!!   
iptables -P INPUT DROP    
iptables -P OUTPUT DROP    
iptables -P FORWARD DROP   
这个步骤是把所有不符合自己配置的规则ACCEPT的连接全部DROP掉,执行完以后如果咱SSH还没掉,那么谢天谢地,安全了,重启下iptables后继续下面的配置!   
  
4.下面咱就不细说了,具体就是看自己服务器要开放哪些端口或者是要访问哪些端口来做具体的配置,下面是我自己的机器的配置:   
  
/etc/sysconfig/iptables文件配置如下:   
# Generated by iptables-save v1.4.7 on Fri Mar  2 19:59:43 2012   
*filter   
:INPUT DROP [0:0]   
:FORWARD DROP [0:0]   
:OUTPUT DROP [8:496]   
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT   
#ping使用的端口   
-A INPUT -p icmp -j ACCEPT   
-A INPUT -i lo -j ACCEPT   
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT   
-A INPUT -s 192.168.2.200/32 -d 192.168.2.200/32 -j ACCEPT   
#允许服务器自己的SSH(对外部请求来说服务器是目标所以使用--dport)   
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT   
#80端口不用说了吧,服务器网站访问端口   
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT   
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT   
-A INPUT -p tcp -m tcp --dport 11211 -j ACCEPT   
-A INPUT -p tcp -m tcp --dport 11212 -j ACCEPT   
-A FORWARD -j REJECT --reject-with icmp-host-prohibited   
#53端口是DNS相关,TCP和UDP都要配置   
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT   
-A INPUT -p udp -m udp --dport 53 -j ACCEPT   
#ping使用的端口   
-A OUTPUT -p icmp -j ACCEPT   
-A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT   
-A OUTPUT -s 192.168.2.200/32 -d 192.168.2.200/32 -j ACCEPT   
#允许服务器SSH到其他机器(使用外部端口就使用--dport)   
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT   
#允许服务器自己的SSH(自已为源输出就使用--sport)   
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT   
#访问外部网站80端口(使用外部端口就使用--dport)   
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT   
#如果服务器需要访问外部网站,那么OUTPUT也需要配置53端口(使用外部端口就使用--dport)   
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT   
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT   
#如果有访问外部邮箱,那么打开邮箱相关端口(使用外部端口就使用--dport)   
-A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT   
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT   
-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT   
#服务器网站访问端口(自已为源输出就使用--sport)   
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT   
-A OUTPUT -p tcp -m tcp --sport 3306 -j ACCEPT   
-A OUTPUT -p tcp -m tcp --sport 11211 -j ACCEPT   
-A OUTPUT -p tcp -m tcp --sport 11212 -j ACCEPT   
COMMIT

# Completed on Fri Mar  2 19:59:43 2012

5.可能有时候需要删除规则,最简单就是修改一下/etc/sysconfig/iptables然后service iptables restart,最后/etc/rc.d/init.d/iptables save即可。

当然也可以使用指令完成:

在网上找了一下,删除规则的方法:   
语法是: iptables -D chain rulenum [options]   
其中: chain 是链的意思,就是INPUT FORWARD 之类的   
             rulenum 是规则的编号。从1 开始。可以使用  --line-numbers 列出规则的编号   
    
所以,例如上面要删除一个INPUT链的规则的话可以这样:iptables -D INPUT 3   
意思是删除第3条规则。   
还有第二种方法。第二种办法是 -A 命令的映射,不过用-D替换-A。当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。也就是说,你如何用iptables -A.... 语句定义了一个规则,则删除此规则时就用 -D 来代替- A  其余的都不变即可。   
======================   
说一下上面的 --line-numbers 选项,如下面的命令:   
iptables -L INPUT --line-numbers   列出INPUT 链所有的规则   
num  target     prot opt source               destination            
1    REJECT     tcp  --  anywhere             anywhere            tcp dpt:microsoft-ds reject-with icmp-port-unreachable   
2    REJECT     tcp  --  anywhere             anywhere            tcp dpt:135 reject-with icmp-port-unreachable   
3    REJECT     tcp  --  anywhere             anywhere            tcp dpt:netbios-ssn reject-with icmp-port-unreachable   
  
...   
...   
删除指定行规则:

[root@localhost rc.d]# iptables -D INPUT 4

  6.最后补充一下,如果想针对某IP进行单独开放端口可以如下配置:
如果我需要对内网某机器单独开放mysql端口,应该如下配置:   
iptables -A INPUT -s 192.168.2.6 -p tcp -m tcp --dport 3306 -j ACCEPT

iptables -A OUTPUT -s 192.168.2.6 -p tcp -m tcp --sport 3306 -j ACCEPT

7.彻底禁止某IP访问:
#屏蔽单个IP的命令是   
iptables -I INPUT -s 123.45.6.7 -j DROP   
#封整个段即从123.0.0.1到123.255.255.254的命令   
iptables -I INPUT -s 123.0.0.0/8 -j DROP   
#封IP段即从123.45.0.1到123.45.255.254的命令   
iptables -I INPUT -s 124.45.0.0/16 -j DROP   
#封IP段即从123.45.6.1到123.45.6.254的命令是   
iptables -I INPUT -s 123.45.6.0/24 -j DROP   
指令I是insert指令 但是该指令会insert在正确位置并不像A指令看你自己的排序位置,因此用屏蔽因为必须在一开始就要加载屏蔽IP,所以必须使用I命令加载,然后注意执行/etc/rc.d/init.d/iptables save进行保存后重启服务即可

Linux中iptables设置详细(转)的更多相关文章

  1. Linux中iptables设置详细

    无论如何,iptables是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法SSH,那就等着被老板骂吧,呵呵... 一下内容是为了防止这种情况发生而写的,当然很初级,不过一般服务 ...

  2. LINUX中IPTABLES防火墙使用

    对于有公网IP的生产环境VPS,仅仅开放需要的端口,即采用ACL来控制IP和端口(Access Control List). 这里可以使用Linux防火墙netfilter的用户态工具 iptable ...

  3. Linux中systemctl命令详细介绍

    Linux Systemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syst ...

  4. Linux中如何设置服务自启动?

    转自:Linux中如何设置服务自启动? 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务,主要用三种方式进行这一操作: ln -s             在/etc/rc.d/rc ...

  5. linux中怎样设置dhcpd

    linux中怎样设置DHCP  在 linux 以下设置 DHCP一点也不复杂﹐您全部要做的仅仅有一个文件﹕/etc/dhcpd.conf . 以下﹐我用我自己的设置文件来说说怎么改动这个文件﹕  d ...

  6. linux中iptables配置文件及命令详解详解

    iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconfig/iptables. 1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下 ...

  7. linux中iptables配置文件及命令详解

    转自:https://www.cnblogs.com/itxiongwei/p/5871075.html iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconf ...

  8. linux中iptables的用法

    iptables基本操作笔记 一.基本操作 #启动防火墙 service iptables start #停止防火墙 service iptables stop #重启防火墙 service ipta ...

  9. Linux中安装JDK详细步骤

    一.下载Linux版本的JDK 进入官网下载对应的JDK,下载之前需要先登录 官网地址 -> https://www.oracle.com/ 登录成功后,找到对应的下载位置 根据自己电脑下载对应 ...

随机推荐

  1. C#性能优化:延迟初始化Lazy<T>

    1. 概述 我们创建某一个对象需要很大的消耗,而这个对象在运行过程中又不一定用到,为了避免每次运行都创建该对象,这时候延迟初始化(也叫延迟实例化)就出场了. 延迟初始化出现于.NET 4.0,主要用于 ...

  2. Backbone源码分析-Backbone架构+流程图

    作者:nuysoft/高云/nuysoft@gmail.com 声明:本文为原创文章,如需转载,请注明来源并保留原文链接. Backbone0.9.1源码分析分析系列 jQuery1.6.1源码分析系 ...

  3. protobuf 文件级别优化

    package IM.BaseDefine;option java_package = "com.mogujie.tt.protobuf";option optimize_for ...

  4. xsd、wsdl生成C#类的命令行工具使用方法

    1.xsd生成C#类命令 示例:xsd <xsd文件路径> /c /o:<生成CS文件目录> <其他参数> 参数说明: /c 生成为cs文件,/d 生成DataSe ...

  5. css的小三角实现的方式

    先上一个简单的例子哈: 此时的方向向下. 如果想方向向上的话用:border-top:0;border-bottom:4px solid; 1. width:0 height:0 border宽度,颜 ...

  6. C#基础知识系列九(对IEnumerable和IEnumerator接口的糊涂认识)

    前言 IEnumerable.IEnumerator到现在为止对这两个接口还是不太理解,不理解但是自己总是想着试着要搞明白,毕竟自己用的少,所以在此先记录一下.以备自己日后可以来翻查,同时也希望园子里 ...

  7. Maven-本地安装

    本文测试安装maven3     安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Maven是 Apache 下的一个项目,目前最新版本是 3.0.4,我用的也是这个. 首先去官网下载 ...

  8. 1.Android入门学习

    现在移动开发Android.iOS都很普遍,本人也是第一次学习Android,所以记录自己学习Android点滴,刚学不久肯定有很多不足地方望大家批评指正. 一.Android工具环境搭配 网上已经有 ...

  9. BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞

    看数据范围像是个暴力,而且理论复杂度似乎可行,然后被卡了两个点...然后来了个乱搞的线段树+扫描线.. 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec Memory L ...

  10. 【bzoj3289】 Mato的文件管理

    http://www.lydsy.com/JudgeOnline/problem.php?id=3289 (题目链接) 题意 求区间逆序对 Solution 离线无修改查询,莫队转移:树状数组维护区间 ...