Linux只iptables

news/2024/7/3 13:24:57 标签: 操作系统, 网络, 运维
1. 查看<strong>网络</strong>监听的端口:
netstat -tunlp

2. 查看本机的路由规则:
route

stack@ubuntu:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.217.99.1     0.0.0.0         UG    0      0        0 eth0
10.217.99.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 vboxnet0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0


Destination-->network
Genmask-->netmask
这两者组成一个完整的网段

Gateway
如果为0.0.0.0,表示该路由直接由本机传送出去,即通过局域网的MAC直接传送,
如果显示IP的话,表示改路由要经过路由器才能传送出去。

Flags:有多个标志,代表的意义如下:
U (route is up):该路由是启动的;
H (target is a host):目标是一部主机 (IP) 而非网域;
G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的标志;
D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由
M (modified from routing daemon or redirect):路由已经被修改了;
! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)

Iface
这个路由传递封包的接口。

路由过程是有顺序的,从小<strong>网络</strong>传送到大<strong>网络</strong>,当最后没有合适的路由可以匹配时,就使用default路由,即destination是0.0.0.0的路由


3./etc/services文件:port和service的对应关系

4.查看本地的<strong>网络</strong>服务
netstat -tunlp  #列出正在监听的<strong>网络</strong>服务和端口
netstat -tunp   #列出已联机的<strong>网络</strong>联机状态和端口
kill -9 PID     #杀掉sshd进程,即可关闭该远程连接

5.查看<strong>网络</strong>上的开放的<strong>网络</strong>服务:
nmap IP
nmap localhost

6. 如何查阅 rpcbind 这个程序一开机就执行? 如果开机就执行,
如何将他改为开机时不要启动? 如何立即关闭这个 rpcbind 服务?
1) chkconfig --list | grep rpcbind
   runlevel
   确认一下你的环境与 rpcbind 是否启动
2) 如果有启动,可透过chkconfig --level 35 rpcbind off来设定开机时不要启动;
3) 可以透过 /etc/init.d/rpcbind stop 来立即关闭它


7.iptables

1) 查看防火墙格式化输出
iptables [-t tables] [-L] [-nv]

选项与参数:
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
-v :列出更多的信息,包括通过该规则的封包总位数、相关的<strong>网络</strong>接口等

eg:

查看filter表的chain
stack@ubuntu:~$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

说明:
target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃) 的项目!
prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;
opt:额外的选项说明
source :代表此规则是针对哪个『来源 IP』进行限制?
destination :代表此规则是针对哪个『目标 IP』进行限制?

以上的每个chain中的规则,对封包进行过滤的时候是有顺序的,按从上到下的顺序,只要有一个规则符合,那么就可以通过防火墙,
如果一直不符合,就一直向下继续匹配,如果都不符合,那么就执行预设的动作。
可以看到FORWORD的最后两个rule的target是REJECT,这说明,如果前面的rule都不符合,那么到这条规则的时候,就拒绝。

查看nat表的chain
stack@ubuntu:~$ sudo iptables -t nat -L -n

2) 查看完整的防火墙规则:

查看所有的表的规则
stack@ubuntu:~$ sudo iptables-save
# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013
*nat
:PREROUTING ACCEPT [512:70935]
:INPUT ACCEPT [371:61561]
:OUTPUT ACCEPT [2352:148261]
:POSTROUTING ACCEPT [2343:147796]
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT
# Completed on Fri Jan 18 14:26:06 2013
# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013
*mangle
:PREROUTING ACCEPT [26824:23528990]
:INPUT ACCEPT [26682:23519288]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22885:4162471]
:POSTROUTING ACCEPT [23023:4179687]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Fri Jan 18 14:26:06 2013
# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013
*filter
:INPUT ACCEPT [26671:23518302]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22874:4161485]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Fri Jan 18 14:26:06 2013

查看某一个表的规则
stack@ubuntu:~$ sudo iptables-save -t filter
# Generated by iptables-save v1.4.12 on Fri Jan 18 14:29:14 2013
*filter
:INPUT ACCEPT [26774:23531129]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22956:4173130]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Fri Jan 18 14:29:14 2013


对比

stack@ubuntu:~$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    


3) 清除防火墙
iptables [-t tables] [-FXZ]

选项与参数:
-F :清除所有的已订定的规则;
-X :杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )啰;
-Z :将所有的 chain 的计数与流量统计都归零


4) 定义预设的政策(policy)
当你的封包不在你设定的规则之内时,则该封包的通过与否,是以 Policy 的设定为准。即封包不符合你定义的所有规则的话,执行什么操作。
有两个可选:ACCEPT, DROP。
policy是和chain对应的,一个chain对应一个policy.

iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

