首页 > 系统相关 >Linux中iptables设置详细

Linux中iptables设置详细

时间:2023-09-20 14:02:46浏览次数:25  
标签:iptables -- ACCEPT tcp 详细 Linux dport INPUT


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

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

1.首先介绍一下指令和相关配置文件

1. 启动指令:service iptables start   
2. 重启指令:service iptables restart   
3. 关闭指令:service iptables stop   
4.   
5. 然后是相关配置:/etc/sysconfig/iptables   
6. 如何操作该配置呢?   
7. vim /etc/sysconfig/iptables   
8. 然后进去修改即可,修改完了怎么办?这里很多人会想到/etc/rc.d/init.d/iptables save指令,但是一旦你这么干了你刚才的修改内容就白做了。。。   
9. 具体方法是:   
10. 只修改/etc/sysconfig/iptables 使其生效的办法是修改好后先service iptables restart,然后才调用/etc/rc.d/init.d/iptables save,   
11. 因为/etc/rc.d/init.d/iptables save会在iptables服务启动时重新加载,要是在重启之前直接先调用了/etc/rc.d/init.d/iptables save那么你   
12. 的/etc/sysconfig/iptables 配置就回滚到上次启动服务的配置了,这点必须注意!!!


2.下面介绍一些指令用法(主要还是man iptables看下相关资料才行)


1. -A:指定链名   
2. -p:指定协议类型   
3. -d:指定目标地址   
4. --dport:指定目标端口(destination port 目的端口)   
5. --sport:指定源端口(source port 源端口)   
6. -j:指定动作类型


3.如果我不像修改文件直接打命令可以吗,当然没问题,步骤如下:


1. 例如我给SSH加放行的语句:   
2. 添加input记录: iptables -A INPUT -p tcp --dport 22
3. 添加output记录: iptables -A OUTPUT -p tcp --sport 22
4. 最后注意需要再执行一下 /etc/init.d/iptables save,这样这两条语句就保存到刚才那个/etc/sysconfig/iptables 文件中了。


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