选项与参数:
-P : 定义链( chain )。注意,这个 P 为大写!
ACCEPT : 该封包可接受。
DROP : 该封包直接丢弃,不会让 client 端知道为何被丢弃。

eg:
iptables -P INPUT DROP  #将filter表的INPUT链的预设政策设置为DROP


5) 为某个chain增加规则
iptables [-AI 链名] [-io <strong>网络</strong>接口] [-p 协议] [-s 来源 IP/网域] [-d 目标 IP/网域] -j [ACCEPT|DROP|REJECT|LOG]
选项与参数:
-AI 链名:针对某的链进行规则的 "插入" 或 "累加"
-A :新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则,使用 -A 就可以加上第五条规则!
-I :插入一条规则。如果没有指定此规则的顺序,默认是插入变成第一条规则。例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5 号。
链 :有 INPUT, OUTPUT, FORWARD 等,
-io <strong>网络</strong>接口:设定封包进出的接口规范
-i :封包所进入的那个<strong>网络</strong>接口,例如 eth0, lo 等接口。需与 INPUT 链配合;
-o :封包所传出的那个<strong>网络</strong>接口,需与 OUTPUT 链配合;
-p 协议:设定此规则适用于哪种封包格式,主要的封包格式有: tcp, udp, icmp 及 all 。
-s 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,
   例如: IP:192.168.0.100,网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
   若规范为『不许』时,则加上 ! 即可,例如:
   -s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;
-d 目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。
-j :后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG),
    LOG 这个动作仅在进行记录而已,并不会影响到这个封包的其他规则比对的。


eg:
#1. 给filter表的INPUT链加上一条规则,设定 lo 成为受信任的装置,亦即进出 lo 的封包都予以接受
iptables -A INPUT -i lo -j ACCEPT

#2. 给filter表的INPUT链加上一条规则,设定来自eth1接口的192.168.100.0/24网段的封包都接受
iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT

#3. 给filter表的INPUT链加上一条规则,设定来自eth1接口的 192.168.100.230 IP的封包都丢弃
iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP

#4. 记录来自192.168.2.200这个IP的请求记录
iptables -A INPUT -s 192.168.2.200 -j LOG


6) 设定规则具体到端口
iptables [-AI 链名] [-io <strong>网络</strong>接口] [-p tcp|udp] \
         [-s 来源 IP/网域] [--sport 端口范围]  \
         [-d 目标 IP/网域] [--dport 端口范围] \
      -j [ACCEPT|DROP|REJECT|LOG]

因为仅有 tcp 与 udp 封包具有端口,因此你想要使用--dport,--sport 时,得要加上 -p tcp 或 -p udp 的参数才会成功.

eg:

#1. 只要来自 192.168.1.0/24 的 1024:65535 端口的封包,且想要联机到本机的 ssh port 就予以抵挡
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65534 --dport ssh -j DROP

#2. 将来自任何地方来源 port 1:1023 的主动联机到本机端的 1:1023 联机丢弃
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP

7) 外挂模块
iptables -A INPUT [-m state] [--state 状态]
选项与参数:
-m :一些 iptables 的外挂模块,主要常见的有:
    state :状态模块
    mac:<strong>网络</strong>卡硬件地址 (hardware address)
--state :一些封包的状态,主要有:
    INVALID:无效的封包,例如数据破损的封包状态
    ESTABLISHED:已经联机成功的联机状态;
    NEW:想要新建立联机的封包状态;
    RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关
--mac-source :就是来源主机的 MAC 啦!

eg:
#1. 只要已建立或相关封包就予以通过,只要是不合法封包就丢弃
 $ iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 $ iptables -A INPUT -m state --state INVALID -j DROP

#2. 针对局域<strong>网络</strong>内的 aa:bb:cc:dd:ee:ff 主机开放其联机
$ iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT

#3. 接受ssh联机
$ iptables -A INPUT -m state --state NEW -j ACCEPT


8) icmp封包规则
iptables -A INPUT [-p icmp] [--icmp-type 类型] -j ACCEPT
选项与参数:
--icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,例如 8 代表 echo request 的意思


0	Echo Reply (代表一個回應信息)
3	Destination Unreachable (表示目的地不可到達)
4	Source Quench (當 router 的負載過高時,此類別碼可用來讓發送端停止發送訊息)
5	Redirect (用來重新導向路由路徑的資訊)
8	Echo Request (請求回應訊息)
11	Time Exceeded for a Datagram (當資料封包在某些路由傳送的現象中造成逾時狀態,此類別碼可告知來源該封包已被忽略的訊息)
12	Parameter Problem on a Datagram (當一個 ICMP 封包重複之前的錯誤時,會回覆來源主機關於參數錯誤的訊息)
13	Timestamp Request (要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求)
14	Timestamp Reply (此訊息純粹是回應 Timestamp Request 用的)
15	Information Request (在 RARP 協定應用之前,此訊息是用來在開機時取得網路信息)
16	Information Reply (用以回應 Infromation Request 訊息)
17	Address Mask Request (這訊息是用來查詢子網路 mask 設定信息)
18	Address Mask Reply (回應子網路 mask 查詢訊息的)


eg:

#接受所有的icmp请求
$ iptables -A INPUT -p icmp -j ACCEPT


9) 删除某一个规则
我们可以用两种办法中的任一种删除规则。
首先,因为知道这是INPUT链中唯一的规则,我们用编号删除:
#删除INPUT链中的编号为1的规则
$ iptables -D INPUT 1

第二种办法是 -A 命令的映射,不过用-D替换-A。
当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。这样的话,我们可以使用:
$ iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
-D的语法必须和-A(或者-I或者-R)一样精确。如果链中有多个相同的规则,只会删除第一个。



10) 将iptables规则开机自启动
http://www.hjwahjl.net/archives/67

转载于:https://www.cnblogs.com/stevin-john/p/4768996.html


http://www.niftyadmin.cn/n/712171.html

相关文章

潼关县城管局四举措打造智慧城市

潼关县城市管理综合行政执法局(简称城管局)&#xff0c;自2016年7月6日正式挂牌成立以来&#xff0c;始终坚持以“树立执法为民理念&#xff0c;打造精美智慧城市”为目标。高起点、高标准&#xff0c;超前谋划&#xff0c;结合我县经济社会发展实际情况&#xff0c;科学制定城…

java中螺旋数组怎么实现,js实现螺旋矩阵算法

Q:用0-9填充一个N*N的矩阵&#xff0c;该矩阵按顺时针旋转方向依次增大&#xff0c;用js编程输出这个数组。要求如下&#xff1a;我的思路是把矩形数组从外到里分为几个环型数组&#xff0c;然后用这些环型数组给二维数组赋值&#xff0c;如图所示&#xff1a;部分代码如下&…

电脑qq浏览器怎么滚动截长图_Mac系统如何轻松实现网页长截图功能

Mac 网页长截图在日常工作生活中&#xff0c;我们经常需要使用到截图功能&#xff0c;简单的一页截图使用常用的截图工具即可&#xff0c;但是有时会碰到需要截图多页内容或者整个网页&#xff0c;使用截图工具分页截图再拼接不仅复杂而且耗时。那么针对这种情况&#xff0c;有…

一步一步学习Redis——五大数据类型之有序集合(ZSet)的相关命令

文章目录&#xff1a; 1.开篇 2.Redis有序集合&#xff08;ZSet&#xff09;的相关命令 2.1 ZADD命令 语法 返回值 2.2 ZRANGE命令 语法 返回值 2.3 ZREVRANGE命令 语法 返回值 2.4 ZRANGEBYLEX命令 语法 返回值 2.5 ZRANGEBYSCORE命令 语法 返回值 2.6 ZR…

Android-使用ViewFlipper实现轮番切换广告栏

所谓的轮番切换广告栏&#xff0c;指的是下面这个东西&#xff0c;笔主不知道该怎么确切描述这货... 笔主没有百度研究过其他大牛是怎么实现这个功能的&#xff0c;在这里笔主充分发挥DIY精神&#xff0c;利用ViewFlipper闭门土制了一个&#xff0c;下面尽笔主所能&#xff0c;…

nginx不识别index.php,nginx解析不到laravel/public里的index.php文件

我将/etc/nginx/sites-available/default里面把root路径改成里/var/www/html/laravel/public了,但是运行结果是403,一开始以为是文件夹权限不够&#xff0c;照着网上说都storage和vendor都权限都可以读写里还是不行。 哪位大神帮我看看啊&#xff01;下面是我的nginx配置文件&a…

web前端学习(三十五)——JavaScript事件、字符串及运算符的相关设置

1.JS事件 HTML 事件是发生在 HTML 元素上的事情。当在 HTML 页面中使用 JavaScript 时&#xff0c; JavaScript 可以触发这些事件。HTML 事件可以是浏览器行为&#xff0c;也可以是用户行为。 以下是 HTML 事件的实例&#xff1a; HTML 页面完成加载HTML input 字段改变时HTML …

印度超本地社交网络Pulse获20万美元种子轮融资

Facebook开始只是个大学和职场应用&#xff0c;我在读大学时&#xff0c;它正处于向一个商业必需品转化的发展尖端。也正是因为这个转化&#xff0c;我发现自己越来越离不开网络。 那时&#xff0c;我尝试了很多聊天应用和在线新闻网站去表达我的看法。后来由于应用发来的推送过…