1. 首先要做的是给咱的SSH进行ACCEPT配置,以免直接无法连接的情况发生:   
2. 1.如果SSH端口是22(这里不建议用默认端口最好改掉SSH端口)   
3. iptables -A INPUT -p tcp --dport 22 -j ACCEPT   
4. iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT   
5. 注意要/etc/rc.d/init.d/iptables save,以下每一步都最好执行一遍此语句,以下不再累述。   
6.   
7. 2.vim /etc/sysconfig/iptables确定是否已经加入配置,可以的话执行service iptables restart重启后生效   
8.   
9. 3.下面是很危险的操作,如果你第一步没做就会直接可能导致你连不上SSH,此步骤前切记执行第一步!!!   
10. iptables -P INPUT DROP    
11. iptables -P OUTPUT DROP    
12. iptables -P FORWARD DROP   
13. 这个步骤是把所有不符合自己配置的规则ACCEPT的连接全部DROP掉,执行完以后如果咱SSH还没掉,那么谢天谢地,安全了,重启下iptables后继续下面的配置!   
14.   
15. 4.下面咱就不细说了,具体就是看自己服务器要开放哪些端口或者是要访问哪些端口来做具体的配置,下面是我自己的机器的配置:   
16.   
17. /etc/sysconfig/iptables文件配置如下:   
18. # Generated by iptables-save v1.4.7 on Fri Mar  2 19:59:43 2012   
19. *filter   
20. :INPUT DROP [0:0]   
21. :FORWARD DROP [0:0]   
22. :OUTPUT DROP [8:496]   
23. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT   
24. #ping使用的端口   
25. -A INPUT -p icmp -j ACCEPT   
26. -A INPUT -i lo -j ACCEPT   
27. -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT   
28. -A INPUT -s 192.168.2.200/32 -d 192.168.2.200/32 -j ACCEPT   
29. #允许服务器自己的SSH(对外部请求来说服务器是目标所以使用--dport)   
30. -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT   
31. #80端口不用说了吧,服务器网站访问端口   
32. -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT   
33. -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT   
34. -A INPUT -p tcp -m tcp --dport 11211 -j ACCEPT   
35. -A INPUT -p tcp -m tcp --dport 11212 -j ACCEPT   
36. -A FORWARD -j REJECT --reject-with icmp-host-prohibited   
37. #53端口是DNS相关,TCP和UDP都要配置   
38. -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT   
39. -A INPUT -p udp -m udp --dport 53 -j ACCEPT   
40. #ping使用的端口   
41. -A OUTPUT -p icmp -j ACCEPT   
42. -A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT   
43. -A OUTPUT -s 192.168.2.200/32 -d 192.168.2.200/32 -j ACCEPT   
44. #允许服务器SSH到其他机器(使用外部端口就使用--dport)   
45. -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT   
46. #允许服务器自己的SSH(自已为源输出就使用--sport)   
47. -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT   
48. #访问外部网站80端口(使用外部端口就使用--dport)   
49. -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT   
50. #如果服务器需要访问外部网站,那么OUTPUT也需要配置53端口(使用外部端口就使用--dport)   
51. -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT   
52. -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT   
53. #如果有访问外部邮箱,那么打开邮箱相关端口(使用外部端口就使用--dport)   
54. -A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT   
55. -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT   
56. -A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT   
57. #服务器网站访问端口(自已为源输出就使用--sport)   
58. -A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT   
59. -A OUTPUT -p tcp -m tcp --sport 3306 -j ACCEPT   
60. -A OUTPUT -p tcp -m tcp --sport 11211 -j ACCEPT   
61. -A OUTPUT -p tcp -m tcp --sport 11212 -j ACCEPT   
62. COMMIT   
63. # Completed on Fri Mar  2 19:59:43 2012


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

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


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


  6.最后补充一下,如果想针对某IP进行单独开放端口可以如下配置:



    1. 如果我需要对内网某机器单独开放mysql端口,应该如下配置:   
    2. iptables -A INPUT -s 192.168.2.6 -p tcp -m tcp --dport 3306 -j ACCEPT   
    3. iptables -A OUTPUT -s 192.168.2.6 -p tcp -m tcp --sport 3306 -j ACCEPT


    7.彻底禁止某IP访问:


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

    标签:iptables,--,ACCEPT,tcp,详细,Linux,dport,INPUT
    From: https://blog.51cto.com/u_16242566/7536832

    相关文章

    • 关于.Net 6.0 在Linux ,Docker容器中,不安装任何依赖就生成图形验证码!!!!!!!!!!!
      在.NetFramework时代,我们生成验证码大多都是用System.Drawing。在.Net6中使用也是没有问题的。但是,System.Drawing却依赖于WindowsGDI+。为了实现跨平台,我陷入了沉思!! 微软推荐使用SkiaSharp进行替代,所以就开始了,踩坑之旅首先,安装SkiaSharp 编写好图形生成代码。......
    • iOS 生成证书、描述文件、打包上架Appstore详细流程
      简介我打算将生成证书,描述文件、上架App的步骤一步一步写下来,于是就有了这篇文章编译环境系统版本:macOSSierra10.12.6Xcode:v9.2(9C40b)1.开发者账号苹果官方开发者网站开发者账号分为四类:1个人开发者账号Individual个人的是比较好申请的,相比于公司开发者账号,不需要申请 邓......
    • 2022超详细流程ios APP最新打包上线教程,保证一看就会
      这篇文章主要是想要给大家讲述一下APP打包上线到APPStore的详细流程。作为一名开发人员,上架APP是必须要会的,否则出去都不好意思说自己是iOS程序员。而且上线过APP的小伙伴肯定都知道,iOSAPP上线相比安卓的APP上线要复杂麻烦很多,一不小心就会掉进坑里。所以下面我将会带着大家一步一......
    • linux查看文件夹大小、文件数量的方法
      查看文件数量及大小ls-l|grep"^-"|wc-l或find./company-typef|wc-l查看某文件夹下文件的数量,包括子文件夹里的。ls-lR|grep"^-"|wc-l查看某文件夹下文件夹的数量,包括子文件夹里的。ls-lR|grep"^d"|wc-l以上的命令解释:ls-l长列表输出该目录下文件信息(注意这里......
    • linux 中实现部分取反
       001、测试文件(实现仅提取==1185==和其他不包含==数字==的行)[root@pc1test2]#lsa.txt[root@pc1test2]#cata.txt##测试文件==1185==abcadoiafa==1120==asvgaojfajsdfja==3875==yuerdded==1130==afsdalj==1185== 002、sed实现[root@pc1test2]#ls......
    • 【网络安全】【网络防御】 如何设置网络安全 , 检查电脑是否被监控?电脑被攻击了咋办?详
      【简洁实用】好用的杀毒软件使用教程讲解:地址一:https://www.cnblogs.com/liuguiqing/p/16678432.html地址二:https://blog.csdn.net/xysxlgq/article/details/126800677【简洁实用】网络安全防护网络安全网络安全防御地址一:https://www.cnblogs.com/liuguiqing/p/16683142.h......
    • Linux 动态库符号冲突
      问题起源在Linux下编译动态库的时候,所有的符号默认都是导出的,也就是动态库中的函数名,类名等,在外部都是可见的。当程序引用多个动态库时,由于各个动态库可能属于不同的团队来开发,不同团队使用相同的第三方库的可能性也是有的(例如openssl,libcurl,cjson等),不同的团队使用的第三方......
    • linux关闭终端,后台程序不退出
      你要退出终端会话时,要是存在被停止的进程,会出现警告信息。但如果使用了后台进程,只有某些终端仿真器会在你退出终端会话前提醒你还有后台作业在运行。 如果希望运行在后台模式的脚本在登出控制台后能够继续运行,我再一篇文章中看到,有方法可以实现。有时你会想在终端......
    • iptables使用示例
      iptable的各种targetiptables的结构:iptables由上而下,由Tables,Chains,Rules组成。一、iptables的表tables与链chainsiptables有Filter,NAT,Mangle,Raw四种内建表:1.Filter表Filter是iptables的默认表,它有以下三种内建链(chains):INPUT链 –处理来自外部的数据。OUTPUT链......
    • (笔记)Linux修改、查看日期和时间的方法
        1、查看时间、日期#dateFriJan1114:04:10CST2019 2、修改时间语法:date-s"时:分:秒"#date-s"17:20:30" 3、修改日期、时间语法:date-s"年-月-日时:分:秒"#date-s"2019-01-1114:21:30"注意:设置时间需要使用双引号括起来,否则会报错。 ......